git/git.git
5 years agoMerge branch 'as/subtree-with-spaces' into maint
Junio C Hamano [Fri, 11 Dec 2015 19:14:11 +0000 (11:14 -0800)]
Merge branch 'as/subtree-with-spaces' into maint

Update "git subtree" (in contrib/) so that it can take whitespaces
in the pathnames, not only in the in-tree pathname but the name of
the directory that the repository is in.

* as/subtree-with-spaces:
  contrib/subtree: respect spaces in a repository path
  t7900-subtree: test the "space in a subdirectory name" case

5 years agoMerge branch 'jk/test-lint-forbid-when-finished-in-subshell' into maint
Junio C Hamano [Fri, 11 Dec 2015 19:14:09 +0000 (11:14 -0800)]
Merge branch 'jk/test-lint-forbid-when-finished-in-subshell' into maint

Because "test_when_finished" in our test framework queues the
clean-up tasks to be done in a shell variable, it should not be
used inside a subshell.  Add a mechanism to allow 'bash' to catch
such uses, and fix the ones that were found.

* jk/test-lint-forbid-when-finished-in-subshell:
  test-lib-functions: detect test_when_finished in subshell
  t7800: don't use test_config in a subshell
  test-lib-functions: support "test_config -C <dir> ..."
  t5801: don't use test_when_finished in a subshell
  t7610: don't use test_config in a subshell

5 years agoDocumentation/git-update-index: add missing opts to synopsis
Christian Couder [Wed, 25 Nov 2015 09:30:02 +0000 (10:30 +0100)]
Documentation/git-update-index: add missing opts to synopsis

Split index related options should appear in the 'SYNOPSIS'
section.

These options are already documented in the 'OPTIONS' section.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoGit 2.6.4 v2.6.4
Junio C Hamano [Tue, 8 Dec 2015 22:07:30 +0000 (14:07 -0800)]
Git 2.6.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'rs/status-detached-head-memcmp' into maint
Junio C Hamano [Tue, 8 Dec 2015 22:11:32 +0000 (14:11 -0800)]
Merge branch 'rs/status-detached-head-memcmp' into maint

Fix some string-matching corner cases when digging in the reflog for
"git status".

* rs/status-detached-head-memcmp:
  wt-status: correct and simplify check for detached HEAD

5 years agoMerge branch 'ad/sha1-update-chunked' into maint
Junio C Hamano [Tue, 8 Dec 2015 22:05:03 +0000 (14:05 -0800)]
Merge branch 'ad/sha1-update-chunked' into maint

Apple's common crypto implementation of SHA1_Update() does not take
more than 4GB at a time, and we now have a compile-time workaround
for it.

* ad/sha1-update-chunked:
  sha1: allow limiting the size of the data passed to SHA1_Update()
  sha1: provide another level of indirection for the SHA-1 functions

5 years agoMerge branch 'sg/bash-prompt-dirty-orphan' into maint
Junio C Hamano [Tue, 8 Dec 2015 22:05:02 +0000 (14:05 -0800)]
Merge branch 'sg/bash-prompt-dirty-orphan' into maint

Produce correct "dirty" marker for shell prompts, even when we
are on an orphan or an unborn branch.

* sg/bash-prompt-dirty-orphan:
  bash prompt: indicate dirty index even on orphan branches
  bash prompt: remove a redundant 'git diff' option
  bash prompt: test dirty index and worktree while on an orphan branch

5 years agoMerge branch 'jk/interpret-trailers-outside-a-repository' into maint
Junio C Hamano [Tue, 8 Dec 2015 22:05:02 +0000 (14:05 -0800)]
Merge branch 'jk/interpret-trailers-outside-a-repository' into maint

Allow "git interpret-trailers" to run outside of a Git repository.

* jk/interpret-trailers-outside-a-repository:
  interpret-trailers: allow running outside a repository

5 years agoMerge branch 'jk/rebase-no-autostash' into maint
Junio C Hamano [Tue, 8 Dec 2015 22:05:00 +0000 (14:05 -0800)]
Merge branch 'jk/rebase-no-autostash' into maint

There was no way to defeat a configured rebase.autostash variable
from the command line, as "git rebase --no-autostash" was missing.

* jk/rebase-no-autostash:
  Documentation/git-rebase: fix --no-autostash formatting
  rebase: support --no-autostash

5 years agoPrepare for 2.6.4
Junio C Hamano [Fri, 4 Dec 2015 19:39:19 +0000 (11:39 -0800)]
Prepare for 2.6.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'da/difftool' into maint
Junio C Hamano [Fri, 4 Dec 2015 19:34:24 +0000 (11:34 -0800)]
Merge branch 'da/difftool' into maint

The code to prepare the working tree side of temporary directory
for the "dir-diff" feature forgot that symbolic links need not be
copied (or symlinked) to the temporary area, as the code already
special cases and overwrites them.  Besides, it was wrong to try
computing the object name of the target of symbolic link, which may
not even exist or may be a directory.

* da/difftool:
  difftool: ignore symbolic links in use_wt_file

5 years agoMerge branch 'dk/gc-idx-wo-pack' into maint
Junio C Hamano [Fri, 4 Dec 2015 19:33:07 +0000 (11:33 -0800)]
Merge branch 'dk/gc-idx-wo-pack' into maint

Having a leftover .idx file without corresponding .pack file in
the repository hurts performance; "git gc" learned to prune them.

We may want to do the same for .bitmap (and notice but not prune
.keep) without corresponding .pack, but that can be a separate
topic.

* dk/gc-idx-wo-pack:
  gc: remove garbage .idx files from pack dir
  t5304: test cleaning pack garbage
  prepare_packed_git(): refactor garbage reporting in pack directory

5 years agoMerge branch 'eg/p4-submit-catch-failure' into maint
Jeff King [Tue, 1 Dec 2015 22:24:20 +0000 (17:24 -0500)]
Merge branch 'eg/p4-submit-catch-failure' into maint

Just like the working tree is cleaned up when the user cancelled
submission in P4Submit.applyCommit(), clean up the mess if "p4
submit" fails.

* eg/p4-submit-catch-failure:
  git-p4: clean up after p4 submit failure

5 years agoMerge branch 'dk/check-ignore-docs' into maint
Jeff King [Tue, 1 Dec 2015 22:21:31 +0000 (17:21 -0500)]
Merge branch 'dk/check-ignore-docs' into maint

Documentation clarification for "check-ignore" without "--verbose".

* dk/check-ignore-docs:
  check-ignore: correct documentation about output

