diff: add support for --help and --version
Add support for --help and --version to be compatible with gnu diff. gnu diff --help writes to stdout, do the same to be compatible Reviewed by: bapt, pstef, debrup, Pau Amma Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D34508
This commit is contained in:
parent
0784121c96
commit
8cf449db88
@ -30,7 +30,7 @@
|
||||
.\" @(#)diff.1 8.1 (Berkeley) 6/30/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 19, 2020
|
||||
.Dd March 10, 2022
|
||||
.Dt DIFF 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -207,6 +207,9 @@
|
||||
.Op Fl -width
|
||||
.Fl y | Fl -side-by-side
|
||||
.Ar file1 file2
|
||||
.Nm diff
|
||||
.Op Fl -help
|
||||
.Op Fl -version
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
@ -282,6 +285,8 @@ Identical output to that of the
|
||||
flag, but in reverse order.
|
||||
It cannot be digested by
|
||||
.Xr ed 1 .
|
||||
.It Fl -help
|
||||
This option prints a summary to stdout and exits with status 0.
|
||||
.It Fl n
|
||||
Produces a script similar to that of
|
||||
.Fl e ,
|
||||
@ -308,6 +313,8 @@ However, unlike with
|
||||
.Fl c ,
|
||||
all lines to be changed (added and/or removed) are present in
|
||||
a single section.
|
||||
.It Fl -version
|
||||
This option prints a version string to stdout and exits with status 0.
|
||||
.It Fl y Fl -side-by-side
|
||||
Output in two columns with a marker between them.
|
||||
The marker can be one
|
||||
@ -655,6 +662,12 @@ Differences were found.
|
||||
.It >1
|
||||
An error occurred.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Fl -help
|
||||
and
|
||||
.Fl -version
|
||||
options exit with a status of 0.
|
||||
.Sh EXAMPLES
|
||||
Compare
|
||||
.Pa old_dir
|
||||
|
@ -38,8 +38,10 @@ __FBSDID("$FreeBSD$");
|
||||
#include "diff.h"
|
||||
#include "xmalloc.h"
|
||||
|
||||
static const char diff_version[] = "FreeBSD diff 20220309";
|
||||
bool lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag;
|
||||
bool ignore_file_case, suppress_common, color, noderef;
|
||||
static bool help = false;
|
||||
int diff_format, diff_context, status;
|
||||
int tabsize = 8, width = 130;
|
||||
static int colorflag = COLORFLAG_NEVER;
|
||||
@ -58,11 +60,13 @@ enum {
|
||||
OPT_IGN_FN_CASE,
|
||||
OPT_NO_IGN_FN_CASE,
|
||||
OPT_NORMAL,
|
||||
OPT_HELP,
|
||||
OPT_HORIZON_LINES,
|
||||
OPT_CHANGED_GROUP_FORMAT,
|
||||
OPT_SUPPRESS_COMMON,
|
||||
OPT_COLOR,
|
||||
OPT_NO_DEREFERENCE,
|
||||
OPT_VERSION,
|
||||
};
|
||||
|
||||
static struct option longopts[] = {
|
||||
@ -97,6 +101,7 @@ static struct option longopts[] = {
|
||||
{ "exclude-from", required_argument, 0, 'X' },
|
||||
{ "side-by-side", no_argument, NULL, 'y' },
|
||||
{ "ignore-file-name-case", no_argument, NULL, OPT_IGN_FN_CASE },
|
||||
{ "help", no_argument, NULL, OPT_HELP},
|
||||
{ "horizon-lines", required_argument, NULL, OPT_HORIZON_LINES },
|
||||
{ "no-dereference", no_argument, NULL, OPT_NO_DEREFERENCE},
|
||||
{ "no-ignore-file-name-case", no_argument, NULL, OPT_NO_IGN_FN_CASE },
|
||||
@ -106,6 +111,7 @@ static struct option longopts[] = {
|
||||
{ "changed-group-format", required_argument, NULL, OPT_CHANGED_GROUP_FORMAT},
|
||||
{ "suppress-common-lines", no_argument, NULL, OPT_SUPPRESS_COMMON },
|
||||
{ "color", optional_argument, NULL, OPT_COLOR },
|
||||
{ "version", no_argument, NULL, OPT_VERSION},
|
||||
{ NULL, 0, 0, '\0'}
|
||||
};
|
||||
|
||||
@ -294,6 +300,10 @@ main(int argc, char **argv)
|
||||
diff_format = D_GFORMAT;
|
||||
group_format = optarg;
|
||||
break;
|
||||
case OPT_HELP:
|
||||
help = true;
|
||||
usage();
|
||||
break;
|
||||
case OPT_HORIZON_LINES:
|
||||
break; /* XXX TODO for compatibility with GNU diff3 */
|
||||
case OPT_IGN_FN_CASE:
|
||||
@ -335,6 +345,9 @@ main(int argc, char **argv)
|
||||
rflag = true;
|
||||
noderef = true;
|
||||
break;
|
||||
case OPT_VERSION:
|
||||
printf("%s\n", diff_version);
|
||||
exit(0);
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
@ -569,9 +582,9 @@ print_status(int val, char *path1, char *path2, const char *entry)
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
usage()
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
(void)fprintf(help ? stdout : stderr,
|
||||
"usage: diff [-aBbdilpTtw] [-c | -e | -f | -n | -q | -u] [--ignore-case]\n"
|
||||
" [--no-ignore-case] [--normal] [--strip-trailing-cr] [--tabsize]\n"
|
||||
" [-I pattern] [-F pattern] [-L label] file1 file2\n"
|
||||
@ -590,9 +603,13 @@ usage(void)
|
||||
" [--ignore-blank-lines] [--ignore-case] [--minimal]\n"
|
||||
" [--no-ignore-file-name-case] [--strip-trailing-cr]\n"
|
||||
" [--suppress-common-lines] [--tabsize] [--text] [--width]\n"
|
||||
" -y | --side-by-side file1 file2\n");
|
||||
" -y | --side-by-side file1 file2\n"
|
||||
" diff [--help] [--version]\n");
|
||||
|
||||
exit(2);
|
||||
if (help)
|
||||
exit(0);
|
||||
else
|
||||
exit(2);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user