gitweb.git
bundle: convert to struct object_idbrian m. carlson Mon, 1 May 2017 02:28:59 +0000 (02:28 +0000)

bundle: convert to struct object_id

Convert the bundle code, plus the sole external user of struct
ref_list_entry, to use struct object_id. Include cache.h from within
bundle.h to provide the definition. Convert some of the hash parsing
code to use parse_oid_hex to avoid needing to hard-code constant values.

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

builtin/prune: convert to struct object_idbrian m. carlson Mon, 1 May 2017 02:28:58 +0000 (02:28 +0000)

builtin/prune: convert to struct object_id

Convert the sole instance of unsigned char [20] to struct object_id.
cmd_prune is a caller of parse_object, which we will convert later.

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

builtin/name-rev: convert to struct object_idbrian m. carlson Mon, 1 May 2017 02:28:57 +0000 (02:28 +0000)

builtin/name-rev: convert to struct object_id

Convert all the uses of unsigned char [20] to struct object_id. Also,
convert some hard-coded integers into constants.

name_rev_line accepts a wide variety of free-form input and only
interprets 40-character hex values, passing through everything else.
Consequently, it is not a good candidate for parse_oid_hex, which is
much stricter.

This change is a prerequisite for converting parse_object.

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

Convert struct cache_tree to use struct object_idbrian m. carlson Mon, 1 May 2017 02:28:56 +0000 (02:28 +0000)

Convert struct cache_tree to use struct object_id

Convert the sha1 member of struct cache_tree to struct object_id by
changing the definition and applying the following semantic patch, plus
the standard object_id transforms:

@@
struct cache_tree E1;
@@
- E1.sha1
+ E1.oid.hash

@@
struct cache_tree *E1;
@@
- E1->sha1
+ E1->oid.hash

Fix up one reference to active_cache_tree which was not automatically
caught by Coccinelle. These changes are prerequisites for converting
parse_object.

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

Clean up outstanding object_id transforms.brian m. carlson Mon, 1 May 2017 02:28:55 +0000 (02:28 +0000)

Clean up outstanding object_id transforms.

The semantic patch for standard object_id transforms found two
outstanding places where we could make a transformation automatically.
Apply these changes.

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

fetch-pack: convert to struct object_idbrian m. carlson Mon, 1 May 2017 02:28:54 +0000 (02:28 +0000)

fetch-pack: convert to struct object_id

Convert all uses of unsigned char [20] to struct object_id. Switch one
use of get_sha1_hex to parse_oid_hex to avoid the need for a constant.
This change is necessary in order to convert parse_object.

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

submodule: refactor logic to determine changed submodulesBrandon Williams Tue, 2 May 2017 01:02:39 +0000 (18:02 -0700)

submodule: refactor logic to determine changed submodules

There are currently two instances (fetch and push) where we want to
determine if submodules have changed given some revision specification.
These two instances don't use the same logic to generate a list of
changed submodules and as a result there is a fair amount of code
duplication.

This patch refactors these two code paths such that they both use the
same logic to generate a list of changed submodules. This also makes it
easier for future callers to be able to reuse this logic as they only
need to create an argv_array with the revision specification to be using
during the revision walk.

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

submodule: improve submodule_has_commits()Brandon Williams Tue, 2 May 2017 01:02:38 +0000 (18:02 -0700)

submodule: improve submodule_has_commits()

Teach 'submodule_has_commits()' to ensure that if a commit exists in a
submodule, that it is also reachable from a ref.

This is a preparatory step prior to merging the logic which checks for
changed submodules when fetching or pushing.

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

l10n: pt_PT: update Portuguese translationVasco Almeida Tue, 25 Apr 2017 14:35:41 +0000 (14:35 +0000)

l10n: pt_PT: update Portuguese translation

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>

Merging a handful of topics before -rc2Junio C Hamano Mon, 1 May 2017 05:16:18 +0000 (22:16 -0700)

Merging a handful of topics before -rc2

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

Merge branch 'sh/rebase-i-reread-todo-after-exec'Junio C Hamano Mon, 1 May 2017 05:14:44 +0000 (14:14 +0900)

Merge branch 'sh/rebase-i-reread-todo-after-exec'

"git rebase -i" failed to re-read the todo list file when the
command specified with the `exec` instruction updated it.

* sh/rebase-i-reread-todo-after-exec:
rebase -i: reread the todo list if `exec` touched it

Merge branch 'ls/travis-stricter-linux32-builds'Junio C Hamano Mon, 1 May 2017 05:14:44 +0000 (14:14 +0900)

Merge branch 'ls/travis-stricter-linux32-builds'

32-bit Linux build on Travis CI uses stricter compilation options.

* ls/travis-stricter-linux32-builds:
travis-ci: set DEVELOPER knob for Linux32 build

Merge branch 'ls/travis-win-fix-status'Junio C Hamano Mon, 1 May 2017 05:14:44 +0000 (14:14 +0900)

Merge branch 'ls/travis-win-fix-status'

Relaying status from Windows build by Travis CI was done with an
unsafe invocation of printf.

* ls/travis-win-fix-status:
travis-ci: printf $STATUS as string

Merge branch 'jk/submodule-init-segv-fix'Junio C Hamano Mon, 1 May 2017 05:14:43 +0000 (14:14 +0900)

Merge branch 'jk/submodule-init-segv-fix'

Fix a segv in 'submodule init' when url is not given for a submodule.

* jk/submodule-init-segv-fix:
submodule_init: die cleanly on submodules without url defined

Merge branch 'jk/prio-queue-avoid-swap-with-self'Junio C Hamano Mon, 1 May 2017 05:14:43 +0000 (14:14 +0900)

Merge branch 'jk/prio-queue-avoid-swap-with-self'

Code clean-up.

* jk/prio-queue-avoid-swap-with-self:
prio_queue_reverse: don't swap elements with themselves

Merge branch 'ab/align-perf-descriptions'Junio C Hamano Mon, 1 May 2017 05:14:42 +0000 (14:14 +0900)

Merge branch 'ab/align-perf-descriptions'

Output from perf tests have been updated to align their titles.