5 years agoMerge branch 'ld/p4-detached-head' into maint
Jeff King [Tue, 1 Dec 2015 22:21:29 +0000 (17:21 -0500)]
Merge branch 'ld/p4-detached-head' into maint

Make git-p4 work on a detached head.

* ld/p4-detached-head:
  git-p4: work with a detached head
  git-p4: add option to system() to return subshell status
  git-p4: add failing test for submit from detached head

5 years agoMerge branch 'sg/filter-branch-dwim-ambiguity' into maint
Jeff King [Tue, 1 Dec 2015 22:21:17 +0000 (17:21 -0500)]
Merge branch 'sg/filter-branch-dwim-ambiguity' into maint

Fix for a corner case in filter-branch.

* sg/filter-branch-dwim-ambiguity:
  filter-branch: deal with object name vs. pathname ambiguity in tree-filter

5 years agoMerge branch 'mg/doc-word-diff-example' into maint
Jeff King [Tue, 1 Dec 2015 22:21:11 +0000 (17:21 -0500)]
Merge branch 'mg/doc-word-diff-example' into maint

* mg/doc-word-diff-example:
  Documentation/diff: give --word-diff-regex=. example

5 years agoMerge branch 'cb/ssl-config-pathnames' into maint
Jeff King [Tue, 1 Dec 2015 22:21:01 +0000 (17:21 -0500)]
Merge branch 'cb/ssl-config-pathnames' into maint

Allow tilde-expansion in some http config variables.

* cb/ssl-config-pathnames:
  http: treat config options sslCAPath and sslCAInfo as paths

5 years agoMerge branch 'dk/t5813-unc-paths' into maint
Jeff King [Tue, 1 Dec 2015 22:20:52 +0000 (17:20 -0500)]
Merge branch 'dk/t5813-unc-paths' into maint

Test portability fix for a topic in v2.6.1.

* dk/t5813-unc-paths:
  t5813: avoid creating urls that break on cygwin

5 years agoMerge branch 'dk/rerere-train-quoting' into maint
Jeff King [Tue, 1 Dec 2015 22:20:46 +0000 (17:20 -0500)]
Merge branch 'dk/rerere-train-quoting' into maint

Fix shell quoting in contrib script.

* dk/rerere-train-quoting:
  Escape Git's exec path in contrib/rerere-train.sh script

5 years agoMerge branch 'cb/hook-sigpipe' into maint
Jeff King [Tue, 1 Dec 2015 22:19:52 +0000 (17:19 -0500)]
Merge branch 'cb/hook-sigpipe' into maint

We now consistently allow all hooks to ignore their standard input,
rather than having git complain of SIGPIPE.

* cb/hook-sigpipe:
  allow hooks to ignore their standard input stream

5 years agoMerge branch 'fm/shell-path-whitespace' into maint
Jeff King [Tue, 1 Dec 2015 22:19:37 +0000 (17:19 -0500)]
Merge branch 'fm/shell-path-whitespace' into maint

Portability fix for Windows, which may rewrite $SHELL variable using
non-POSIX paths.

* fm/shell-path-whitespace:
  rebase-i-exec: Allow space in SHELL_PATH

5 years agoMerge branch 'ar/doc-env-variable-format' into maint
Jeff King [Tue, 1 Dec 2015 22:19:33 +0000 (17:19 -0500)]
Merge branch 'ar/doc-env-variable-format' into maint

Minor documentation fixup.

* ar/doc-env-variable-format:
  Documentation: make environment variable formatting more consistent

5 years agoMerge branch 'pt/http-socks-proxy' into maint
Jeff King [Tue, 1 Dec 2015 22:19:12 +0000 (17:19 -0500)]
Merge branch 'pt/http-socks-proxy' into maint

Add support for talking http/https over socks proxy.

* pt/http-socks-proxy:
  remote-http(s): support SOCKS proxies

5 years agoMerge branch 'rc/configure-use-libs-when-checking-a-lib' into maint
Jeff King [Tue, 1 Dec 2015 22:19:06 +0000 (17:19 -0500)]
Merge branch 'rc/configure-use-libs-when-checking-a-lib' into maint

The "configure" script did not test for -lpthread correctly, which
upset some linkers.

* rc/configure-use-libs-when-checking-a-lib:
  configure.ac: use $LIBS not $CFLAGS when testing -lpthread

5 years agowt-status: correct and simplify check for detached HEAD
René Scharfe [Wed, 25 Nov 2015 14:10:18 +0000 (15:10 +0100)]
wt-status: correct and simplify check for detached HEAD

If a branch name is longer than four characters then memcmp() reads over
the end of the static string "HEAD".  This causes the following test
failures with AddressSanitizer:

t3203-branch-output.sh                           (Wstat: 256 Tests: 18 Failed: 4)
  Failed tests:  12, 15-17
  Non-zero exit status: 1
t3412-rebase-root.sh                             (Wstat: 256 Tests: 31 Failed: 3)
  Failed tests:  28-29, 31
  Non-zero exit status: 1
t3507-cherry-pick-conflict.sh                    (Wstat: 256 Tests: 31 Failed: 4)
  Failed tests:  14, 29-31
  Non-zero exit status: 1
t3510-cherry-pick-sequence.sh                    (Wstat: 256 Tests: 39 Failed: 14)
  Failed tests:  17, 22-26, 28-30, 34-35, 37-39
  Non-zero exit status: 1
t3420-rebase-autostash.sh                        (Wstat: 256 Tests: 28 Failed: 4)
  Failed tests:  24-27
  Non-zero exit status: 1
t3404-rebase-interactive.sh                      (Wstat: 256 Tests: 91 Failed: 57)
  Failed tests:  17, 19, 21-42, 44, 46-74, 77, 81-82
  Non-zero exit status: 1
t3900-i18n-commit.sh                             (Wstat: 256 Tests: 34 Failed: 1)
  Failed test:  34
  Non-zero exit status: 1
t5407-post-rewrite-hook.sh                       (Wstat: 256 Tests: 14 Failed: 6)
  Failed tests:  9-14
  Non-zero exit status: 1
t7001-mv.sh                                      (Wstat: 256 Tests: 46 Failed: 5)
  Failed tests:  39-43
  Non-zero exit status: 1
t7509-commit.sh                                  (Wstat: 256 Tests: 12 Failed: 2)
  Failed tests:  11-12
  Non-zero exit status: 1
t7512-status-help.sh                             (Wstat: 256 Tests: 39 Failed: 35)
  Failed tests:  5-39
  Non-zero exit status: 1
t6030-bisect-porcelain.sh                        (Wstat: 256 Tests: 70 Failed: 1)
  Failed test:  13
  Non-zero exit status: 1

