gitweb.git
short status: improve reporting for submodule changesStefan Beller Wed, 29 Mar 2017 22:26:15 +0000 (15:26 -0700)

short status: improve reporting for submodule changes

If I add an untracked file to a submodule or modify a tracked file,
currently "git status --short" treats the change in the same way as
changes to the current HEAD of the submodule:

$ git clone --quiet --recurse-submodules https://gerrit.googlesource.com/gerrit
$ echo hello >gerrit/plugins/replication/stray-file
$ sed -i -e 's/.*//' gerrit/plugins/replication/.mailmap
$ git -C gerrit status --short
M plugins/replication

This is by analogy with ordinary files, where "M" represents a change
that has not been added yet to the index. But this change cannot be
added to the index without entering the submodule, "git add"-ing it,
and running "git commit", so the analogy is counterproductive.

Introduce new status letters " ?" and " m" for this. These are similar
to the existing "??" and " M" but mean that the submodule (not the
parent project) has new untracked files and modified files, respectively.
The user can use "git add" and "git commit" from within the submodule to
add them.

Changes to the submodule's HEAD commit can be recorded in the index with
a plain "git add -u" and are shown with " M", like today.

To avoid excessive clutter, show at most one of " ?", " m", and " M" for
the submodule. They represent increasing levels of change --- the last
one that applies is shown (e.g., " m" if there are both modified files
and untracked files in the submodule, or " M" if the submodule's HEAD
has been modified and it has untracked files).

While making these changes, we need to make sure to not break porcelain
level 1, which shares code with "status --short". We only change
"git status --short".

Non-short "git status" and "git status --porcelain=2" already handle
these cases by showing more detail:

$ git -C gerrit status --porcelain=2
1 .M S.MU 160000 160000 160000 305c864db28eb0c77c8499bc04c87de3f849cf3c 305c864db28eb0c77c8499bc04c87de3f849cf3c plugins/replication
$ git -C gerrit status
[...]
modified: plugins/replication (modified content, untracked content)

Scripts caring about these distinctions should use --porcelain=2.

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

submodule.c: stricter checking for submodules in is_sub... Stefan Beller Sat, 25 Mar 2017 00:36:08 +0000 (17:36 -0700)

submodule.c: stricter checking for submodules in is_submodule_modified

By having a stricter check in the superproject we catch errors earlier,
instead of spawning a child process to tell us.

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

submodule.c: port is_submodule_modified to use porcelain 2Stefan Beller Sat, 25 Mar 2017 00:36:07 +0000 (17:36 -0700)

submodule.c: port is_submodule_modified to use porcelain 2

Migrate 'is_submodule_modified' to the new porcelain format of
git-status. This conversion attempts to convert faithfully, i.e.
the behavior ought to be exactly the same.

As the output in the parsing only distinguishes between untracked files
and the rest, this is easy to port to the new format, as we only
need to identify untracked files and the rest is handled in the "else"
case.

untracked files are indicated by only a single question mark instead of
two question marks, so the conversion is easy.

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

submodule.c: convert is_submodule_modified to use strbu... Stefan Beller Sat, 25 Mar 2017 00:36:06 +0000 (17:36 -0700)

submodule.c: convert is_submodule_modified to use strbuf_getwholeline

Instead of implementing line reading yet again, make use of our beautiful
library function to read one line. By using strbuf_getwholeline instead
of strbuf_read, we avoid having to allocate memory for the entire child
process output at once. That is, we limit maximum memory usage.
Also we can start processing the output as it comes in, no need to
wait for all of it.

