Re: [PATCH v2 7/8] update-ref: support multiple simultaneous updates
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 30, 2013, 22:51 UTC
- Message-ID
- <xmqqbo4eyeps.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <ba564b6566b54d780a24355ca893294d814d8d24.1377885441.git.brad.king@kitware.com>
Brad King <brad.king@kitware.com> writes:
Show 33 quoted lines
> Add a --stdin signature to read update instructions from standard input > and apply multiple ref updates together. Use an input format that > supports any update that could be specified via the command-line, > including object names like 'branch:path with space'. > > Signed-off-by: Brad King <brad.king@kitware.com> > --- > Documentation/git-update-ref.txt | 21 ++++++- > builtin/update-ref.c | 121 +++++++++++++++++++++++++++++++++++++- > 2 files changed, 140 insertions(+), 2 deletions(-) > > diff --git a/Documentation/git-update-ref.txt b/Documentation/git-update-ref.txt > index 0df13ff..295d0bb 100644 > --- a/Documentation/git-update-ref.txt > +++ b/Documentation/git-update-ref.txt > @@ -8,7 +8,7 @@ git-update-ref - Update the object name stored in a ref safely > SYNOPSIS > -------- > [verse] > -'git update-ref' [-m <reason>] (-d <ref> [<oldvalue>] | [--no-deref] <ref> <newvalue> [<oldvalue>]) > +'git update-ref' [-m <reason>] (-d <ref> [<oldvalue>] | [--no-deref] <ref> <newvalue> [<oldvalue>] | --stdin) > > DESCRIPTION > ----------- > @@ -58,6 +58,25 @@ archive by creating a symlink tree). > With `-d` flag, it deletes the named <ref> after verifying it > still contains <oldvalue>. > > +With `--stdin`, update-ref reads instructions from standard input and > +performs all modifications together. Empty lines are ignored. > +Each non-empty line is parsed as whitespace-separated arguments. > +Use single-quotes to enclose whitespace and backslashes and an > +unquoted backslash to escape a single quote.
That is somewhat unusual.
When we need to deal with arbitrary strings (like pathnames), other parts of the system usually give the user two interfaces, --stdin with and without -z, and the strings are C-quoted when run without the -z option, and terminated with NUL when run with the -z option.
> +Specify updates with > +lines of the form: > + > + [--no-deref] [--] <ref> <newvalue> [<oldvalue>]
What is -- doing here? refs given to update-ref begin with refs/ (otherwise it is HEAD), no?