C-hglib, first plan attempt

Iulian Stana julian.stana at gmail.com
Wed Jun 19 16:28:01 CDT 2013


*C-hglib - C implementation of command server API*

A C library for interfacing with Mercurial's CommandServer.

The communication between C library and Mercurial CommandServer will be
over a pipe.

I have to create an API for the Command server, in other words I have to
create a connection mechanism and a set of some specific commands that will
help the user to interrogate the server, in order to get some useful
information.

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.


 My starts points will be:

*http://mercurial.selenic.com/wiki/CommandServer*

*http://www.selenic.com/repo/python-hglib/file/ca5f8f43e585/*


 I made a directory schema that will serve my purpose.

.

├── hglib

│   ├── main.c

│   ├── Makefile.am

│   ├── utils.c

│   └── utils.h

├── Makefile.am

├── README.md

└── tests

└── Makefile.am


 Progressing I will try to integrate the testing tool in my code, and to
bring correctness in project.


 I had stated a bitbucket repository, with marmoute advice:

*https://bitbucket.org/istana/c-hglib*


2013/6/20 Iulian Stana <julian.stana at gmail.com>

> I had attached my plan for C-hglib project.
>
> I would like some advice about this plan and what I must do to achieve my
> project.
>
> Regards,
> Iulian
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20130620/4683f8ea/attachment.html>


More information about the Mercurial-devel mailing list