* ab/align-perf-descriptions:
t/perf: correctly align non-ASCII descriptions in output

Merge branch 'jk/complete-checkout-sans-dwim-remote'Junio C Hamano Mon, 1 May 2017 05:14:41 +0000 (14:14 +0900)

Merge branch 'jk/complete-checkout-sans-dwim-remote'

Completion for "git checkout <branch>" that auto-creates the branch
out of a remote tracking branch can now be disabled, as this
completion often gets in the way when completing to checkout an
existing local branch that happens to share the same prefix with
bunch of remote tracking branches.

* jk/complete-checkout-sans-dwim-remote:
completion: optionally disable checkout DWIM

submodule: change string_list changed_submodule_pathsBrandon Williams Fri, 28 Apr 2017 23:54:00 +0000 (16:54 -0700)

submodule: change string_list changed_submodule_paths

Eliminate a call to 'xstrdup()' by changing the string_list
'changed_submodule_paths' to duplicated strings added to it.

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

submodule: remove add_oid_to_argv()Brandon Williams Fri, 28 Apr 2017 23:53:59 +0000 (16:53 -0700)

submodule: remove add_oid_to_argv()

The function 'add_oid_to_argv()' provides the same functionality as
'append_oid_to_argv()'. Remove this duplicate function and instead use
'append_oid_to_argv()' where 'add_oid_to_argv()' was previously used.

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

submodule: rename free_submodules_sha1s()Brandon Williams Fri, 28 Apr 2017 23:53:58 +0000 (16:53 -0700)

submodule: rename free_submodules_sha1s()

Rename 'free_submodules_sha1s()' to 'free_submodules_oids()' since the
function frees a 'struct string_list' which has a 'struct oid_array'
stored in the 'util' field.

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

submodule: rename add_sha1_to_array()Brandon Williams Fri, 28 Apr 2017 23:53:57 +0000 (16:53 -0700)

submodule: rename add_sha1_to_array()

Rename 'add_sha1_to_array()' to 'append_oid_to_array()' to more
accurately describe what the function does, since it handles
'struct object_id' and not sha1 character arrays.

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

tests: rename a test having to do with shallow submodulesÆvar Arnfjörð Bjarmason Wed, 26 Apr 2017 23:12:34 +0000 (23:12 +0000)

tests: rename a test having to do with shallow submodules

Rename the t5614-clone-submodules.sh test to
t5614-clone-submodules-shallow.sh. It's not a general test of
submodules, but of shallow cloning in relation to submodules. Move it
to create another similar t56*-clone-submodules-*.sh test.

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

clone: add a --no-tags option to clone without tagsÆvar Arnfjörð Bjarmason Wed, 26 Apr 2017 23:12:33 +0000 (23:12 +0000)

clone: add a --no-tags option to clone without tags

Add a --no-tags option to clone without fetching any tags.

Without this change there's no easy way to clone a repository without
also fetching its tags.

When supplying --single-branch the primary remote branch will be
cloned, but in addition tags will be followed & retrieved. Now
--no-tags can be added --single-branch to clone a repository without
tags, and which only tracks a single upstream branch.

This option works without --single-branch as well, and will do a
normal clone but not fetch any tags.

Many git commands pay some fixed overhead as a function of the number
of references. E.g. creating ~40k tags in linux.git will cause a
command like `git log -1 >/dev/null` to run in over a second instead
of in a matter of milliseconds, in addition numerous other things will
slow down, e.g. "git log <TAB>" with the bash completion will slowly
show ~40k references instead of 1.

The user might want to avoid all of that overhead to simply use a
repository like that to browse the "master" branch, or something like
a CI tool might want to keep that one branch up-to-date without caring
about any other references.

Without this change the only way of accomplishing this was either by
manually tweaking the config in a fresh repository:

git init git &&
cat >git/.git/config <<EOF &&
[remote "origin"]
url = git@github.com:git/git.git
tagOpt = --no-tags
fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
remote = origin
merge = refs/heads/master
EOF
cd git &&
git pull

Which requires hardcoding the "master" name, which may not be the main
--single-branch would have retrieved, or alternatively by setting
tagOpt=--no-tags right after cloning & deleting any existing tags:

git clone --single-branch git@github.com:git/git.git &&
cd git &&
git config remote.origin.tagOpt --no-tags &&
git tag -l | xargs git tag -d

Which of course was also subtly buggy if --branch was pointed at a
tag, leaving the user in a detached head:

git clone --single-branch --branch v2.12.0 git@github.com:git/git.git &&
cd git &&
git config remote.origin.tagOpt --no-tags &&
git tag -l | xargs git tag -d

Now all this complexity becomes the much simpler:

git clone --single-branch --no-tags git@github.com:git/git.git

Or in the case of cloning a single tag "branch":

git clone --single-branch --branch v2.12.0 --no-tags git@github.com:git/git.git

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

tests: change "cd ... && git fetch" to "cd &&\n\tgit... Ævar Arnfjörð Bjarmason Wed, 26 Apr 2017 23:12:32 +0000 (23:12 +0000)

tests: change "cd ... && git fetch" to "cd &&\n\tgit fetch"

Change occurrences "cd" followed by "fetch" on a single line to be on
two lines.

This is purely a stylistic change pointed out in code review for an
unrelated patch. Change the these tests use so new tests added later
using the more common style don't look out of place.

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

i18n: read-cache: typofixPeter Krefting Sun, 30 Apr 2017 21:32:48 +0000 (23:32 +0200)

i18n: read-cache: typofix

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: remove i18n from tag reflog messageJean-Noel Avila Sun, 30 Apr 2017 21:32:47 +0000 (23:32 +0200)

i18n: remove i18n from tag reflog message

The building of the reflog message is using strbuf, which is not
friendly with internationalization frameworks. No other reflog
messages are translated right now and switching all the messages to
i18n would require a major rework of the way the messages are built.

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

t7400: add !CYGWIN prerequisite to 'add with \\ in... Ramsay Jones Sun, 30 Apr 2017 17:29:30 +0000 (18:29 +0100)

t7400: add !CYGWIN prerequisite to 'add with \\ in path'

