chiark / gitweb /
use new git-check-ref-format
[version-charset-test.git] / 0005-check-ref-format-New-stdin-option.patch
diff --git a/0005-check-ref-format-New-stdin-option.patch b/0005-check-ref-format-New-stdin-option.patch
new file mode 100644 (file)
index 0000000..6e29c17
--- /dev/null
@@ -0,0 +1,100 @@
+From f22917e0bd9347ed547e124738083d5b6889da0a Mon Sep 17 00:00:00 2001
+From: Ian Jackson <ijackson@chiark.greenend.org.uk>
+Date: Fri, 4 Nov 2016 17:41:15 +0000
+Subject: [PATCH 5/5] check-ref-format: New --stdin option
+
+Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
+---
+ Documentation/git-check-ref-format.txt | 10 ++++++++--
+ builtin/check-ref-format.c             | 34 +++++++++++++++++++++++++++++++---
+ 2 files changed, 39 insertions(+), 5 deletions(-)
+
+diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
+index e9a2657..5a213ce 100644
+--- a/Documentation/git-check-ref-format.txt
++++ b/Documentation/git-check-ref-format.txt
+@@ -10,8 +10,9 @@ SYNOPSIS
+ [verse]
+ 'git check-ref-format' [--report-errors] [--normalize]
+        [--[no-]allow-onelevel] [--refspec-pattern]
+-       <refname>
+-'git check-ref-format' [--report-errors] --branch <branchname-shorthand>
++       <refname> | --stdin
++'git check-ref-format' [--report-errors] --branch
++       <branchname-shorthand> | --stdin
+ DESCRIPTION
+ -----------
+@@ -109,6 +110,11 @@ OPTIONS
+       If any ref does not check OK, print a message to stderr.
+         (By default, git check-ref-format is silent.)
++--stdin::
++      Instead of checking on ref supplied on the command line,
++      read refs, one per line, from stdin.  The exit status is
++      0 if all the refs were OK.
++
+ EXAMPLES
+ --------
+diff --git a/builtin/check-ref-format.c b/builtin/check-ref-format.c
+index 559d5c2..87f52fa 100644
+--- a/builtin/check-ref-format.c
++++ b/builtin/check-ref-format.c
+@@ -76,6 +76,7 @@ static int check_one_ref_format(const char *refname)
+ int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
+ {
+       int i;
++      int use_stdin = 0;
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage(builtin_check_ref_format_usage);
+@@ -93,6 +94,8 @@ int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
+                       check_branch = 1;
+               else if (!strcmp(argv[i], "--report-errors"))
+                       report_errors = 1;
++              else if (!strcmp(argv[i], "--stdin"))
++                      use_stdin = 1;
+               else
+                       usage(builtin_check_ref_format_usage);
+       }
+@@ -100,8 +103,33 @@ int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
+       if (check_branch && (flags || normalize))
+               usage(builtin_check_ref_format_usage);
+-      if (! (i == argc - 1))
+-              usage(builtin_check_ref_format_usage);
++      if (!use_stdin) {
++              if (! (i == argc - 1))
++                      usage(builtin_check_ref_format_usage);
++
++              return check_one_ref_format(argv[i]);
++      } else {
++              char buffer[2048];
++              int worst = 0;
+-      return check_one_ref_format(argv[i]);
++              if (! (i == argc))
++                      usage(builtin_check_ref_format_usage);
++
++              while (fgets(buffer, sizeof(buffer), stdin)) {
++                      char *newline = strchr(buffer, '\n');
++                      if (!newline) {
++                              fprintf(stderr, "%s --stdin: missing final newline or line too long\n", *argv);
++                              exit(127);
++                      }
++                      *newline = 0;
++                      int got = check_one_ref_format(buffer);
++                      if (got > worst)
++                              worst = got;
++              }
++              if (!feof(stdin)) {
++                      perror("reading from stdin");
++                      exit(127);
++              }
++              return worst;
++      }
+ }
+-- 
+2.10.1
+