gitweb.git
hashmap: allow memihash computation to be continuedJeff Hostetler Wed, 22 Mar 2017 17:14:21 +0000 (17:14 +0000)

hashmap: allow memihash computation to be continued

Add variant of memihash() to allow the hash computation to
be continued. There are times when we compute the hash on
a full path and then the hash on just the path to the parent
directory. This can be expensive on large repositories.

With this, we can hash the parent directory first. And then
continue the computation to include the "/filename".

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

name-hash: specify initial size for istate.dir_hash... Jeff Hostetler Wed, 22 Mar 2017 17:14:20 +0000 (17:14 +0000)

name-hash: specify initial size for istate.dir_hash table

Specify an initial size for the istate.dir_hash HashMap matching
the size of the istate.name_hash.

Previously hashmap_init() was given 0, causing a 64 bucket
hashmap to be created. When working with very large
repositories, this would cause numerous rehash() calls to
realloc and rebalance the hashmap. This is especially true
when the worktree is deep, with many directories containing
a few files.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5615: fix a here-doc syntax errorJunio C Hamano Wed, 22 Mar 2017 19:56:43 +0000 (12:56 -0700)

t5615: fix a here-doc syntax error

This came as part of jk/quote-env-path-list-component and was merged
to 2.11.1 and later.

Noticed-by: Jan Palus <jan.palus@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/describe: introduce --broken flagStefan Beller Tue, 21 Mar 2017 22:57:18 +0000 (15:57 -0700)

builtin/describe: introduce --broken flag

git-describe tells you the version number you're at, or errors out, e.g.
when you run it outside of a repository, which may happen when downloading
a tar ball instead of using git to obtain the source code.

To keep this property of only erroring out, when not in a repository,
severe (submodule) errors must be downgraded to reporting them gently
instead of having git-describe error out completely.

To achieve that a flag '--broken' is introduced, which is in the same
vein as '--dirty' but uses an actual child process to check for dirtiness.
When that child dies unexpectedly, we'll append '-broken' instead of
'-dirty'.

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

t3600: rename test to describe its functionalityStefan Beller Tue, 21 Mar 2017 21:08:02 +0000 (14:08 -0700)

t3600: rename test to describe its functionality

This was an oversight in 55856a35b2 (rm: absorb a submodules git dir
before deletion, 2016-12-27), as the body of the test changed without
adapting the test subject.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.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

bundle: use prefix_filename with bundle pathJeff King Tue, 21 Mar 2017 01:31:27 +0000 (21:31 -0400)

bundle: use prefix_filename with bundle path

We may take the path to a bundle file as an argument, and
need to adjust the filename based on the prefix we
discovered while setting up the git directory. We do so
manually into a fixed-size buffer, but using
prefix_filename() is the normal way.

Besides being more concise, there are two subtle
improvements:

1. The original inserted a "/" between the two paths, even
though the "prefix" argument always has the "/"
appended. That means that:

cd subdir && git bundle verify ../foo.bundle

was looking at (and reporting) subdir//../foo.bundle.
Harmless, but ugly. Using prefix_filename() gets this
right.

2. The original checked for an absolute path by looking
for a leading '/'. It should have been using
is_absolute_path(), which also covers more cases on
Windows (backslashes and dos drive prefixes).

But it's easier still to just pass the name to
prefix_filename(), which handles this case
automatically.

Note that we'll just leak the resulting buffer in the name
of simplicity, since it needs to last through the duration
of the program anyway.

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

prefix_filename: simplify windows #ifdefJeff King Tue, 21 Mar 2017 01:30:41 +0000 (21:30 -0400)

prefix_filename: simplify windows #ifdef

The prefix_filename function used to do an early return when
there was no prefix on non-Windows platforms, but always
allocated on Windows so that it could call convert_slashes().

Now that the function always allocates, we can unify the
logic and make convert_slashes() the only conditional part.

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

prefix_filename: return newly allocated stringJeff King Tue, 21 Mar 2017 01:28:49 +0000 (21:28 -0400)

prefix_filename: return newly allocated string

