Differences between revisions 2 and 3
Revision 2 as of 2013-06-21 23:00:45
Size: 3293
Editor: 5-12-23-230
Comment:
Revision 3 as of 2013-06-21 23:01:39
Size: 3295
Editor: 5-12-23-230
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
=C-Hglib= = C-Hglib =

C-Hglib

A C library for interfacing with Mercurial's CommandServer.

1. Getting the source

You can clone the packeage from its primary repository c-hglib.

2. First plan

Some steps that I want to do first:

  • create an open mechanism between Client (C library) and Server ( Mercurial Command Server)
  • close the connection
  • readchannel function that will get the channel and the length of message.
  • create the _hello function, that will receive the first message, after the connection.
  • cmdbuilder, will compute the command that will be sent to CommandServer.

  • runcommand, will send the build command to the server and will return the compute message.
  • mercurial commands.

How to make it happen:

  • Create an open mechanism between Client (C library) and Server ( Mercurial Command Server)
    • First I will try to compute a command that will be execute in the child process.
    • It will be of the form “HGPATH serve --cmdserver pipe --config ui.interactive=True” + “-R path ”
    • I will create two pipes for the bidirectional connection. Then I will fork a new process, where I’ll execute the command that will open the Command Server. In the child process I will redirect the input, the output and the error in to the pipes (for the communication Client-Server). In my case the child process will open the Command Server and the parent process will be the client.
    • The communication will be through the pipes descriptors.
    • The open function will return a Client structure that will contain the pipes descriptors and other useful information.
  • Close the connection
    • Will kill the command server and will close the pipe descriptors for a specific Client.
  • readchannel function that will get the channel and the length of message.
    • Will read a char (the channel) and a uint (the length). There are chances for a problem to occur over here with the unsigned integer (the Command Server will send to me an integer in big endian form).
    • Most probably I will have to create a conversion mechanism.
  • create the _hello function that will receive the first message, after the connection.
    • This function will read the channel and the default data. Then I will check the correctness of data.
  • cmdbuilder, will compute the command that will be sent to CommandServer.

    • This function will return a list with a compute command that will be send to CommandServer. This function will be called by all mercurial commands.

  • runcommand, will send the build command to the server and will return the compute message.
    • From this function I will sent through pipes the commands and I will receive the specific answers. This will be the function that will make the communication.

3. My starts points will be

4. Directory tree

.

├── hglib

│ ├── main.c

│ ├── Makefile.am

│ ├── utils.c

│ └── utils.h

├── Makefile.am

├── README.md

└── tests

└── Makefile.am

C-Hglib (last edited 2014-11-11 22:05:57 by rcl)