version 1.23, 2006/03/24 05:14:48 |
version 1.24, 2006/04/12 08:23:30 |
|
|
rcsmerge_main(int argc, char **argv) |
rcsmerge_main(int argc, char **argv) |
{ |
{ |
int i, ch; |
int i, ch; |
char *fcont, fpath[MAXPATHLEN], r1[16], r2[16]; |
char *fcont, fpath[MAXPATHLEN], r1[16], r2[16], *rev_str1, *rev_str2; |
RCSFILE *file; |
RCSFILE *file; |
RCSNUM *baserev, *rev2, *frev; |
RCSNUM *rev1, *rev2; |
BUF *bp; |
BUF *bp; |
|
|
baserev = rev2 = RCS_HEAD_REV; |
rev1 = rev2 = NULL; |
|
rev_str1 = rev_str2 = NULL; |
|
|
while ((ch = rcs_getopt(argc, argv, "AEek:p::q::r:TVx::z:")) != -1) { |
while ((ch = rcs_getopt(argc, argv, "AEek:p::q::r:TVx::z:")) != -1) { |
switch (ch) { |
switch (ch) { |
|
|
} |
} |
break; |
break; |
case 'p': |
case 'p': |
rcs_set_rev(rcs_optarg, &baserev); |
rcs_setrevstr2(&rev_str1, &rev_str2, rcs_optarg); |
pipeout = 1; |
pipeout = 1; |
break; |
break; |
case 'q': |
case 'q': |
rcs_set_rev(rcs_optarg, &baserev); |
rcs_setrevstr2(&rev_str1, &rev_str2, rcs_optarg); |
verbose = 0; |
verbose = 0; |
break; |
break; |
case 'r': |
case 'r': |
if (baserev == RCS_HEAD_REV) |
rcs_setrevstr2(&rev_str1, &rev_str2, rcs_optarg); |
rcs_set_rev(rcs_optarg, &baserev); |
|
else if (rev2 == RCS_HEAD_REV) |
|
rcs_set_rev(rcs_optarg, &rev2); |
|
else |
|
fatal("too many revision numbers"); |
|
break; |
break; |
case 'T': |
case 'T': |
/* |
/* |
|
|
exit(1); |
exit(1); |
} |
} |
|
|
if (baserev == RCS_HEAD_REV) { |
if (rev_str1 == NULL) { |
cvs_log(LP_ERR, "no base revision number given"); |
cvs_log(LP_ERR, "no base revision number given"); |
(usage)(); |
(usage)(); |
exit(1); |
exit(1); |
|
|
if (verbose == 1) |
if (verbose == 1) |
fprintf(stderr, "RCS file: %s\n", fpath); |
fprintf(stderr, "RCS file: %s\n", fpath); |
|
|
if (rev2 == RCS_HEAD_REV) |
if (rev1 != NULL) { |
frev = file->rf_head; |
rcsnum_free(rev1); |
else |
rev1 = NULL; |
frev = rev2; |
} |
|
if (rev2 != NULL) { |
|
rcsnum_free(rev2); |
|
rev2 = NULL; |
|
} |
|
|
if (rcsnum_cmp(baserev, frev, 0) == 0) { |
rcs_set_rev(rev_str1, &rev1); |
|
if (rev_str2 != NULL) |
|
rcs_set_rev(rev_str2, &rev2); |
|
else { |
|
rev2 = rcsnum_alloc(); |
|
rcsnum_cpy(file->rf_head, rev2, 0); |
|
} |
|
|
|
if (rcsnum_cmp(rev1, rev2, 0) == 0) { |
rcs_close(file); |
rcs_close(file); |
continue; |
continue; |
} |
} |
|
|
rcsnum_tostr(baserev, r1, sizeof(r1)); |
if (verbose == 1) { |
rcsnum_tostr(frev, r2, sizeof(r2)); |
(void)rcsnum_tostr(rev1, r1, sizeof(r1)); |
|
(void)rcsnum_tostr(rev2, r2, sizeof(r2)); |
|
|
if (verbose == 1) |
|
fprintf(stderr, "Merging differences between %s and " |
fprintf(stderr, "Merging differences between %s and " |
"%s into %s%s\n", r1, r2, argv[i], |
"%s into %s%s\n", r1, r2, argv[i], |
(pipeout == 1) ? "; result to stdout":""); |
(pipeout == 1) ? "; result to stdout":""); |
|
} |
|
|
if ((bp = cvs_diff3(file, argv[i], baserev, |
if ((bp = cvs_diff3(file, argv[i], rev1, rev2, |
frev, verbose)) == NULL) { |
verbose)) == NULL) { |
cvs_log(LP_ERR, "failed to merge"); |
cvs_log(LP_ERR, "failed to merge"); |
rcs_close(file); |
rcs_close(file); |
continue; |
continue; |