gitweb.git
Merge branch 'sw/pull-ipv46-passthru'Junio C Hamano Mon, 27 Nov 2017 02:06:40 +0000 (11:06 +0900)

Merge branch 'sw/pull-ipv46-passthru'

Contrary to the documentation, "git pull -4/-6 other-args" did not
ask the underlying "git fetch" to go over IPv4/IPv6, which has been
corrected.

* sw/pull-ipv46-passthru:
pull: pass -4/-6 option to 'git fetch'

Merge branch 'ks/rebase-no-git-foo'Junio C Hamano Mon, 27 Nov 2017 02:06:39 +0000 (11:06 +0900)

Merge branch 'ks/rebase-no-git-foo'

Mentions of "git-rebase" and "git-am" (dashed form) still remained
in end-user visible strings emitted by the "git rebase" command;
they have been corrected.

* ks/rebase-no-git-foo:
git-rebase: clean up dashed-usages in messages

Merge branch 'rs/config-write-section-fix'Junio C Hamano Mon, 27 Nov 2017 02:06:38 +0000 (11:06 +0900)

Merge branch 'rs/config-write-section-fix'

There was a recent semantic mismerge in the codepath to write out a
section of a configuration section, which has been corrected.

* rs/config-write-section-fix:
config: flip return value of write_section()

Merge branch 'ew/rebase-mboxrd'Junio C Hamano Mon, 27 Nov 2017 02:06:37 +0000 (11:06 +0900)

Merge branch 'ew/rebase-mboxrd'

When "git rebase" prepared an mailbox of changes and fed it to "git
am" to replay them, it was confused when a stray "From " happened
to be in the log message of one of the replayed changes. This has
been corrected.

* ew/rebase-mboxrd:
rebase: use mboxrd format to avoid split errors

Merge branch 'tb/add-renormalize'Junio C Hamano Mon, 27 Nov 2017 02:06:37 +0000 (11:06 +0900)

Merge branch 'tb/add-renormalize'

"git add --renormalize ." is a new and safer way to record the fact
that you are correcting the end-of-line convention and other
"convert_to_git()" glitches in the in-repository data.

* tb/add-renormalize:
add: introduce "--renormalize"

Merge branch 'tz/complete-branch-copy'Junio C Hamano Mon, 27 Nov 2017 02:06:37 +0000 (11:06 +0900)

Merge branch 'tz/complete-branch-copy'

Command line completion (in contrib/) has been taught about the
"--copy" option of "git branch".

* tz/complete-branch-copy:
completion: add '--copy' option to 'git branch'

Merge branch 'rs/apply-inaccurate-eof-with-incomplete... Junio C Hamano Mon, 27 Nov 2017 02:06:36 +0000 (11:06 +0900)

Merge branch 'rs/apply-inaccurate-eof-with-incomplete-line'

"git apply --inaccurate-eof" when used with "--ignore-space-change"
triggered an internal sanity check, which has been fixed.

* rs/apply-inaccurate-eof-with-incomplete-line:
apply: update line lengths for --inaccurate-eof

Merge branch 'pw/sequencer-recover-from-unlockable... Junio C Hamano Mon, 27 Nov 2017 02:06:35 +0000 (11:06 +0900)

Merge branch 'pw/sequencer-recover-from-unlockable-index'