Commit cf9e55f494 ("submodule: prevent backslash expantion in submodule
names", 07-04-2017) added a test which creates a git repository with
some backslash characters in the name. On windows, where the backslash
character is a directory separator, it is not possible to create a
repository with the name 'sub\with\backslash'. (The NTFS filesystem would
probably allow it, but the win32 api does not). The MinGW and Git for
Windows versions of git actually create a repository called 'backslash'
in the sub-directory 'sub/with'.

On cygwin, however, due to the slightly schizophrenic treatment of the
backslash character by cygwin-git, this test fails at the 'git init'
stage. The git-init command does not recognise the directory separators
in the input path (eg. is_dir_sep('\\') is false), so it does not
attempt to create the leading directories 'sub/with'. (The call to
mkdir('sub\\with\\backslash') actually does recognise the directory
separators, but fails because the 'sub/with' directory doesn't exist).

In order to suppress the test failure (for now), add the !CYGWIN test
prerequisite.

Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: git-pull.txt use US spelling, fix minor typoRené Genz Sun, 30 Apr 2017 14:54:25 +0000 (16:54 +0200)

doc: git-pull.txt use US spelling, fix minor typo

Signed-off-by: René Genz <liebundartig@freenet.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fix minor typosRené Genz Sun, 30 Apr 2017 15:48:27 +0000 (17:48 +0200)

fix minor typos

Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: René Genz <liebundartig@freenet.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

githooks.txt: clarify push hooks are always executed... Simon Ruderich Sat, 29 Apr 2017 12:28:29 +0000 (14:28 +0200)

githooks.txt: clarify push hooks are always executed in $GIT_DIR

Listing the specific hooks might feel verbose but without it the
reader is left to wonder which hooks are triggered during the
push. Something which is not immediately obvious when only trying
to find out where the hook is executed.

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

doc: update SubmittingPatchesRené Genz Sun, 30 Apr 2017 15:42:21 +0000 (17:42 +0200)

doc: update SubmittingPatches

-use US English spelling
-minor wording change for better readability

Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: René Genz <liebundartig@freenet.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5004: require 64-bit support for big ZIP testsRené Scharfe Sun, 30 Apr 2017 07:53:52 +0000 (09:53 +0200)

t5004: require 64-bit support for big ZIP tests

Check if unzip supports the ZIP64 format and skip the tests that create
big archives otherwise. Also skip the test that archives a big file on
32-bit platforms because the git object systems can't unpack files
bigger than 4GB there.

Reported-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: bg.po: Updated Bulgarian translation (3201t)Alexander Shopov Fri, 10 Mar 2017 08:39:56 +0000 (10:39 +0200)

l10n: bg.po: Updated Bulgarian translation (3201t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>

Merge branch 'master' of https://github.com/vnwildman/gitJiang Xin Sat, 29 Apr 2017 02:01:41 +0000 (10:01 +0800)

Merge branch 'master' of https://github.com/vnwildman/git

* 'master' of https://github.com/vnwildman/git:
l10n: vi.po(3198t): Updated Vietnamese translation for v2.13.0-rc0

status: add color config slots for branch info in ... Stephen Kent Sat, 22 Apr 2017 05:42:02 +0000 (22:42 -0700)

status: add color config slots for branch info in "--short --branch"

Add color config slots to be used in the status short-format when
displaying local and remote tracking branch information.

[jc: rebased on top of Peff's fix to 'git status' and tweaked the
test to check both local and remote-tracking branch output]

Signed-off-by: Stephen Kent <smkent@smkent.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

status: fix missing newline when comment chars are... Jeff King Thu, 27 Apr 2017 09:01:05 +0000 (05:01 -0400)

status: fix missing newline when comment chars are disabled

When git-status shows tracking data for the current branch
in the long format, we try to end the stanza with a blank
line. When status.displayCommentPrefix is true, we call
color_fprintf_ln() to do so. But when it's false, we call
the enigmatic:

fputs("", s->fp);

which does nothing at all! This is a bug from 7d7d68022
(silence a bunch of format-zero-length warnings,
2014-05-04). Prior to that, we called fprintf_ln() with an
empty string. Switching to fputs() meant we needed to
include the "newline in the string, but we didn't.

So you see:

On branch jk/status-tracking-newline
Your branch is ahead of 'origin/master' by 1 commit.
Changes not staged for commit:
modified: foo

Untracked files:
bar

whereas there should be a blank line before the "Changes not
staged" line.

The fix itself is a one-liner. But we never noticed this
bug because t7508 doesn't exercise the ahead/behind code at
all. So let's configure an upstream during the initial
setup, which means that the code will be exercised as part
of all of the various invocations in that script. This makes
the diff rather noisy, but should give us good coverage.

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

archive-zip: set version field for big files correctlyRené Scharfe Thu, 27 Apr 2017 20:25:45 +0000 (22:25 +0200)

archive-zip: set version field for big files correctly

Signal that extractors need to implement spec version 4.5 (or higher)
for files with sizes of 4GB and more. Older unzippers might produce
truncated results otherwise; they should rather refuse to extract.

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

am: shorten ident_split variable name in get_commit_info()Jeff King Thu, 27 Apr 2017 03:28:31 +0000 (23:28 -0400)

am: shorten ident_split variable name in get_commit_info()

The local ident_split variable is often mentioned three
times per line when dealing with its begin/end pointer
pairs. Let's use a shorter name which lets us get rid of
some long lines. Since this is a short self-contained
function, readability doesn't suffer.

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

am: simplify allocations in get_commit_info()Jeff King Thu, 27 Apr 2017 03:27:17 +0000 (23:27 -0400)

am: simplify allocations in get_commit_info()

After we call split_ident_line(), we have several begin/end
pairs for various parts of the ident. We then copy each into
a strbuf to create a single string, and then detach that
string. We can instead skip the strbuf entirely and just
duplicate the strings directly.

This is shorter, and it makes it more obvious that we are
not leaking the strbuf (we were not before, because every
code path either died or hit a strbuf_detach).

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

am: fix commit buffer leak in get_commit_info()Jeff King Thu, 27 Apr 2017 03:25:55 +0000 (23:25 -0400)

am: fix commit buffer leak in get_commit_info()

Calling logmsg_reencode() may allocate a buffer for the
commit message (because we need to load it from disk, or
because it needs re-encoded). We must "unuse" it afterwards
to free it.

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

use uintmax_t for timestampsJohannes Schindelin Wed, 26 Apr 2017 19:29:42 +0000 (21:29 +0200)

use uintmax_t for timestamps

Previously, we used `unsigned long` for timestamps. This was only a good
choice on Linux, where we know implicitly that `unsigned long` is what is
used for `time_t`.

However, we want to use a different data type for timestamps for two
reasons:

- there is nothing that says that `unsigned long` should be the same data
type as `time_t`, and indeed, on 64-bit Windows for example, it is not:
`unsigned long` is 32-bit but `time_t` is 64-bit.

- even on 32-bit Linux, where `unsigned long` (and thereby `time_t`) is
32-bit, we *want* to be able to encode timestamps in Git that are
currently absurdly far in the future, *even if* the system library is
not able to format those timestamps into date strings.

So let's just switch to the maximal integer type available, which should
be at least 64-bit for all practical purposes these days. It certainly
cannot be worse than `unsigned long`, so...

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

date.c: abort if the system time cannot handle one... Johannes Schindelin Wed, 26 Apr 2017 19:29:36 +0000 (21:29 +0200)

date.c: abort if the system time cannot handle one of our timestamps

We are about to switch to a new data type for time stamps that is
definitely not smaller or equal, but larger or equal to time_t.

So before using the system functions to process or format timestamps,
let's make extra certain that they can handle what we feed them.

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

timestamp_t: a new data type for timestampsJohannes Schindelin Wed, 26 Apr 2017 19:29:31 +0000 (21:29 +0200)

timestamp_t: a new data type for timestamps

Git's source code assumes that unsigned long is at least as precise as
time_t. Which is incorrect, and causes a lot of problems, in particular
where unsigned long is only 32-bit (notably on Windows, even in 64-bit
versions).

So let's just use a more appropriate data type instead. In preparation
for this, we introduce the new `timestamp_t` data type.

By necessity, this is a very, very large patch, as it has to replace all
timestamps' data type in one go.

As we will use a data type that is not necessarily identical to `time_t`,
we need to be very careful to use `time_t` whenever we interact with the
system functions, and `timestamp_t` everywhere else.

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

rebase -i: reread the todo list if `exec` touched itStephen Hicks Wed, 26 Apr 2017 19:17:40 +0000 (21:17 +0200)

rebase -i: reread the todo list if `exec` touched it

In the scripted version of the interactive rebase, there was no internal
representation of the todo list; it was re-read before every command.
That allowed the hack that an `exec` command could append (or even
completely rewrite) the todo list.

This hack was broken by the partial conversion of the interactive rebase
to C, and this patch reinstates it.

We also add a small test to verify that this fix does not regress in the
future.

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

travis-ci: set DEVELOPER knob for Linux32 buildLars Schneider Wed, 26 Apr 2017 19:18:57 +0000 (21:18 +0200)

travis-ci: set DEVELOPER knob for Linux32 build

The Linux32 build was not build with our strict compiler settings (e.g.
warnings as errors). Fix this by passing the DEVELOPER environment
variable to the docker container.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis-ci: printf $STATUS as stringLars Schneider Wed, 26 Apr 2017 19:39:33 +0000 (21:39 +0200)

travis-ci: printf $STATUS as string

If the $STATUS variable contains a "%" character then printf will
interpret that as invalid format string. Fix this by formatting $STATUS
as string.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis-ci: check AsciiDoc/AsciiDoctor stderr outputLars Schneider Wed, 26 Apr 2017 19:15:44 +0000 (21:15 +0200)

travis-ci: check AsciiDoc/AsciiDoctor stderr output

`make` does not necessarily fail with an error code if
Asciidoc/AsciiDoctor encounters problems. Anything written to stderr
might be a better indicator for problems.

Ensure that nothing is written to stderr during a documentation build.

The redirects do not work in `sh`, therefore the script uses `bash`.
This shouldn't be a problem as the script is only executed on TravisCI.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sequencer: add newline before adding footersJonathan Tan Wed, 26 Apr 2017 20:50:03 +0000 (13:50 -0700)

sequencer: add newline before adding footers

When encountering a commit message that does not end in a newline,
sequencer does not complete the line before determining if a blank line
should be added. This causes the "(cherry picked..." and sign-off lines
to sometimes appear on the same line as the last line of the commit
message.

This behavior was introduced by commit 967dfd4 ("sequencer: use
trailer's trailer layout", 2016-11-29). However, a revert of that commit
would not resolve this issue completely: prior to that commit, a
conforming footer was deemed to be non-conforming by
has_conforming_footer() if there was no terminating newline, resulting
in both conforming and non-conforming footers being treated the same
when they should not be.

Resolve this issue, both for conforming and non-conforming footers, and
in both do_pick_commit() and append_signoff(), by always adding a
newline to the commit message if it does not end in one before checking
the footer for conformity.

Reported-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1450: avoid use of "sed" on the index, which is a... Jeff Hostetler Tue, 25 Apr 2017 18:41:09 +0000 (18:41 +0000)

t1450: avoid use of "sed" on the index, which is a binary file

The previous step added a path zzzzzzzz to the index, and then used
"sed" to replace this string to yyyyyyyy to create a test case where
the checksum at the end of the file does not match the contents.

Unfortunately, use of "sed" on a non-text file is not portable.
Instead, use a Perl script that seeks to the end and modifies the
last byte of the file (where we _know_ stores the trailing
checksum).

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

repack: accept --threads=<n> and pass it down to pack... Junio C Hamano Wed, 26 Apr 2017 23:09:25 +0000 (08:09 +0900)

repack: accept --threads=<n> and pass it down to pack-objects

We already do so for --window=<n> and --depth=<n>; this will help
when the user wants to force --threads=1 for reproducible testing
without getting affected by racing multiple threads.

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

Git 2.13-rc1 v2.13.0-rc1Junio C Hamano Wed, 26 Apr 2017 06:44:07 +0000 (15:44 +0900)

Git 2.13-rc1

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

Merge branch 'mh/separate-ref-cache'Junio C Hamano Wed, 26 Apr 2017 06:39:13 +0000 (15:39 +0900)

Merge branch 'mh/separate-ref-cache'

The internals of the refs API around the cached refs has been
streamlined.

* mh/separate-ref-cache:
do_for_each_entry_in_dir(): delete function
files_pack_refs(): use reference iteration
commit_packed_refs(): use reference iteration
cache_ref_iterator_begin(): make function smarter
get_loose_ref_cache(): new function
get_loose_ref_dir(): function renamed from get_loose_refs()
do_for_each_entry_in_dir(): eliminate `offset` argument
refs: handle "refs/bisect/" in `loose_fill_ref_dir()`
ref-cache: use a callback function to fill the cache
refs: record the ref_store in ref_cache, not ref_dir
ref-cache: introduce a new type, ref_cache
refs: split `ref_cache` code into separate files
ref-cache: rename `remove_entry()` to `remove_entry_from_dir()`
ref-cache: rename `find_ref()` to `find_ref_entry()`
ref-cache: rename `add_ref()` to `add_ref_entry()`
refs_verify_refname_available(): use function in more places
refs_verify_refname_available(): implement once for all backends
refs_ref_iterator_begin(): new function
refs_read_raw_ref(): new function
get_ref_dir(): don't call read_loose_refs() for "refs/bisect"

Merge branch 'nd/worktree-add-lock'Junio C Hamano Wed, 26 Apr 2017 06:39:12 +0000 (15:39 +0900)

Merge branch 'nd/worktree-add-lock'

Allow to lock a worktree immediately after it's created. This helps
prevent a race between "git worktree add; git worktree lock" and
"git worktree prune".

* nd/worktree-add-lock:
worktree add: add --lock option

Merge branch 'jk/update-links-in-docs'Junio C Hamano Wed, 26 Apr 2017 06:39:11 +0000 (15:39 +0900)

Merge branch 'jk/update-links-in-docs'

Many stale HTTP(s) links have been updated in our documentation.

* jk/update-links-in-docs:
docs/bisect-lk2009: update java code conventions link
docs/bisect-lk2009: update nist report link
docs/archimport: quote sourcecontrol.net reference
gitcore-tutorial: update broken link
doc: replace or.cz gitwiki link with git.wiki.kernel.org
doc: use https links to avoid http redirect

Merge branch 'sf/putty-w-args'Junio C Hamano Wed, 26 Apr 2017 06:39:10 +0000 (15:39 +0900)

Merge branch 'sf/putty-w-args'

Plug a memleak.

* sf/putty-w-args:
connect.c: fix leak in handle_ssh_variant

Merge branch 'ab/completion-push-delete-ref'Junio C Hamano Wed, 26 Apr 2017 06:39:09 +0000 (15:39 +0900)

Merge branch 'ab/completion-push-delete-ref'

The completion script (in contrib/) learned to complete "git push
--delete b<TAB>" to complete branch name to be deleted.

* ab/completion-push-delete-ref:
completion: expand "push --delete <remote> <ref>" for refs on that <remote>

Merge branch 'cc/split-index-config'Junio C Hamano Wed, 26 Apr 2017 06:39:09 +0000 (15:39 +0900)

Merge branch 'cc/split-index-config'

The split-index code configuration code used an unsafe git_path()
function without copying its result out.

* cc/split-index-config:
read-cache: avoid using git_path() in freshen_shared_index()

Merge branch 'jk/war-on-git-path'Junio C Hamano Wed, 26 Apr 2017 06:39:08 +0000 (15:39 +0900)

Merge branch 'jk/war-on-git-path'

While handy, "git_path()" is a dangerous function to use as a
callsite that uses it safely one day can be broken by changes
to other code that calls it. Reduction of its use continues.

* jk/war-on-git-path:
am: drop "dir" parameter from am_state_init
replace strbuf_addstr(git_path()) with git_path_buf()
replace xstrdup(git_path(...)) with git_pathdup(...)
use git_path_* helper functions
branch: add edit_description() helper
bisect: add git_path_bisect_terms helper

Merge branch 'jh/add-index-entry-optim'Junio C Hamano Wed, 26 Apr 2017 06:39:07 +0000 (15:39 +0900)

Merge branch 'jh/add-index-entry-optim'

"git checkout" that handles a lot of paths has been optimized by
reducing the number of unnecessary checks of paths in the
has_dir_name() function.

* jh/add-index-entry-optim:
read-cache: speed up has_dir_name (part 2)
read-cache: speed up has_dir_name (part 1)
read-cache: speed up add_index_entry during checkout
p0006-read-tree-checkout: perf test to time read-tree
read-cache: add strcmp_offset function

Merge branch 'ss/submodule-shallow-doc'Junio C Hamano Wed, 26 Apr 2017 06:39:07 +0000 (15:39 +0900)

Merge branch 'ss/submodule-shallow-doc'

Doc update.

* ss/submodule-shallow-doc:
gitmodules: clarify what history depth a shallow clone has

Merge branch 'ss/gitmodules-ignore-doc'Junio C Hamano Wed, 26 Apr 2017 06:39:06 +0000 (15:39 +0900)

Merge branch 'ss/gitmodules-ignore-doc'

Doc update.

* ss/gitmodules-ignore-doc:
gitmodules: clarify the ignore option values

Merge branch 'nd/conditional-config-in-early-config'Junio C Hamano Wed, 26 Apr 2017 06:39:05 +0000 (15:39 +0900)

Merge branch 'nd/conditional-config-in-early-config'

The recently introduced conditional inclusion of configuration did
not work well when early-config mechanism was involved.

* nd/conditional-config-in-early-config:
config: correct file reading order in read_early_config()
config: handle conditional include when $GIT_DIR is not set up
config: prepare to pass more info in git_config_with_options()

Merge branch 'ab/push-cas-doc-n-test'Junio C Hamano Wed, 26 Apr 2017 06:39:05 +0000 (15:39 +0900)

Merge branch 'ab/push-cas-doc-n-test'

Doc update.

* ab/push-cas-doc-n-test:
push: document & test --force-with-lease with multiple remotes

Merge branch 'ls/travis-coccicheck'Junio C Hamano Wed, 26 Apr 2017 06:39:04 +0000 (15:39 +0900)

Merge branch 'ls/travis-coccicheck'

Travis CI learns to run coccicheck.

* ls/travis-coccicheck:
travis-ci: add static analysis build job to run coccicheck

Merge branch 'ps/pathspec-empty-prefix-origin'Junio C Hamano Wed, 26 Apr 2017 06:39:03 +0000 (15:39 +0900)

Merge branch 'ps/pathspec-empty-prefix-origin'

A recent update broke "git add -p ../foo" from a subdirectory.

* ps/pathspec-empty-prefix-origin:
pathspec: honor `PATHSPEC_PREFIX_ORIGIN` with empty prefix

Merge branch 'pc/t2027-git-to-pipe-cleanup'Junio C Hamano Wed, 26 Apr 2017 06:39:02 +0000 (15:39 +0900)

Merge branch 'pc/t2027-git-to-pipe-cleanup'

Having a git command on the upstream side of a pipe in a test
script will hide the exit status from the command, which may cause
us to fail to notice a breakage; rewrite tests in a script to avoid
this issue.

* pc/t2027-git-to-pipe-cleanup:
t2027: avoid using pipes

Merge branch 'gb/rebase-signoff'Junio C Hamano Wed, 26 Apr 2017 06:39:01 +0000 (15:39 +0900)

Merge branch 'gb/rebase-signoff'

"git rebase" learns "--signoff" option.

* gb/rebase-signoff:
rebase: pass --[no-]signoff option to git am
builtin/am: fold am_signoff() into am_append_signoff()
builtin/am: honor --signoff also when --rebasing

run-command: restrict PATH search to executable filesBrandon Williams Tue, 25 Apr 2017 23:47:00 +0000 (16:47 -0700)

run-command: restrict PATH search to executable files

In some situations run-command will incorrectly try (and fail) to
execute a directory instead of an executable file. This was observed by
having a directory called "ssh" in $PATH before the real ssh and trying
to use ssh protoccol, reslting in the following:

$ git ls-remote ssh://url
fatal: cannot exec 'ssh': Permission denied

It ends up being worse and run-command will even try to execute a
non-executable file if it preceeds the executable version of a file on
the PATH. For example, if PATH=~/bin1:~/bin2:~/bin3 and there exists a
directory 'git-hello' in 'bin1', a non-executable file 'git-hello' in
bin2 and an executable file 'git-hello' (which prints "Hello World!") in
bin3 the following will occur:

$ git hello
fatal: cannot exec 'git-hello': Permission denied

This is due to only checking 'access()' when locating an executable in
PATH, which doesn't distinguish between files and directories. Instead
use 'is_executable()' which check that the path is to a regular,
executable file. Now run-command won't try to execute the directory or
non-executable file 'git-hello':

$ git hello
Hello World!

which matches what execvp(3) would have done when asked to execute
git-hello with such a $PATH.

Reported-by: Brian Hatfield <bhatfield@google.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>

run-command: expose is_executable functionBrandon Williams Tue, 25 Apr 2017 23:46:59 +0000 (16:46 -0700)

run-command: expose is_executable function

Move the logic for 'is_executable()' from help.c to run_command.c and
expose it so that callers from outside help.c can access the function.
This is to enable run-command to be able to query if a file is
executable in a future patch.

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

l10n: vi.po(3198t): Updated Vietnamese translation... Tran Ngoc Quan Tue, 25 Apr 2017 08:09:06 +0000 (15:09 +0700)

l10n: vi.po(3198t): Updated Vietnamese translation for v2.13.0-rc0

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>

test-lib: retire $remove_trash variableJunio C Hamano Mon, 24 Apr 2017 00:15:09 +0000 (17:15 -0700)

test-lib: retire $remove_trash variable

The convention "$remove_trash is set to the trash directory that is
used during the test, so that it will be removed at the end, but
under --debug option we set the varilable to empty string to
preserve the directory" made sense back when it was introduced, as
there was no $TRASH_DIRECTORY variable. These days, since no tests
looks at the variable, it is obscure and even risks that by mistake
the variable gets used for something else (e.g. remove_trash=yes)
and cause us misbehave. Worse yet, remove_trash was not initialized
to an empty string at the beginning, so a stray environment variable
the user has could have affected the logic when "--debug" is in use.

Rewrite the clean-up sequence in test_done helper to explicitly
check the $debug condition and remove the trash directory using
the $TRASH_DIRECTORY variable.

Note that "go to the directory one level above the trash and then
remove it" is kept and this is deliverate; test_at_end_hook_ will
keep running from the expected location, and also some platforms may
not like a directory that is serving as the $cwd of a still-active
process removed.

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

test-lib.sh: do not barf under --debug at the end of... Junio C Hamano Tue, 25 Apr 2017 06:39:47 +0000 (23:39 -0700)

test-lib.sh: do not barf under --debug at the end of the test

The original did "does $remove_trash exist? Then go one level above
and remove it". There was no problem under "--debug", where
the variable is left empty, as the first "test -d $remove_trash" would
have said "No, it doesn't".

With the check implemented in the previous step, we'd always get an
error under "--debug".

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

archive-zip: support files bigger than 4GBRené Scharfe Mon, 24 Apr 2017 17:33:34 +0000 (19:33 +0200)

archive-zip: support files bigger than 4GB

Write a zip64 extended information extra field for big files as part of
their local headers and as part of their central directory headers.
Also write a zip64 version of the data descriptor in that case.

If we're streaming then we don't know the compressed size at the time we
write the header. Deflate can end up making a file bigger instead of
smaller if we're unlucky. Write a local zip64 header already for files
with a size of 2GB or more in this case to be on the safe side.

Both sizes need to be included in the local zip64 header, but the extra
field for the directory must only contain 64-bit equivalents for 32-bit
values of 0xffffffff.

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

archive-zip: support archives bigger than 4GBRené Scharfe Mon, 24 Apr 2017 17:32:36 +0000 (19:32 +0200)

archive-zip: support archives bigger than 4GB

Add a zip64 extended information extra field to the central directory
and emit the zip64 end of central directory records as well as locator
if the offset of an entry within the archive exceeds 4GB.

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

archive-zip: write ZIP dir entry directly to strbufRené Scharfe Mon, 24 Apr 2017 17:31:44 +0000 (19:31 +0200)

archive-zip: write ZIP dir entry directly to strbuf

Write all fields of the ZIP directory record for an archive entry
in the right order directly into the strbuf instead of taking a detour
through a struct. Do that at end, when we have all necessary data like
checksum and compressed size. The fields are documented just as well,
the code becomes shorter and we save an extra copy.

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

archive-zip: use strbuf for ZIP directoryRené Scharfe Mon, 24 Apr 2017 17:30:49 +0000 (19:30 +0200)

archive-zip: use strbuf for ZIP directory

Keep the ZIP central directory, which is written after all archive
entries, in a strbuf instead of a custom-managed buffer. It contains
binary data, so we can't (and don't want to) use the full range of
strbuf functions and we don't need the terminating NUL, but the result
is shorter and simpler code.

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

archive-zip: add tests for big ZIP archivesRené Scharfe Mon, 24 Apr 2017 17:29:53 +0000 (19:29 +0200)

archive-zip: add tests for big ZIP archives

Test the creation of ZIP archives bigger than 4GB and containing files
bigger than 4GB. They are marked as EXPENSIVE because they take quite a
while and because the first one needs a bit more than 4GB of disk space
to store the resulting archive.

The big archive in the first test is made up of a tree containing
thousands of copies of a small file. Yet the test has to write out the
full archive because unzip doesn't offer a way to read from stdin.

The big file in the second test is provided as a zipped pack file to
avoid writing another 4GB file to disk and then adding it.

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

refs: kill set_worktree_head_symref()Nguyễn Thái Ngọc Duy Mon, 24 Apr 2017 10:01:24 +0000 (17:01 +0700)

refs: kill set_worktree_head_symref()

70999e9cec (branch -m: update all per-worktree HEADs - 2016-03-27)
added this function in order to update HEADs of all relevant
worktrees, when a branch is renamed.

It, as a public ref api, kind of breaks abstraction when it uses
internal functions of files backend. With the introduction of
refs_create_symref(), we can move back pretty close to the code before
70999e9cec, where create_symref() was used for updating HEAD.

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

worktree.c: kill parse_ref() in favor of refs_resolve_r... Nguyễn Thái Ngọc Duy Mon, 24 Apr 2017 10:01:23 +0000 (17:01 +0700)

worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()

The manual parsing code is replaced with a call to refs_resolve_ref_unsafe().
The manual parsing code must die because only refs/files-backend.c
should do that.

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

refs: introduce get_worktree_ref_store()Nguyễn Thái Ngọc Duy Mon, 24 Apr 2017 10:01:22 +0000 (17:01 +0700)

refs: introduce get_worktree_ref_store()

files-backend at this point is still aware of the per-repo/worktree
separation in refs, so it can handle a linked worktree.

Some refs operations are known not working when current files-backend is
used in a linked worktree (e.g. reflog). Tests will be written when
refs_* functions start to be called with worktree backend to verify that
they work as expected.

Note: accessing a worktree of a submodule remains unaddressed. Perhaps
after get_worktrees() can access submodule (or rather a new function
get_submodule_worktrees(), that lists worktrees of a submodule), we can
update this function to work with submodules as well.

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

refs: add REFS_STORE_ALL_CAPSNguyễn Thái Ngọc Duy Mon, 24 Apr 2017 10:01:21 +0000 (17:01 +0700)

refs: add REFS_STORE_ALL_CAPS

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

prio_queue_reverse: don't swap elements with themselvesJeff King Mon, 24 Apr 2017 11:49:20 +0000 (07:49 -0400)

prio_queue_reverse: don't swap elements with themselves

Our array-reverse algorithm does the usual "walk from both
ends, swapping elements". We can quit when the two indices
are equal, since:

1. Swapping an element with itself is a noop.

2. If i and j are equal, then in the next iteration i is
guaranteed to be bigge than j, and we will exit the
loop.

So exiting the loop on equality is slightly more efficient.
And more importantly, the new SWAP() macro does not expect
to handle noop swaps; it will call memcpy() with the same src
and dst pointers in this case. It's unclear whether that
causes a problem on any platforms by violating the
"overlapping memory" constraint of memcpy, but it does cause
valgrind to complain.

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

submodule_init: die cleanly on submodules without url... Jeff King Tue, 25 Apr 2017 00:57:47 +0000 (20:57 -0400)

submodule_init: die cleanly on submodules without url defined

When we init a submodule, we try to die when it has no URL
defined:

url = xstrdup(sub->url);
if (!url)
die(...);

But that's clearly nonsense. xstrdup() will never return
NULL, and if sub->url is NULL, we'll segfault.

These two bits of code need to be flipped, so we check
sub->url before looking at it.

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

Getting ready for -rc1Junio C Hamano Mon, 24 Apr 2017 05:08:33 +0000 (22:08 -0700)

Getting ready for -rc1

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

Merge branch 'dt/xgethostname-nul-termination'Junio C Hamano Mon, 24 Apr 2017 05:07:57 +0000 (22:07 -0700)

Merge branch 'dt/xgethostname-nul-termination'

gethostname(2) may not NUL terminate the buffer if hostname does
not fit; unfortunately there is no easy way to see if our buffer
was too small, but at least this will make sure we will not end up
using garbage past the end of the buffer.

* dt/xgethostname-nul-termination:
xgethostname: handle long hostnames
use HOST_NAME_MAX to size buffers for gethostname(2)

Merge branch 'jk/ls-files-recurse-submodules-fix'Junio C Hamano Mon, 24 Apr 2017 05:07:57 +0000 (22:07 -0700)

Merge branch 'jk/ls-files-recurse-submodules-fix'

"ls-files --recurse-submodules" did not quite work well in a
project with nested submodules.

* jk/ls-files-recurse-submodules-fix:
ls-files: fix path used when recursing into submodules
ls-files: fix recurse-submodules with nested submodules

Merge branch 'rs/misc-cppcheck-fixes'Junio C Hamano Mon, 24 Apr 2017 05:07:56 +0000 (22:07 -0700)

Merge branch 'rs/misc-cppcheck-fixes'

Various small fixes.

* rs/misc-cppcheck-fixes:
server-info: avoid calling fclose(3) twice in update_info_file()
files_for_each_reflog_ent_reverse(): close stream and free strbuf on error
am: close stream on error, but not stdin

Merge branch 'jk/snprintf-cleanups'Junio C Hamano Mon, 24 Apr 2017 05:07:56 +0000 (22:07 -0700)

Merge branch 'jk/snprintf-cleanups'

Hotfix for a topic that is already in 'master'.

* jk/snprintf-cleanups:
replace: plug a memory leak

Merge branch 'xy/format-patch-base'Junio C Hamano Mon, 24 Apr 2017 05:07:55 +0000 (22:07 -0700)

Merge branch 'xy/format-patch-base'

Doc cleanup.

* xy/format-patch-base:
doc: trivial typo in git-format-patch.txt

Merge branch 'sb/checkout-recurse-submodules'Junio C Hamano Mon, 24 Apr 2017 05:07:54 +0000 (22:07 -0700)

Merge branch 'sb/checkout-recurse-submodules'

Code cleanup.

* sb/checkout-recurse-submodules:
submodule: remove a superfluous second check for the "new" variable

Merge branch 'jt/fetch-pack-error-reporting'Junio C Hamano Mon, 24 Apr 2017 05:07:53 +0000 (22:07 -0700)

Merge branch 'jt/fetch-pack-error-reporting'

"git fetch-pack" was not prepared to accept ERR packet that the
upload-pack can send with a human-readable error message. It
showed the packet contents with ERR prefix, so there was no data
loss, but it was redundant to say "ERR" in an error message.

* jt/fetch-pack-error-reporting:
fetch-pack: show clearer error message upon ERR

Merge branch 'km/t1400-modernization'Junio C Hamano Mon, 24 Apr 2017 05:07:52 +0000 (22:07 -0700)

Merge branch 'km/t1400-modernization'

Code cleanup.

* km/t1400-modernization:
t1400: use consistent style for test_expect_success calls

Merge branch 'jk/quarantine-received-objects'Junio C Hamano Mon, 24 Apr 2017 05:07:51 +0000 (22:07 -0700)

Merge branch 'jk/quarantine-received-objects'

Add finishing touches to a recent topic.

* jk/quarantine-received-objects:
refs: reject ref updates while GIT_QUARANTINE_PATH is set
receive-pack: document user-visible quarantine effects
receive-pack: drop tmp_objdir_env from run_update_hook

Merge branch 'jk/loose-object-fsck'Junio C Hamano Mon, 24 Apr 2017 05:07:50 +0000 (22:07 -0700)

Merge branch 'jk/loose-object-fsck'

Code cleanup.

* jk/loose-object-fsck:
sha1_file: remove an used fd variable

Merge branch 'bw/submodule-with-bs-path'Junio C Hamano Mon, 24 Apr 2017 05:07:50 +0000 (22:07 -0700)

Merge branch 'bw/submodule-with-bs-path'

"git submodule" script does not work well with strange pathnames.
Protect it from a path with slashes in them, at least.

* bw/submodule-with-bs-path:
submodule: prevent backslash expantion in submodule names

Merge branch 'jh/verify-index-checksum-only-in-fsck'Junio C Hamano Mon, 24 Apr 2017 05:07:49 +0000 (22:07 -0700)

Merge branch 'jh/verify-index-checksum-only-in-fsck'

The index file has a trailing SHA-1 checksum to detect file
corruption, and historically we checked it every time the index
file is used. Omit the validation during normal use, and instead
verify only in "git fsck".

* jh/verify-index-checksum-only-in-fsck:
read-cache: force_verify_index_checksum

Merge branch 'jh/unpack-trees-micro-optim'Junio C Hamano Mon, 24 Apr 2017 05:07:48 +0000 (22:07 -0700)

Merge branch 'jh/unpack-trees-micro-optim'

In a 2- and 3-way merge of trees, more than one source trees often
end up sharing an identical subtree; optimize by not reading the
same tree multiple times in such a case.

* jh/unpack-trees-micro-optim:
unpack-trees: avoid duplicate ODB lookups during checkout

Merge branch 'jh/string-list-micro-optim'Junio C Hamano Mon, 24 Apr 2017 05:07:47 +0000 (22:07 -0700)

Merge branch 'jh/string-list-micro-optim'

The string-list API used a custom reallocation strategy that was
very inefficient, instead of using the usual ALLOC_GROW() macro,
which has been fixed.

* jh/string-list-micro-optim:
string-list: use ALLOC_GROW macro when reallocing string_list

Merge branch 'nd/conditional-config-include'Junio C Hamano Mon, 24 Apr 2017 05:07:46 +0000 (22:07 -0700)

Merge branch 'nd/conditional-config-include'

$GIT_DIR may in some cases be normalized with all symlinks resolved
while "gitdir" path expansion in the pattern does not receive the
same treatment, leading to incorrect mismatch. This has been fixed.

* nd/conditional-config-include:
config: resolve symlinks in conditional include's patterns
path.c: and an option to call real_path() in expand_user_path()

Merge branch 'dt/http-postbuffer-can-be-large'Junio C Hamano Mon, 24 Apr 2017 05:07:45 +0000 (22:07 -0700)

Merge branch 'dt/http-postbuffer-can-be-large'

Allow the http.postbuffer configuration variable to be set to a
size that can be expressed in size_t, which can be larger than
ulong on some platforms.

* dt/http-postbuffer-can-be-large:
http.postbuffer: allow full range of ssize_t values