The prefix_filename() function returns a pointer to static
storage, which makes it easy to use dangerously. We already
fixed one buggy caller in hash-object recently, and the
calls in apply.c are suspicious (I didn't dig in enough to
confirm that there is a bug, but we call the function once
in apply_all_patches() and then again indirectly from
parse_chunk()).

Let's make it harder to get wrong by allocating the return
value. For simplicity, we'll do this even when the prefix is
empty (and we could just return the original file pointer).
That will cause us to allocate sometimes when we wouldn't
otherwise need to, but this function isn't called in
performance critical code-paths (and it already _might_
allocate on any given call, so a caller that cares about
performance is questionable anyway).

The downside is that the callers need to remember to free()
the result to avoid leaking. Most of them already used
xstrdup() on the result, so we know they are OK. The
remainder have been converted to use free() as appropriate.

I considered retaining a prefix_filename_unsafe() for cases
where we know the static lifetime is OK (and handling the
cleanup is awkward). This is only a handful of cases,
though, and it's not worth the mental energy in worrying
about whether the "unsafe" variant is OK to use in any
situation.

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

prefix_filename: drop length parameterJeff King Tue, 21 Mar 2017 01:22:28 +0000 (21:22 -0400)

prefix_filename: drop length parameter

This function takes the prefix as a ptr/len pair, but in
every caller the length is exactly strlen(ptr). Let's
simplify the interface and just take the string. This saves
callers specifying it (and in some cases handling a NULL
prefix).