And if a branch is named "H", "HE", or "HEA" then the current if clause
erroneously considers it as matching "HEAD" because it only compares
up to the end of the branch name.

Fix that by doing the comparison using strcmp() and only after the
branch name is extracted.  This way neither too less nor too many
characters are checked.  While at it call strchrnul() to find the end
of the branch name instead of open-coding it.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Jeff King <peff@peff.net>
5 years agohttp: treat config options sslCAPath and sslCAInfo as paths
Charles Bailey [Mon, 23 Nov 2015 12:02:40 +0000 (12:02 +0000)]
http: treat config options sslCAPath and sslCAInfo as paths

This enables ~ and ~user expansion for these config options.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Jeff King <peff@peff.net>
5 years agoDocumentation/diff: give --word-diff-regex=. example
Michael J Gruber [Fri, 20 Nov 2015 13:36:14 +0000 (14:36 +0100)]
Documentation/diff: give --word-diff-regex=. example

It's just so useful.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Jeff King <peff@peff.net>
5 years agofilter-branch: deal with object name vs. pathname ambiguity in tree-filter
SZEDER Gábor [Mon, 23 Nov 2015 12:23:16 +0000 (13:23 +0100)]
filter-branch: deal with object name vs. pathname ambiguity in tree-filter

'git filter-branch' fails complaining about an ambiguous argument, if
a tree-filter renames a path and the new pathname happens to match an
existing object name.

After the tree-filter has been applied, 'git filter-branch' looks for
changed paths by running:

  git diff-index -r --name-only --ignore-submodules $commit

which then, because of the lack of disambiguating double-dash, can't
decide whether to treat '$commit' as revision or path and errors out.

Add that disambiguating double-dash after 'git diff-index's revision
argument to make sure that '$commit' is interpreted as a revision.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Jeff King <peff@peff.net>
5 years agocheck-ignore: correct documentation about output
Dennis Kaarsemaker [Fri, 20 Nov 2015 20:30:48 +0000 (21:30 +0100)]
check-ignore: correct documentation about output

By default git check-ignore shows only the filenames that will be
ignored, not the pattern that causes their exclusion. Instead of moving
the partial exclude pattern precendence information to the -v option
where it belongs, link to gitignore(5) which describes this more
thoroughly.

Signed-off-by: Dennis Kaarsemaker <dennis@kaarsemaker.net>
Signed-off-by: Jeff King <peff@peff.net>
5 years agoDocumentation/git-update-index: add missing opts to synopsys
Christian Couder [Tue, 24 Nov 2015 11:55:07 +0000 (12:55 +0100)]
Documentation/git-update-index: add missing opts to synopsys

Untracked cache related options should appear in the synopsis.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Jeff King <peff@peff.net>
5 years agogit-p4: clean up after p4 submit failure
GIRARD Etienne [Tue, 24 Nov 2015 07:43:59 +0000 (07:43 +0000)]
git-p4: clean up after p4 submit failure

When "p4 submit" command fails in P4Submit.applyCommit, the
workspace is left with the changes.  We already have code to revert
the changes to the workspace when the user decides to cancel
submission by aborting the editor that edits the change description,
and we should treat the "p4 submit" failure the same way.

Clean the workspace if p4_write_pipe raised SystemExit, so that the
user don't have to do it themselves.

Signed-off-by: GIRARD Etienne <egirard@murex.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Jeff King <peff@peff.net>
5 years agobash prompt: indicate dirty index even on orphan branches
SZEDER Gábor [Sat, 21 Nov 2015 11:30:09 +0000 (12:30 +0100)]
bash prompt: indicate dirty index even on orphan branches

__git_ps1() doesn't indicate dirty index while on an orphan branch.

To check the dirtiness of the index, __git_ps1() runs 'git diff-index
--cached ... HEAD', which doesn't work on an orphan branch,
because HEAD doesn't point to a valid commit.

Run 'git diff ... --cached' instead, as it does the right thing both
on valid and invalid HEAD, i.e. compares the index to the existing
HEAD in the former case and to the empty tree in the latter.  This
fixes the two failing tests added in the first commit of this series.

The dirtiness of the worktree is already checked with 'git diff' and
is displayed correctly even on an orphan branch.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Jeff King <peff@peff.net>
5 years agobash prompt: remove a redundant 'git diff' option
SZEDER Gábor [Sat, 21 Nov 2015 14:46:40 +0000 (15:46 +0100)]
bash prompt: remove a redundant 'git diff' option

To get the dirty state indicator __git_ps1() runs 'git diff' with
'--quiet --exit-code' options.  '--quiet' already implies
'--exit-code', so the latter is unnecessary and can be removed.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Jeff King <peff@peff.net>
5 years agobash prompt: test dirty index and worktree while on an orphan branch
SZEDER Gábor [Sat, 21 Nov 2015 11:30:07 +0000 (12:30 +0100)]
bash prompt: test dirty index and worktree while on an orphan branch

There is only a single test exercising the dirty state indicator on an
orphan branch, and in that test neither the index nor the worktree are
dirty.

Add two failing tests to check the dirty state indicator while either
the index is dirty or while both the index and the worktree are dirty
on an orphan branch, and to show that the dirtiness of the index is
not displayed in these cases (the fourth combination, i.e. clean index
and dirty worktree are impossible on an orphan branch).  Update the
existing dirty state indicator on clean orphan branch test to match
the style of the two new tests, most importantly to use 'git checkout
--orphan' instead of cd-ing into a repository that just happens to be
empty and clean.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Jeff King <peff@peff.net>
5 years agogit-p4: work with a detached head
Luke Diamand [Sat, 21 Nov 2015 09:54:41 +0000 (09:54 +0000)]
git-p4: work with a detached head

When submitting, git-p4 finds the current branch in
order to know if it is allowed to submit (configuration
"git-p4.allowSubmit").

On a detached head, detecting the branch would fail, and
git-p4 would report a cryptic error.

This change teaches git-p4 to recognise a detached head and
submit successfully.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Jeff King <peff@peff.net>
5 years agogit-p4: add option to system() to return subshell status
Luke Diamand [Sat, 21 Nov 2015 09:54:40 +0000 (09:54 +0000)]
git-p4: add option to system() to return subshell status

Add an optional parameter ignore_error to the git-p4 system()
function. If used, it will return the subshell exit status
rather than throwing an exception.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Jeff King <peff@peff.net>
5 years agogit-p4: add failing test for submit from detached head
Luke Diamand [Sat, 21 Nov 2015 09:54:39 +0000 (09:54 +0000)]
git-p4: add failing test for submit from detached head

