diff options
author | Xavier Santolaria <xsa@cvs.openbsd.org> | 2006-08-11 08:18:20 +0000 |
---|---|---|
committer | Xavier Santolaria <xsa@cvs.openbsd.org> | 2006-08-11 08:18:20 +0000 |
commit | cb5c020a75ba029c14531d3b1bfa9a47d7d08fcc (patch) | |
tree | 046d82b031f8384c3f373ca355991430abe04d45 /usr.bin/rcs | |
parent | 958f72378e7a655df96fc968a54fe365f727a8f1 (diff) |
correctly handle merge(1) and rcsmerge(1) -e and -E flags; tests and OK ray@.
Diffstat (limited to 'usr.bin/rcs')
-rw-r--r-- | usr.bin/rcs/diff3.c | 40 | ||||
-rw-r--r-- | usr.bin/rcs/merge.c | 16 | ||||
-rw-r--r-- | usr.bin/rcs/rcsmerge.c | 17 | ||||
-rw-r--r-- | usr.bin/rcs/rcsprog.h | 20 |
4 files changed, 59 insertions, 34 deletions
diff --git a/usr.bin/rcs/diff3.c b/usr.bin/rcs/diff3.c index 6a6f5f3866c..d852a5286db 100644 --- a/usr.bin/rcs/diff3.c +++ b/usr.bin/rcs/diff3.c @@ -1,4 +1,4 @@ -/* $OpenBSD: diff3.c,v 1.13 2006/08/08 10:22:01 espie Exp $ */ +/* $OpenBSD: diff3.c,v 1.14 2006/08/11 08:18:19 xsa Exp $ */ /* * Copyright (C) Caldera International Inc. 2001-2002. @@ -72,7 +72,7 @@ static const char copyright[] = #ifndef lint static const char rcsid[] = - "$OpenBSD: diff3.c,v 1.13 2006/08/08 10:22:01 espie Exp $"; + "$OpenBSD: diff3.c,v 1.14 2006/08/11 08:18:19 xsa Exp $"; #endif /* not lint */ #include "includes.h" @@ -129,8 +129,8 @@ static int cline[3]; /* # of the last-read line in each file (0-2) */ * is stored in last[1-3]; */ static int last[4]; -static int eflag; -static int oflag; /* indicates whether to mark overlaps (-E or -X)*/ +static int eflag = 3; /* default -E for compatibility with former RCS */ +static int oflag = 1; /* default -E for compatibility with former RCS */ static int debug = 0; static char f1mark[40], f3mark[40]; /* markers for -E and -X */ @@ -166,6 +166,9 @@ merge_diff3(char **av, int flags) b1 = b2 = b3 = d1 = d2 = diffb = NULL; dp13 = dp23 = path1 = path2 = path3 = NULL; + if ((flags & MERGE_EFLAG) && !(flags & MERGE_OFLAG)) + oflag = 0; + if ((b1 = rcs_buf_load(av[0], BUF_AUTOEXT)) == NULL) goto out; if ((b2 = rcs_buf_load(av[1], BUF_AUTOEXT)) == NULL) @@ -262,7 +265,7 @@ out: } BUF * -rcs_diff3(RCSFILE *rf, char *workfile, RCSNUM *rev1, RCSNUM *rev2, int verbose) +rcs_diff3(RCSFILE *rf, char *workfile, RCSNUM *rev1, RCSNUM *rev2, int flags) { int argc; char *argv[5], r1[16], r2[16]; @@ -272,18 +275,21 @@ rcs_diff3(RCSFILE *rf, char *workfile, RCSNUM *rev1, RCSNUM *rev2, int verbose) b1 = b2 = b3 = d1 = d2 = diffb = NULL; dp13 = dp23 = path1 = path2 = path3 = NULL; + if ((flags & MERGE_EFLAG) && !(flags & MERGE_OFLAG)) + oflag = 0; + rcsnum_tostr(rev1, r1, sizeof(r1)); rcsnum_tostr(rev2, r2, sizeof(r2)); if ((b1 = rcs_buf_load(workfile, BUF_AUTOEXT)) == NULL) goto out; - if (verbose == 1) + if (!(flags & QUIET)) (void)fprintf(stderr, "retrieving revision %s\n", r1); if ((b2 = rcs_getrev(rf, rev1)) == NULL) goto out; - if (verbose == 1) + if (!(flags & QUIET)) (void)fprintf(stderr, "retrieving revision %s\n", r2); if ((b3 = rcs_getrev(rf, rev2)) == NULL) goto out; @@ -343,7 +349,7 @@ rcs_diff3(RCSFILE *rf, char *workfile, RCSNUM *rev1, RCSNUM *rev2, int verbose) if ((diffb = rcs_patchfile(b1, diffb, ed_patch_lines)) == NULL) goto out; - if (verbose == 1 && diff3_conflicts != 0) + if (!(flags & QUIET) && diff3_conflicts != 0) warnx("warning: overlaps or other problems during merge"); out: @@ -382,20 +388,18 @@ diff3_internal(int argc, char **argv, const char *fmark, const char *rmark) size_t m, n; int i; - /* XXX */ - eflag = 3; - oflag = 1; - if (argc < 5) return (-1); - i = snprintf(f1mark, sizeof(f1mark), "<<<<<<< %s", fmark); - if (i < 0 || i >= sizeof(f1mark)) - errx(1, "diff3_internal: string truncated"); + if (oflag) { + i = snprintf(f1mark, sizeof(f1mark), "<<<<<<< %s", fmark); + if (i < 0 || i >= sizeof(f1mark)) + errx(1, "diff3_internal: string truncated"); - i = snprintf(f3mark, sizeof(f3mark), ">>>>>>> %s", rmark); - if (i < 0 || i >= sizeof(f3mark)) - errx(1, "diff3_internal: string truncated"); + i = snprintf(f3mark, sizeof(f3mark), ">>>>>>> %s", rmark); + if (i < 0 || i >= sizeof(f3mark)) + errx(1, "diff3_internal: string truncated"); + } increase(); m = readin(argv[0], &d13); diff --git a/usr.bin/rcs/merge.c b/usr.bin/rcs/merge.c index 8f73a6fbadc..779a9e910ed 100644 --- a/usr.bin/rcs/merge.c +++ b/usr.bin/rcs/merge.c @@ -1,4 +1,4 @@ -/* $OpenBSD: merge.c,v 1.3 2006/08/01 05:14:17 ray Exp $ */ +/* $OpenBSD: merge.c,v 1.4 2006/08/11 08:18:19 xsa Exp $ */ /* * Copyright (c) 2006 Xavier Santolaria <xsa@openbsd.org> * All rights reserved. @@ -35,8 +35,6 @@ merge_main(int argc, char **argv) int ch, flags, labels, status; const char *label[3]; BUF *bp; - extern char *optarg; - extern int optind; flags = labels = 0; status = D_ERROR; @@ -48,7 +46,17 @@ merge_main(int argc, char **argv) */ while ((ch = getopt(argc, argv, "AEeL:pqV")) != -1) { switch(ch) { - case 'A': case 'E': case 'e': + case 'A': + /* + * kept for compatibility + */ + break; + case 'E': + flags |= MERGE_EFLAG; + flags |= MERGE_OFLAG; + break; + case 'e': + flags |= MERGE_EFLAG; break; case 'L': if (3 <= labels) diff --git a/usr.bin/rcs/rcsmerge.c b/usr.bin/rcs/rcsmerge.c index 0bfab7a7e2f..1bbee41b896 100644 --- a/usr.bin/rcs/rcsmerge.c +++ b/usr.bin/rcs/rcsmerge.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rcsmerge.c,v 1.47 2006/08/01 05:14:17 ray Exp $ */ +/* $OpenBSD: rcsmerge.c,v 1.48 2006/08/11 08:18:19 xsa Exp $ */ /* * Copyright (c) 2005, 2006 Xavier Santolaria <xsa@openbsd.org> * All rights reserved. @@ -46,7 +46,17 @@ rcsmerge_main(int argc, char **argv) while ((ch = rcs_getopt(argc, argv, "AEek:p::q::r::TVx::z:")) != -1) { switch (ch) { - case 'A': case 'E': case 'e': + case 'A': + /* + * kept for compatibility + */ + break; + case 'E': + flags |= MERGE_EFLAG; + flags |= MERGE_OFLAG; + break; + case 'e': + flags |= MERGE_EFLAG; break; case 'k': kflag = rcs_kflag_get(rcs_optarg); @@ -133,8 +143,7 @@ rcsmerge_main(int argc, char **argv) if (rcsnum_cmp(rev1, rev2, 0) == 0) goto out; - if ((bp = rcs_diff3(file, argv[0], rev1, rev2, - !(flags & QUIET))) == NULL) + if ((bp = rcs_diff3(file, argv[0], rev1, rev2, flags)) == NULL) errx(D_ERROR, "failed to merge"); if (!(flags & QUIET)) { diff --git a/usr.bin/rcs/rcsprog.h b/usr.bin/rcs/rcsprog.h index 9f5bf22548b..c9636fa6170 100644 --- a/usr.bin/rcs/rcsprog.h +++ b/usr.bin/rcs/rcsprog.h @@ -1,4 +1,4 @@ -/* $OpenBSD: rcsprog.h,v 1.58 2006/05/15 06:58:03 xsa Exp $ */ +/* $OpenBSD: rcsprog.h,v 1.59 2006/08/11 08:18:19 xsa Exp $ */ /* * Copyright (c) 2005 Joris Vink <joris@openbsd.org> * All rights reserved. @@ -57,14 +57,18 @@ #define RCSPROG_NFLAG (1<<14) #define RCSPROG_UFLAG (1<<15) +/* flags shared between merge(1) and rcsmerge(1) */ +#define MERGE_EFLAG (1<<16) +#define MERGE_OFLAG (1<<17) + /* shared flags */ -#define DESCRIPTION (1<<16) -#define FORCE (1<<17) -#define INTERACTIVE (1<<18) -#define NEWFILE (1<<19) -#define PIPEOUT (1<<20) -#define PRESERVETIME (1<<21) -#define QUIET (1<<22) +#define DESCRIPTION (1<<18) +#define FORCE (1<<19) +#define INTERACTIVE (1<<20) +#define NEWFILE (1<<21) +#define PIPEOUT (1<<22) +#define PRESERVETIME (1<<23) +#define QUIET (1<<24) extern char *__progname; extern const char rcs_version[]; |