In a handful of cases we had the length already without
calling strlen, so this is technically slower. But it's not
likely to matter (after all, if the prefix is non-empty
we'll allocate and copy it into a buffer anyway).

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

prefix_filename: move docstring to header fileJeff King Tue, 21 Mar 2017 01:21:27 +0000 (21:21 -0400)

prefix_filename: move docstring to header file

This is a public function, so we should make its
documentation available near the declaration.

While we're at it, we can give a few details about how it
works.

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

hash-object: fix buffer reuse with --path in a subdirectoryJeff King Tue, 21 Mar 2017 01:20:42 +0000 (21:20 -0400)

hash-object: fix buffer reuse with --path in a subdirectory

The hash-object command uses prefix_filename() without
duplicating its return value. Since that function returns a
static buffer, the value is overwritten by subsequent calls.

This can cause incorrect results when we use --path along
with hashing a file by its relative path, both of which need
to call prefix_filename(). We overwrite the filename
computed for --path, effectively ignoring it.

We can fix this by calling xstrdup on the return value. Note
that we don't bother freeing the "vpath" instance, as it
remains valid until the program exit.

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

t1400: use test_when_finished for cleanupKyle Meyer Tue, 21 Mar 2017 00:56:16 +0000 (20:56 -0400)

t1400: use test_when_finished for cleanup

Move cleanup lines that occur after test blocks into
test_when_finished calls within the test bodies. Don't move cleanup
lines that seem to be related to mutiple tests rather than a single
test.

Signed-off-by: Kyle Meyer <kyle@kyleam.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1400: remove a set of unused output filesKyle Meyer Tue, 21 Mar 2017 00:56:15 +0000 (20:56 -0400)

t1400: remove a set of unused output files

This test case redirects stdout and stderr to output files, but,
unlike the other cases of redirection in the t1400 tests, these files
are not examined downstream. Remove the redirection so that the
output is visible when running the tests verbosely.

Signed-off-by: Kyle Meyer <kyle@kyleam.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1400: use test_path_is_* helpersKyle Meyer Tue, 21 Mar 2017 00:56:14 +0000 (20:56 -0400)

t1400: use test_path_is_* helpers

Signed-off-by: Kyle Meyer <kyle@kyleam.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1400: set core.logAllRefUpdates in "logged by touch... Kyle Meyer Tue, 21 Mar 2017 00:56:13 +0000 (20:56 -0400)

t1400: set core.logAllRefUpdates in "logged by touch" tests

A group of update-ref tests verifies that logs are created when either
the log file for the ref already exists or core.logAllRefUpdates is
"true". However, when the default for core.logAllRefUpdates was
changed in 0bee59186 (Enable reflogs by default in any repository with
a working directory., 2006-12-14), the setup for the tests was not
updated. As a result, the "logged by touch" tests would pass even if
the log file did not exist (i.e., if "--create-reflog" was removed
from the first "git update-ref" call).

Update the "logged by touch" tests to disable core.logAllRefUpdates
explicitly so that the behavior does not depend on the default value.
While we're here, update the "logged by config" tests to use
test_config() rather than setting core.logAllRefUpdates to "true"
outside of the tests.

Signed-off-by: Kyle Meyer <kyle@kyleam.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1400: rename test descriptions to be uniqueKyle Meyer Tue, 21 Mar 2017 00:56:12 +0000 (20:56 -0400)

t1400: rename test descriptions to be unique

A few tests share their description with another test. Extend the
descriptions to indicate how the tests differ.

Signed-off-by: Kyle Meyer <kyle@kyleam.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

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>

pickaxe: fix segfault with '-S<...> --pickaxe-regex'SZEDER Gábor Sat, 18 Mar 2017 18:24:08 +0000 (19:24 +0100)

pickaxe: fix segfault with '-S<...> --pickaxe-regex'

'git {log,diff,...} -S<...> --pickaxe-regex' can segfault as a result
of out-of-bounds memory reads.

diffcore-pickaxe.c:contains() looks for all matches of the given regex
in a buffer in a loop, advancing the buffer pointer to the end of the
last match in each iteration. When we switched to REG_STARTEND in
b7d36ffca (regex: use regexec_buf(), 2016-09-21), we started passing
the size of that buffer to the regexp engine, too. Unfortunately,
this buffer size is never updated on subsequent iterations, and as the
buffer pointer advances on each iteration, this "bufptr+bufsize"
points past the end of the buffer. This results in segmentation
fault, if that memory can't be accessed. In case of 'git log' it can
also result in erroneously listed commits, if the memory past the end
of buffer is accessible and happens to contain data matching the
regex.

Reduce the buffer size on each iteration as the buffer pointer is
advanced, thus maintaining the correct end of buffer location.
Furthermore, make sure that the buffer pointer is not dereferenced in
the control flow statements when we already reached the end of the
buffer.

The new test is flaky, I've never seen it fail on my Linux box even
without the fix, but this is expected according to db5dfa3 (regex:
-G<pattern> feeds a non NUL-terminated string to regexec() and fails,
2016-09-21). However, it did fail on Travis CI with the first (and
incomplete) version of the fix, and based on that commit message I
would expect the new test without the fix to fail most of the time on
Windows.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

run-command: fix segfault when cleaning forked async... Jeff King Fri, 17 Mar 2017 23:20:04 +0000 (19:20 -0400)

run-command: fix segfault when cleaning forked async process

Callers of the run-command API may mark a child as
"clean_on_exit"; it gets added to a list and killed when the
main process dies. Since commit 46df6906f
(execv_dashed_external: wait for child on signal death,
2017-01-06), we respect an extra "wait_after_clean" flag,
which we expect to find in the child_process struct.

When Git is built with NO_PTHREADS, we start "struct
async" processes by forking rather than spawning a thread.
The resulting processes get added to the cleanup list but
they don't have a child_process struct, and the cleanup
function ends up dereferencing NULL.

We should notice this case and assume that the processes do
not need to be waited for (i.e., the same behavior they had
before 46df6906f).

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

shortlog: don't set after_subject to an empty stringRené Scharfe Fri, 17 Mar 2017 23:52:28 +0000 (00:52 +0100)

shortlog: don't set after_subject to an empty string

The string after_subject is added to a strbuf by pp_title_line() if
it's not NULL. Adding an empty string has the same effect as not
adding anything, but the latter is easier, so don't bother changing
the context member from NULL to "".

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

tests: make the 'test_pause' helper work in non-verbose... SZEDER Gábor Sat, 18 Mar 2017 16:14:00 +0000 (17:14 +0100)

tests: make the 'test_pause' helper work in non-verbose mode

When the 'test_pause' helper function invokes the shell mid-test, it
explicitly redirects the shell's stdout and stderr to file descriptors
3 and 4, which are the stdout and stderr of the tests (i.e. where they
would be connected anyway without those redirections). These file
descriptors are only attached to the terminal in verbose mode, hence
the restriction of 'test_pause' to work only with '-v'.

Redirect the shell's stdout and stderr to the test environment's
original stdout and stderr, allowing it to work properly even in
non-verbose mode, and the restriction can be lifted.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: create an interactive gdb session with the ... SZEDER Gábor Sat, 18 Mar 2017 16:13:59 +0000 (17:13 +0100)

tests: create an interactive gdb session with the 'debug' helper

The 'debug' test helper is supposed to facilitate debugging by running
a command of the test suite under gdb. Unfortunately, its usefulness
is severely limited, because that gdb session is not interactive,
since the test's, and thus gdb's standard input is redirected from
/dev/null (for a good reason, see 781f76b15 (test-lib: redirect stdin
of tests, 2011-12-15)).

Redirect gdb's standard file descriptors from/to the test
environment's stdin, stdout and stderr in the 'debug' helper, thus
creating an interactive gdb session (even in non-verbose mode), which
is much, much more useful.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision: remove declaration of path_name()René Scharfe Fri, 17 Mar 2017 22:15:03 +0000 (23:15 +0100)

revision: remove declaration of path_name()

The definition of path_name() was removed by 2824e1841 (list-objects:
pass full pathname to callbacks); remove its declaration as well.

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

http-push: don't check return value of lookup_unknown_o... René Scharfe Fri, 17 Mar 2017 22:12:31 +0000 (23:12 +0100)

http-push: don't check return value of lookup_unknown_object()

This function always returns a reference to an object, creating one if
needed, so remove the unnecessary NULL check.

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

receive-pack: simplify run_update_post_hook()René Scharfe Fri, 17 Mar 2017 22:02:13 +0000 (23:02 +0100)

receive-pack: simplify run_update_post_hook()

Instead of counting the arguments to see if there are any and then
building the full command use a single loop and add the hook command
just before the first argument. This reduces duplication and overall
code size.

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

grep: fix builds with with no thread supportBrandon Williams Fri, 17 Mar 2017 18:41:55 +0000 (11:41 -0700)

grep: fix builds with with no thread support

Commit 0281e487fd91 ("grep: optionally recurse into submodules")
added functions grep_submodule() and grep_submodule_launch() which
use "struct work_item" which is defined only when thread support
is available.

The original implementation of grep_submodule() used the "struct
work_item" in order to gain access to a strbuf to store its output which
was to be printed at a later point in time. This differs from how both
grep_file() and grep_sha1() handle their output. This patch eliminates
the reliance on the "struct work_item" and instead opts to use the
output function stored in the output field of the "struct grep_opt"
object directly, making it behave similarly to both grep_file() and
grep_sha1().

Reported-by: Rahul Bedarkar <rahul.bedarkar@imgtec.com>
Signed-off-by: Brandon Williams <bmwill@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@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()
...

grep: set default output methodBrandon Williams Fri, 17 Mar 2017 18:41:54 +0000 (11:41 -0700)

grep: set default output method

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

credential-cache: add tests for XDG functionalityDevin Lehmacher Fri, 17 Mar 2017 12:36:34 +0000 (08:36 -0400)

credential-cache: add tests for XDG functionality

Signed-off-by: Devin Lehmacher <lehmacdj@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

credential-cache: use XDG_CACHE_HOME for socketDevin Lehmacher Fri, 17 Mar 2017 12:36:33 +0000 (08:36 -0400)

credential-cache: use XDG_CACHE_HOME for socket

Make git-credential-cache follow the XDG base path specification by
default. This increases consistency with other applications and helps
keep clutter out of users' home directories.

Check the old socket location, ~/.git-credential-cache/, and use
~/.git-credential-cache/socket if that directory exists rather than
forcing users who have used `git credential-cache` before to migrate to
the new XDG compliant location.
Otherwise use the socket $XDG_CACHE_HOME/git/credential/socket following
XDG base path specification. Use the subdirectory credential/ in case
other files are cached under $XDG_CACHE_HOME/git/ in the future and to
make the socket's purpose clear.

Signed-off-by: Devin Lehmacher <lehmacdj@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: make DC_SHA1 the defaultJunio C Hamano Fri, 17 Mar 2017 17:00:15 +0000 (10:00 -0700)

Makefile: make DC_SHA1 the default

We used to use the SHA1 implementation from the OpenSSL library by
default. As we are trying to be careful against collision attacks
after the recent "shattered" announcement, switch the default to
encourage people to use DC_SHA1 implementation instead. Those who
want to use the implementation from OpenSSL can explicitly ask for
it by OPENSSL_SHA1=YesPlease when running "make".

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

t0013: add a basic sha1 collision detection testJeff King Thu, 16 Mar 2017 22:09:36 +0000 (18:09 -0400)

t0013: add a basic sha1 collision detection test

We don't actually have a Git-object collision, so the best
we can do is to run one of the shattered PDFs through
test-sha1. This should trigger the collision check and die.

In a sense this isn't really checking anything that the
upstream sha1collisiondetection project doesn't cover
already. But it at least makes sure that our build correctly
uses the library.

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

Makefile: add DC_SHA1 knobJeff King Thu, 16 Mar 2017 22:09:12 +0000 (18:09 -0400)

Makefile: add DC_SHA1 knob

This knob lets you use the sha1dc implementation from:

https://github.com/cr-marcstevens/sha1collisiondetection

which can detect certain types of collision attacks (even
when we only see half of the colliding pair). So it
mitigates any attack which consists of getting the "good"
half of a collision into a trusted repository, and then
later replacing it with the "bad" half. The "good" half is
rejected by the victim's version of Git (and even if they
run an old version of Git, any sha1dc-enabled git will
complain loudly if it ever has to interact with the object).

