aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCameron Katri <me@cameronkatri.com>2021-09-16 01:15:40 +0000
committerCameron Katri <me@cameronkatri.com>2021-09-16 01:15:40 +0000
commit79fd99c43e9bc4ede1f99ec21985c32101b9e90c (patch)
treec70e7551aa35cc795b12640d31799ba98990e564
parentcfc76650f29c9316c90392f558af66923aecb682 (diff)
downloadfreebsd-patches-79fd99c43e9bc4ede1f99ec21985c32101b9e90c.tar.gz
freebsd-patches-79fd99c43e9bc4ede1f99ec21985c32101b9e90c.tar.zst
freebsd-patches-79fd99c43e9bc4ede1f99ec21985c32101b9e90c.zip
diff(1) --color has been upstreamed
-rw-r--r--diff-1-Add-color-support.patch277
1 files changed, 0 insertions, 277 deletions
diff --git a/diff-1-Add-color-support.patch b/diff-1-Add-color-support.patch
deleted file mode 100644
index 72d90e7..0000000
--- a/diff-1-Add-color-support.patch
+++ /dev/null
@@ -1,277 +0,0 @@
-From 979b5ddf0d0c6436c160804a4cdd78e9da050e71 Mon Sep 17 00:00:00 2001
-From: Cameron Katri <me@cameronkatri.com>
-Date: Fri, 28 May 2021 15:21:45 -0400
-Subject: [PATCH] diff(1): Add --color support
-
----
- usr.bin/diff/diff.1 | 17 ++++++++++
- usr.bin/diff/diff.c | 70 +++++++++++++++++++++++++++++++++++++++++-
- usr.bin/diff/diff.h | 3 +-
- usr.bin/diff/diffreg.c | 18 ++++++++++-
- 4 files changed, 105 insertions(+), 3 deletions(-)
-
-diff --git a/usr.bin/diff/diff.1 b/usr.bin/diff/diff.1
-index e0a790f6efb..50fd43902d5 100644
---- a/usr.bin/diff/diff.1
-+++ b/usr.bin/diff/diff.1
-@@ -44,6 +44,7 @@
- .Fl n | q | u | y
- .Oc
- .Op Fl -brief
-+.Op Fl -color Ns = Ns Ar when
- .Op Fl -changed-group-format Ar GFMT
- .Op Fl -ed
- .Op Fl -expand-tabs
-@@ -71,6 +72,7 @@
- .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
- .Op Fl L Ar label | Fl -label Ar label
- .Op Fl -brief
-+.Op Fl -color Ns = Ns Ar when
- .Op Fl -changed-group-format Ar GFMT
- .Op Fl -ed
- .Op Fl -expand-tabs
-@@ -96,6 +98,7 @@
- .Op Fl aBbdiltw
- .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
- .Op Fl -brief
-+.Op Fl -color Ns = Ns Ar when
- .Op Fl -changed-group-format Ar GFMT
- .Op Fl -ed
- .Op Fl -expand-tabs
-@@ -122,6 +125,7 @@
- .Op Fl I Ar pattern | Fl -ignore-matching-lines Ar pattern
- .Op Fl L Ar label | Fl -label Ar label
- .Op Fl -brief
-+.Op Fl -color Ns = Ns Ar when
- .Op Fl -changed-group-format Ar GFMT
- .Op Fl -ed
- .Op Fl -expand-tabs
-@@ -150,6 +154,7 @@
- .Fl n | q | u
- .Oc
- .Op Fl -brief
-+.Op Fl -color Ns = Ns Ar when
- .Op Fl -changed-group-format Ar GFMT
- .Op Fl -context
- .Op Fl -ed
-@@ -184,6 +189,7 @@
- .Ar dir1 dir2
- .Nm diff
- .Op Fl aBbditwW
-+.Op Fl -color Ns = Ns Ar when
- .Op Fl -expand-tabs
- .Op Fl -ignore-all-blanks
- .Op Fl -ignore-blank-lines
-@@ -332,6 +338,17 @@ Causes chunks that include only blank lines to be ignored.
- .It Fl b -ignore-space-change
- Causes trailing blanks (spaces and tabs) to be ignored, and other
- strings of blanks to compare equal.
-+.It Fl Fl color= Ns Oo Ar when Oc
-+Mark up the matching text with the expression stored in the
-+.Ev DIFFCOLOR
-+environment variable.
-+The possible values of
-+.Ar when
-+are
-+.Dq Cm never ,
-+.Dq Cm always
-+and
-+.Dq Cm auto .
- .It Fl d -minimal
- Try very hard to produce a diff as small as possible.
- This may consume a lot of processing power and memory when processing
-diff --git a/usr.bin/diff/diff.c b/usr.bin/diff/diff.c
-index 1bad6226f49..d9a732db768 100644
---- a/usr.bin/diff/diff.c
-+++ b/usr.bin/diff/diff.c
-@@ -38,11 +38,18 @@ __FBSDID("$FreeBSD$");
- #include "diff.h"
- #include "xmalloc.h"
-
--int lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag, Wflag;
-+#define COLORFLAG_UNSET -1
-+#define COLORFLAG_NEVER 0
-+#define COLORFLAG_AUTO 0
-+#define COLORFLAG_ALWAYS 0
-+
-+int lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag, Wflag, color = 0;
- int diff_format, diff_context, status, ignore_file_case, suppress_common;
- int tabsize = 8, width = 130;
-+static int colorflag = COLORFLAG_UNSET;
- char *start, *ifdefname, *diffargs, *label[2], *ignore_pats;
- char *group_format = NULL;
-+const char *add_code, *del_code;
- struct stat stb1, stb2;
- struct excludes *excludes_list;
- regex_t ignore_re;
-@@ -57,6 +64,7 @@ enum {
- OPT_HORIZON_LINES,
- OPT_CHANGED_GROUP_FORMAT,
- OPT_SUPPRESS_COMMON,
-+ OPT_COLOR,
- };
-
- static struct option longopts[] = {
-@@ -97,6 +105,7 @@ static struct option longopts[] = {
- { "tabsize", required_argument, NULL, OPT_TSIZE },
- { "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 },
- { NULL, 0, 0, '\0'}
- };
-
-@@ -106,6 +115,8 @@ void push_excludes(char *);
- void push_ignore_pats(char *);
- void read_excludes_file(char *file);
- void set_argstr(char **, char **);
-+static const char *init_code(int, const char *);
-+static int do_color(void);
-
- int
- main(int argc, char **argv)
-@@ -301,6 +312,17 @@ main(int argc, char **argv)
- case OPT_SUPPRESS_COMMON:
- suppress_common = 1;
- break;
-+ case OPT_COLOR:
-+ if (optarg == NULL || strncmp(optarg, "auto", 4) == 0)
-+ colorflag = COLORFLAG_AUTO;
-+ else if (strncmp(optarg, "always", 6) == 0)
-+ colorflag = COLORFLAG_ALWAYS;
-+ else if (strncmp(optarg, "never", 5) == 0)
-+ colorflag = COLORFLAG_NEVER;
-+ else
-+ errx(2, "unsupported --color value '%s' (must be always, auto, or never)",
-+ optarg);
-+ break;
- default:
- usage();
- break;
-@@ -316,6 +338,12 @@ main(int argc, char **argv)
- argc -= optind;
- argv += optind;
-
-+ if (do_color()) {
-+ color = 1;
-+ add_code = init_code(1, "32");
-+ del_code = init_code(2, "31");
-+ }
-+
- #ifdef __OpenBSD__
- if (pledge("stdio rpath tmppath", NULL) == -1)
- err(2, "pledge");
-@@ -550,3 +578,43 @@ conflicting_format(void)
- fprintf(stderr, "error: conflicting output format options.\n");
- usage();
- }
-+
-+static int
-+do_color(void)
-+{
-+ const char *p, *p2;
-+ int ret = 0;
-+
-+ p = getenv("CLICOLOR");
-+ p2 = getenv("COLORTERM");
-+
-+ if ((p != NULL && *p != '\0') || (p2 != NULL && *p2 != '\0'))
-+ ret = isatty(STDOUT_FILENO) ? 1 : 0;
-+
-+ if (colorflag == COLORFLAG_AUTO)
-+ ret = isatty(STDOUT_FILENO) ? 1 : 0;
-+ else if (colorflag == COLORFLAG_ALWAYS)
-+ ret = 1;
-+ else if (colorflag == COLORFLAG_NEVER)
-+ ret = 0;
-+
-+ return ret;
-+}
-+
-+static const char *
-+init_code(int i, const char *rv)
-+{
-+ char *buf, *p, *env;
-+ int j;
-+
-+ env = getenv("DIFFCOLORS");
-+ if (env != NULL && *env != '\0') {
-+ p = strdup(env);
-+ for (j = 0; j < i; j++)
-+ buf = strsep(&p, ":");
-+ free(p);
-+ if (buf != NULL)
-+ return buf;
-+ }
-+ return rv;
-+}
-diff --git a/usr.bin/diff/diff.h b/usr.bin/diff/diff.h
-index b5536bd7bf7..5eccce51210 100644
---- a/usr.bin/diff/diff.h
-+++ b/usr.bin/diff/diff.h
-@@ -90,12 +90,13 @@ struct excludes {
- struct excludes *next;
- };
-
--extern int lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag, Wflag;
-+extern int lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag, Wflag, color;
- extern int diff_format, diff_context, status, ignore_file_case;
- extern int suppress_common;
- extern int tabsize, width;
- extern char *start, *ifdefname, *diffargs, *label[2], *ignore_pats;
- extern char *group_format;
-+extern const char *add_code, *del_code;
- extern struct stat stb1, stb2;
- extern struct excludes *excludes_list;
- extern regex_t ignore_re;
-diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
-index 651ec88df90..17aa2748ca4 100644
---- a/usr.bin/diff/diffreg.c
-+++ b/usr.bin/diff/diffreg.c
-@@ -1183,13 +1183,23 @@ change(char *file1, FILE *f1, char *file2, FILE *f2, int a, int b, int c, int d,
- }
- }
- if (diff_format == D_SIDEBYSIDE) {
-+ if (color == 1 && (a > b))
-+ printf("\033[%sm", add_code);
-+ else if (color == 1 && (c > d))
-+ printf("\033[%sm", del_code);
- if (a > b) {
- print_space(0, hw + padding , *pflags);
- } else {
- nc = fetch(ixold, a, b, f1, '\0', 1, *pflags);
- print_space(nc, hw - nc + padding, *pflags);
- }
-- printf("%c", (a>b)? '>' : ((c>d)? '<' : '|'));
-+ if (color == 1 && (a > b))
-+ printf("\033[%sm", add_code);
-+ else if (color == 1 && (c > d))
-+ printf("\033[%sm", del_code);
-+ printf("%c", (a > b) ? '>' : ((c > d) ? '<' : '|'));
-+ if (color == 1 && (c > d))
-+ printf("\33[m");
- print_space(hw + padding + 1 , padding, *pflags);
- fetch(ixnew, c, d, f2, '\0', 0, *pflags);
- printf("\n");
-@@ -1263,6 +1273,10 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
- nc = hw;
- if ((diff_format != D_IFDEF && diff_format != D_GFORMAT) &&
- ch != '\0') {
-+ if (color == 1 && (ch == '>' || ch == '+'))
-+ printf("\033[%sm", add_code);
-+ else if (color == 1 && (ch == '<' || ch == '-'))
-+ printf("\033[%sm", del_code);
- printf("%c", ch);
- if (Tflag && (diff_format == D_NORMAL ||
- diff_format == D_CONTEXT ||
-@@ -1335,6 +1349,8 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
- }
- }
- }
-+ if (color == 1)
-+ printf("\33[m");
- return col;
- }
-
---
-2.32.0
-