[PATCH 3 of 7 c-hglib] examples: rewrite export/import example
Giovanni Gherdovich
g.gherdovich at gmail.com
Sun Nov 23 11:54:47 CST 2014
# HG changeset patch
# User Giovanni Gherdovich <g.gherdovich at gmail.com>
# Date 1416477494 -3600
# Thu Nov 20 10:58:14 2014 +0100
# Branch refactor examples
# Node ID df66d1af4e114c9ca28ad222ddfc9c2f211729e9
# Parent e7ee8936e3389c091036ccc1790eb140d1cafaa1
examples: rewrite export/import example
Rewrite the export/import example to account for the change
in hg_read_header() that returns NULL if no header on pipe
and to use a switch statement to make the channel-based
behaviour more explicit.
diff -r e7ee8936e338 -r df66d1af4e11 examples/export-import.c
--- a/examples/export-import.c Thu Nov 20 11:39:17 2014 +0100
+++ b/examples/export-import.c Thu Nov 20 10:58:14 2014 +0100
@@ -25,48 +25,99 @@
char *import_comm[] = {"import", "-", NULL};
char ebuff[BUFF_SIZE], ibuff[BUFF_SIZE];
int eexitcode, iexitcode;
+ int eexit = 0, iexit = 0;
+ hg_header *eheader, *iheader;
+ int n;
hg_rawcommand(ehandle, export_comm);
hg_rawcommand(ihandle, import_comm);
- hg_header *ehead, *ihead;
- while (ehead = hg_read_header(ehandle), ehead->channel != r) {
- if (ehead->channel == o) {
- if (hg_rawread(ehandle, ebuff, BUFF_SIZE) > 0) {
- ihead = hg_read_header(ihandle);
- while (ihead->channel == o ||
- ihead->channel == e) {
- if (hg_rawread(ihandle, ibuff,
- BUFF_SIZE) > 0) {
- printf("%s\n", ibuff);
- }
- ihead = hg_read_header(ihandle);
- }
- if (ihead->channel == L) {
- hg_rawwrite(ihandle, ebuff,
- strlen(ebuff));
+ while (!eexit || !iexit) {
+ eheader = hg_read_header(ehandle);
+ switch (eheader->channel) {
+ case o:
+ while (iheader = hg_read_header(ihandle),
+ iheader->channel != L) {
+ switch (iheader->channel) {
+ case o:
+ case e:
+ while (n = hg_rawread(ihandle,
+ ibuff,
+ BUFF_SIZE),
+ n > 0)
+ printf("%s", ibuff);
+ break;
+ case I:
+ case L:
+ break;
+ case r:
+ iexitcode = hg_exitcode(ihandle);
+ iexit = 1;
+ break;
+ case unknown_channel:
+ break;
}
}
- } else if (ehead->channel == e) {
- if (hg_rawread(ehandle, ebuff, BUFF_SIZE) > 0) {
- printf("err = %s", ebuff);
+ while (n = hg_rawread(ehandle, ebuff, BUFF_SIZE),
+ n > 0) {
+ switch (iheader->channel) {
+ case o:
+ case e:
+ case I:
+ break;
+ case L:
+ hg_rawwrite(ihandle,
+ ebuff,
+ strlen(ebuff));
+ break;
+ case r:
+ iexitcode = hg_exitcode(ihandle);
+ iexit = 1;
+ break;
+ case unknown_channel:
+ break;
+ }
}
+ break;
+ case e:
+ while (n = hg_rawread(ehandle, ebuff, BUFF_SIZE), n > 0)
+ printf("%s\n", ibuff);
+ break;
+ case I:
+ case L:
+ break;
+ case r:
+ eexitcode = hg_exitcode(ehandle);
+ while (!iexit) {
+ iheader = hg_read_header(ihandle);
+ switch (iheader->channel) {
+ case o:
+ case e:
+ while (n = hg_rawread(ihandle,
+ ibuff,
+ BUFF_SIZE),
+ n > 0)
+ printf("%s", ibuff);
+ break;
+ case I:
+ case L:
+ hg_rawwrite(ihandle, "", 0);
+ break;
+ case r:
+ iexitcode = hg_exitcode(ihandle);
+ iexit = 1;
+ break;
+ case unknown_channel:
+ break;
+ }
+ }
+ eexit = 1;
+ break;
+ case unknown_channel:
+ break;
}
}
- ihead = hg_read_header(ihandle);
- hg_rawwrite(ihandle, ebuff, 0);
-
- while (ihead = hg_read_header(ihandle), ihead->channel != r) {
- if (ihead->channel == o || ihead->channel == e) {
- if (hg_rawread(ihandle, ibuff, BUFF_SIZE) > 0) {
- printf("%s", ibuff);
- }
- }
- }
-
- eexitcode = hg_exitcode(ehandle);
- iexitcode = hg_exitcode(ihandle);
printf("exitcode for export process is %d \n", eexitcode);
printf("exitcode for import process is %d \n", iexitcode);
More information about the Mercurial-devel
mailing list