The big downside is that it's slower than either the openssl
or block-sha1 implementations.

Here are some timings based off of linux.git:

- compute sha1 over whole packfile
sha1dc: 3.580s
blk-sha1: 2.046s (-43%)
openssl: 1.335s (-62%)

- rev-list --all --objects
sha1dc: 33.512s
blk-sha1: 33.514s (+0.0%)
openssl: 33.650s (+0.4%)

- git log --no-merges -10000 -p
sha1dc: 8.124s
blk-sha1: 7.986s (-1.6%)
openssl: 8.203s (+0.9%)

- index-pack --verify
sha1dc: 4m19s
blk-sha1: 2m57s (-32%)
openssl: 2m19s (-42%)

So overall the sha1 computation with collision detection is
about 1.75x slower than block-sha1, and 2.7x slower than
sha1. But of course most operations do more than just sha1.
Normal object access isn't really slowed at all (both the
+/- changes there are well within the run-to-run noise); any
changes are drowned out by the other work Git is doing.

The most-affected operation is `index-pack --verify`, which
is essentially just computing the sha1 on every object. This
is similar to the `index-pack` invocation that the receiver
of a push or fetch would perform. So clearly there's some
extra CPU load here.

There will also be some latency for the user, though keep in
mind that such an operation will generally be network bound
(this is about a 1.2GB packfile). Some of that extra CPU is
"free" in the sense that we use it while the pack is
streaming in anyway. But most of it comes during the
delta-resolution phase, after the whole pack has been
received. So we can imagine that for this (quite large)
push, the user might have to wait an extra 100 seconds over
openssl (which is what we use now). If we assume they can
push to us at 20Mbit/s, that's 480s for a 1.2GB pack, which
is only 20% slower.

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

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>