git-p4 can't submit from a detached head. This test case
demonstrates the problem.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Jeff King <peff@peff.net>
5 years agoremote-http(s): support SOCKS proxies
Pat Thoyts [Mon, 26 Oct 2015 13:15:07 +0000 (14:15 +0100)]
remote-http(s): support SOCKS proxies

With this patch we properly support SOCKS proxies, configured e.g. like
this:

git config http.proxy socks5://192.168.67.1:32767

Without this patch, Git mistakenly tries to use SOCKS proxies as if they
were HTTP proxies, resulting in a error message like:

fatal: unable to access 'http://.../': Proxy CONNECT aborted

This patch was required to work behind a faulty AP and scraped from
http://stackoverflow.com/questions/15227130/#15228479 and guarded with
an appropriate cURL version check by Johannes Schindelin.

Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot5813: avoid creating urls that break on cygwin
Dennis Kaarsemaker [Mon, 9 Nov 2015 17:49:35 +0000 (18:49 +0100)]
t5813: avoid creating urls that break on cygwin

When passed an ssh:// url, git strips ssh://host from the url but does
not remove leading slashes from the path. So when this test used
ssh://remote//path/to/pwd, the path accessed by our fake SSH is
//path/to/pwd, which cygwin interprets as a UNC path, causing the test
to fail.

We may want to actually fix this in git itself, making it remove extra
slashes from urls before feeding them to transports or helpers, but
that's for another topic as it could cause regressions.

Signed-off-by: Dennis Kaarsemaker <dennis@kaarsemaker.net>
Signed-off-by: Jeff King <peff@peff.net>
5 years agoEscape Git's exec path in contrib/rerere-train.sh script
Daniel Knittl-Frank [Sun, 8 Nov 2015 11:27:55 +0000 (12:27 +0100)]
Escape Git's exec path in contrib/rerere-train.sh script

Whitespace can cause the source command to fail. This is usually not a
problem on Unix systems, but on Windows Git is likely to be installed
under "C:/Program Files/", thus rendering the script broken.

Signed-off-by: Daniel Knittl-Frank <knittl89+git@googlemail.com>
Signed-off-by: Jeff King <peff@peff.net>
5 years agoallow hooks to ignore their standard input stream
Clemens Buchacher [Mon, 16 Nov 2015 08:05:58 +0000 (09:05 +0100)]
allow hooks to ignore their standard input stream

Since ec7dbd145 (receive-pack: allow hooks to ignore its
standard input stream) the pre-receive and post-receive
hooks ignore SIGPIPE. Do the same for the remaining hooks
pre-push and post-rewrite, which read from standard input.
The same arguments for ignoring SIGPIPE apply.

Include test by Jeff King which checks that SIGPIPE does not
cause pre-push hook failure. With the use of git update-ref
--stdin it is fast enough to be enabled by default.

Signed-off-by: Clemens Buchacher <clemens.buchacher@intel.com>
Signed-off-by: Jeff King <peff@peff.net>
5 years agorebase-i-exec: Allow space in SHELL_PATH
Fredrik Medley [Fri, 13 Nov 2015 06:03:19 +0000 (07:03 +0100)]
rebase-i-exec: Allow space in SHELL_PATH

On Windows, when Git is installed under "C:\Program Files\Git",
SHELL_PATH will include a space. Fix "git rebase --interactive --exec"
so that it works with spaces in SHELL_PATH.

Signed-off-by: Fredrik Medley <fredrik.medley@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
5 years agoDocumentation: make environment variable formatting more consistent
Андрей Рыбак [Wed, 11 Nov 2015 15:47:25 +0000 (18:47 +0300)]
Documentation: make environment variable formatting more consistent

Documentation/git.txt is not consistent in the way it
stylizes mentions of Environment Variables. Most of them are
enclosed in single quotes, some are enclosed in backticks,
some are not enclosed.

Signed-off-by: Andrey Rybak <rybak.a.v@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
5 years agoconfigure.ac: use $LIBS not $CFLAGS when testing -lpthread
Rainer M. Canavan [Fri, 6 Nov 2015 01:11:37 +0000 (02:11 +0100)]
configure.ac: use $LIBS not $CFLAGS when testing -lpthread

Some linkers, namely the one on IRIX are rather strict concerning
the order or arguments for symbol resolution, i.e. no libraries
listed before objects or other libraries on the command line are
considered for symbol resolution.  Therefore, -lpthread can't work
if it's put in CFLAGS, because it will not be considered for
resolving pthread_key_create in conftest.o. Use $LIBS instead.

Signed-off-by: Rainer Canavan <git@canavan.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoGit 2.6.3 v2.6.3
Junio C Hamano [Thu, 5 Nov 2015 20:20:34 +0000 (12:20 -0800)]
Git 2.6.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'rs/daemon-plug-child-leak' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:16 +0000 (12:18 -0800)]
Merge branch 'rs/daemon-plug-child-leak' into maint

"git daemon" uses "run_command()" without "finish_command()", so it
needs to release resources itself, which it forgot to do.

* rs/daemon-plug-child-leak:
  daemon: plug memory leak
  run-command: factor out child_process_clear()

5 years agoMerge branch 'rs/wt-status-detached-branch-fix' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:15 +0000 (12:18 -0800)]
Merge branch 'rs/wt-status-detached-branch-fix' into maint

"git status --branch --short" accessed beyond the constant string
"HEAD", which has been corrected.

* rs/wt-status-detached-branch-fix:
  wt-status: use skip_prefix() to get rid of magic string length constants
  wt-status: don't skip a magical number of characters blindly
  wt-status: avoid building bogus branch name with detached HEAD
  wt-status: exit early using goto in wt_shortstatus_print_tracking()
  t7060: add test for status --branch on a detached HEAD

5 years agoMerge branch 'jk/initialization-fix-to-add-submodule-odb' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:14 +0000 (12:18 -0800)]
Merge branch 'jk/initialization-fix-to-add-submodule-odb' into maint

We peek objects from submodule's object store by linking it to the
list of alternate object databases, but the code to do so forgot to
correctly initialize the list.

* jk/initialization-fix-to-add-submodule-odb:
  add_submodule_odb: initialize alt_odb list earlier

5 years agoMerge branch 'js/misc-fixes' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:13 +0000 (12:18 -0800)]
Merge branch 'js/misc-fixes' into maint

Various compilation fixes and squelching of warnings.

* js/misc-fixes:
  Correct fscanf formatting string for I64u values
  Silence GCC's "cast of pointer to integer of a different size" warning
  Squelch warning about an integer overflow

