diff options
author | Xavier Santolaria <xsa@cvs.openbsd.org> | 2006-05-10 14:28:18 +0000 |
---|---|---|
committer | Xavier Santolaria <xsa@cvs.openbsd.org> | 2006-05-10 14:28:18 +0000 |
commit | bfc8f9903ae4c08d5be6b56ce542468193f1e0b7 (patch) | |
tree | 9a9121f75ed2e0c736e9c10135a1baf75d5bc3be | |
parent | 2b4d630a5b6bfef1d3e52b0dd3aff219e38c5b70 (diff) |
starting bits for merge(1) replacement. Not built/linked yet.
man page reviewed by jmc@.
-rw-r--r-- | usr.bin/rcs/merge.1 | 91 | ||||
-rw-r--r-- | usr.bin/rcs/merge.c | 88 |
2 files changed, 179 insertions, 0 deletions
diff --git a/usr.bin/rcs/merge.1 b/usr.bin/rcs/merge.1 new file mode 100644 index 00000000000..5a5839ff9fc --- /dev/null +++ b/usr.bin/rcs/merge.1 @@ -0,0 +1,91 @@ +.\" $OpenBSD: merge.1,v 1.1 2006/05/10 14:28:17 xsa Exp $ +.\" +.\" Copyright (c) 2006 Xavier Santolaria <xsa@openbsd.org> +.\" All rights reserved. +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.Dd May 09, 2006 +.Dt MERGE 1 +.Os +.Sh NAME +.Nm merge +.Nd 3-way file merge +.Sh SYNOPSIS +.Nm +.Op Fl EepqV +.Op Fl L Ar label +.Ar file1 file2 file3 +.Sh DESCRIPTION +The +.Nm +program merges changes leading from +.Ar file2 +to +.Ar file3 +into +.Ar file1 . +.Pp +The following options are supported: +.Bl -tag -width Ds +.It Fl E +Default merge: +see +.Xr diff3 1 +for details. +.It Fl e +Same as +.Fl E +but does not warn about conflicts. +.It Fl L Ar label +Specifies labels to be used in place of corresponding file names +in conflicts reports. +May be given up to three times. +.It Fl p +Print result to standard output. +.It Fl q +Be quiet about reporting. +.It Fl V +Print RCS's version number. +.El +.Sh EXAMPLES +Using labels: +.Bd -literal -offset indent +$ merge -q -p -L one -L two -L three file1 file2 file3 +<<<<<<< one +======= +bar +>>>>>>> three +.Ed +.Sh DIAGNOSTICS +The +.Nm +utility exits with one of the following values: +.Pp +.Bl -tag -width Ds -compact -offset indent +.It 0 +No overlaps. +.It 1 +Overlaps were found. +.It 2 +An error occurred. +.El +.Sh SEE ALSO +.Xr co 1 , +.Xr diff 1 , +.Xr diff3 1 , +.Xr rcsmerge 1 +.Sh STANDARDS +The flag +.Op Fl A +has no effect and is provided +for compatibility only. diff --git a/usr.bin/rcs/merge.c b/usr.bin/rcs/merge.c new file mode 100644 index 00000000000..b879aacfc2b --- /dev/null +++ b/usr.bin/rcs/merge.c @@ -0,0 +1,88 @@ +/* $OpenBSD: merge.c,v 1.1 2006/05/10 14:28:17 xsa Exp $ */ +/* + * Copyright (c) 2006 Xavier Santolaria <xsa@openbsd.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "includes.h" + +#include "rcsprog.h" +#include "diff.h" + +int +merge_main(int argc, char **argv) +{ + int ch, flags, labels; + char *label[3]; + extern char *optarg; + extern int optind; + + flags = labels = 0; + + /* + * Using getopt(3) and not rcs_getopt() because merge(1) + * allows spaces between options and their arguments. + * Thus staying compatible with former implementation. + */ + while ((ch = getopt(argc, argv, "AEeL:pqV")) != -1) { + switch(ch) { + case 'A': case 'E': case 'e': + break; + case 'L': + if (3 <= labels) + errx(D_ERROR, "too many -L options"); + label[labels++] = optarg; + break; + case 'p': + flags |= PIPEOUT; + break; + case 'q': + flags |= QUIET; + break; + case 'V': + printf("%s\n", rcs_version); + exit(0); + default: + (usage)(); + exit(D_ERROR); + } + } + argc -= optind; + argv += optind; + + if (argc != 3) { + warnx("%s arguments", (argc < 3) ? "not enough" : "too many"); + (usage)(); + exit(D_ERROR); + } + + return (0); +} + +void +merge_usage(void) +{ + (void)fprintf(stderr, + "usage: merge [-AeEpqV] [-L lab [-L lab [-L lab]]] " + "file1 file2 file3\n"); +} |