The sequencer machinery (used by "git cherry-pick A..B", and "git
rebase -i", among other things) would have lost a commit if stopped
due to an unlockable index file, which has been fixed.

* pw/sequencer-recover-from-unlockable-index:
sequencer: reschedule pick if index can't be locked

Merge branch 'sd/branch-copy'Junio C Hamano Mon, 27 Nov 2017 02:06:35 +0000 (11:06 +0900)

Merge branch 'sd/branch-copy'

Code clean-up.

* sd/branch-copy:
config: avoid "write_in_full(fd, buf, len) != len" pattern

Merge branch 'sb/test-cherry-pick-submodule-getting... Junio C Hamano Mon, 27 Nov 2017 02:06:34 +0000 (11:06 +0900)

Merge branch 'sb/test-cherry-pick-submodule-getting-in-a-way'

The three-way merge performed by "git cherry-pick" was confused
when a new submodule was added in the meantime, which has been
fixed (or "papered over").

* sb/test-cherry-pick-submodule-getting-in-a-way:
merge-recursive: handle addition of submodule on our side of history
t/3512: demonstrate unrelated submodule/file conflict as cherry-pick failure

Merge branch 'tz/notes-error-to-stderr'Junio C Hamano Mon, 27 Nov 2017 02:06:34 +0000 (11:06 +0900)

Merge branch 'tz/notes-error-to-stderr'

"git notes" sent its error message to its standard output stream,
which was corrected.

* tz/notes-error-to-stderr:
notes: send "Automatic notes merge failed" messages to stderr

Merge branch 'tz/redirect-fix'Junio C Hamano Mon, 27 Nov 2017 02:06:33 +0000 (11:06 +0900)

Merge branch 'tz/redirect-fix'

A few scripts (both in production and tests) incorrectly redirected
their error output. These have been corrected.

* tz/redirect-fix:
rebase: fix stderr redirect in apply_autostash()
t/lib-gpg: fix gpgconf stderr redirect to /dev/null

Merge branch 'rv/sendemail-tocmd-in-config-and-completion'Junio C Hamano Mon, 27 Nov 2017 02:06:32 +0000 (11:06 +0900)

Merge branch 'rv/sendemail-tocmd-in-config-and-completion'

Teach "sendemail.tocmd" to places that know about "sendemail.to",
like documentation and shell completion (in contrib/).

* rv/sendemail-tocmd-in-config-and-completion:
completion: add git config sendemail.tocmd
Documentation/config: add sendemail.tocmd to list preceding "See git-send-email(1)"

Merge branch 'jc/merge-base-fork-point-doc'Junio C Hamano Mon, 27 Nov 2017 02:06:32 +0000 (11:06 +0900)

Merge branch 'jc/merge-base-fork-point-doc'

Clarify and enhance documentation for "merge-base --fork-point", as
it was clear what it computed but not why/what for.

* jc/merge-base-fork-point-doc:
merge-base --fork-point doc: clarify the example and failure modes

Merge branch 'jc/ignore-cr-at-eol'Junio C Hamano Mon, 27 Nov 2017 02:06:31 +0000 (11:06 +0900)

Merge branch 'jc/ignore-cr-at-eol'

The "diff" family of commands learned to ignore differences in
carriage return at the end of line.

* jc/ignore-cr-at-eol:
diff: --ignore-cr-at-eol
xdiff: reassign xpparm_t.flags bits

A bit more fixes for 2.15.1Junio C Hamano Mon, 27 Nov 2017 01:58:31 +0000 (10:58 +0900)

A bit more fixes for 2.15.1

We've been waiting long enough, a few more would not hurt ;-)

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ma/reduce-heads-leakfix' into maintJunio C Hamano Mon, 27 Nov 2017 01:57:02 +0000 (10:57 +0900)

Merge branch 'ma/reduce-heads-leakfix' into maint

Leak fixes.

* ma/reduce-heads-leakfix:
reduce_heads: fix memory leaks
builtin/merge-base: free commit lists

Merge branch 'ma/bisect-leakfix' into maintJunio C Hamano Mon, 27 Nov 2017 01:57:02 +0000 (10:57 +0900)

Merge branch 'ma/bisect-leakfix' into maint

Leak fixes.

* ma/bisect-leakfix:
bisect: fix memory leak when returning best element
bisect: fix off-by-one error in `best_bisection_sorted()`
bisect: fix memory leak in `find_bisection()`
bisect: change calling-convention of `find_bisection()`

Merge branch 'rs/apply-fuzzy-match-fix' into maintJunio C Hamano Mon, 27 Nov 2017 01:57:02 +0000 (10:57 +0900)

Merge branch 'rs/apply-fuzzy-match-fix' into maint

A fix for an ancient bug in "git apply --ignore-space-change" codepath.

* rs/apply-fuzzy-match-fix:
apply: avoid out-of-bounds access in fuzzy_matchlines()

Merge branch 'ad/submitting-patches-title-decoration... Junio C Hamano Mon, 27 Nov 2017 01:57:01 +0000 (10:57 +0900)

Merge branch 'ad/submitting-patches-title-decoration' into maint

Doc update around use of "format-patch --subject-prefix" etc.

* ad/submitting-patches-title-decoration:
doc/SubmittingPatches: correct subject guidance

Merge branch 'rs/imap-send-next-arg-fix' into maintJunio C Hamano Mon, 27 Nov 2017 01:57:00 +0000 (10:57 +0900)

Merge branch 'rs/imap-send-next-arg-fix' into maint

Error checking in "git imap-send" for empty response has been
improved.

* rs/imap-send-next-arg-fix:
imap-send: handle missing response codes gracefully
imap-send: handle NULL return of next_arg()

t/README: document test_cmp_revThomas Gummerer Sun, 26 Nov 2017 20:21:00 +0000 (20:21 +0000)

t/README: document test_cmp_rev

test_cmp_rev is a useful function that's used in quite a few test
scripts. It is however not documented in t/README. Document it.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/README: remove mention of adding copyright noticesThomas Gummerer Sun, 26 Nov 2017 20:20:59 +0000 (20:20 +0000)

t/README: remove mention of adding copyright notices

We generally no longer include copyright notices in new test scripts.
However t/README still mentions it as something to include at the top of
every new script.

Remove that mention as it's outdated.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

trace: remove trace key normalizationGennady Kupava Sun, 26 Nov 2017 20:11:18 +0000 (20:11 +0000)

trace: remove trace key normalization

Trace key normalization is not used, not strictly necessary,
complicates the code and would negatively affect compilation speed if
moved to header.

New trace_default_key key or existing separate marco could be used
instead of passing NULL as a key.

Signed-off-by: Gennady Kupava <gkupava@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge-recursive: ignore_case shouldn't reject intention... Elijah Newren Fri, 24 Nov 2017 19:59:01 +0000 (11:59 -0800)

merge-recursive: ignore_case shouldn't reject intentional removals

In commit ae352c7f3 (merge-recursive.c: fix case-changing merge bug,
2014-05-01), it was observed that removing files could be problematic on
case insensitive file systems, because we could end up removing files
that differed in case only rather than deleting the intended file --
something that happened when files were renamed on one branch in a way
that differed only in case. To avoid that problem, that commit added
logic to avoid removing files other than the one intended, rejecting the
removal if the files differed only in case.

Unfortunately, the logic it used didn't fully implement that condition as
stated above; instead it merely checked that a case-insensitive lookup of
the file that was requested resulted in finding a file in the index at
stage 0, not that the file found in the index actually differed in case.
Alternatively, one could view the implementation as making an implicit
assumption that the file we actually wanted to remove would never appear
in the index with a stage of 0, and thus that if we found a file with our
lookup, that it had to be a different file (but different in case only).

The net result of this implementation is that it can ignore more requests
than it should, leaving a file around in the working copy that should
have been removed. Make sure that the file found in the index actually
differs in case before silently ignoring the request to remove the file.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree: make add <path> <branch> dwimThomas Gummerer Sun, 26 Nov 2017 19:43:54 +0000 (19:43 +0000)

worktree: make add <path> <branch> dwim

Currently 'git worktree add <path> <branch>', errors out when 'branch'
is not a local branch. It has no additional dwim'ing features that one
might expect.

Make it behave more like 'git checkout <branch>' when the branch doesn't
exist locally, but a remote tracking branch uniquely matches the desired
branch name, i.e. create a new branch from the remote tracking branch
and set the upstream to the remote tracking branch.

As 'git worktree add' currently just dies in this situation, there are
no backwards compatibility worries when introducing this feature.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree: add --[no-]track option to the add subcommandThomas Gummerer Sun, 26 Nov 2017 19:43:53 +0000 (19:43 +0000)

worktree: add --[no-]track option to the add subcommand

Currently 'git worktree add' sets up tracking branches if '<branch>' is
a remote tracking branch, and doesn't set them up otherwise, as is the
default for 'git branch'.

This may or may not be what the user wants. Allow overriding this
behaviour with a --[no-]track flag that gets passed through to 'git
branch'.

We already respect branch.autoSetupMerge, as 'git worktree' just calls
'git branch' internally.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree: add can be created from any commit-ishThomas Gummerer Sun, 26 Nov 2017 19:43:52 +0000 (19:43 +0000)

worktree: add can be created from any commit-ish

Currently 'git worktree add' is documented to take an optional <branch>
argument, which is checked out in the new worktree. However it is more
generally possible to use a commit-ish as the optional argument, and
check that out into the new worktree.

Document that this is a possibility, as new users of git worktree add
might find it helpful.

Reported-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

checkout: factor out functions to new lib fileThomas Gummerer Sun, 26 Nov 2017 19:43:51 +0000 (19:43 +0000)

checkout: factor out functions to new lib file

Factor the functions out, so they can be re-used from other places. In
particular these functions will be re-used in builtin/worktree.c to make
git worktree add dwim more.

While there add some docs to the function.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule--helper.c: i18n: add a missing space in messageJean-Noel Avila Sat, 25 Nov 2017 19:55:24 +0000 (20:55 +0100)

submodule--helper.c: i18n: add a missing space in message

The message spans over 2 lines but the C concatenation does not add
the needed space between the two lines.

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: minor typo fixes in 2.15.1 draftTodd Zullinger Sat, 25 Nov 2017 17:32:40 +0000 (12:32 -0500)

RelNotes: minor typo fixes in 2.15.1 draft

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: Mention info/attributes in gitrepository-layoutSteffen Prohaska Wed, 22 Nov 2017 08:58:14 +0000 (09:58 +0100)

doc: Mention info/attributes in gitrepository-layout

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

grep: fix segfault under -P + PCRE2 <=10.30 + (*NO_JIT)Ævar Arnfjörð Bjarmason Thu, 23 Nov 2017 14:16:58 +0000 (14:16 +0000)

grep: fix segfault under -P + PCRE2 <=10.30 + (*NO_JIT)

Fix a bug in the compilation of PCRE2 patterns under JIT (the most
common runtime configuration). Any pattern with a (*NO_JIT) verb would
segfault in any currently released PCRE2 version:

$ git grep -P '(*NO_JIT)hi.*there'
Segmentation fault

That this segfaulted was a bug in PCRE2 itself, after reporting it[1]
on pcre-dev it's been fixed in a yet-to-be-released version of
PCRE (presumably released first as 10.31). Now it'll die with:

$ git grep -P '(*NO_JIT)hi.*there'
fatal: pcre2_jit_match failed with error code -45: bad JIT option

But the cause of the bug is in our own code dating back to my
94da9193a6 ("grep: add support for PCRE v2", 2017-06-01).

As explained at more length in the comment being added here, it isn't
sufficient to just check pcre2_config() to see whether the JIT should
be used, pcre2_pattern_info() also has to be asked.

This is something I discovered myself when fiddling around with PCRE2
verbs in patterns passed to git. I don't expect that any user of git
has encountered this given the obscurity of passing PCRE2 verbs
through to the library, along with the relative obscurity of (*NO_JIT)
itself.

1. "How am I supposed to use PCRE2 JIT in the face of (*NO_JIT) ?"
(<CACBZZX5mMqDuWuFmi7sRBp3wH6CFyd-ghACukd=v0NN=rBMnJg@mail.gmail.com> &
https://lists.exim.org/lurker/thread/20171123.101502.7f0d38ca.en.html)
on the pcre-dev mailing list

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: add LIBPCRE1 & LIBPCRE2 prerequisitesÆvar Arnfjörð Bjarmason Thu, 23 Nov 2017 14:16:57 +0000 (14:16 +0000)

test-lib: add LIBPCRE1 & LIBPCRE2 prerequisites

Add LIBPCRE1 and LIBPCRE2 prerequisites which are true when git is
compiled with USE_LIBPCRE1=YesPlease or USE_LIBPCRE2=YesPlease,
respectively.

The syntax of PCRE1 and PCRE2 isn't the same in all cases (see
pcresyntax(3) and pcre2syntax(3)). If test are added that test for
those they'll need to be guarded by these new prerequisites.

The subsequent patch will make use of LIBPCRE2, so LIBPCRE1 isn't
strictly needed for now, but let's add it for consistency and so that
checking for it doesn't have to be done with the less obvious "PCRE,
!LIBPCRE2", which while semantically the same is more confusing, and
would lead to bugs if PCRE v3 is ever released as the tests would mean
v1, not any non-v2 version.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

stash: learn to parse -m/--message like commit doesPhil Hord Wed, 22 Nov 2017 21:20:30 +0000 (13:20 -0800)

stash: learn to parse -m/--message like commit does

`git stash push -m foo` uses "foo" as the message for the stash. But
`git stash push -m"foo"` does not parse successfully. Similarly
`git stash push --message="My stash message"` also fails. The stash
documentation doesn't suggest this syntax should work, but gitcli
does and my fingers have learned this pattern long ago for `commit`.

Teach `git stash` to parse -mFoo and --message=Foo the same as `git
commit` would do. Even though it's an internal function, add
similar support to create_stash() for consistency.

Signed-off-by: Phil Hord <phil.hord@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

hooks doc: clarify when receive-pack invokes its hooksJunio C Hamano Fri, 24 Nov 2017 02:10:58 +0000 (11:10 +0900)

hooks doc: clarify when receive-pack invokes its hooks

The text meant to say that receive-pack runs these hooks, and only
because receive-pack is not a command the end users use every day
(ever), as an explanation also meantioned that it is run in response
to 'git push', which is an end-user facing command readers hopefully
know about.

This unfortunately gave an incorrect impression that 'git push'
always result in the hook to run. If the refs push wanted to update
all already had the desired value, these hooks are not run.

Explicitly mention "... and updates reference(s)" as a precondition
to avoid this confusion.

Helped-by: Christoph Michelbach <michelbach94@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add --autostash and --no-autostash to pullAlbert Astals Cid Tue, 21 Nov 2017 14:39:28 +0000 (15:39 +0100)

completion: add --autostash and --no-autostash to pull

Ideally we should only autocomplete if pull has --rebase since
they only work with it but could not figure out how to do that
and the error message of doing git pull --autostash points out
that you need --rebase so i guess it's good enough

Signed-off-by: Albert Astals Cid <albert.astals.cid@kdab.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git/Packet.pm: use 'if' instead of 'unless'Christian Couder Tue, 21 Nov 2017 16:09:39 +0000 (17:09 +0100)

Git/Packet.pm: use 'if' instead of 'unless'

The code is more understandable with 'if' instead of 'unless'.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git/Packet: clarify that packet_required_key_val_read... Christian Couder Tue, 21 Nov 2017 16:09:38 +0000 (17:09 +0100)

Git/Packet: clarify that packet_required_key_val_read allows EOF

The function calls itself "required", but it does not die when it
sees an unexpected EOF.

Let's rename it to "packet_key_val_read()".

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jn/reproducible-build' of ../git-gui... Junio C Hamano Wed, 22 Nov 2017 05:57:52 +0000 (14:57 +0900)

Merge branch 'jn/reproducible-build' of ../git-gui into jn/reproducible-build

* 'jn/reproducible-build' of ../git-gui:
git-gui: sort entries in optimized tclIndex

generate-cmdlist: avoid non-deterministic outputJonathan Nieder Sat, 2 Jul 2016 00:32:00 +0000 (17:32 -0700)

generate-cmdlist: avoid non-deterministic output

Non-determinism makes it harder for build tools to discover when a
target needs to be rebuilt.

generate-cmdlist.sh stores the full path in a comment:

/* Automatically generated by /build/git-agojiD/git-2.15.0/generate-cmdlist.sh */

Use the file name alone instead.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: sort entries in optimized tclIndexAnders Kaseorg Wed, 16 Nov 2016 21:37:17 +0000 (16:37 -0500)

git-gui: sort entries in optimized tclIndex

auto_mkindex expands wildcards in directory order, which depends on
the underlying filesystem. To improve build reproducibility, sort the
list of *.tcl files in the Makefile.

The unoptimized loading case was previously fixed in gitgui-0.21.0~14
(git-gui: sort entries in tclIndex, 2015-01-26).

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: prefer 'stash push' over 'stash save'Phil Hord Tue, 21 Nov 2017 23:05:23 +0000 (15:05 -0800)

doc: prefer 'stash push' over 'stash save'

Although `git stash save` was deprecated recently, some parts of the
documentation still refer to it instead of `push`.

Signed-off-by: Phil Hord <phil.hord@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Tests: clean up submodule recursive helpersJonathan Tan Tue, 21 Nov 2017 22:12:56 +0000 (14:12 -0800)

Tests: clean up submodule recursive helpers

This continues the work in commit d3b5a49 ("Tests: clean up and document
submodule helpers", 2017-11-08).

Factor out the commonalities from
test_submodule_switch_recursing_with_args() and
test_submodule_forced_switch_recursing_with_args() in
lib-submodule-update.sh, and document their usage. Some tests differ
slightly in their test assertions; I have used the superset of those
assertions in that case.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log: add option to choose which refs to decorateRafael Ascensão Tue, 21 Nov 2017 21:33:41 +0000 (21:33 +0000)

log: add option to choose which refs to decorate

When `log --decorate` is used, git will decorate commits with all
available refs. While in most cases this may give the desired effect,
under some conditions it can lead to excessively verbose output.

Introduce two command line options, `--decorate-refs=<pattern>` and
`--decorate-refs-exclude=<pattern>` to allow the user to select which
refs are used in decoration.

When "--decorate-refs=<pattern>" is given, only the refs that match the
pattern are used in decoration. The refs that match the pattern when
"--decorate-refs-exclude=<pattern>" is given, are never used in
decoration.

These options follow the same convention for mixing negative and
positive patterns across the system, assuming that the inclusive default
is to match all refs available.

(1) if there is no positive pattern given, pretend as if an
inclusive default positive pattern was given;

(2) for each candidate, reject it if it matches no positive
pattern, or if it matches any one of the negative patterns.

The rules for what is considered a match are slightly different from the
rules used elsewhere.

Commands like `log --glob` assume a trailing '/*' when glob chars are
not present in the pattern. This makes it difficult to specify a single
ref. On the other hand, commands like `describe --match --all` allow
specifying exact refs, but do not have the convenience of allowing
"shorthand refs" like 'refs/heads' or 'heads' to refer to
'refs/heads/*'.

The commands introduced in this patch consider a match if:

(a) the pattern contains globs chars,
and regular pattern matching returns a match.

(b) the pattern does not contain glob chars,
and ref '<pattern>' exists, or if ref exists under '<pattern>/'

This allows both behaviours (allowing single refs and shorthand refs)
yet remaining compatible with existent commands.

Helped-by: Kevin Daudt <me@ikke.info>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Rafael Ascensão <rafa.almas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

notes: correct 'git notes prune' options to '[-n] ... Robert P. J. Day Tue, 21 Nov 2017 19:17:21 +0000 (14:17 -0500)

notes: correct 'git notes prune' options to '[-n] [-v]'

Currently, 'git notes prune' in man page and usage message
incorrectly lists options as '[-n | -v]', rather than '[-n] [-v]'.

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

prune: add "--progress" to man page and usage msgRobert P. J. Day Tue, 21 Nov 2017 15:51:52 +0000 (10:51 -0500)

prune: add "--progress" to man page and usage msg

Add mention of git prune's "--progress" option to the SYNOPSIS and
DESCRIPTION sections of the man page, and to the usage message of "git
prune" itself.

While we're here, move the explanation of "--" toward the end of the
DESCRIPTION section, where it belongs.

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: add missing "-n" (dry-run) option to reflog man... Robert P. J. Day Tue, 21 Nov 2017 15:39:55 +0000 (10:39 -0500)

doc: add missing "-n" (dry-run) option to reflog man page

While the "git reflog" man page supports both "--dry-run" and "-n" for
a dry run, the man page mentions only the former, not the latter.

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: fast-path null sha1 as a missing objectJeff King Tue, 21 Nov 2017 23:17:39 +0000 (18:17 -0500)

sha1_file: fast-path null sha1 as a missing object

In theory nobody should ever ask the low-level object code
for a null sha1. It's used as a sentinel for "no such
object" in lots of places, so leaking through to this level
is a sign that the higher-level code is not being careful
about its error-checking. In practice, though, quite a few
code paths seem to rely on the null sha1 lookup failing as a
way to quietly propagate non-existence (e.g., by feeding it
to lookup_commit_reference_gently(), which then returns
NULL).

When this happens, we do two inefficient things:

1. We actually search for the null sha1 in packs and in
the loose object directory.

2. When we fail to find it, we re-scan the pack directory
in case a simultaneous repack happened to move it from
loose to packed. This can be very expensive if you have
a large number of packs.

Only the second one actually causes noticeable performance
problems, so we could treat them independently. But for the
sake of simplicity (both of code and of reasoning about it),
it makes sense to just declare that the null sha1 cannot be
a real on-disk object, and looking it up will always return
"no such object".

There's no real loss of functionality to do so Its use as a
sentinel value means that anybody who is unlucky enough to
hit the 2^-160th chance of generating an object with that
sha1 is already going to find the object largely unusable.

In an ideal world, we'd simply fix all of the callers to
notice the null sha1 and avoid passing it to us. But a
simple experiment to catch this with a BUG() shows that
there are a large number of code paths that do so.

So in the meantime, let's fix the performance problem by
taking a fast exit from the object lookup when we see a null
sha1. p5551 shows off the improvement (when a fetched ref is
new, the "old" sha1 is 0{40}, which ends up being passed for
fast-forward checks, the status table abbreviations, etc):

Test HEAD^ HEAD
--------------------------------------------------------
5551.4: fetch 5.51(5.03+0.48) 0.17(0.10+0.06) -96.9%

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with maintJunio C Hamano Tue, 21 Nov 2017 05:11:40 +0000 (14:11 +0900)

Sync with maint

* maint:
Almost ready for 2.15.1

RelNotes: the fifth batch for 2.16Junio C Hamano Tue, 21 Nov 2017 05:11:06 +0000 (14:11 +0900)

RelNotes: the fifth batch for 2.16

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'rs/apply-fuzzy-match-fix'Junio C Hamano Tue, 21 Nov 2017 05:07:52 +0000 (14:07 +0900)

Merge branch 'rs/apply-fuzzy-match-fix'

A fix for an ancient bug in "git apply --ignore-space-change" codepath.

* rs/apply-fuzzy-match-fix:
apply: avoid out-of-bounds access in fuzzy_matchlines()

Merge branch 'ad/submitting-patches-title-decoration'Junio C Hamano Tue, 21 Nov 2017 05:07:51 +0000 (14:07 +0900)

Merge branch 'ad/submitting-patches-title-decoration'

Doc update around use of "format-patch --subject-prefix" etc.

* ad/submitting-patches-title-decoration:
doc/SubmittingPatches: correct subject guidance

Merge branch 'av/fsmonitor'Junio C Hamano Tue, 21 Nov 2017 05:07:51 +0000 (14:07 +0900)

Merge branch 'av/fsmonitor'

Various fixes to bp/fsmonitor topic.

* av/fsmonitor:
fsmonitor: simplify determining the git worktree under Windows
fsmonitor: store fsmonitor bitmap before splitting index
fsmonitor: read from getcwd(), not the PWD environment variable
fsmonitor: delay updating state until after split index is merged
fsmonitor: document GIT_TRACE_FSMONITOR
fsmonitor: don't bother pretty-printing JSON from watchman
fsmonitor: set the PWD to the top of the working tree

Merge branch 'bp/fsmonitor'Junio C Hamano Tue, 21 Nov 2017 05:07:50 +0000 (14:07 +0900)

Merge branch 'bp/fsmonitor'

We learned to talk to watchman to speed up "git status" and other
operations that need to see which paths have been modified.

* bp/fsmonitor:
fsmonitor: preserve utf8 filenames in fsmonitor-watchman log
fsmonitor: read entirety of watchman output
fsmonitor: MINGW support for watchman integration
fsmonitor: add a performance test
fsmonitor: add a sample integration script for Watchman
fsmonitor: add test cases for fsmonitor extension
split-index: disable the fsmonitor extension when running the split index test
fsmonitor: add a test tool to dump the index extension
update-index: add fsmonitor support to update-index
ls-files: Add support in ls-files to display the fsmonitor valid bit
fsmonitor: add documentation for the fsmonitor extension.
fsmonitor: teach git to optionally utilize a file system monitor to speed up detecting new or changed files.
update-index: add a new --force-write-index option
preload-index: add override to enable testing preload-index
bswap: add 64 bit endianness helper get_be64

Almost ready for 2.15.1Junio C Hamano Tue, 21 Nov 2017 05:07:08 +0000 (14:07 +0900)

Almost ready for 2.15.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'rs/sequencer-rewrite-file-cleanup' into... Junio C Hamano Tue, 21 Nov 2017 05:05:33 +0000 (14:05 +0900)

Merge branch 'rs/sequencer-rewrite-file-cleanup' into maint

Code cleanup.

* rs/sequencer-rewrite-file-cleanup:
sequencer.c: check return value of close() in rewrite_file()
sequencer: use O_TRUNC to truncate files
sequencer: factor out rewrite_file()

Merge branch 'cb/t4201-robustify' into maintJunio C Hamano Tue, 21 Nov 2017 05:05:33 +0000 (14:05 +0900)

Merge branch 'cb/t4201-robustify' into maint

A test update.

* cb/t4201-robustify:
t4201: make use of abbreviation in the test more robust

Merge branch 'tz/fsf-address-update' into maintJunio C Hamano Tue, 21 Nov 2017 05:05:32 +0000 (14:05 +0900)

Merge branch 'tz/fsf-address-update' into maint

Replace the mailing address of FSF to a URL, as FSF prefers.

* tz/fsf-address-update:
Replace Free Software Foundation address in license notices
Replace Free Software Foundation address in license notices

Merge branch 'ad/rebase-i-serie-typofix' into maintJunio C Hamano Tue, 21 Nov 2017 05:05:32 +0000 (14:05 +0900)

Merge branch 'ad/rebase-i-serie-typofix' into maint

Typofix.

* ad/rebase-i-serie-typofix:
rebase -i: fix comment typo

Merge branch 'jk/info-alternates-fix' into maintJunio C Hamano Tue, 21 Nov 2017 05:05:31 +0000 (14:05 +0900)

Merge branch 'jk/info-alternates-fix' into maint

We used to add an empty alternate object database to the system
that does not help anything; it has been corrected.

* jk/info-alternates-fix:
link_alt_odb_entries: make empty input a noop

Merge branch 'ab/pcre-v2' into maintJunio C Hamano Tue, 21 Nov 2017 05:05:30 +0000 (14:05 +0900)

Merge branch 'ab/pcre-v2' into maint

Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed.

* ab/pcre-v2:
grep: fix NO_LIBPCRE1_JIT to fully disable JIT

Merge branch 'sr/wrapper-quote-filenames' into maintJunio C Hamano Tue, 21 Nov 2017 05:05:29 +0000 (14:05 +0900)

Merge branch 'sr/wrapper-quote-filenames' into maint

Some error messages did not quote filenames shown in it, which have
been fixed.

* sr/wrapper-quote-filenames:
wrapper.c: consistently quote filenames in error messages

Merge branch 'bw/rebase-i-ignored-submodule-fix' into... Junio C Hamano Tue, 21 Nov 2017 05:05:29 +0000 (14:05 +0900)

Merge branch 'bw/rebase-i-ignored-submodule-fix' into maint

"git rebase -i" recently started misbehaving when a submodule that
is configured with 'submodule.<name>.ignore' is dirty; this has
been corrected.

* bw/rebase-i-ignored-submodule-fix:
wt-status: actually ignore submodules when requested

connect: correct style of C-style commentJonathan Nieder Mon, 20 Nov 2017 22:04:58 +0000 (14:04 -0800)

connect: correct style of C-style comment

Documentation/CodingGuidelines explains:

- Multi-line comments include their delimiters on separate lines from
the text. E.g.

/*
* A very long
* multi-line comment.
*/

Reported-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ssh: 'simple' variant does not support --portJonathan Nieder Mon, 20 Nov 2017 21:31:01 +0000 (13:31 -0800)

ssh: 'simple' variant does not support --port

When trying to connect to an ssh:// URL with port explicitly specified
and the ssh command configured with GIT_SSH does not support such a
setting, it is less confusing to error out than to silently suppress
the port setting and continue.

This requires updating the GIT_SSH setting in t5603-clone-dirname.sh.
That test is about the directory name produced when cloning various
URLs. It uses an ssh wrapper that ignores all its arguments but does
not declare that it supports a port argument; update it to set
GIT_SSH_VARIANT=ssh to do so. (Real-life ssh wrappers that pass a
port argument to OpenSSH would also support -G and would not require
such an update.)

Reported-by: William Yan <wyan@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ssh: 'simple' variant does not support -4/-6Jonathan Nieder Mon, 20 Nov 2017 21:30:30 +0000 (13:30 -0800)

ssh: 'simple' variant does not support -4/-6

If the user passes -4/--ipv4 or -6/--ipv6 to "git fetch" or "git push"
and the ssh command configured with GIT_SSH does not support such a
setting, error out instead of ignoring the option and continuing.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ssh: 'auto' variant to select between 'ssh' and 'simple'Jonathan Nieder Mon, 20 Nov 2017 21:30:04 +0000 (13:30 -0800)

ssh: 'auto' variant to select between 'ssh' and 'simple'

Android's "repo" tool is a tool for managing a large codebase
consisting of multiple smaller repositories, similar to Git's
submodule feature. Starting with Git 94b8ae5a (ssh: introduce a
'simple' ssh variant, 2017-10-16), users noticed that it stopped
handling the port in ssh:// URLs.

The cause: when it encounters ssh:// URLs, repo pre-connects to the
server and sets GIT_SSH to a helper ".repo/repo/git_ssh" that reuses
that connection. Before 94b8ae5a, the helper was assumed to support
OpenSSH options for lack of a better guess and got passed a -p option
to set the port. After that patch, it uses the new default of a
simple helper that does not accept an option to set the port.

The next release of "repo" will set GIT_SSH_VARIANT to "ssh" to avoid
that. But users of old versions and of other similar GIT_SSH
implementations would not get the benefit of that fix.

So update the default to use OpenSSH options again, with a twist. As
observed in 94b8ae5a, we cannot assume that $GIT_SSH always handles
OpenSSH options: common helpers such as travis-ci's dpl[*] are
configured using GIT_SSH and do not accept OpenSSH options. So make
the default a new variant "auto", with the following behavior:

1. First, check for a recognized basename, like today.

2. If the basename is not recognized, check whether $GIT_SSH supports
OpenSSH options by running

$GIT_SSH -G <options> <host>

This returns status 0 and prints configuration in OpenSSH if it
recognizes all <options> and returns status 255 if it encounters
an unrecognized option. A wrapper script like

exec ssh -- "$@"

would fail with

ssh: Could not resolve hostname -g: Name or service not known

, correctly reflecting that it does not support OpenSSH options.
The command is run with stdin, stdout, and stderr redirected to
/dev/null so even a command that expects a terminal would exit
immediately.

3. Based on the result from step (2), behave like "ssh" (if it
succeeded) or "simple" (if it failed).

This way, the default ssh variant for unrecognized commands can handle
both the repo and dpl cases as intended.

This autodetection has been running on Google workstations since
2017-10-23 with no reported negative effects.

[*] https://github.com/travis-ci/dpl/blob/6c3fddfda1f2a85944c544446b068bac0a77c049/lib/dpl/provider.rb#L215

Reported-by: William Yan <wyan@google.com>
Improved-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: split ssh option computation to its own functionJonathan Nieder Mon, 20 Nov 2017 21:26:19 +0000 (13:26 -0800)

connect: split ssh option computation to its own function

This puts the determination of options to pass to each ssh variant
(see ssh.variant in git-config(1)) in one place.

A follow-up patch will use this in an initial dry run to detect which
variant to use when the ssh command is ambiguous.

No functional change intended yet.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: split ssh command line options into separate... Jonathan Nieder Mon, 20 Nov 2017 22:19:43 +0000 (14:19 -0800)

connect: split ssh command line options into separate function

The git_connect function is growing long. Split the portion that
discovers an ssh command and options it accepts before the service
name and path to a separate function to make it easier to read.

No functional change intended.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: split git:// setup into a separate functionJonathan Nieder Mon, 20 Nov 2017 21:23:27 +0000 (13:23 -0800)

connect: split git:// setup into a separate function

The git_connect function is growing long. Split the
PROTO_GIT-specific portion to a separate function to make it easier to
read.

No functional change intended.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: move no_fork fallback to git_tcp_connectJonathan Nieder Mon, 20 Nov 2017 21:22:54 +0000 (13:22 -0800)

connect: move no_fork fallback to git_tcp_connect

git_connect has the structure

struct child_process *conn = &no_fork;

...
switch (protocol) {
case PROTO_GIT:
if (git_use_proxy(hostandport))
conn = git_proxy_connect(fd, hostandport);
else
git_tcp_connect(fd, hostandport, flags);
...
break;
case PROTO_SSH:
conn = xmalloc(sizeof(*conn));
child_process_init(conn);
argv_array_push(&conn->args, ssh);
...
break;
...
return conn;

In all cases except the git_tcp_connect case, conn is explicitly
assigned a value. Make the code clearer by explicitly assigning
'conn = &no_fork' in the tcp case and eliminating the default so the
compiler can ensure conn is always correctly assigned.

Noticed-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ssh test: make copy_ssh_wrapper_as clean up after itselfJonathan Nieder Tue, 21 Nov 2017 01:49:19 +0000 (17:49 -0800)

ssh test: make copy_ssh_wrapper_as clean up after itself

Simplify by not allowing the copied ssh wrapper to persist between
tests. This way, tests can be safely reordered, added, and removed
with less fear of hidden side effects.

This also avoids having to call setup_ssh_wrapper to restore the value
of GIT_SSH after this battery of tests, since it means each test will
restore it individually.

Noticed because on Windows, if `uplink.exe` exists, the MSYS2 Bash
will overwrite that when redirecting via `>uplink`. A proposed test
wrote a script to 'uplink' after a previous test created uplink.exe
using copy_ssh_wrapper_as, so the script written with '>uplink' had
the wrong filename and failed.

Reported-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

everything_local: use "quick" object existence checkJeff King Mon, 20 Nov 2017 20:29:21 +0000 (15:29 -0500)

everything_local: use "quick" object existence check

In b495697b82 (fetch-pack: avoid repeatedly re-scanning pack
directory, 2013-01-26), we noticed that everything_local()
could waste time trying to find and parse objects which we
_expect_ to be missing. The solution was to put
has_sha1_file() in front of parse_object() to skip the
more-expensive parse attempt.

That optimization was negated later when has_sha1_file()
learned to do the same re-scan in 45e8a74873 (has_sha1_file:
re-check pack directory before giving up, 2013-08-30).

We can restore it by using the "quick" flag to tell
has_sha1_file (actually has_object_file these days) that we
prefer speed to thoroughness for this call. See also the
fixes in 5827a0354 and 0eeb077be7 for prior art and
discussion on using the "quick" flag for these cases.

The recently-added performance regression test in p5551
demonstrates the problem. You can see the original fix:

Test b495697b82^ b495697b82
--------------------------------------------------------
5551.4: fetch 1.68(1.33+0.35) 0.87(0.69+0.18) -48.2%

and then the regression:

Test 45e8a74873^ 45e8a74873
---------------------------------------------------------
5551.4: fetch 0.96(0.77+0.19) 2.55(2.04+0.50) +165.6%

and now our fix:

Test HEAD^ HEAD
--------------------------------------------------------
5551.4: fetch 7.21(6.58+0.63) 5.47(5.04+0.43) -24.1%

You can also see that other things have gotten a lot slower
since 2013. We'll deal with those in separate patches.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

p5551: add a script to test fetch pack-dir rescansJeff King Mon, 20 Nov 2017 20:28:28 +0000 (15:28 -0500)

p5551: add a script to test fetch pack-dir rescans

Since fetch often deals with object-ids we don't have (yet),
it's an easy mistake for it to use a function like
parse_object() that gives the correct result (e.g., NULL)
but does so very slowly (because after failing to find the
object, we re-scan the pack directory looking for new
packs).

The regular test suite won't catch this because the end
result is correct, but we would want to know about
performance regressions, too. Let's add a test to the
regression suite.

Note that this uses a synthetic repository that has a large
number of packs. That's not ideal, as it means we're not
testing what "normal" users see (in fact, some of these
problems have existed for ages without anybody noticing
simply because a rescan on a normal repository just isn't
that expensive).

So what we're really looking for here is the spike you'd
notice in a pathological case (a lot of unknown objects
coming into a repo with a lot of packs). If that's fast,
then the normal cases should be, too.

Note that the test also makes liberal use of $MODERN_GIT for
setup; some of these regressions go back a ways, and we
should be able to use it to find the problems there.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/perf/lib-pack: use fast-import checkpoint to create... Jeff King Mon, 20 Nov 2017 20:27:19 +0000 (15:27 -0500)

t/perf/lib-pack: use fast-import checkpoint to create packs

We currently use fast-import only to create a large number
of objects, and then run O(n) invocations of pack-objects to
turn them into packs.

We can do this faster by just asking fast-import to
checkpoint and create a pack for each (after telling it
not to turn loose tiny packs).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

p5550: factor out nonsense-pack creationJeff King Mon, 20 Nov 2017 20:26:43 +0000 (15:26 -0500)

p5550: factor out nonsense-pack creation

We have a function to create a bunch of irrelevant packs to
measure the expense of reprepare_packed_git(). Let's make
that available to other perf scripts.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-jump: give contact instructions in the READMEJeff King Mon, 20 Nov 2017 19:18:46 +0000 (14:18 -0500)

git-jump: give contact instructions in the README

Let's make it clear how patches should flow into
contrib/git-jump. The normal Git maintainer does not
necessarily care about things in contrib/, and authors of
individual components should be the ones giving the final
review/ack for a patch. Ditto for bug reports, which are
likely to get more attention from the area expert.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/git-jump: allow to configure the grep commandBeat Bolli Sun, 19 Nov 2017 23:05:36 +0000 (00:05 +0100)

contrib/git-jump: allow to configure the grep command

Add the configuration option "jump.grepCmd" that allows to configure the
command that is used to search in grep mode. This allows the users of
git-jump to use ag(1) or ack(1) as search engines.

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pull: pass -4/-6 option to 'git fetch'Shuyu Wei Sun, 19 Nov 2017 11:01:32 +0000 (19:01 +0800)

pull: pass -4/-6 option to 'git fetch'

The -4/-6 option should be passed through to 'git fetch' to be
consistent with the man page.

Signed-off-by: Wei Shuyu <wsy@dogben.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

grep: show non-empty lines before functions with -WRené Scharfe Sat, 18 Nov 2017 18:08:08 +0000 (19:08 +0100)

grep: show non-empty lines before functions with -W

Non-empty lines before a function definition are most likely comments
for that function and thus relevant. Include them in function context.

Such a non-empty line might also belong to the preceding function if
there is no separating blank line. Stop extending the context upwards
also at the next function line to make sure only one extra function body
is shown at most.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

grep: update boundary variable for pre-contextRené Scharfe Sat, 18 Nov 2017 18:07:13 +0000 (19:07 +0100)

grep: update boundary variable for pre-context

Function context can be bigger than -A/-B/-C context. To find the
beginning of the combined context we search backwards. Currently we
check at each loop iteration what we're looking for and determine the
effective upper boundary based on that.

Simplify this a bit by setting the variable "from" to the lowest unshown
line number up front if we're looking for a function line and set it
back to the required -B/-C context line number when we find one. This
prepares the ground for the next patch; no functional change intended.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7810: improve check of -W with user-defined function... René Scharfe Sat, 18 Nov 2017 18:06:16 +0000 (19:06 +0100)

t7810: improve check of -W with user-defined function lines

The check for function context (-W) together with user-defined function
line patterns reuses hello.c and pretends it's written in a language in
which function lines contain either "printf" or a trailing curly brace.
That's a bit obscure.

Make the test easier to read by adding a small PowerShell script, using
a simple, but meaningful expression, and separating out checks for
different aspects into dedicated tests instead of simply matching the
whole output byte for byte.

Also include a test for showing comments before function lines like git

Signed-off-by: Junio C Hamano <gitster@pobox.com>

xdiff: show non-empty lines before functions with -WRené Scharfe Sat, 18 Nov 2017 18:05:19 +0000 (19:05 +0100)

xdiff: show non-empty lines before functions with -W

Non-empty lines before a function definition are most likely comments
for that function and thus relevant. Include them in function context.

Such a non-empty line might also belong to the preceeding function if
there is no separating blank line. Stop extending the context upwards
also at the next function line to make sure only one extra function body
is shown at most.

Original-patch-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

xdiff: factor out is_func_rec()René Scharfe Sat, 18 Nov 2017 18:04:40 +0000 (19:04 +0100)

xdiff: factor out is_func_rec()

Add a helper for checking if a given record is a function line. It
frees callers from having to deal with the buffer arguments of
match_func_rec().

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4051: add test for comments preceding function linesRené Scharfe Sat, 18 Nov 2017 18:04:00 +0000 (19:04 +0100)

t4051: add test for comments preceding function lines

When showing function context it would be helpful to show comments
immediately before declarations, as they are most likely relevant.

Add a test for that, but without specifying the choice of lines too
rigidly in the test---we may want to stop before and not include
"/*" in the future, for example.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-rebase: clean up dashed-usages in messagesKaartic Sivaraam Mon, 20 Nov 2017 15:26:52 +0000 (20:56 +0530)

git-rebase: clean up dashed-usages in messages

Signed-off-by: Kaartic Sivaraam <kaartic.sivaraam@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch: change default of `pager.branch` to "on"Martin Ågren Sun, 19 Nov 2017 15:03:50 +0000 (16:03 +0100)

branch: change default of `pager.branch` to "on"

This is similar to ff1e72483 (tag: change default of `pager.tag` to
"on", 2017-08-02) and is safe now that we do not consider `pager.branch`
at all when we are not listing branches. This change will help with
listing many branches, but will not hurt users of `git branch
--edit-description` as it would have before the previous commit.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch: respect `pager.branch` in list-mode onlyMartin Ågren Sun, 19 Nov 2017 15:03:49 +0000 (16:03 +0100)

branch: respect `pager.branch` in list-mode only

Similar to de121ffe5 (tag: respect `pager.tag` in list-mode only,
2017-08-02), use the DELAY_PAGER_CONFIG-mechanism to only respect
`pager.branch` when we are listing branches.

We have two possibilities of generalizing what that earlier commit made
to `git tag`. One is to interpret, e.g., --set-upstream-to as "it does
not use an editor, so we should page". Another, the one taken by this
commit, is to say "it does not list, so let's not page". That is in line
with the approach of the series on `pager.tag` and in particular the
wording in Documentation/git-tag.txt, which this commit reuses for
git-branch.txt.

This fixes the failing test added in the previous commit. Also adapt the
test for whether `git branch --set-upstream-to` respects `pager.branch`.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7006: add tests for how git branch paginatesMartin Ågren Sun, 19 Nov 2017 15:03:48 +0000 (16:03 +0100)

t7006: add tests for how git branch paginates

The next couple of commits will change how `git branch` handles
`pager.branch`, similar to how de121ffe5 (tag: respect `pager.tag` in
list-mode only, 2017-08-02) and ff1e72483 (tag: change default of
`pager.tag` to "on", 2017-08-02) changed `git tag`.

Add tests in this area to make sure that we don't regress and so that
the upcoming commits can be made clearer by adapting the tests. Add some
tests for `--list` (implied), one for `--edit-description`, and one for
`--set-upstream-to` as a representative of "something other than the
first two".

In particular, use `test_expect_failure` to document that we currently
respect the pager-configuration with `--edit-description`. The current
behavior is buggy since the pager interferes with the editor and makes
the end result completely broken. See also b3ee740c8 (t7006: add tests
for how git tag paginates, 2017-08-02).

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config: flip return value of write_section()René Scharfe Sat, 18 Nov 2017 10:20:04 +0000 (11:20 +0100)

config: flip return value of write_section()

d9bd4cbb9cc (config: flip return value of store_write_*()) made
write_section() follow the convention of write(2) to return -1 on error
and the number of written bytes on success. 3b48045c6c7 (Merge branch
'sd/branch-copy') changed it back to returning 0 on error and 1 on
success, but left its callers still checking for negative values.

Let write_section() follow the convention of write(2) again to meet the
expectations of its callers.

Reported-by: Jeff King <peff@peff.net>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config: add --expiry-dateHaaris Mehmood Sat, 18 Nov 2017 02:27:27 +0000 (02:27 +0000)

config: add --expiry-date

Add --expiry-date as a data-type for config files when
'git config --get' is used. This will return any relative
or fixed dates from config files as timestamps.

This is useful for scripts (e.g. gc.reflogexpire) that work
with timestamps so that '2.weeks' can be converted to a format
acceptable by those scripts/functions.

Following the convention of git_config_pathname(), move
the helper function required for this feature from
builtin/reflog.c to builtin/config.c where other similar
functions exist (e.g. for --bool or --path), and match
the order of parameters with other functions (i.e. output
pointer as first parameter).

Signed-off-by: Haaris Mehmood <hsed@unimetic.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rebase: use mboxrd format to avoid split errorsEric Wong Sat, 18 Nov 2017 01:01:16 +0000 (01:01 +0000)

rebase: use mboxrd format to avoid split errors

The mboxrd format allows the use of embedded "From " lines in
commit messages without being misinterpreted by mailsplit

Reported-by: Florian Weimer <fweimer@redhat.com>
Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: update line lengths for --inaccurate-eofRené Scharfe Thu, 16 Nov 2017 18:50:31 +0000 (19:50 +0100)

apply: update line lengths for --inaccurate-eof

Some diff implementations don't report missing newlines at the end of
files. Applying such a patch can cause a newline character to be
added inadvertently. The option --inaccurate-eof of git apply can be
used to remove trailing newlines if needed.

apply_one_fragment() cuts it off from the buffers for preimage and
postimage. Before it does, it builds an array with the lengths of each
line for both. Make sure to update the length of the last line in
these line info structures as well to keep them consistent with their
respective buffer.

Without this fix the added test fails; git apply dies and reports:

fatal: BUG: caller miscounted postlen: asked 1, orig = 1, used = 2

That sanity check is only called if whitespace changes are ignored.

Reported-by: Mahmoud Al-Qudsi <mqudsi@neosmart.net>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add '--copy' option to 'git branch'Todd Zullinger Thu, 16 Nov 2017 17:09:06 +0000 (12:09 -0500)

completion: add '--copy' option to 'git branch'

In 52d59cc645 (branch: add a --copy (-c) option to go with --move (-m),
2017-06-18), `git branch` learned a `--copy` option. Include it when
providing command completions.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add: introduce "--renormalize"Torsten Bögershausen Thu, 16 Nov 2017 16:38:28 +0000 (17:38 +0100)

add: introduce "--renormalize"

Make it safer to normalize the line endings in a repository.
Files that had been commited with CRLF will be commited with LF.

The old way to normalize a repo was like this:

# Make sure that there are not untracked files
$ echo "* text=auto" >.gitattributes
$ git read-tree --empty
$ git add .
$ git commit -m "Introduce end-of-line normalization"

The user must make sure that there are no untracked files,
otherwise they would have been added and tracked from now on.

The new "add --renormalize" does not add untracked files:

$ echo "* text=auto" >.gitattributes
$ git add --renormalize .
$ git commit -m "Introduce end-of-line normalization"

Note that "git add --renormalize <pathspec>" is the short form for
"git add -u --renormalize <pathspec>".

While at it, document that the same renormalization may be needed,
whenever a clean filter is added or changed.

Helped-By: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch doc: remove --set-upstream from synopsisTodd Zullinger Thu, 16 Nov 2017 07:46:43 +0000 (02:46 -0500)

branch doc: remove --set-upstream from synopsis

Support for the --set-upstream option was removed in 52668846ea
(builtin/branch: stop supporting the "--set-upstream" option,
2017-08-17), after a long deprecation period.

Remove the option from the command synopsis for consistency. Replace
another reference to it in the description of `--delete` with
`--set-upstream-to`.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer: reschedule pick if index can't be lockedPhillip Wood Wed, 15 Nov 2017 10:41:25 +0000 (10:41 +0000)

sequencer: reschedule pick if index can't be locked

If the index cannot be locked in do_recursive_merge(), issue an
error message and go on to the error recovery codepath, instead of
dying. When the commit cannot be picked, it needs to be rescheduled
when performing an interactive rebase, but just dying there won't
allow that to happen, and when the user runs 'git rebase --continue'
rather than 'git rebase --abort', the commit gets silently dropped.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>

config: avoid "write_in_full(fd, buf, len) != len"... Phillip Wood Wed, 15 Nov 2017 12:40:43 +0000 (12:40 +0000)

config: avoid "write_in_full(fd, buf, len) != len" pattern

As explained in commit 06f46f237 (avoid "write_in_full(fd, buf, len)
!= len" pattern, 2017–09–13) the return value of write_in_full() is
either -1 or the requested number of bytes. As such comparing the
return value to an unsigned value such as strbuf.len will fail to
catch errors. Change the code to use the preferred '< 0' check.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer: show rename progress during cherry picksElijah Newren Mon, 13 Nov 2017 20:16:00 +0000 (12:16 -0800)

sequencer: show rename progress during cherry picks

When trying to cherry-pick a change that has lots of renames, it is
somewhat unsettling to wait a really long time without any feedback.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>