sha1dc: disable safe_hash featureJeff King Thu, 16 Mar 2017 22:08:49 +0000 (18:08 -0400)

sha1dc: disable safe_hash feature

The safe_hash feature is designed to make sha1dc a drop-in
replacement for sha1, where colliding entries will get a
permuted hash to un-collide them. However, since we're
handling the collision case ourselves, this isn't helpful
(and is actually harmful, as it means you get the wrong
object id if you want to show it in a log message).

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

sha1dc: adjust header includes for gitJeff King Thu, 16 Mar 2017 22:08:10 +0000 (18:08 -0400)

sha1dc: adjust header includes for git

We can replace system includes with git-compat-util.h or
cache.h (and should make sure it is included first in all C
files). And we can drop includes from headers entirely, as
every C file should include git-compat-util.h itself.

We will add in new include guards around the header files,
though (otherwise you get into trouble including both
sha1dc/sha1.h and cache.h).

And finally, we'll use the full "sha1dc/" path for including
related files. This isn't strictly necessary, but makes the
expected resolution more obvious.

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

sha1dc: add collision-detecting sha1 implementationJeff King Thu, 16 Mar 2017 22:07:31 +0000 (18:07 -0400)

sha1dc: add collision-detecting sha1 implementation

This is pulled straight from:

https://github.com/cr-marcstevens/sha1collisiondetection

with no modifications yet (though I've pulled in only the
subset of files necessary for Git to use).

This is commit 007905a93c973f55b2daed6585f9f6c23545bf66.

Further updates can be done like:

git checkout -b vendor-sha1dc $this_commit
cp /path/to/sha1dc/{LICENSE.txt,lib/*} sha1dc/
git add -A sha1dc
git commit -m "update sha1dc"

git checkout -b update-sha1dc origin
git merge vendor-sha1dc

Thanks to both Marc and Dan for making the code fit our
needs by doing both optimization work, cutting down on the
object size, and doing some syntactic changes to work better
with git. And to Linus for kicking off the "diet" work that
removed some of the unused code.

The license of the sha1dc code is the MIT license, which is
obviously compatible with the GPLv2 of git.

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

builtin/read-tree: add --recurse-submodules switchStefan Beller Tue, 14 Mar 2017 21:46:42 +0000 (14:46 -0700)

builtin/read-tree: add --recurse-submodules switch

A new known failure mode is introduced[1], which is actually not
a failure but a feature in read-tree. Unlike checkout for which
the recursive submodule tests were originally written, read-tree does
warn about ignored untracked files that would be overwritten.
For the sake of keeping the test library for submodules generic, just
mark the test as a failure.

[1] KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED

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

builtin/checkout: add --recurse-submodules switchStefan Beller Tue, 14 Mar 2017 21:46:41 +0000 (14:46 -0700)

builtin/checkout: add --recurse-submodules switch

This exposes a flag to recurse into submodules
in builtin/checkout making use of the code implemented
in prior patches.

A new failure mode is introduced in the submodule
update library, as the directory/submodule conflict
is not solved in prior patches.

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

entry.c: create submodules when interestingStefan Beller Tue, 14 Mar 2017 21:46:40 +0000 (14:46 -0700)

entry.c: create submodules when interesting

When a submodule is introduced with a new revision
we need to create the submodule in the worktree as well.
As 'submodule_move_head' handles edge cases, all we have
to do is call it from within the function that creates
new files in the working tree for workingtree operations.

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

unpack-trees: check if we can perform the operation... Stefan Beller Tue, 14 Mar 2017 21:46:39 +0000 (14:46 -0700)

unpack-trees: check if we can perform the operation for submodules

In a later patch we'll support submodule entries to be
in sync with the tree in working tree changing commands,
such as checkout or read-tree.

When a new submodule entry changes in the tree, we need to
check if there are conflicts (directory/file conflicts)
for the tree. Add this check for submodules to be
performed before the working tree is touched.

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

unpack-trees: pass old oid to verify_clean_submoduleStefan Beller Tue, 14 Mar 2017 21:46:38 +0000 (14:46 -0700)

unpack-trees: pass old oid to verify_clean_submodule

The check (which uses the old oid) is yet to be implemented, but this part
is just a refactor, so it can go separately first.

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

update submodules: add submodule_move_headStefan Beller Tue, 14 Mar 2017 21:46:37 +0000 (14:46 -0700)

update submodules: add submodule_move_head

In later patches we introduce the options and flag for commands
that modify the working directory, e.g. git-checkout.

This piece of code will be used universally for
all these working tree modifications as it
* supports dry run to answer the question:
"Is it safe to change the submodule to this new state?"
e.g. is it overwriting untracked files or are there local
changes that would be overwritten?
* supports a force flag that can be used for resetting
the tree.

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

submodule.c: get_super_prefix_or_emptyStefan Beller Tue, 14 Mar 2017 21:46:36 +0000 (14:46 -0700)

submodule.c: get_super_prefix_or_empty

In a later patch we need to use the super_prefix, and
in case it is NULL we can just assume it is empty.
Create a helper function for this.

We already have some use cases for this helper function,
convert them, too.

Signed-off-by: Stefan Beller <sbeller@google.com>
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"