Once we know all information that we care about, we can terminate
the child early. In that case we do not care about its exit code as well.
By just closing our side of the pipe the child process will get a SIGPIPE
signal, which it will not report nor do we report it in finish_command,
ac78663b0d (run-command: don't warn on SIGPIPE deaths, 2015-12-29).

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

submodule.c: factor out early loop termination in is_su... Stefan Beller Sat, 25 Mar 2017 00:36:05 +0000 (17:36 -0700)

submodule.c: factor out early loop termination in is_submodule_modified

This makes it easier for a follow up patch.

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

submodule.c: use argv_array in is_submodule_modifiedStefan Beller Sat, 25 Mar 2017 00:36:04 +0000 (17:36 -0700)

submodule.c: use argv_array in is_submodule_modified

struct argv_array is easier to use and maintain.

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

Merge branch 'js/rebase-helper'Junio C Hamano Thu, 23 Mar 2017 18:20:46 +0000 (11:20 -0700)

Merge branch 'js/rebase-helper'

A hotfix for a regression fix

* js/rebase-helper:
sequencer: fix missing newline

sequencer: fix missing newlineBrandon Williams Thu, 23 Mar 2017 17:02:33 +0000 (10:02 -0700)

sequencer: fix missing newline

When using rebase --interactive where one of the lines is marked as
'edit' this is the resulting output:

Stopped at ec3b9c4... stuffYou can amend the commit now, with

git commit --amend

Once you are satisfied with your changes, run

git rebase --continue

A newline character is missing at the end of the "Stopped at ..." line and
before the "You can amend ..." line. This patch fixes the malformed output by
adding the missing newline character to the end of the "Stopped at ..." line.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with maintJunio C Hamano Tue, 21 Mar 2017 22:11:38 +0000 (15:11 -0700)

Sync with maint

Sixth batch for 2.13Junio C Hamano Tue, 21 Mar 2017 22:11:13 +0000 (15:11 -0700)

Sixth batch for 2.13

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

Merge branch 'nd/commit-hook-doc-fix'Junio C Hamano Tue, 21 Mar 2017 22:07:20 +0000 (15:07 -0700)

Merge branch 'nd/commit-hook-doc-fix'

Doc fix.

* nd/commit-hook-doc-fix:
git-commit.txt: list post-rewrite in HOOKS section

Merge branch 'ab/push-default-doc-fix'Junio C Hamano Tue, 21 Mar 2017 22:07:19 +0000 (15:07 -0700)

Merge branch 'ab/push-default-doc-fix'

Doc fix.

* ab/push-default-doc-fix:
push: mention "push.default=tracking" in the documentation

Merge branch 'ab/doc-no-option-notation-fix'Junio C Hamano Tue, 21 Mar 2017 22:07:19 +0000 (15:07 -0700)

Merge branch 'ab/doc-no-option-notation-fix'

Doc fix.

* ab/doc-no-option-notation-fix:
doc: change erroneous --[no]-whatever into --[no-]whatever

Merge branch 'sb/wt-status-cleanup'Junio C Hamano Tue, 21 Mar 2017 22:07:18 +0000 (15:07 -0700)

Merge branch 'sb/wt-status-cleanup'

Code clean-up.

* sb/wt-status-cleanup:
wt-status: simplify by using for_each_string_list_item

Merge branch 'js/rebase-helper'Junio C Hamano Tue, 21 Mar 2017 22:07:18 +0000 (15:07 -0700)

Merge branch 'js/rebase-helper'

Recent update to "rebase -i" started showing a message that is not
a warning with "warning:" prefix by mistake. This has been fixed.

* js/rebase-helper:
sequencer: drop "warning:" when stopping for edit

Merge branch 'nd/conditional-config-include'Junio C Hamano Tue, 21 Mar 2017 22:07:18 +0000 (15:07 -0700)

Merge branch 'nd/conditional-config-include'

The configuration file learned a new "includeIf.<condition>.path"
that includes the contents of the given path only when the
condition holds. This allows you to say "include this work-related
bit only in the repositories under my ~/work/ directory".

* nd/conditional-config-include:
config: add conditional include
config.txt: reflow the second include.path paragraph
config.txt: clarify multiple key values in include.path

Merge branch 'jk/pack-name-cleanups'Junio C Hamano Tue, 21 Mar 2017 22:07:17 +0000 (15:07 -0700)

Merge branch 'jk/pack-name-cleanups'

Code clean-up.

* jk/pack-name-cleanups:
index-pack: make pointer-alias fallbacks safer
replace snprintf with odb_pack_name()
odb_pack_keep(): stop generating keepfile name
sha1_file.c: make pack-name helper globally accessible
move odb_* declarations out of git-compat-util.h

Merge branch 'sb/submodule-config-parse-ignore-fix'Junio C Hamano Tue, 21 Mar 2017 22:07:17 +0000 (15:07 -0700)

Merge branch 'sb/submodule-config-parse-ignore-fix'

Code to read submodule.<name>.ignore config did not state the
variable name correctly when giving an error message diagnosing
misconfiguration.

* sb/submodule-config-parse-ignore-fix:
submodule-config: correct error reporting for invalid ignore value

Merge branch 'mg/prompt-describe-tags'Junio C Hamano Tue, 21 Mar 2017 22:07:17 +0000 (15:07 -0700)

Merge branch 'mg/prompt-describe-tags'

The command line prompt (in contrib/) learned a new 'tag' style
that can be specified with GIT_PS1_DESCRIBE_STYLE, to describe a
detached HEAD with "git describe --tags".

* mg/prompt-describe-tags:
git-prompt: add a describe style for any tags

Merge branch 'jk/rev-parse-cleanup'Junio C Hamano Tue, 21 Mar 2017 22:07:16 +0000 (15:07 -0700)

Merge branch 'jk/rev-parse-cleanup'

Code clean-up.

* jk/rev-parse-cleanup:
rev-parse: simplify parsing of ref options
rev-parse: add helper for parsing "--foo/--foo="
rev-parse: use skip_prefix when parsing options

Prepare for 2.12.2Junio C Hamano Tue, 21 Mar 2017 22:04:12 +0000 (15:04 -0700)

Prepare for 2.12.2

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

Merge branch 'jh/send-email-one-cc' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:30 +0000 (15:03 -0700)

Merge branch 'jh/send-email-one-cc' into maint

"Cc:" on the trailer part does not have to conform to RFC strictly,
unlike in the e-mail header. "git send-email" has been updated to
ignore anything after '>' when picking addresses, to allow non-address
cruft like " # stable 4.4" after the address.

* jh/send-email-one-cc:
send-email: only allow one address per body tag

Merge branch 'jk/t6300-cleanup' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:30 +0000 (15:03 -0700)

Merge branch 'jk/t6300-cleanup' into maint

A test that creates a confusing branch whose name is HEAD has been
corrected not to do so.

* jk/t6300-cleanup:
t6300: avoid creating refs/heads/HEAD

Merge branch 'rs/commit-parsing-optim' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:29 +0000 (15:03 -0700)

Merge branch 'rs/commit-parsing-optim' into maint

The code that parses header fields in the commit object has been
updated for (micro)performance and code hygiene.

* rs/commit-parsing-optim:
commit: don't check for space twice when looking for header
commit: be more precise when searching for headers

Merge branch 'jk/show-branch-lift-name-len-limit' into... Junio C Hamano Tue, 21 Mar 2017 22:03:29 +0000 (15:03 -0700)

Merge branch 'jk/show-branch-lift-name-len-limit' into maint

"git show-branch" expected there were only very short branch names
in the repository and used a fixed-length buffer to hold them
without checking for overflow.

* jk/show-branch-lift-name-len-limit:
show-branch: use skip_prefix to drop magic numbers
show-branch: store resolved head in heap buffer
show-branch: drop head_len variable

Merge branch 'jk/tempfile-ferror-fclose-confusion'... Junio C Hamano Tue, 21 Mar 2017 22:03:28 +0000 (15:03 -0700)

Merge branch 'jk/tempfile-ferror-fclose-confusion' into maint

A caller of tempfile API that uses stdio interface to write to
files may ignore errors while writing, which is detected when
tempfile is closed (with a call to ferror()). By that time, the
original errno that may have told us what went wrong is likely to
be long gone and was overwritten by an irrelevant value.
close_tempfile() now resets errno to EIO to make errno at least
predictable.

* jk/tempfile-ferror-fclose-confusion:
tempfile: set errno to a known value before calling ferror()

Merge branch 'rl/remote-allow-missing-branch-name-merge... Junio C Hamano Tue, 21 Mar 2017 22:03:28 +0000 (15:03 -0700)

Merge branch 'rl/remote-allow-missing-branch-name-merge' into maint

"git remote rm X", when a branch has remote X configured as the
value of its branch.*.remote, tried to remove branch.*.remote and
branch.*.merge and failed if either is unset.

* rl/remote-allow-missing-branch-name-merge:
remote: ignore failure to remove missing branch.<name>.merge

Merge branch 'dt/gc-ignore-old-gc-logs' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:28 +0000 (15:03 -0700)

Merge branch 'dt/gc-ignore-old-gc-logs' into maint

A "gc.log" file left by a backgrounded "gc --auto" disables further
automatic gc; it has been taught to run at least once a day (by
default) by ignoring a stale "gc.log" file that is too old.

* dt/gc-ignore-old-gc-logs:
gc: ignore old gc.log files

Merge branch 'jt/upload-pack-error-report' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:27 +0000 (15:03 -0700)

Merge branch 'jt/upload-pack-error-report' into maint

"git upload-pack", which is a counter-part of "git fetch", did not
report a request for a ref that was not advertised as invalid.
This is generally not a problem (because "git fetch" will stop
before making such a request), but is the right thing to do.

* jt/upload-pack-error-report:
upload-pack: report "not our ref" to client

Merge branch 'rs/sha1-file-plug-fallback-base-leak... Junio C Hamano Tue, 21 Mar 2017 22:03:27 +0000 (15:03 -0700)

Merge branch 'rs/sha1-file-plug-fallback-base-leak' into maint

A leak in a codepath to read from a packed object in (rare) cases
has been plugged.

* rs/sha1-file-plug-fallback-base-leak:
sha1_file: release fallback base's memory in unpack_entry()

Merge branch 'ss/remote-bzr-hg-placeholder-wo-python... Junio C Hamano Tue, 21 Mar 2017 22:03:26 +0000 (15:03 -0700)

Merge branch 'ss/remote-bzr-hg-placeholder-wo-python' into maint

There is no need for Python only to give a few messages to the
standard error stream, but we somehow did.

* ss/remote-bzr-hg-placeholder-wo-python:
contrib: git-remote-{bzr,hg} placeholders don't need Python

Merge branch 'jc/diff-populate-filespec-size-only-fix... Junio C Hamano Tue, 21 Mar 2017 22:03:26 +0000 (15:03 -0700)

Merge branch 'jc/diff-populate-filespec-size-only-fix' into maint

"git diff --quiet" relies on the size field in diff_filespec to be
correctly populated, but diff_populate_filespec() helper function
made an incorrect short-cut when asked only to populate the size
field for paths that need to go through convert_to_git() (e.g. CRLF
conversion).

* jc/diff-populate-filespec-size-only-fix:
diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()

Merge branch 'jk/http-walker-buffer-underflow-fix'... Junio C Hamano Tue, 21 Mar 2017 22:03:25 +0000 (15:03 -0700)

Merge branch 'jk/http-walker-buffer-underflow-fix' into maint

"Dumb http" transport used to misparse a nonsense http-alternates
response, which has been fixed.

* jk/http-walker-buffer-underflow-fix:
http-walker: fix buffer underflow processing remote alternates

Merge branch 'mg/status-porcelain-no-i18n' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:25 +0000 (15:03 -0700)

Merge branch 'mg/status-porcelain-no-i18n' into maint

"git status --porcelain" is supposed to give a stable output, but a
few strings were left as translatable by mistake.

* mg/status-porcelain-no-i18n:
git-status: make porcelain more robust

Merge branch 'ps/docs-diffcore' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:25 +0000 (15:03 -0700)

Merge branch 'ps/docs-diffcore' into maint

Doc update.

* ps/docs-diffcore:
docs/diffcore: unquote "Complete Rewrites" in headers
docs/diffcore: fix grammar in diffcore-rename header

Merge branch 'ew/markdown-url-in-readme' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:24 +0000 (15:03 -0700)

Merge branch 'ew/markdown-url-in-readme' into maint

Doc update.

* ew/markdown-url-in-readme:
README: create HTTP/HTTPS links from URLs in Markdown

Merge branch 'rj/remove-unused-mktemp' into maintJunio C Hamano Tue, 21 Mar 2017 22:03:24 +0000 (15:03 -0700)

Merge branch 'rj/remove-unused-mktemp' into maint

Code cleanup.

* rj/remove-unused-mktemp:
wrapper.c: remove unused gitmkstemps() function
wrapper.c: remove unused git_mkstemp() function

Merge branch 'jk/ewah-use-right-type-in-sizeof' into... Junio C Hamano Tue, 21 Mar 2017 22:03:23 +0000 (15:03 -0700)

Merge branch 'jk/ewah-use-right-type-in-sizeof' into maint

Code clean-up.

* jk/ewah-use-right-type-in-sizeof:
ewah: fix eword_t/uint64_t confusion

Sync with 2.12.1Junio C Hamano Mon, 20 Mar 2017 20:56:09 +0000 (13:56 -0700)

Sync with 2.12.1

Merge branch 'js/difftool-builtin'Junio C Hamano Mon, 20 Mar 2017 20:56:00 +0000 (13:56 -0700)

Merge branch 'js/difftool-builtin'

"git difftool --dir-diff" used to die a controlled death giving a
"fatal" message when encountering a locally modified symbolic link,
but it started segfaulting since v2.12. This has been fixed.

* js/difftool-builtin:
difftool: handle modified symlinks in dir-diff mode
t7800: cleanup cruft left behind by tests
t7800: remove whitespace before redirect

Git 2.12.1 v2.12.1Junio C Hamano Mon, 20 Mar 2017 20:17:08 +0000 (13:17 -0700)

Git 2.12.1

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

push: mention "push.default=tracking" in the documentationÆvar Arnfjörð Bjarmason Sun, 19 Mar 2017 14:36:36 +0000 (14:36 +0000)

push: mention "push.default=tracking" in the documentation

Change the documentation for push.tracking=* to re-include a mention
of what "tracking" does.

The "tracking" option was renamed to "upstream" back in
53c4031 ("push.default: Rename 'tracking' to 'upstream'", 2011-02-16),
this section was then subsequently rewritten in 87a70e4 ("config doc:
rewrite push.default section", 2013-06-19) to remove any mention of
"tracking".

Maybe we should just warn or die nowadays if this option is in the
config, but I had some old config of mine use this option, I'd
forgotten that it was a synonym, and nothing in git's documentation
mentioned that.

That's bad, either we shouldn't support it at all, or we should
document what it does. This patch does the latter.

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

git-commit.txt: list post-rewrite in HOOKS sectionNguyễn Thái Ngọc Duy Sun, 19 Mar 2017 09:01:02 +0000 (16:01 +0700)

git-commit.txt: list post-rewrite in HOOKS section

The hook was added in a86ed83cce (Merge branch 'tr/notes-display' -
2010-03-24), which updated githooks.txt but not git-commit.txt.

git-commit.txt was later updated in e858af6d50 (commit: document a
couple of options - 2012-06-08). Since this commit focused on command
line options, this section was probably forgotten.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: change erroneous --[no]-whatever into --[no-]whateverÆvar Arnfjörð Bjarmason Mon, 20 Mar 2017 13:20:29 +0000 (13:20 +0000)

doc: change erroneous --[no]-whatever into --[no-]whatever

Change these two obvious typos to be in line with the rest of the
documentation, which uses the correct --[no-]whatever form.

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

Fifth batch for 2.13Junio C Hamano Fri, 17 Mar 2017 20:51:58 +0000 (13:51 -0700)

Fifth batch for 2.13

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

Merge branch 'jk/cherry-pick-0-mainline'Junio C Hamano Fri, 17 Mar 2017 20:50:28 +0000 (13:50 -0700)

Merge branch 'jk/cherry-pick-0-mainline'

"git revert -m 0 $merge_commit" complained that reverting a merge
needs to say relative to which parent the reversion needs to
happen, as if "-m 0" weren't given. The correct diagnosis is that
"-m 0" does not refer to the first parent ("-m 1" does). This has
been fixed.

* jk/cherry-pick-0-mainline:
cherry-pick: detect bogus arguments to --mainline

Merge branch 'js/early-config'Junio C Hamano Fri, 17 Mar 2017 20:50:28 +0000 (13:50 -0700)

Merge branch 'js/early-config'

The start-up sequence of "git" needs to figure out some configured
settings before it finds and set itself up in the location of the
repository and was quite messy due to its "chicken-and-egg" nature.
The code has been restructured.

* js/early-config:
setup.c: mention unresolved problems
t1309: document cases where we would want early config not to die()
setup_git_directory_gently_1(): avoid die()ing
t1309: test read_early_config()
read_early_config(): really discover .git/
read_early_config(): avoid .git/config hack when unneeded
setup: make read_early_config() reusable
setup: introduce the discover_git_directory() function
setup_git_directory_1(): avoid changing global state
setup: prepare setup_discovered_git_dir() for the root directory
setup_git_directory(): use is_dir_sep() helper
t7006: replace dubious test

Merge branch 'bc/sha1-header-selection-with-cpp-macros'Junio C Hamano Fri, 17 Mar 2017 20:50:27 +0000 (13:50 -0700)

Merge branch 'bc/sha1-header-selection-with-cpp-macros'

Our source code has used the SHA1_HEADER cpp macro after "#include"
in the C code to switch among the SHA-1 implementations. Instead,
list the exact header file names and switch among implementations
using "#ifdef BLK_SHA1/#include "block-sha1/sha1.h"/.../#endif";
this helps some IDE tools.

* bc/sha1-header-selection-with-cpp-macros:
hash.h: move SHA-1 implementation selection into a header file

Merge branch 'mg/status-porcelain-no-i18n'Junio C Hamano Fri, 17 Mar 2017 20:50:27 +0000 (13:50 -0700)

Merge branch 'mg/status-porcelain-no-i18n'

"git status --porcelain" is supposed to give a stable output, but a
few strings were left as translatable by mistake.

* mg/status-porcelain-no-i18n:
git-status: make porcelain more robust

Merge branch 'jk/add-i-use-pathspecs'Junio C Hamano Fri, 17 Mar 2017 20:50:26 +0000 (13:50 -0700)

Merge branch 'jk/add-i-use-pathspecs'

"git add -p <pathspec>" unnecessarily expanded the pathspec to a
list of individual files that matches the pathspec by running "git
ls-files <pathspec>", before feeding it to "git diff-index" to see
which paths have changes, because historically the pathspec
language supported by "diff-index" was weaker. These days they are
equivalent and there is no reason to internally expand it. This
helps both performance and avoids command line argument limit on
some platforms.

* jk/add-i-use-pathspecs:
add--interactive: do not expand pathspecs with ls-files

Merge branch 'jk/http-walker-buffer-underflow-fix'Junio C Hamano Fri, 17 Mar 2017 20:50:26 +0000 (13:50 -0700)

Merge branch 'jk/http-walker-buffer-underflow-fix'

"Dumb http" transport used to misparse a nonsense http-alternates
response, which has been fixed.

* jk/http-walker-buffer-underflow-fix:
http-walker: fix buffer underflow processing remote alternates

Merge branch 'bw/attr-pathspec'Junio C Hamano Fri, 17 Mar 2017 20:50:26 +0000 (13:50 -0700)

Merge branch 'bw/attr-pathspec'

The pathspec mechanism learned to further limit the paths that
match the pattern to those that have specified attributes attached
via the gitattributes mechanism.

* bw/attr-pathspec:
pathspec: allow escaped query values
pathspec: allow querying for attributes

Merge branch 'jk/ref-filter-flags-cleanup'Junio C Hamano Fri, 17 Mar 2017 20:50:25 +0000 (13:50 -0700)

Merge branch 'jk/ref-filter-flags-cleanup'

"git tag --contains" used to (ab)use the object bits to keep track
of the state of object reachability without clearing them after
use; this has been cleaned up and made to use the newer commit-slab
facility.

* jk/ref-filter-flags-cleanup:
ref-filter: use separate cache for contains_tag_algo
ref-filter: die on parse_commit errors
ref-filter: use contains_result enum consistently
ref-filter: move ref_cbdata definition into ref-filter.c

Merge branch 'sb/rev-parse-show-superproject-root'Junio C Hamano Fri, 17 Mar 2017 20:50:25 +0000 (13:50 -0700)

Merge branch 'sb/rev-parse-show-superproject-root'

From a working tree of a repository, a new option of "rev-parse"
lets you ask if the repository is used as a submodule of another
project, and where the root level of the working tree of that
project (i.e. your superproject) is.

* sb/rev-parse-show-superproject-root:
rev-parse: add --show-superproject-working-tree

Merge branch 'bc/object-id'Junio C Hamano Fri, 17 Mar 2017 20:50:24 +0000 (13:50 -0700)

Merge branch 'bc/object-id'

"uchar [40]" to "struct object_id" conversion continues.

* bc/object-id:
wt-status: convert to struct object_id
builtin/merge-base: convert to struct object_id
Convert object iteration callbacks to struct object_id
sha1_file: introduce an nth_packed_object_oid function
refs: simplify parsing of reflog entries
refs: convert each_reflog_ent_fn to struct object_id
reflog-walk: convert struct reflog_info to struct object_id
builtin/replace: convert to struct object_id
Convert remaining callers of resolve_refdup to object_id
builtin/merge: convert to struct object_id
builtin/clone: convert to struct object_id
builtin/branch: convert to struct object_id
builtin/grep: convert to struct object_id
builtin/fmt-merge-message: convert to struct object_id
builtin/fast-export: convert to struct object_id
builtin/describe: convert to struct object_id
builtin/diff-tree: convert to struct object_id
builtin/commit: convert to struct object_id
hex: introduce parse_oid_hex

Merge branch 'rs/blame-code-cleanup'Junio C Hamano Fri, 17 Mar 2017 20:50:24 +0000 (13:50 -0700)

Merge branch 'rs/blame-code-cleanup'

Code clean-up.

* rs/blame-code-cleanup:
blame: move blame_entry duplication to add_blame_entry()

Merge branch 'jk/interop-test'Junio C Hamano Fri, 17 Mar 2017 20:50:23 +0000 (13:50 -0700)

Merge branch 'jk/interop-test'

Picking two versions of Git and running tests to make sure the
older one and the newer one interoperate happily has now become
possible.

* jk/interop-test:
t/interop: add test of old clients against modern git-daemon
t: add an interoperability test harness

Merge branch 'cc/split-index-config'Junio C Hamano Fri, 17 Mar 2017 20:50:23 +0000 (13:50 -0700)

Merge branch 'cc/split-index-config'

The experimental "split index" feature has gained a few
configuration variables to make it easier to use.

* cc/split-index-config: (22 commits)
Documentation/git-update-index: explain splitIndex.*
Documentation/config: add splitIndex.sharedIndexExpire
read-cache: use freshen_shared_index() in read_index_from()
read-cache: refactor read_index_from()
t1700: test shared index file expiration
read-cache: unlink old sharedindex files
config: add git_config_get_expiry() from gc.c
read-cache: touch shared index files when used
sha1_file: make check_and_freshen_file() non static
Documentation/config: add splitIndex.maxPercentChange
t1700: add tests for splitIndex.maxPercentChange
read-cache: regenerate shared index if necessary
config: add git_config_get_max_percent_split_change()
Documentation/git-update-index: talk about core.splitIndex config var
Documentation/config: add information for core.splitIndex
t1700: add tests for core.splitIndex
update-index: warn in case of split-index incoherency
read-cache: add and then use tweak_split_index()
split-index: add {add,remove}_split_index() functions
config: add git_config_get_split_index()
...

wt-status: simplify by using for_each_string_list_itemStefan Beller Thu, 16 Mar 2017 21:36:19 +0000 (14:36 -0700)

wt-status: simplify by using for_each_string_list_item

Improve readability by using the for_each_string_list_item helper
instead of manually iterating with an integer counter.

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

sequencer: drop "warning:" when stopping for editJeff King Fri, 17 Mar 2017 00:19:42 +0000 (20:19 -0400)

sequencer: drop "warning:" when stopping for edit

Since the conversion from shell to C in 56dc3ab04 (sequencer
(rebase -i): implement the 'edit' command, 2017-01-02),
stopping at an "edit" instruction went from:

$ git rebase -i
Stopped at 6ce6b914a... odb_pack_keep(): stop generating keepfile name
You can amend the commit now, with
[...more instructions...]

to:

$ git rebase -i
warning: stopped at 6ce6b914a... odb_pack_keep(): stop generating keepfile name
You can amend the commit now, with
[...more instructions...]

The "warning" implies that it's something unexpected, but
it's not. Let's switch back to the original message.

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

Sync with 'maint'Junio C Hamano Thu, 16 Mar 2017 21:03:11 +0000 (14:03 -0700)

Sync with 'maint'

* maint:
Preparing for 2.12.1

Preparing for 2.12.1Junio C Hamano Thu, 16 Mar 2017 21:01:00 +0000 (14:01 -0700)

Preparing for 2.12.1

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

Merge branch 'js/realpath-pathdup-fix' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:43 +0000 (13:56 -0700)

Merge branch 'js/realpath-pathdup-fix' into maint

Git v2.12 was shipped with an embarrassing breakage where various
operations that verify paths given from the user stopped dying when
seeing an issue, and instead later triggering segfault.
... and then to down to 'maint'.

* js/realpath-pathdup-fix:
real_pathdup(): fix callsites that wanted it to die on error
t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE

Merge branch 'mm/two-more-xstrfmt' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:43 +0000 (13:56 -0700)

Merge branch 'mm/two-more-xstrfmt' into maint

Code clean-up and a string truncation fix.

* mm/two-more-xstrfmt:
bisect_next_all: convert xsnprintf to xstrfmt
stop_progress_msg: convert xsnprintf to xstrfmt

Merge branch 'vn/line-log-memcpy-size-fix' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:42 +0000 (13:56 -0700)

Merge branch 'vn/line-log-memcpy-size-fix' into maint

The command-line parsing of "git log -L" copied internal data
structures using incorrect size on ILP32 systems.

* vn/line-log-memcpy-size-fix:
line-log: use COPY_ARRAY to fix mis-sized memcpy

Merge branch 'ax/line-log-range-merge-fix' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:42 +0000 (13:56 -0700)

Merge branch 'ax/line-log-range-merge-fix' into maint

The code to parse "git log -L..." command line was buggy when there
are many ranges specified with -L; overrun of the allocated buffer
has been fixed.

* ax/line-log-range-merge-fix:
line-log.c: prevent crash during union of too many ranges

Merge branch 'jk/add-i-patch-do-prompt' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:42 +0000 (13:56 -0700)

Merge branch 'jk/add-i-patch-do-prompt' into maint

The patch subcommand of "git add -i" was meant to have paths
selection prompt just like other subcommand, unlike "git add -p"
directly jumps to hunk selection. Recently, this was broken and
"add -i" lost the paths selection dialog, but it now has been
fixed.

* jk/add-i-patch-do-prompt:
add--interactive: fix missing file prompt for patch mode with "-i"

Merge branch 'jt/http-base-url-update-upon-redirect... Junio C Hamano Thu, 16 Mar 2017 20:56:42 +0000 (13:56 -0700)

Merge branch 'jt/http-base-url-update-upon-redirect' into maint

When a redirected http transport gets an error during the
redirected request, we ignored the error we got from the server,
and ended up giving a not-so-useful error message.

* jt/http-base-url-update-upon-redirect:
http: attempt updating base URL only if no error

Merge branch 'js/travis-32bit-linux' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:41 +0000 (13:56 -0700)

Merge branch 'js/travis-32bit-linux' into maint

Add 32-bit Linux variant to the set of platforms to be tested with
Travis CI.

* js/travis-32bit-linux:
Travis: also test on 32-bit Linux

Merge branch 'jh/mingw-openssl-sha1' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:41 +0000 (13:56 -0700)

Merge branch 'jh/mingw-openssl-sha1' into maint

Windows port wants to use OpenSSL's implementation of SHA-1
routines, so let them.

* jh/mingw-openssl-sha1:
mingw: use OpenSSL's SHA-1 routines

Merge branch 'jk/http-auth' into maintJunio C Hamano Thu, 16 Mar 2017 20:56:41 +0000 (13:56 -0700)

Merge branch 'jk/http-auth' into maint

Reduce authentication round-trip over HTTP when the server supports
just a single authentication method.

* jk/http-auth:
http: add an "auto" mode for http.emptyauth
http: restrict auth methods to what the server advertises

index-pack: make pointer-alias fallbacks saferJeff King Thu, 16 Mar 2017 14:27:20 +0000 (10:27 -0400)

index-pack: make pointer-alias fallbacks safer

The final() function accepts a NULL value for certain
parameters, and falls back to writing into a reusable "name"
buffer, and then either:

1. For "keep_name", requiring all uses to do "keep_name ?
keep_name : name.buf". This is awkward, and it's easy
to accidentally look at the maybe-NULL keep_name.

2. For "final_index_name" and "final_pack_name", aliasing
those pointers to the "name" buffer. This is easier to
use, but the aliased pointers become invalid after the
buffer is reused (this isn't a bug now, but it's a
potential pitfall).

One way to make this safer would be to introduce an extra
pointer to do the aliasing, and have its lifetime match the
validity of the "name" buffer. But it's still easy to
accidentally use the wrong name (i.e., to use
"final_pack_name" instead of the aliased pointer).

Instead, let's use three separate buffers that will remain
valid through the function. That makes it safe to alias the
pointers and use them consistently. The extra allocations
shouldn't matter, as this function is not performance
sensitive.

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

replace snprintf with odb_pack_name()Jeff King Thu, 16 Mar 2017 14:27:15 +0000 (10:27 -0400)

replace snprintf with odb_pack_name()

In several places we write the name of the pack filename
into a fixed-size buffer using snprintf(), but do not check
the return value. As a result, a very long object directory
could cause us to quietly truncate the pack filename
(potentially leading to a corrupted repository, as a newly
written packfile could be missing its .pack extension).

We can use odb_pack_name() to do this with a strbuf (and
shorten the code, as well).

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

odb_pack_keep(): stop generating keepfile nameJeff King Thu, 16 Mar 2017 14:27:12 +0000 (10:27 -0400)

odb_pack_keep(): stop generating keepfile name

The odb_pack_keep() function generates the name of a .keep
file and opens it. This has two problems:

1. It requires a fixed-size buffer to create the filename
and doesn't notice when the result is truncated.

2. Of the two callers, one sometimes wants to open a
filename it already has, which makes things awkward (it
has to do so manually, and skips the leading-directory
creation).

Instead, let's have odb_pack_keep() just open the file.
Generating the name isn't hard, and a future patch will
switch callers over to odb_pack_name() anyway.

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

sha1_file.c: make pack-name helper globally accessibleJeff King Thu, 16 Mar 2017 14:27:06 +0000 (10:27 -0400)

sha1_file.c: make pack-name helper globally accessible

We provide sha1_pack_name() and sha1_pack_index_name(), but
the more generic form (which takes its own strbuf and an
arbitrary extension) is only used to implement the other
two. Let's make it available, but clean up a few things:

1. Name it odb_pack_name(), as the original
sha1_get_pack_name() is long but not all that
descriptive.

2. Switch the strbuf argument to the beginning, so that it
matches similar path-building functions like
git_path_buf().

3. Clean up the out-dated docstring and move it to the
public declaration.

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

move odb_* declarations out of git-compat-util.hJeff King Thu, 16 Mar 2017 14:27:00 +0000 (10:27 -0400)

move odb_* declarations out of git-compat-util.h

These functions were originally conceived as wrapper
functions similar to xmkstemp(). They were later moved by
463db9b10 (wrapper: move odb_* to environment.c,
2010-11-06). The more appropriate place for a declaration is
in cache.h.

While we're at it, let's add some basic docstrings.

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

rev-parse: simplify parsing of ref optionsJeff King Wed, 15 Mar 2017 20:08:02 +0000 (16:08 -0400)

rev-parse: simplify parsing of ref options

All of these options do the same thing "--foo" iterates over
the "foo" refs, and "--foo=<glob>" does the same with a
glob. We can factor this into its own function to avoid
repeating ourselves.

There are two subtleties to note:

- the original called for_each_branch_ref(), etc, in the
non-glob case. Now we will call for_each_ref_in("refs/heads/")
which is exactly what for_each_branch_ref() did under
the hood.

- for --glob, we'll call for_each_glob_ref_in() with a
NULL "prefix" argument. Which is exactly what
for_each_glob_ref() was doing already.

So both cases should behave identically, and it seems
reasonable to assume that this will remain the same. The
functions we are calling now are the more-generic ones, and
the ones we are dropping are just convenience wrappers.

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

rev-parse: add helper for parsing "--foo/--foo="Jeff King Wed, 15 Mar 2017 20:06:53 +0000 (16:06 -0400)

rev-parse: add helper for parsing "--foo/--foo="

We can't just use a bare skip_prefix() for these cases,
because we need to match both the "--foo" form and the
"--foo=<value>" form (and tell the difference between the
two in the caller).

We can wrap this in a simple helper which has two obvious
callsites, and will gain some more in the next patch.

Note that the error output for abbrev-ref changes slightly,
as we don't keep our original "arg" pointer. However, the
new output should hopefully be more clear:

[before]
fatal: unknown mode for --abbrev-ref=foo

[after]
fatal: unknown mode for --abbrev-ref: foo

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

rev-parse: use skip_prefix when parsing optionsJeff King Wed, 15 Mar 2017 20:05:36 +0000 (16:05 -0400)

rev-parse: use skip_prefix when parsing options

Using skip_prefix lets us avoid manually-counted offsets
into the argument string. This patch converts the simple and
obvious cases.

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

git-prompt: add a describe style for any tagsMichael J Gruber Wed, 15 Mar 2017 13:15:09 +0000 (14:15 +0100)

git-prompt: add a describe style for any tags

git-prompt has various describe styles, among them "describe" (by
annotated tags) and "default" (by exact match with any tag).

Add a mode "tag" that describes by any tag, annotated or not.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cherry-pick: detect bogus arguments to --mainlineJeff King Wed, 15 Mar 2017 16:56:23 +0000 (12:56 -0400)

cherry-pick: detect bogus arguments to --mainline

The cherry-pick and revert commands use OPT_INTEGER() to
parse --mainline. The stock parser is smart enough to reject
non-numeric nonsense, but it doesn't know that parent
counting starts at 1.

Worse, the value "0" is indistinguishable from the unset
case, so a user who assumes the counting is 0-based will get
a confusing message:

$ git cherry-pick -m 0 $merge
error: commit ... is a merge but no -m option was given.

Let's use a custom callback that enforces our range.

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

difftool: handle modified symlinks in dir-diff modeDavid Aguilar Wed, 15 Mar 2017 09:31:30 +0000 (02:31 -0700)

difftool: handle modified symlinks in dir-diff mode

Detect the null object ID for symlinks in dir-diff so that difftool can
detect when symlinks are modified in the worktree.

Previously, a null symlink object ID would crash difftool.
Handle null object IDs as unknown content that must be read from
the worktree.

Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7800: cleanup cruft left behind by testsDavid Aguilar Wed, 15 Mar 2017 06:54:05 +0000 (23:54 -0700)

t7800: cleanup cruft left behind by tests

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7800: remove whitespace before redirectDavid Aguilar Wed, 15 Mar 2017 06:54:04 +0000 (23:54 -0700)

t7800: remove whitespace before redirect

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule-config: correct error reporting for invalid... Stefan Beller Tue, 14 Mar 2017 22:14:40 +0000 (15:14 -0700)

submodule-config: correct error reporting for invalid ignore value

As 'var' contains the whole value we get error messages that repeat
the section and key currently:

warning: Invalid parameter 'true' for config option 'submodule.submodule.plugins/hooks.ignore.ignore'

Fix this by only giving the section name in the warning.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

hash.h: move SHA-1 implementation selection into a... brian m. carlson Sat, 11 Mar 2017 22:28:18 +0000 (22:28 +0000)

hash.h: move SHA-1 implementation selection into a header file

Many developers use functionality in their editors that allows for quick
syntax checks, including warning about questionable constructs. This
functionality allows rapid development with fewer errors. However, such
functionality generally does not allow the specification of
project-specific defines or command-line options.

Since the SHA1_HEADER include is not defined in such a case,
developers see spurious errors when using these tools. Furthermore,
there are known implementations of "cc" whose '#include' is unhappy
with this construct.

Instead of using SHA1_HEADER, create a hash.h header and use #if
and #elif to select the desired header. Have the Makefile pass an
appropriate option to help the header select the right implementation to
use.

[jc: make BLK_SHA1 the fallback default as discussed on list,
e.g. <20170314201424.vccij5z2ortq4a4o@sigill.intra.peff.net>; also
remove SHA1_HEADER and SHA1_HEADER_SQ that are no longer used].

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fourth batch after 2.12Junio C Hamano Tue, 14 Mar 2017 22:29:40 +0000 (15:29 -0700)

Fourth batch after 2.12

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

Merge branch 'kn/ref-filter-branch-list'Junio C Hamano Tue, 14 Mar 2017 22:23:20 +0000 (15:23 -0700)

Merge branch 'kn/ref-filter-branch-list'

"git branch --list" takes the "--abbrev" and "--no-abbrev" options
to control the output of the object name in its "-v"(erbose)
output, but a recent update started ignoring them; this fixes it
before the breakage reaches to any released version.

* kn/ref-filter-branch-list:
branch: honor --abbrev/--no-abbrev in --list mode

Merge branch 'jk/push-deadlock-regression-fix'Junio C Hamano Tue, 14 Mar 2017 22:23:20 +0000 (15:23 -0700)

Merge branch 'jk/push-deadlock-regression-fix'

"git push" had a handful of codepaths that could lead to a deadlock
when unexpected error happened, which has been fixed.

* jk/push-deadlock-regression-fix:
send-pack: report signal death of pack-objects
send-pack: read "unpack" status even on pack-objects failure
send-pack: improve unpack-status error messages
send-pack: use skip_prefix for parsing unpack status
send-pack: extract parsing of "unpack" response
receive-pack: fix deadlock when we cannot create tmpdir

Merge branch 'js/travis-32bit-linux'Junio C Hamano Tue, 14 Mar 2017 22:23:20 +0000 (15:23 -0700)

Merge branch 'js/travis-32bit-linux'

Add 32-bit Linux variant to the set of platforms to be tested with
Travis CI.

* js/travis-32bit-linux:
Travis: also test on 32-bit Linux

Merge branch 'ew/http-alternates-as-redirects-warning'Junio C Hamano Tue, 14 Mar 2017 22:23:19 +0000 (15:23 -0700)

Merge branch 'ew/http-alternates-as-redirects-warning'

Recent versions of Git treats http alternates (used in dumb http
transport) just like HTTP redirects and requires the client to
enable following it, due to security concerns. But we forgot to
give a warning when we decide not to honor the alternates.

* ew/http-alternates-as-redirects-warning:
http: release strbuf on disabled alternates
http: inform about alternates-as-redirects behavior

Merge branch 'dp/filter-branch-prune-empty'Junio C Hamano Tue, 14 Mar 2017 22:23:19 +0000 (15:23 -0700)

Merge branch 'dp/filter-branch-prune-empty'

"git filter-branch --prune-empty" drops a single-parent commit that
becomes a no-op, but did not drop a root commit whose tree is empty.

* dp/filter-branch-prune-empty:
p7000: add test for filter-branch with --prune-empty
filter-branch: fix --prune-empty on parentless commits
t7003: ensure --prune-empty removes entire branch when applicable
t7003: ensure --prune-empty can prune root commit

Merge branch 'jt/perf-updates'Junio C Hamano Tue, 14 Mar 2017 22:23:18 +0000 (15:23 -0700)

Merge branch 'jt/perf-updates'

The t/perf performance test suite was not prepared to test not so
old versions of Git, but now it covers versions of Git that are not
so ancient.

* jt/perf-updates:
t/perf: add fallback for pre-bin-wrappers versions of git
t/perf: use $MODERN_GIT for all repo-copying steps
t/perf: export variable used in other blocks

Merge branch 'mm/fetch-show-error-message-on-unadvertis... Junio C Hamano Tue, 14 Mar 2017 22:23:18 +0000 (15:23 -0700)

Merge branch 'mm/fetch-show-error-message-on-unadvertised-object'

"git fetch" that requests a commit by object name, when the other
side does not allow such an request, failed without much
explanation.

* mm/fetch-show-error-message-on-unadvertised-object:
fetch-pack: add specific error for fetching an unadvertised object
fetch_refs_via_pack: call report_unmatched_refs
fetch-pack: move code to report unmatched refs to a function

Merge branch 'jk/interpret-branch-name'Junio C Hamano Tue, 14 Mar 2017 22:23:18 +0000 (15:23 -0700)

Merge branch 'jk/interpret-branch-name'

"git branch @" created refs/heads/@ as a branch, and in general the
code that handled @{-1} and @{upstream} was a bit too loose in
disambiguating.

* jk/interpret-branch-name:
checkout: restrict @-expansions when finding branch
strbuf_check_ref_format(): expand only local branches
branch: restrict @-expansions when deleting
t3204: test git-branch @-expansion corner cases
interpret_branch_name: allow callers to restrict expansions
strbuf_branchname: add docstring
strbuf_branchname: drop return value
interpret_branch_name: move docstring to header file
interpret_branch_name(): handle auto-namelen for @{-1}

Merge branch 'ab/cond-skip-tests'Junio C Hamano Tue, 14 Mar 2017 22:23:17 +0000 (15:23 -0700)

Merge branch 'ab/cond-skip-tests'

A few tests were run conditionally under (rare) conditions where
they cannot be run (like running cvs tests under 'root' account).

* ab/cond-skip-tests:
gitweb tests: skip tests when we don't have Time::HiRes
gitweb tests: change confusing "skip_all" phrasing
cvs tests: skip tests that call "cvs commit" when running as root

setup.c: mention unresolved problemsJohannes Schindelin Mon, 13 Mar 2017 20:12:18 +0000 (21:12 +0100)

setup.c: mention unresolved problems

During the review of the `early-config` patch series, two issues
have been identified that have been with us forever. Mark the
identified problems for later so that we do not forget them.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1309: document cases where we would want early config... Johannes Schindelin Mon, 13 Mar 2017 20:11:26 +0000 (21:11 +0100)

t1309: document cases where we would want early config not to die()

Jeff King came up with a couple examples that demonstrate how the new
read_early_config() that looks harder for the current .git/ directory
could die() in an undesirable way.

Let's add those cases to the test script, to document what we would like
to happen when early config encounters problems.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

setup_git_directory_gently_1(): avoid die()ingJohannes Schindelin Mon, 13 Mar 2017 20:11:22 +0000 (21:11 +0100)

setup_git_directory_gently_1(): avoid die()ing

This function now has a new caller in addition to setup_git_directory():
the newly introduced discover_git_directory(). That function wants to
discover the current .git/ directory, and in case of a corrupted one
simply pretend that there is none to be found.

Example: if a stale .git file exists in the parent directory, and the
user calls `git -p init`, we want Git to simply *not* read any
repository config for the pager (instead of aborting with a message that
the .git file is corrupt).

Let's actually pretend that there was no GIT_DIR to be found in that case
when being called from discover_git_directory(), but keep the previous
behavior (i.e. to die()) for the setup_git_directory() case.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1309: test read_early_config()Johannes Schindelin Mon, 13 Mar 2017 20:11:17 +0000 (21:11 +0100)

t1309: test read_early_config()

So far, we had no explicit tests of that function.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>