5 years agoMerge branch 'jc/add-u-A-default-to-top' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:12 +0000 (12:18 -0800)]
Merge branch 'jc/add-u-A-default-to-top' into maint

"git --literal-pathspecs add -u/-A" without any command line
argument misbehaved ever since Git 2.0.

* jc/add-u-A-default-to-top:
  add: simplify -u/-A without pathspec

5 years agoMerge branch 'jk/delete-modechange-conflict' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:11 +0000 (12:18 -0800)]
Merge branch 'jk/delete-modechange-conflict' into maint

Merging a branch that removes a path and another that changes the
mode bits on the same path should have conflicted at the path, but
it didn't and silently favoured the removal.

* jk/delete-modechange-conflict:
  merge: detect delete/modechange conflict
  t6031: generalize for recursive and resolve strategies
  t6031: move triple-rename test to t3030

5 years agoMerge branch 'js/imap-send-curl-compilation-fix' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:10 +0000 (12:18 -0800)]
Merge branch 'js/imap-send-curl-compilation-fix' into maint

"git imap-send" did not compile well with older version of cURL library.

* js/imap-send-curl-compilation-fix:
  imap-send: only use CURLOPT_LOGIN_OPTIONS if it is actually available

5 years agoMerge branch 'rp/link-curl-before-ssl' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:08 +0000 (12:18 -0800)]
Merge branch 'rp/link-curl-before-ssl' into maint

The linkage order of libraries was wrong in places around libcurl.

* rp/link-curl-before-ssl:
  configure.ac: detect ssl need with libcurl
  Makefile: make curl-config path configurable
  Makefile: link libcurl before zlib

5 years agoMerge branch 'nd/clone-linked-checkout' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:07 +0000 (12:18 -0800)]
Merge branch 'nd/clone-linked-checkout' into maint

It was not possible to use a repository-lookalike created by "git
worktree add" as a local source of "git clone".

* nd/clone-linked-checkout:
  clone: better error when --reference is a linked checkout
  clone: allow --local from a linked checkout
  enter_repo: allow .git files in strict mode
  enter_repo: avoid duplicating logic, use is_git_directory() instead
  t0002: add test for enter_repo(), non-strict mode
  path.c: delete an extra space

5 years agoMerge branch 'sa/send-email-smtp-batch-data-limit' into maint
Junio C Hamano [Thu, 5 Nov 2015 20:18:06 +0000 (12:18 -0800)]
Merge branch 'sa/send-email-smtp-batch-data-limit' into maint

When "git send-email" wanted to talk over Net::SMTP::SSL,
Net::Cmd::datasend() did not like to be fed too many bytes at the
same time and failed to send messages.  Send the payload one line
at a time to work around the problem.

* sa/send-email-smtp-batch-data-limit:
  git-send-email.perl: Fixed sending of many/huge changes/patches

5 years agosha1: allow limiting the size of the data passed to SHA1_Update()
Atousa Pahlevan Duprat [Thu, 5 Nov 2015 06:38:42 +0000 (22:38 -0800)]
sha1: allow limiting the size of the data passed to SHA1_Update()

Using the previous commit's inredirection mechanism for SHA1,
support a chunked implementation of SHA1_Update() that limits the
amount of data in the chunk passed to SHA1_Update().

This is enabled by using the Makefile variable SHA1_MAX_BLOCK_SIZE
to specify chunk size.  When using Apple's CommonCrypto library this
is set to 1GiB (the implementation cannot handle more 4GiB).

Signed-off-by: Atousa Pahlevan Duprat <apahlevan@ieee.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agosha1: provide another level of indirection for the SHA-1 functions
Atousa Pahlevan Duprat [Thu, 5 Nov 2015 06:38:41 +0000 (22:38 -0800)]
sha1: provide another level of indirection for the SHA-1 functions

The git source uses git_SHA1_Update() and friends to call into the
code that computes the hashes.  Traditionally, we used to map these
directly to underlying implementation of the SHA-1 hash (e.g.
SHA1_Update() from OpenSSL or blk_SHA1_Update() from block-sha1/).

This arrangement however makes it hard to tweak behaviour of the
underlying implementation without fully replacing.  If we want to
introduce a tweaked_SHA1_Update() wrapper to implement the "Update"
in a slightly different way, for example, the implementation of the
wrapper still would want to call into the underlying implementation,
but tweaked_SHA1_Update() cannot call git_SHA1_Update() to get to
the underlying implementation (often but not always SHA1_Update()).

Add another level of indirection that maps platform_SHA1_Update()
and friends to their underlying implementations, and by default make
git_SHA1_Update() and friends map to platform_SHA1_* functions.

Doing it this way will later allow us to map git_SHA1_Update() to
tweaked_SHA1_Update(), and the latter can use platform_SHA1_Update()
in its implementation.

Signed-off-by: Atousa Pahlevan Duprat <apahlevan@ieee.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'xf/user-manual-ff' into maint
Junio C Hamano [Wed, 4 Nov 2015 22:20:49 +0000 (14:20 -0800)]
Merge branch 'xf/user-manual-ff' into maint

* xf/user-manual-ff:
  user-manual: fix the description of fast-forward

5 years agoMerge branch 'xf/user-manual-markup' into maint
Junio C Hamano [Wed, 4 Nov 2015 22:20:47 +0000 (14:20 -0800)]
Merge branch 'xf/user-manual-markup' into maint

AsciiDoc markup fixes.

* xf/user-manual-markup:
  Documentation: match undefline with the text in old release notes
  Documentation: match underline with the text
  Documentation: fix header markup

5 years agoMerge branch 'jc/everyday-markup' into maint
Junio C Hamano [Wed, 4 Nov 2015 22:20:46 +0000 (14:20 -0800)]
Merge branch 'jc/everyday-markup' into maint

AsciiDoc markup fixes.

* jc/everyday-markup:
  Documentation/everyday: match undefline with the text

5 years agoMerge branch 'jc/em-dash-in-doc' into maint
Junio C Hamano [Wed, 4 Nov 2015 22:20:45 +0000 (14:20 -0800)]
Merge branch 'jc/em-dash-in-doc' into maint

AsciiDoc markup fixes.

* jc/em-dash-in-doc:
  Documentation: AsciiDoc spells em-dash as double-dashes, not triple

5 years agoMerge branch 'es/worktree-add' into maint
Junio C Hamano [Wed, 4 Nov 2015 22:20:44 +0000 (14:20 -0800)]
Merge branch 'es/worktree-add' into maint

* es/worktree-add:
  worktree: usage: denote <branch> as optional with 'add'

5 years agogc: remove garbage .idx files from pack dir
Doug Kelly [Wed, 4 Nov 2015 03:05:08 +0000 (21:05 -0600)]
gc: remove garbage .idx files from pack dir

Add a custom report_garbage handler to collect and remove
garbage .idx files from the pack directory.

Signed-off-by: Doug Kelly <dougk.ff7@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot5304: test cleaning pack garbage
Doug Kelly [Wed, 4 Nov 2015 03:05:07 +0000 (21:05 -0600)]
t5304: test cleaning pack garbage

Pack garbage, noticeably stale .idx files, can be cleaned up during
a garbage collection.  This tests to ensure such garbage is properly
cleaned up.

Note that the prior test for checking pack garbage with count-objects
left some stale garbage after the test exited.  This has also been
corrected.

Signed-off-by: Doug Kelly <dougk.ff7@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'mk/blame-error-message' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:42 +0000 (15:32 -0800)]
Merge branch 'mk/blame-error-message' into maint

The error message from "git blame --contents --reverse" incorrectly
talked about "--contents --children".

* mk/blame-error-message:
  blame: fix option name in error message

5 years agoMerge branch 'jk/merge-file-exit-code' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:41 +0000 (15:32 -0800)]
Merge branch 'jk/merge-file-exit-code' into maint

"git merge-file" tried to signal how many conflicts it found, which
obviously would not work well when there are too many of them.

* jk/merge-file-exit-code:
  merge-file: clamp exit code to maximum 127

5 years agoMerge branch 'dt/name-hash-dir-entry-fix' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:40 +0000 (15:32 -0800)]
Merge branch 'dt/name-hash-dir-entry-fix' into maint

The name-hash subsystem that is used to cope with case insensitive
filesystems keeps track of directories and their on-filesystem
cases for all the paths in the index by holding a pointer to a
randomly chosen cache entry that is inside the directory (for its
ce->ce_name component).  This pointer was not updated even when the
cache entry was removed from the index, leading to use after free.
This was fixed by recording the path for each directory instead of
borrowing cache entries and restructuring the API somewhat.

* dt/name-hash-dir-entry-fix:
  name-hash: don't reuse cache_entry in dir_entry

5 years agoMerge branch 'jc/am-3-fallback-regression-fix' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:39 +0000 (15:32 -0800)]
Merge branch 'jc/am-3-fallback-regression-fix' into maint

"git am -3" had a small regression where it is aborted in its error
handling codepath when underlying merge-recursive failed in certain
ways, as it assumed that the internal call to merge-recursive will
never die, which is not the case (yet).

* jc/am-3-fallback-regression-fix:
  am -3: do not let failed merge from completing the error codepath

5 years agoMerge branch 'jc/usage-stdin' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:38 +0000 (15:32 -0800)]
Merge branch 'jc/usage-stdin' into maint

The synopsis text and the usage string of subcommands that read
list of things from the standard input are often shown as if they
only take input from a file on a filesystem, which was misleading.

* jc/usage-stdin:
  usage: do not insist that standard input must come from a file

5 years agoMerge branch 'rt/placeholder-in-usage' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:37 +0000 (15:32 -0800)]
Merge branch 'rt/placeholder-in-usage' into maint

A couple of commands still showed "[options]" in their usage string
to note where options should come on their command line, but we
spell that "[<options>]" in most places these days.

* rt/placeholder-in-usage:
  am, credential-cache: add angle brackets to usage string

5 years agoMerge branch 'dt/t7063-fix-flaky-test' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:36 +0000 (15:32 -0800)]
Merge branch 'dt/t7063-fix-flaky-test' into maint

* dt/t7063-fix-flaky-test:
  t7063: fix flaky untracked-cache test

5 years agoMerge branch 'mk/submodule-gitdir-path' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:34 +0000 (15:32 -0800)]
Merge branch 'mk/submodule-gitdir-path' into maint

The submodule code has been taught to work better with separate
work trees created via "git worktree add".

* mk/submodule-gitdir-path:
  path: implement common_dir handling in git_pathdup_submodule()
  submodule refactor: use strbuf_git_path_submodule() in add_submodule_odb()

5 years agoMerge branch 'nd/gc-auto-background-fix' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:33 +0000 (15:32 -0800)]
Merge branch 'nd/gc-auto-background-fix' into maint

When "git gc --auto" is backgrounded, its diagnosis message is
lost.  Save it to a file in $GIT_DIR and show it next time the "gc
--auto" is run.

* nd/gc-auto-background-fix:
  gc: save log from daemonized gc --auto and print it next time

5 years agoMerge branch 'ls/p4-translation-failure' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:31 +0000 (15:32 -0800)]
Merge branch 'ls/p4-translation-failure' into maint

Work around "git p4" failing when the P4 depot records the contents
in UTF-16 without UTF-16 BOM.

* ls/p4-translation-failure:
  git-p4: handle "Translation of file content failed"
  git-p4: add test case for "Translation of file content failed" error

5 years agoMerge branch 'gr/rebase-i-drop-warn' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:30 +0000 (15:32 -0800)]
Merge branch 'gr/rebase-i-drop-warn' into maint

Recent update to "rebase -i" that tries to sanity check the edited
insn sheet before it uses it has become too picky on Windows where
CRLF left by the editor is turned into a trailing CR on the line
read via the "read" built-in command.

* gr/rebase-i-drop-warn:
  rebase-i: work around Windows CRLF line endings
  t3404: "rebase -i" gets broken when insn sheet uses CR/LF line endings

5 years agoMerge branch 'js/clone-dissociate' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:28 +0000 (15:32 -0800)]
Merge branch 'js/clone-dissociate' into maint

"git clone --dissociate" runs a big "git repack" process at the
end, and it helps to close file descriptors that are open on the
packs and their idx files before doing so on filesystems that
cannot remove a file that is still open.

* js/clone-dissociate:
  clone --dissociate: avoid locking pack files
  sha1_file.c: add a function to release all packs
  sha1_file: consolidate code to close a pack's file descriptor
  t5700: demonstrate a Windows file locking issue with `git clone --dissociate`

5 years agoMerge branch 'ld/p4-import-labels' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:27 +0000 (15:32 -0800)]
Merge branch 'ld/p4-import-labels' into maint

Correct "git p4 --detect-labels" so that it does not fail to create
a tag that points at a commit that is also being imported.

* ld/p4-import-labels:
  git-p4: fix P4 label import for unprocessed commits
  git-p4: do not terminate creating tag for unknown commit
  git-p4: failing test for ignoring invalid p4 labels

5 years agoMerge branch 'tk/stripspace' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:26 +0000 (15:32 -0800)]
Merge branch 'tk/stripspace' into maint

The internal stripspace() function has been moved to where it
logically belongs to, i.e. strbuf API, and the command line parser
of "git stripspace" has been updated to use the parse_options API.

* tk/stripspace:
  stripspace: use parse-options for command-line parsing
  strbuf: make stripspace() part of strbuf

5 years agoMerge branch 'jk/repository-extension' into maint
Junio C Hamano [Tue, 3 Nov 2015 23:32:25 +0000 (15:32 -0800)]
Merge branch 'jk/repository-extension' into maint

Prepare for Git on-disk repository representation to undergo
backward incompatible changes by introducing a new repository
format version "1", with an extension mechanism.

* jk/repository-extension:
  introduce "preciousObjects" repository extension
  introduce "extensions" form of core.repositoryformatversion

5 years agodaemon: plug memory leak
René Scharfe [Sat, 24 Oct 2015 12:23:20 +0000 (14:23 +0200)]
daemon: plug memory leak

Call child_process_clear() when a child ends to release the memory
allocated for its environment.  This is necessary because unlike all
other users of start_command() we don't call finish_command(), which
would have taken care of that for us.

This leak was introduced by f063d38b (daemon: use cld->env_array
when re-spawning).

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agorun-command: factor out child_process_clear()
René Scharfe [Sat, 24 Oct 2015 12:11:27 +0000 (14:11 +0200)]
run-command: factor out child_process_clear()

Avoid duplication by moving the code to release allocated memory for
arguments and environment to its own function, child_process_clear().
Export it to provide a counterpart to child_process_init().

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agowt-status: use skip_prefix() to get rid of magic string length constants
René Scharfe [Sat, 31 Oct 2015 17:37:43 +0000 (18:37 +0100)]
wt-status: use skip_prefix() to get rid of magic string length constants

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agowt-status: don't skip a magical number of characters blindly
René Scharfe [Sat, 31 Oct 2015 17:37:12 +0000 (18:37 +0100)]
wt-status: don't skip a magical number of characters blindly

Use the variable branch_name, which already has "refs/heads/" removed,
instead of blindly advancing in the ->branch string by 11 bytes.  This
is safer and less magical.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agowt-status: avoid building bogus branch name with detached HEAD
René Scharfe [Sat, 31 Oct 2015 17:36:35 +0000 (18:36 +0100)]
wt-status: avoid building bogus branch name with detached HEAD

If we're on a detached HEAD then wt_shortstatus_print_tracking() takes
the string "HEAD (no branch)", translates it, skips the first eleven
characters and passes the result to branch_get(), which returns a bogus
result and accesses memory out of bounds in order to produce it.
Somehow stat_tracking_info(), which is passed that result, does the
right thing anyway, i.e. it finds that there is no base.

Avoid the bogus results and memory accesses by checking for HEAD first
and exiting early in that case.  This fixes t7060 with --valgrind.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agowt-status: exit early using goto in wt_shortstatus_print_tracking()
René Scharfe [Sat, 31 Oct 2015 17:36:01 +0000 (18:36 +0100)]
wt-status: exit early using goto in wt_shortstatus_print_tracking()

Deduplicate printing the line terminator by jumping to the end of the
function.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot7060: add test for status --branch on a detached HEAD
René Scharfe [Sat, 31 Oct 2015 17:35:32 +0000 (18:35 +0100)]
t7060: add test for status --branch on a detached HEAD

This test fails when run under Valgrind because branch_get() gets passed
a bogus branch name pointer:

==62831== Invalid read of size 1
==62831==    at 0x4F76AE: branch_get (remote.c:1650)
==62831==    by 0x53499E: wt_shortstatus_print_tracking (wt-status.c:1654)
==62831==    by 0x53499E: wt_shortstatus_print (wt-status.c:1706)
==62831==    by 0x428D29: cmd_status (commit.c:1384)
==62831==    by 0x405D6D: run_builtin (git.c:350)
==62831==    by 0x405D6D: handle_builtin (git.c:536)
==62831==    by 0x404F10: run_argv (git.c:582)
==62831==    by 0x404F10: main (git.c:690)
==62831==  Address 0x5e89b0b is 6 bytes after a block of size 5 alloc'd
==62831==    at 0x4C28C4F: malloc (vg_replace_malloc.c:299)
==62831==    by 0x59579E9: strdup (strdup.c:42)
==62831==    by 0x52E108: xstrdup (wrapper.c:43)
==62831==    by 0x5322A6: wt_status_prepare (wt-status.c:130)
==62831==    by 0x4276E0: status_init_config (commit.c:184)
==62831==    by 0x428BB8: cmd_status (commit.c:1350)
==62831==    by 0x405D6D: run_builtin (git.c:350)
==62831==    by 0x405D6D: handle_builtin (git.c:536)
==62831==    by 0x404F10: run_argv (git.c:582)
==62831==    by 0x404F10: main (git.c:690)

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agodifftool: ignore symbolic links in use_wt_file
David Aguilar [Thu, 29 Oct 2015 18:19:01 +0000 (11:19 -0700)]
difftool: ignore symbolic links in use_wt_file

The caller is preparing a narrowed-down copy of the working tree and
this function is asked if the path should be included in that copy.
If we say yes, the path from the working tree will be either symlinked
or copied into the narrowed-down copy.

For any path that is a symbolic link, the caller later fixes up the
narrowed-down copy by unlinking the path and replacing it with a
regular file it writes out that mimics the way how "git diff"
compares symbolic links.

Let's answer "no, you do not want to copy/symlink the working tree
file" for all symbolic links from this function, as we know the
result will not be used because it will be overwritten anyway.

Incidentally, this also stops the function from feeding a symbolic
link in the working tree to hash-object, which is a wrong thing to
do to begin with. The link may be pointing at a directory, or worse
may be dangling (both would be noticed as an error).  Even if the
link points at a regular file, hashing the contents of a file that
is pointed at by the link is not correct (Git hashes the contents of
the link itself, not the pointee).

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge-file: clamp exit code to maximum 127
Jeff King [Wed, 28 Oct 2015 22:44:21 +0000 (18:44 -0400)]
merge-file: clamp exit code to maximum 127

Git-merge-file is documented to return one of three exit
codes:

  - zero means the merge was successful

  - a negative number means an error occurred

  - a positive number indicates the number of conflicts

Unfortunately, this all gets stuffed into an 8-bit return
code. Which means that if you have 256 conflicts, this wraps
to zero, and the merge appears to succeed (and commits a
blob full of conflict-marker cruft!).

This patch clamps the return value to a maximum of 127,
which we should be able to safely represent everywhere. This
also leaves 128-255 for other values. Shells (and some parts
of git) will typically represent signal death as 128 plus
the signal number. And negative values are typically coerced
to an 8-bit unsigned value (so "return -1" ends up as 255).

Technically negative returns have the same problem (e.g.,
"-256" wraps back to 0), but this is not a problem in
practice, as the only negative value we use is "-1".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agorebase-i: work around Windows CRLF line endings
Junio C Hamano [Wed, 28 Oct 2015 14:54:48 +0000 (15:54 +0100)]
rebase-i: work around Windows CRLF line endings

Editors on Windows can and do save text files with CRLF line
endings, which is the convention on the platform.  We are seeing
reports that the "read" command in a port of bash to the environment
however does not strip the CRLF at the end, not adjusting for the
same convention on the platform.

This breaks the recently added sanity checks for the insn sheet fed
to "rebase -i"; instead of an empty line (hence nothing in $command),
the script was getting a lone CR in there.

Special case a lone CR and treat it the same way as an empty line to
work this around.

This patch (also) passes the test with Git for Windows, where the
issue was seen first.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot3404: "rebase -i" gets broken when insn sheet uses CR/LF line endings
Johannes Schindelin [Wed, 28 Oct 2015 14:54:21 +0000 (15:54 +0100)]
t3404: "rebase -i" gets broken when insn sheet uses CR/LF line endings

Based on a bug report by Chad Boles.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoadd_submodule_odb: initialize alt_odb list earlier
Jeff King [Wed, 28 Oct 2015 14:07:25 +0000 (10:07 -0400)]
add_submodule_odb: initialize alt_odb list earlier

The add_submodule_odb function tries to add a submodule's
object store as an "alternate". It needs the existing list
to be initialized (from the objects/info/alternates file)
for two reasons:

  1. We look for duplicates with the existing alternate
     stores, but obviously this doesn't work if we haven't
     loaded any yet.

  2. We link our new entry into the list by prepending it to
     alt_odb_list. But we do _not_ modify alt_odb_tail.
     This variable starts as NULL, and is a signal to the
     alt_odb code that the list has not yet been
     initialized.

     We then call read_info_alternates on the submodule (to
     recursively load its alternates), which will try to
     append to that tail, assuming it has been initialized.
     This causes us to segfault if it is NULL.

This rarely comes up in practice, because we will have
initialized the alt_odb any time we do an object lookup. So
you can trigger this only when:

  - you try to access a submodule (e.g., a diff with
    diff.submodule=log)

  - the access happens before any other object has been
    accessed (e.g., because the diff is between the working
    tree and the index)

  - the submodule contains an alternates file (so we try to
    add an entry to the NULL alt_odb_tail)

To fix this, we just need to call prepare_alt_odb at the
start of the function (and if we have already initialized,
it is a noop).

Note that we can remove the prepare_alt_odb call from the
end. It is guaranteed to be a noop, since we will have
called it earlier.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge: detect delete/modechange conflict
Jeff King [Mon, 26 Oct 2015 21:39:39 +0000 (17:39 -0400)]
merge: detect delete/modechange conflict

If one side deletes a file and the other changes its
content, we notice and report a conflict. However, if
instead of changing the content, we change only the mode,
the merge does not notice (and the mode change is silently
dropped).

The trivial index merge notices the problem and correctly
leaves the conflict in the index, but both merge-recursive
and merge-one-file will silently resolve this in favor of
the deletion.  In many cases that is a sane resolution, but
we should be punting to the user whenever there is any
question. So let's detect and treat this as a conflict (in
both strategies).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot6031: generalize for recursive and resolve strategies
Jeff King [Mon, 26 Oct 2015 21:37:18 +0000 (17:37 -0400)]
t6031: generalize for recursive and resolve strategies

This script tests the filemode handling of merge-recursive,
but we do not test the same thing for merge-resolve. Let's
generalize the script a little:

  1. Break out the setup steps for each test into a separate
     snippet.

  2. For each test, run it twice; once with "-s recursive"
     and once with "-s resolve". We can avoid repeating
     ourselves by adding a function.

  3. Since we have a nice abstracted function, we can make
     our tests more thorough by testing both directions
     (change on "ours" versus "theirs").

This improves our test coverage, and will make this the
place to add more tests related to merging mode changes.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot6031: move triple-rename test to t3030
Jeff King [Mon, 26 Oct 2015 21:36:18 +0000 (17:36 -0400)]
t6031: move triple-rename test to t3030

The t6031 test was introduced to check filemode handling of
merge-recursive. Much later, an unrelated test was tacked on
to look at renames and d/f conflicts. This test does not
depend on anything that happened before (it actually blows
away any existing content in the test repo). Let's move it
to t3030, where there are more related tests.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoCorrect fscanf formatting string for I64u values
Waldek Maleska [Mon, 26 Oct 2015 13:15:33 +0000 (14:15 +0100)]
Correct fscanf formatting string for I64u values

This fix is probably purely cosmetic because PRIuMAX is likely identical
to SCNuMAX. Nevertheless, when using a function of the scanf() family,
the correct interpolation to use is the latter, not the former.

Signed-off-by: Waldek Maleska <w.maleska@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSilence GCC's "cast of pointer to integer of a different size" warning
Johannes Schindelin [Mon, 26 Oct 2015 13:15:25 +0000 (14:15 +0100)]
Silence GCC's "cast of pointer to integer of a different size" warning

When calculating hashes from pointers, it actually makes sense to cut
off the most significant bits. In that case, said warning does not make
a whole lot of sense.

So let's just work around it by casting the pointer first to intptr_t
and then casting up/down to the final integral type.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSquelch warning about an integer overflow
Johannes Schindelin [Mon, 26 Oct 2015 13:15:21 +0000 (14:15 +0100)]
Squelch warning about an integer overflow

We cannot rely on long integers to have more than 32 bits.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoimap-send: only use CURLOPT_LOGIN_OPTIONS if it is actually available
Johannes Schindelin [Mon, 26 Oct 2015 13:14:58 +0000 (14:14 +0100)]
imap-send: only use CURLOPT_LOGIN_OPTIONS if it is actually available

This fixes the compilation on an older Linux that was used to debug
test failures when upgrading Git for Windows to Git v2.3.0.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoblame: fix option name in error message
Max Kirillov [Mon, 26 Oct 2015 05:29:00 +0000 (07:29 +0200)]
blame: fix option name in error message

The option name used in blame's UI is `--reverse`.

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>