gitweb.git
read-cache: fix reading the shared index for other... Thomas Gummerer Sun, 7 Jan 2018 22:30:13 +0000 (22:30 +0000)

read-cache: fix reading the shared index for other repos

read_index_from() takes a path argument for the location of the index
file. For reading the shared index in split index mode however it just
ignores that path argument, and reads it from the gitdir of the current
repository.

This works as long as an index in the_repository is read. Once that
changes, such as when we read the index of a submodule, or of a
different working tree than the current one, the gitdir of
the_repository will no longer contain the appropriate shared index,
and git will fail to read it.

For example t3007-ls-files-recurse-submodules.sh was broken with
GIT_TEST_SPLIT_INDEX set in 188dce131f ("ls-files: use repository
object", 2017-06-22), and t7814-grep-recurse-submodules.sh was also
broken in a similar manner, probably by introducing struct repository
there, although I didn't track down the exact commit for that.

be489d02d2 ("revision.c: --indexed-objects add objects from all
worktrees", 2017-08-23) breaks with split index mode in a similar
manner, not erroring out when it can't read the index, but instead
carrying on with pruning, without taking the index of the worktree into
account.

Fix this by passing an additional gitdir parameter to read_index_from,
to indicate where it should look for and read the shared index from.

read_cache_from() defaults to using the gitdir of the_repository. As it
is mostly a convenience macro, having to pass get_git_dir() for every
call seems overkill, and if necessary users can have more control by
using read_index_from().

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

Git 2.16 v2.16.0Junio C Hamano Wed, 17 Jan 2018 21:06:51 +0000 (13:06 -0800)

Git 2.16

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

worktree: say that "add" takes an arbitrary commit... Junio C Hamano Wed, 17 Jan 2018 18:32:32 +0000 (10:32 -0800)

worktree: say that "add" takes an arbitrary commit in short-help

c4738aed ("worktree: add can be created from any commit-ish",
2017-11-26) taught "git worktree add" to start a new worktree
with an arbitrary commit-ish checked out, not limited to a tip
of a branch.

"git worktree --help" was updated to describe this, but we forgot to
update "git worktree -h".

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

Merge tag 'l10n-2.16.0-rnd2' of git://github.com/git... Junio C Hamano Tue, 16 Jan 2018 22:49:58 +0000 (14:49 -0800)

Merge tag 'l10n-2.16.0-rnd2' of git://github.com/git-l10n/git-po

l10n for Git 2.16.0 round 2

* tag 'l10n-2.16.0-rnd2' of git://github.com/git-l10n/git-po: (24 commits)
l10n: de.po: translate 72 new messages
l10n: de.po: improve messages when a branch starts to track another ref
l10n: bg.po: Updated Bulgarian translation (3288t)
l10n: TEAMS: add zh_CN team members
l10n: zh_CN: for git v2.16.0 l10n round 2
l10n: sv.po: Update Swedish translation (3288t0f0u)
l10n: ru.po: update Russian translation
l10n: TEAMS: Add ko team members
l10n: ko.po: Update Korean translation
l10n: fr.po 2.16 round 2
l10n: es.po: Spanish translation 2.16.0 round 2
l10n: vi.po(3288t): Updated Vietnamese translation for v2.16.0 round 2
l10n: git.pot: v2.16.0 round 2 (8 new, 4 removed)
l10n: es.po: Update Spanish Translation v2.16.0
l10n: fr.po v2.16.0 round 1
l10n: bg.po: Updated Bulgarian translation (3284t)
l10n: sv.po: Update Swedish translation (3284t0f0u)
l10n: fr.po: "worktree list" mistranslated as prune
l10n: git.pot: v2.16.0 round 1 (64 new, 25 removed)
l10n: fixes to German translation
...

diff.c: flush stdout before printing rename warningsNguyễn Thái Ngọc Duy Tue, 16 Jan 2018 09:23:49 +0000 (16:23 +0700)

diff.c: flush stdout before printing rename warnings

The diff output is buffered in a FILE object and could still be
partially buffered when we print these warnings (directly to fd 2).
The output is messed up like this

worktree.c | 138 +-
worktree.h warning: inexact rename detection was skipped due to too many files.
| 12 +-
wrapper.c | 83 +-

It gets worse if the warning is printed after color codes for the graph
part are already printed. You'll get a warning in green or red.

Flush stdout first, so we can get something like this instead:

xdiff/xutils.c | 42 +-
xdiff/xutils.h | 4 +-
1033 files changed, 150824 insertions(+), 69395 deletions(-)
warning: inexact rename detection was skipped due to too many files.

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

hashmap.h: remove unused variableRandall S. Becker Sun, 14 Jan 2018 18:07:48 +0000 (13:07 -0500)

hashmap.h: remove unused variable

In 'hashmap_enable_item_counting()', item is assigned but never
used. This causes a warning on HP NonStop. As the variable is
never used, fix this by just removing it.

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

describe: use strbuf_add_unique_abbrev() for adding... René Scharfe Mon, 15 Jan 2018 17:10:32 +0000 (18:10 +0100)

describe: use strbuf_add_unique_abbrev() for adding short hashes

Call strbuf_add_unique_abbrev() to add an abbreviated hash to a strbuf
instead of taking a detour through find_unique_abbrev() and its static
buffer. This is shorter and a bit more efficient.

Patch generated by Coccinelle (and contrib/coccinelle/strbuf.cocci).

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

read-cache.c: move tempfile creation/cleanup out of... Nguyễn Thái Ngọc Duy Sun, 14 Jan 2018 10:18:19 +0000 (17:18 +0700)

read-cache.c: move tempfile creation/cleanup out of write_shared_index

For one thing, we have more consistent cleanup procedure now and always
keep errno intact.

The real purpose is the ability to break out of write_locked_index()
early when mks_tempfile() fails in the next patch. It's more awkward to
do it if this mks_tempfile() is still inside write_shared_index().

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

read-cache.c: change type of "temp" in write_shared_index()Nguyễn Thái Ngọc Duy Sun, 14 Jan 2018 10:18:18 +0000 (17:18 +0700)

read-cache.c: change type of "temp" in write_shared_index()

This local variable 'temp' will be passed in from the caller in the next
patch. To reduce patch noise, let's change its type now while it's still
a local variable and get all the trival conversion out of the next patch.

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

add--interactive: ignore submodule changes except HEADNguyễn Thái Ngọc Duy Sat, 13 Jan 2018 12:10:38 +0000 (19:10 +0700)

add--interactive: ignore submodule changes except HEAD

For 'add -i' and 'add -p', the only action we can take on a dirty
submodule entry is update the index with a new value from its HEAD. The
content changes inside (from its own index, untracked files...) do not
matter, at least until 'git add -i' learns about launching a new
interactive add session inside a submodule.

Ignore all other submodules changes except HEAD. This reduces the number
of entries the user has to check through in 'git add -i', and the number
of 'no' they have to answer to 'git add -p' when dirty submodules are
present.

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

Doc/git-submodule: improve readability and grammar... Kaartic Sivaraam Sun, 14 Jan 2018 17:37:37 +0000 (23:07 +0530)

Doc/git-submodule: improve readability and grammar of a sentence

While at it, correctly quote important words.

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

Doc/gitsubmodules: make some changes to improve readabi... Kaartic Sivaraam Sun, 14 Jan 2018 17:37:36 +0000 (23:07 +0530)

Doc/gitsubmodules: make some changes to improve readability and syntax

* Only mention porcelain commands in examples

* Split a sentence for better readability

* Add missing apostrophes

* Clearly specify the advantages of using submodules

* Avoid abbreviations

* Use "Git" consistently

* Improve readability of certain lines

* Clarify when a submodule is considered active

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Kaartic Sivaraam <kaartic.sivaraam@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: de.po: translate 72 new messagesRalf Thielow Tue, 2 Jan 2018 09:14:40 +0000 (10:14 +0100)

l10n: de.po: translate 72 new messages

Translate 72 new messages came from git.pot update in 18a907225 (l10n:
git.pot: v2.16.0 round 1 (64 new, 25 removed)) and 005c62fe4 (l10n:
git.pot: v2.16.0 round 2 (8 new, 4 removed)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Matthias Rüster <matthias.ruester@gmail.com>

l10n: de.po: improve messages when a branch starts... Ralf Thielow Sat, 16 Dec 2017 19:32:16 +0000 (20:32 +0100)

l10n: de.po: improve messages when a branch starts to track another ref

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

RelNotes: minor typofixSZEDER Gábor Fri, 12 Jan 2018 10:47:36 +0000 (11:47 +0100)

RelNotes: minor typofix

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

t9001: use existing helper in send-email testChristian Ludwig Fri, 12 Jan 2018 10:37:24 +0000 (11:37 +0100)

t9001: use existing helper in send-email test

Use the wrapper function around the sed statement like everywhere
else in the test. Unfortunately the wrapper function is defined
pretty late.

Move the wrapper to the top of the test file, so future users have it
available right away.

Signed-off-by: Christian Ludwig <chrissicool@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.16-rc2 v2.16.0-rc2Junio C Hamano Thu, 11 Jan 2018 21:20:41 +0000 (13:20 -0800)

Git 2.16-rc2

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

Merge branch 'jh/object-filtering'Junio C Hamano Thu, 11 Jan 2018 21:16:37 +0000 (13:16 -0800)

Merge branch 'jh/object-filtering'

Hotfix for a topic already in 'master'.

* jh/object-filtering:
oidset: don't return value from oidset_init

Merge branch 'tg/worktree-create-tracking'Junio C Hamano Thu, 11 Jan 2018 21:16:36 +0000 (13:16 -0800)

Merge branch 'tg/worktree-create-tracking'

Doc hotfix.

* tg/worktree-create-tracking:
Documentation/git-worktree.txt: add missing `

Merge branch 'js/test-with-ws-in-path'Junio C Hamano Thu, 11 Jan 2018 21:16:36 +0000 (13:16 -0800)

Merge branch 'js/test-with-ws-in-path'

Hot fix to a test.

* js/test-with-ws-in-path:
t3900: add some more quotes

l10n: bg.po: Updated Bulgarian translation (3288t)Alexander Shopov Thu, 11 Jan 2018 20:59:37 +0000 (21:59 +0100)

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

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

Documentation/git-worktree.txt: add missing `Ralf Thielow Thu, 11 Jan 2018 18:18:21 +0000 (19:18 +0100)

Documentation/git-worktree.txt: add missing `

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file doc: document that -e will return some outputÆvar Arnfjörð Bjarmason Wed, 10 Jan 2018 12:55:53 +0000 (12:55 +0000)

cat-file doc: document that -e will return some output

The -e option added in 7950571ad7 ("A few more options for
git-cat-file", 2005-12-03) has always errored out with message on
stderr saying that the provided object is malformed, like this:

$ git cat-file -e malformed; echo $?
fatal: Not a valid object name malformed
128

A reader of this documentation may be misled into thinking that

if ! git cat-file -e "$object" [...]

as opposed to:

if ! git cat-file -e "$object" 2>/dev/null [...]

is sufficient to implement a truly silent test that checks whether
some arbitrary $object string was both valid, and pointed to an
object that exists.

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

t3900: add some more quotesBeat Bolli Wed, 10 Jan 2018 09:58:32 +0000 (10:58 +0100)

t3900: add some more quotes

In 89a70b80 ("t0302 & t3900: add forgotten quotes", 2018-01-03), quotes
were added to protect against spaces in $HOME. In the test_when_finished
command, two files are deleted which must be quoted individually.

[jc: with \$HOME in the test_when_finished command quoted, as
pointed out by j6t].

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes update before -rc2Junio C Hamano Wed, 10 Jan 2018 22:01:50 +0000 (14:01 -0800)

RelNotes update before -rc2

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

Merge branch 'js/perl-path-workaround-in-tests'Junio C Hamano Wed, 10 Jan 2018 22:01:31 +0000 (14:01 -0800)

Merge branch 'js/perl-path-workaround-in-tests'

* js/perl-path-workaround-in-tests:
mingw: handle GITPERLLIB in t0021 in a Windows-compatible way

Merge branch 'ew/empty-merge-with-dirty-index'Junio C Hamano Wed, 10 Jan 2018 22:01:25 +0000 (14:01 -0800)

Merge branch 'ew/empty-merge-with-dirty-index'

"git merge -s recursive" did not correctly abort when the index is
dirty, if the merged tree happened to be the same as the current
HEAD, which has been fixed.

* ew/empty-merge-with-dirty-index:
merge-recursive: do not look at the index during recursive merge

Merge branch 'ma/bisect-leakfix'Junio C Hamano Wed, 10 Jan 2018 22:01:25 +0000 (14:01 -0800)

Merge branch 'ma/bisect-leakfix'

A hotfix for a recent update that broke 'git bisect'.

* ma/bisect-leakfix:
bisect: fix a regression causing a segfault

Merge branch 'js/fix-merge-arg-quoting-in-rebase-p'Junio C Hamano Wed, 10 Jan 2018 22:01:24 +0000 (14:01 -0800)

Merge branch 'js/fix-merge-arg-quoting-in-rebase-p'

"git rebase -p -X<option>" did not propagate the option properly
down to underlying merge strategy backend.

* js/fix-merge-arg-quoting-in-rebase-p:
rebase -p: fix quoting when calling `git merge`

mingw: handle GITPERLLIB in t0021 in a Windows-compatib... Johannes Schindelin Sat, 6 Jan 2018 22:01:22 +0000 (23:01 +0100)

mingw: handle GITPERLLIB in t0021 in a Windows-compatible way

Git's assumption that all path lists are colon-separated is not only
wrong on Windows, it is not even an assumption that is compatible with
POSIX.

In the interest of time, let's not try to fix this properly but simply
work around the obvious breakage on Windows, where the MSYS2 Bash used
by Git for Windows to interpret the Git's Unix shell scripts will
automagically convert path lists in the environment to
semicolon-separated lists of Windows paths (with drive letter and the
corresponding colon and all that jazz).

In other words, we simply look whether there is a semicolon in
GITPERLLIB and split by semicolons if found instead of colons. This is
not fool-proof, of course, as the path list could consist of a single
path. But that is not the case in Git for Windows' test suite, there are
always two paths in GITPERLLIB.

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

l10n: TEAMS: add zh_CN team membersJiang Xin Tue, 9 Jan 2018 01:55:12 +0000 (09:55 +0800)

l10n: TEAMS: add zh_CN team members

Add Fangyi Zhou to zh_CN l10n team members.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

l10n: zh_CN: for git v2.16.0 l10n round 2Jiang Xin Sun, 31 Dec 2017 02:50:17 +0000 (10:50 +0800)

l10n: zh_CN: for git v2.16.0 l10n round 2

Translate 72 messages (3288t0f0u) for git v2.16.0-rc1.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Reviewed-by: 依云 <lilydjwg@gmail.com>
Reviewed-by: Fangyi Zhou <fangyi.zhou@yuriko.moe>

Merge branch 'master' of git://github.com/nafmo/git... Jiang Xin Wed, 10 Jan 2018 03:30:04 +0000 (11:30 +0800)

Merge branch 'master' of git://github.com/nafmo/git-l10n-sv

* 'master' of git://github.com/nafmo/git-l10n-sv:
l10n: sv.po: Update Swedish translation (3288t0f0u)

Merge branch 'russian-l10n' of https://github.com/DJm00... Jiang Xin Wed, 10 Jan 2018 03:28:56 +0000 (11:28 +0800)

Merge branch 'russian-l10n' of https://github.com/DJm00n/git-po-ru

* 'russian-l10n' of https://github.com/DJm00n/git-po-ru:
l10n: ru.po: update Russian translation

Merge branch 'jk/doc-diff-options'Junio C Hamano Tue, 9 Jan 2018 22:32:57 +0000 (14:32 -0800)

Merge branch 'jk/doc-diff-options'

Doc update.

* jk/doc-diff-options:
docs/diff-options: clarify scope of diff-filter types

Merge branch 'bw/protocol-v1'Junio C Hamano Tue, 9 Jan 2018 22:32:56 +0000 (14:32 -0800)

Merge branch 'bw/protocol-v1'

Test fix for a topic already in 'master'.

* bw/protocol-v1:
http: fix v1 protocol tests with apache httpd < 2.4

Merge branch 'sg/travis-check-untracked'Junio C Hamano Tue, 9 Jan 2018 22:32:55 +0000 (14:32 -0800)

Merge branch 'sg/travis-check-untracked'

* sg/travis-check-untracked:
travis-ci: check that all build artifacts are .gitignore-d
travis-ci: don't store P4 and Git LFS in the working tree

Merge branch 'js/test-with-ws-in-path'Junio C Hamano Tue, 9 Jan 2018 22:32:55 +0000 (14:32 -0800)

Merge branch 'js/test-with-ws-in-path'

Test fixes.

* js/test-with-ws-in-path:
t0302 & t3900: add forgotten quotes
Allow the test suite to pass in a directory whose name contains spaces

Merge branch 'bc/submitting-patches-in-asciidoc'Junio C Hamano Tue, 9 Jan 2018 22:32:54 +0000 (14:32 -0800)

Merge branch 'bc/submitting-patches-in-asciidoc'

Doc readability update.

* bc/submitting-patches-in-asciidoc:
doc/SubmittingPatches: improve text formatting

Merge branch 'sg/travis-skip-identical-test'Junio C Hamano Tue, 9 Jan 2018 22:32:54 +0000 (14:32 -0800)

Merge branch 'sg/travis-skip-identical-test'

Avoid repeatedly testing the same tree in TravisCI that have been
tested successfully already.

* sg/travis-skip-identical-test:
travis-ci: record and skip successfully built trees
travis-ci: create the cache directory early in the build process
travis-ci: print the "tip of branch is exactly at tag" message in color

Merge branch 'ab/dc-sha1-loose-ends'Junio C Hamano Tue, 9 Jan 2018 22:32:53 +0000 (14:32 -0800)

Merge branch 'ab/dc-sha1-loose-ends'

Tying loose ends for the recent integration work of
collision-detecting SHA-1 implementation.

* ab/dc-sha1-loose-ends:
Makefile: NO_OPENSSL=1 should no longer imply BLK_SHA1=1

Merge branch 'sg/travis-fixes'Junio C Hamano Tue, 9 Jan 2018 22:32:53 +0000 (14:32 -0800)

Merge branch 'sg/travis-fixes'

Assorted updates for TravisCI integration.

* sg/travis-fixes:
travis-ci: only print test failures if there are test results available
travis-ci: save prove state for the 32 bit Linux build
travis-ci: don't install default addon packages for the 32 bit Linux build
travis-ci: fine tune the use of 'set -x' in 'ci/*' scripts

doc/read-tree: remove obsolete remarkAndreas G. Schacker Tue, 9 Jan 2018 15:30:34 +0000 (16:30 +0100)

doc/read-tree: remove obsolete remark

Earlier versions of `git read-tree` required the `--prefix` option value
to end with a slash. This restriction was eventually lifted without a
corresponding amendment to the documentation.

Signed-off-by: Andreas G. Schacker <andreas.schacker@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: sv.po: Update Swedish translation (3288t0f0u)Peter Krefting Tue, 9 Jan 2018 19:10:14 +0000 (20:10 +0100)

l10n: sv.po: Update Swedish translation (3288t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>

Merge branch 'js/misc-git-gui-stuff' of ../git-guiJunio C Hamano Tue, 9 Jan 2018 19:07:03 +0000 (11:07 -0800)

Merge branch 'js/misc-git-gui-stuff' of ../git-gui

* 'js/misc-git-gui-stuff' of ../git-gui:
git-gui: allow Ctrl+T to toggle multiple paths
git-gui: fix exception when trying to stage with empty file list
git-gui: avoid exception upon Ctrl+T in an empty list
git gui: fix staging a second line to a 1-line file

git-gui: allow Ctrl+T to toggle multiple pathsJohannes Schindelin Tue, 9 Jan 2018 14:33:04 +0000 (15:33 +0100)

git-gui: allow Ctrl+T to toggle multiple paths

It is possible to select multiple files in the "Unstaged Changes" and
the "Staged Changes" lists. But when hitting Ctrl+T, surprisingly only
one entry is handled, not all selected ones.

Let's just use the same code path as for the "Stage To Commit" and the
"Unstage From Commit" menu items.

This fixes https://github.com/git-for-windows/git/issues/1012

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

git-gui: fix exception when trying to stage with empty... Johannes Schindelin Tue, 9 Jan 2018 14:33:01 +0000 (15:33 +0100)

git-gui: fix exception when trying to stage with empty file list

If there is nothing to stage, there is nothing to stage. Let's not try
to, even if the file list contains nothing at all.

This fixes https://github.com/git-for-windows/git/issues/1075

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

git-gui: avoid exception upon Ctrl+T in an empty listJohannes Schindelin Tue, 9 Jan 2018 14:32:58 +0000 (15:32 +0100)

git-gui: avoid exception upon Ctrl+T in an empty list

Previously unstaged files can be staged by clicking on them and then
pressing Ctrl+T. Conveniently, the next unstaged file is selected
automatically so that the unstaged files can be staged by repeatedly
pressing Ctrl+T.

When a user hits Ctrl+T one time too many, though, Git GUI used to throw
this exception:

expected number but got ""
expected number but got ""
while executing
"expr {int([lindex [$w tag ranges in_diff] 0])}"
(procedure "toggle_or_diff" line 13)
invoked from within
"toggle_or_diff toggle .vpane.files.workdir.list "
(command bound to event)

Let's just avoid that by skipping the operation when there are no more
files to stage.

This fixes https://github.com/git-for-windows/git/issues/1060

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

git gui: fix staging a second line to a 1-line fileJohannes Schindelin Tue, 9 Jan 2018 14:32:54 +0000 (15:32 +0100)

git gui: fix staging a second line to a 1-line file

When a 1-line file is augmented by a second line, and the user tries to
stage that single line via the "Stage Line" context menu item, we do not
want to see "apply: corrupt patch at line 5".

The reason for this error was that the hunk header looks like this:

@@ -1 +1,2 @@

but the existing code expects the original range always to contain a
comma. This problem is easily fixed by cutting the string "1 +1,2"
(that Git GUI formerly mistook for the starting line) at the space.

This fixes https://github.com/git-for-windows/git/issues/515

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

bisect: debug: convert struct object to object_idYasushi SHOJI Tue, 9 Jan 2018 11:03:56 +0000 (20:03 +0900)

bisect: debug: convert struct object to object_id

The commit f2fd0760 ("Convert struct object to object_id",
2015-11-10) converted struct object to object_id but forgot to
adjust a few callers in a debug function show_list(), which is
ifdef'ed to noop, in bisect.c.

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

Merge branch 'ew/empty-merge-with-dirty-index-maint... Junio C Hamano Tue, 9 Jan 2018 18:41:37 +0000 (10:41 -0800)

Merge branch 'ew/empty-merge-with-dirty-index-maint' into ew/empty-merge-with-dirty-index

* ew/empty-merge-with-dirty-index-maint:
merge-recursive: do not look at the index during recursive merge

merge-recursive: do not look at the index during recurs... Junio C Hamano Tue, 9 Jan 2018 18:05:51 +0000 (10:05 -0800)

merge-recursive: do not look at the index during recursive merge

When merging another branch into ours, if their tree is the same as
the common ancestor's, we can declare that our tree represents the
result of three-way merge. In such a case, the recursive merge
backend incorrectly used to create a commit out of our index, even
when the index has changes.

A recent fix attempted to prevent this by adding a comparison
between "our" tree and the index, but forgot that this check must be
restricted only to the outermost merge. Inner merges performed by
the recursive backend across merge bases are by definition made from
scratch without having any local changes added to the index. The
call to index_has_changes() during an inner merge is working on the
index that has no relation to the merge being performed, preventing
legitimate merges from getting carried out.

Fix it by limiting the check to the outermost merge.

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

l10n: ru.po: update Russian translationDimitriy Ryazantcev Tue, 9 Jan 2018 10:21:52 +0000 (12:21 +0200)

l10n: ru.po: update Russian translation

Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>

l10n: TEAMS: Add ko team membersChangwoo Ryu Tue, 9 Jan 2018 02:32:47 +0000 (11:32 +0900)

l10n: TEAMS: Add ko team members

Add Gwan-gyeong Mun and Sihyeon Jang.

Signed-off-by: Changwoo Ryu <cwryu@debian.org>

Merge branch 'ko/merge-l10n' of https://github.com... Jiang Xin Tue, 9 Jan 2018 01:47:11 +0000 (09:47 +0800)

Merge branch 'ko/merge-l10n' of https://github.com/git-l10n-ko/git-l10n-ko

* 'ko/merge-l10n' of https://github.com/git-l10n-ko/git-l10n-ko:
l10n: ko.po: Update Korean translation

oidset: don't return value from oidset_initThomas Gummerer Sun, 7 Jan 2018 23:04:04 +0000 (23:04 +0000)

oidset: don't return value from oidset_init

c3a9ad3117 ("oidset: add iterator methods to oidset", 2017-11-21)
introduced a 'oidset_init()' function in oidset.h, which has void as
return type, but returns an expression.

This makes the solaris compiler fail with:

"oidset.h", line 30: void function cannot return value

As the return type is void, and even the return type of the expression
we're trying to return (oidmap_init) is void just remove the return
statement to fix the compiler error.

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

travis-ci: build Git during the 'script' phaseSZEDER Gábor Mon, 8 Jan 2018 17:22:14 +0000 (18:22 +0100)

travis-ci: build Git during the 'script' phase

Ever since we started building and testing Git on Travis CI (522354d70
(Add Travis CI support, 2015-11-27)), we build Git in the
'before_script' phase and run the test suite in the 'script' phase
(except in the later introduced 32 bit Linux and Windows build jobs,
where we build in the 'script' phase').

Contrarily, the Travis CI practice is to build and test in the
'script' phase; indeed Travis CI's default build command for the
'script' phase of C/C++ projects is:

./configure && make && make test

The reason why Travis CI does it this way and why it's a better
approach than ours lies in how unsuccessful build jobs are
categorized. After something went wrong in a build job, its state can
be:

- 'failed', if a command in the 'script' phase returned an error.
This is indicated by a red 'X' on the Travis CI web interface.

- 'errored', if a command in the 'before_install', 'install', or
'before_script' phase returned an error, or the build job exceeded
the time limit. This is shown as a red '!' on the web interface.

This makes it easier, both for humans looking at the Travis CI web
interface and for automated tools querying the Travis CI API, to
decide when an unsuccessful build is our responsibility requiring
human attention, i.e. when a build job 'failed' because of a compiler
error or a test failure, and when it's caused by something beyond our
control and might be fixed by restarting the build job, e.g. when a
build job 'errored' because a dependency couldn't be installed due to
a temporary network error or because the OSX build job exceeded its
time limit.

The drawback of building Git in the 'before_script' phase is that one
has to check the trace log of all 'errored' build jobs, too, to see
what caused the error, as it might have been caused by a compiler
error. This requires additional clicks and page loads on the web
interface and additional complexity and API requests in automated
tools.

Therefore, move building Git from the 'before_script' phase to the
'script' phase, updating the script's name accordingly as well.
'ci/run-builds.sh' now becomes basically empty, remove it. Several of
our build job configurations override our default 'before_script' to
do nothing; with this change our default 'before_script' won't do
anything, either, so remove those overriding directives as well.

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

stash: don't delete untracked files that match pathspecThomas Gummerer Sat, 6 Jan 2018 00:24:20 +0000 (00:24 +0000)

stash: don't delete untracked files that match pathspec

Currently when 'git stash push -- <pathspec>' is used, untracked files
that match the pathspec will be deleted, even though they do not end up
in a stash anywhere.

This is because the original commit introducing the pathspec feature in
git stash push (df6bba0937 ("stash: teach 'push' (and 'create_stash') to
honor pathspec", 2017-02-28)) used the sequence of 'git reset <pathspec>
&& git ls-files --modified <pathspec> | git checkout-index && git clean
<pathspec>'.

The intention was to emulate what 'git reset --hard -- <pathspec>' would
do. The call to 'git clean' was supposed to clean up the files that
were unstaged by 'git reset'. This would work fine if the pathspec
doesn't match any files that were untracked before 'git stash push --
<pathspec>'. However if <pathspec> matches a file that was untracked
before invoking the 'stash' command, all untracked files matching the
pathspec would inadvertently be deleted as well, even though they
wouldn't end up in the stash, and are therefore lost.

This behaviour was never what was intended, only blobs that also end up
in the stash should be reset to their state in HEAD, previously
untracked files should be left alone.

To achieve this, first match what's in the index and what's in the
working tree by adding all changes to the index, ask diff-index what
changed between HEAD and the current index, and then apply that patch in
reverse to get rid of the changes, which includes removal of added
files and resurrection of removed files.

Reported-by: Reid Price <reid.price@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: ko.po: Update Korean translationChangwoo Ryu Mon, 8 Jan 2018 01:25:27 +0000 (10:25 +0900)

l10n: ko.po: Update Korean translation

Signed-off-by: Changwoo Ryu <cwryu@debian.org>
Signed-off-by: Sihyeon Jang <uneedsihyeon@gmail.com>
Signed-off-by: Gwan-gyeong Mun <elongbug@gmail.com>
Reviewed-by: Changwoo Ryu <cwryu@debian.org>

Merge branch '2.16' of https://github.com/ChrisADR... Jiang Xin Mon, 8 Jan 2018 02:59:24 +0000 (10:59 +0800)

Merge branch '2.16' of https://github.com/ChrisADR/git-po

* '2.16' of https://github.com/ChrisADR/git-po:
l10n: es.po: Spanish translation 2.16.0 round 2

Merge branch 'fr_2.16-rc1' of git://github.com/jnavila/gitJiang Xin Mon, 8 Jan 2018 01:17:24 +0000 (09:17 +0800)

Merge branch 'fr_2.16-rc1' of git://github.com/jnavila/git

* 'fr_2.16-rc1' of git://github.com/jnavila/git:
l10n: fr.po 2.16 round 2

l10n: fr.po 2.16 round 2Jean-Noel Avila Sun, 7 Jan 2018 17:57:48 +0000 (18:57 +0100)

l10n: fr.po 2.16 round 2

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>

l10n: es.po: Spanish translation 2.16.0 round 2Christopher Díaz Riveros Sun, 7 Jan 2018 17:15:35 +0000 (12:15 -0500)

l10n: es.po: Spanish translation 2.16.0 round 2

Signed-off-by: Christopher Díaz Riveros <chrisadr@gentoo.org>

l10n: vi.po(3288t): Updated Vietnamese translation... Tran Ngoc Quan Sun, 7 Jan 2018 01:20:27 +0000 (08:20 +0700)

l10n: vi.po(3288t): Updated Vietnamese translation for v2.16.0 round 2

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

l10n: git.pot: v2.16.0 round 2 (8 new, 4 removed)Jiang Xin Sat, 6 Jan 2018 23:50:31 +0000 (07:50 +0800)

l10n: git.pot: v2.16.0 round 2 (8 new, 4 removed)

Generate po/git.pot from v2.16.0-rc1 for git v2.16.0 l10n round 2.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

Merge branch 'master' of git://github.com/git-l10n... Jiang Xin Sat, 6 Jan 2018 23:49:43 +0000 (07:49 +0800)

Merge branch 'master' of git://github.com/git-l10n/git-po

* 'master' of git://github.com/git-l10n/git-po:
l10n: es.po: Update Spanish Translation v2.16.0
l10n: fr.po v2.16.0 round 1
l10n: bg.po: Updated Bulgarian translation (3284t)
l10n: sv.po: Update Swedish translation (3284t0f0u)
l10n: fr.po: "worktree list" mistranslated as prune
l10n: git.pot: v2.16.0 round 1 (64 new, 25 removed)
l10n: fixes to German translation
l10n: Update Spanish translation
l10n: zh_CN translate parameter name
l10n: zh_CN Fix typo
l10n: Fixes to Catalan translation

Merge branch '2.16' of https://github.com/ChrisADR... Jiang Xin Sat, 6 Jan 2018 02:26:30 +0000 (10:26 +0800)

Merge branch '2.16' of https://github.com/ChrisADR/git-po

* '2.16' of https://github.com/ChrisADR/git-po:
l10n: es.po: Update Spanish Translation v2.16.0

Merge branch 'fr_2.16' of git://github.com/jnavila/gitJiang Xin Sat, 6 Jan 2018 02:24:52 +0000 (10:24 +0800)

Merge branch 'fr_2.16' of git://github.com/jnavila/git

* 'fr_2.16' of git://github.com/jnavila/git:
l10n: fr.po v2.16.0 round 1
l10n: fr.po: "worktree list" mistranslated as prune

Git 2.16-rc1 v2.16.0-rc1Junio C Hamano Fri, 5 Jan 2018 21:45:17 +0000 (13:45 -0800)

Git 2.16-rc1

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

Merge branch 'js/sequencer-cleanups'Junio C Hamano Fri, 5 Jan 2018 21:28:11 +0000 (13:28 -0800)

Merge branch 'js/sequencer-cleanups'

Code cleanup.

* js/sequencer-cleanups:
sequencer: do not invent whitespace when transforming OIDs
sequencer: report when noop has an argument
sequencer: remove superfluous conditional
sequencer: strip bogus LF at end of error messages
rebase: do not continue when the todo list generation failed

Merge branch 'jh/memihash-opt'Junio C Hamano Fri, 5 Jan 2018 21:28:11 +0000 (13:28 -0800)

Merge branch 'jh/memihash-opt'

Squelch compiler warning.

* jh/memihash-opt:
t/helper/test-lazy-name-hash: fix compilation

Merge branch 'tb/test-lint-wc-l'Junio C Hamano Fri, 5 Jan 2018 21:28:11 +0000 (13:28 -0800)

Merge branch 'tb/test-lint-wc-l'

Test update.

* tb/test-lint-wc-l:
check-non-portable-shell.pl: `wc -l` may have leading WS

Merge branch 'rs/use-argv-array-in-child-process'Junio C Hamano Fri, 5 Jan 2018 21:28:10 +0000 (13:28 -0800)

Merge branch 'rs/use-argv-array-in-child-process'

Code cleanup.

* rs/use-argv-array-in-child-process:
send-pack: use internal argv_array of struct child_process
http: use internal argv_array of struct child_process

Merge branch 'ld/p4-multiple-shelves'Junio C Hamano Fri, 5 Jan 2018 21:28:10 +0000 (13:28 -0800)

Merge branch 'ld/p4-multiple-shelves'

"git p4" update.

* ld/p4-multiple-shelves:
git-p4: update multiple shelved change lists

Merge branch 'jd/fix-strbuf-add-urlencode-bytes'Junio C Hamano Fri, 5 Jan 2018 21:28:10 +0000 (13:28 -0800)

Merge branch 'jd/fix-strbuf-add-urlencode-bytes'

Bytes with high-bit set were encoded incorrectly and made
credential helper fail.

* jd/fix-strbuf-add-urlencode-bytes:
strbuf: fix urlencode format string on signed char

Merge branch 'ew/empty-merge-with-dirty-index'Junio C Hamano Fri, 5 Jan 2018 21:28:09 +0000 (13:28 -0800)

Merge branch 'ew/empty-merge-with-dirty-index'

"git merge -s recursive" did not correctly abort when the index is
dirty, if the merged tree happened to be the same as the current
HEAD, which has been fixed.

* ew/empty-merge-with-dirty-index:
merge-recursive: avoid incorporating uncommitted changes in a merge
move index_has_changes() from builtin/am.c to merge.c for reuse
t6044: recursive can silently incorporate dirty changes in a merge

Merge branch 'db/doc-config-section-names-with-bs'Junio C Hamano Fri, 5 Jan 2018 21:28:09 +0000 (13:28 -0800)

Merge branch 'db/doc-config-section-names-with-bs'

Doc update.

* db/doc-config-section-names-with-bs:
config.txt: document behavior of backslashes in subsections

Merge branch 'jk/test-suite-tracing'Junio C Hamano Fri, 5 Jan 2018 21:28:09 +0000 (13:28 -0800)

Merge branch 'jk/test-suite-tracing'

Assorted fixes around running tests with "-x" tracing option.

* jk/test-suite-tracing:
t/Makefile: introduce TEST_SHELL_PATH
test-lib: make "-x" work with "--verbose-log"
t5615: avoid re-using descriptor 4
test-lib: silence "-x" cleanup under bash

submodule: submodule_move_head omits old argument in... Stefan Beller Fri, 5 Jan 2018 20:03:04 +0000 (12:03 -0800)

submodule: submodule_move_head omits old argument in forced case

When using hard reset or forced checkout with the option to recurse into
submodules, the submodules need to be reset, too.

It turns out that we need to omit the duplicate old argument to read-tree
in all forced cases to omit the 2 way merge and use the more assertive
behavior of reading the specific new tree into the index and updating
the working tree.

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

unpack-trees: oneway_merge to update submodulesStefan Beller Fri, 5 Jan 2018 20:03:03 +0000 (12:03 -0800)

unpack-trees: oneway_merge to update submodules

When there is a one way merge, each submodule needs to be one way merged
as well, if we're asked to recurse into submodules.

In case of a submodule, check if it is up-to-date, otherwise set the
flag CE_UPDATE, which will trigger an update of it in the phase updating
the tree later.

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

t/lib-submodule-update.sh: fix test ignoring ignored... Stefan Beller Fri, 5 Jan 2018 20:03:02 +0000 (12:03 -0800)

t/lib-submodule-update.sh: fix test ignoring ignored files in submodules

It turns out that the test replacing a submodule with a file with
the submodule containing an ignored file is incorrectly titled,
because the test put the file in place, but never ignored that file.
When having an untracked file Instead of an ignored file in the
submodule, git should refuse to remove the submodule, but that is
a bug in the implementation of recursing into submodules, such that
the test just passed, removing the untracked file.

Fix the test first; in a later patch we'll fix gits behavior,
that will make sure untracked files are not deleted.

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

t/lib-submodule-update.sh: clarify testStefan Beller Fri, 5 Jan 2018 20:03:01 +0000 (12:03 -0800)

t/lib-submodule-update.sh: clarify test

Keep the local branch name as the upstream branch name to avoid confusion.

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

rebase -p: fix quoting when calling `git merge`Johannes Schindelin Thu, 4 Jan 2018 21:31:52 +0000 (22:31 +0100)

rebase -p: fix quoting when calling `git merge`

It has been reported that strategy arguments are not passed to `git
merge` correctly when rebasing interactively, preserving merges.

The reason is that the strategy arguments are already quoted, and then
quoted again.

This fixes https://github.com/git-for-windows/git/issues/1321

Original-patch-by: Kim Gybels <kgybels@infogroep.be>
Also-reported-by: Matwey V. Kornilov <matwey.kornilov@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: es.po: Update Spanish Translation v2.16.0Christopher Díaz Riveros Thu, 4 Jan 2018 21:06:40 +0000 (16:06 -0500)

l10n: es.po: Update Spanish Translation v2.16.0

Signed-off-by: Christopher Díaz Riveros <chrisadr@gentoo.org>

docs/diff-options: clarify scope of diff-filter typesJeff King Thu, 4 Jan 2018 16:49:42 +0000 (11:49 -0500)

docs/diff-options: clarify scope of diff-filter types

The same document for "--diff-filter" is included by many
programs in the diff family. Because it mentions all
possible types (added, removed, etc), this may imply to the
reader that all types can be generated by a particular
command. But this isn't necessarily the case; "diff-files"
cannot generally produce an "Added" entry, since the diff is
limited to what is already in the index.

Let's make it clear that the list here is the full one, and
does not imply anything about what a particular invocation
may produce.

Note that conditionally including items (e.g., omitting
"Added" in the git-diff-files manpage) isn't the right
solution here for two reasons:

- The problem isn't diff-files, but doing an index to
working tree diff. "git diff" can do the same diff, but
also has other modes where "Added" does show up.

- The direction of the diff matters. Doing "diff-files -R"
can get you Added entries (but not Deleted ones).

So it's best just to explain that the set of available types
depends on the specific diff invocation.

Reported-by: John Cheng <johnlicheng@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http: fix v1 protocol tests with apache httpd < 2.4Todd Zullinger Sun, 31 Dec 2017 02:32:34 +0000 (21:32 -0500)

http: fix v1 protocol tests with apache httpd < 2.4

The apache config used by tests was updated to use the SetEnvIf
directive to set the Git-Protocol header in 19113a26b6 ("http: tell
server that the client understands v1", 2017-10-16).

Setting the Git-Protocol header is restricted to httpd >= 2.4, but
mod_setenvif and the SetEnvIf directive work with lower versions, at
least as far back as 2.0, according to the httpd documentation:

https://httpd.apache.org/docs/2.0/mod/mod_setenvif.html

Drop the restriction. Tested with httpd 2.2 and 2.4.

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

perf: amend the grep tests to test grep.threadsÆvar Arnfjörð Bjarmason Fri, 29 Dec 2017 22:59:03 +0000 (22:59 +0000)

perf: amend the grep tests to test grep.threads

Ever since 5b594f457a ("Threaded grep", 2010-01-25) the number of
threads git-grep uses under PTHREADS has been hardcoded to 8, but
there's no performance test to check whether this is an optimal
setting.

Amend the existing tests for the grep engines to support a mode where
this can be tested, e.g.:

GIT_PERF_GREP_THREADS='1 8 16' GIT_PERF_LARGE_REPO=~/g/linux ./run p782*

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

t0302 & t3900: add forgotten quotesJohannes Schindelin Wed, 3 Jan 2018 16:54:54 +0000 (17:54 +0100)

t0302 & t3900: add forgotten quotes

When cleaning up files in the $HOME directory, it really makes sense to
quote the path, especially in Git's test suite, where the HOME directory
is *guaranteed* to contain spaces in its name.

It would appear that those two tests pass even without cleaning up the
files, but really more by pure chance than by design (the cleanup seems
not actually to be necessary).

However, if anybody would have a left-over `trash/` directory in Git's
`t/` directory, these tests would fail, because they would all of a
sudden try to delete that directory, but without the `-r` (recursive)
flag. That is how this issue was found.

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

Allow the test suite to pass in a directory whose name... Johannes Schindelin Wed, 3 Jan 2018 16:54:50 +0000 (17:54 +0100)

Allow the test suite to pass in a directory whose name contains spaces

It is totally legitimate to clone Git's source code anywhere, including
into, say, directories whose name (or the name of its absolute path)
contains spaces.

However, a couple of tests failed to anticipate this, for lack of
quoting (or in one instance, for failure to expect more than one space
in the absolute path of the TEST_DIRECTORY). This can be easily verified
by calling these commands in your current clone:

git clone . with\ spaces
cd with\ spaces
make -j15 test

Let's fix this.

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

bisect: fix a regression causing a segfaultÆvar Arnfjörð Bjarmason Wed, 3 Jan 2018 18:48:52 +0000 (18:48 +0000)

bisect: fix a regression causing a segfault

In 7c117184d7 ("bisect: fix off-by-one error in
`best_bisection_sorted()`", 2017-11-05) the more careful logic dealing
with freeing p->next in 50e62a8e70 ("rev-list: implement
--bisect-all", 2007-10-22) was removed.

Restore the more careful check to avoid segfaulting. Ideally this
would come with a test case, but we don't have steps to reproduce
this, only a backtrace from gdb pointing to this being the issue.

Reported-by: Yasushi SHOJI <yasushi.shoji@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Acked-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc/SubmittingPatches: improve text formattingTodd Zullinger Tue, 2 Jan 2018 15:33:50 +0000 (10:33 -0500)

doc/SubmittingPatches: improve text formatting

049e64aa50 ("Documentation: convert SubmittingPatches to AsciiDoc",
2017-11-12) changed the `git blame` and `git shortlog` examples given in
the section on sending your patches.

In order to italicize the `$path` argument the commands are enclosed in
plus characters as opposed to backticks. The difference between the
quoting methods is that backtick enclosed text is not subject to further
expansion. This formatting makes reading SubmittingPatches in a git
clone a little more difficult. In addition to the underscores around
`$path` the `--` chars in `git shortlog --no-merges` must be replaced
with `{litdd}`.

Use backticks to quote these commands. The italicized `$path` is lost
from the html version but the commands can be read (and copied) more
easily by users reading the text version. These readers are more likely
to use the commands while submitting patches. Make it easier for them.

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

clone: do not clean up directories we didn't createJeff King Tue, 2 Jan 2018 21:11:39 +0000 (16:11 -0500)

clone: do not clean up directories we didn't create

Once upon a time, git-clone would refuse to write into a
directory that it did not itself create. The cleanup
routines for a failed clone could therefore just remove the
git and worktree dirs completely.

In 55892d2398 (Allow cloning to an existing empty directory,
2009-01-11), we learned to write into an existing directory.
Which means that doing:

mkdir foo
git clone will-fail foo

ends up deleting foo. This isn't a huge catastrophe, since
by definition foo must be empty. But it's somewhat
confusing; we should leave the filesystem as we found it.

Because we know that the only directory we'll write into is
an empty one, we can handle this case by just passing the
KEEP_TOPLEVEL flag to our recursive delete (if we could
write into populated directories, we'd have to keep track of
what we wrote and what we did not, which would be much
harder).

Note that we need to handle the work-tree and git-dir
separately, though, as only one might exist (and the new
tests in t5600 cover all cases).

Reported-by: Stephan Janssen <sjanssen@you-get.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

clone: factor out dir_exists() helperJeff King Tue, 2 Jan 2018 21:10:14 +0000 (16:10 -0500)

clone: factor out dir_exists() helper

Two parts of git-clone's setup logic check whether a
directory exists, and they both call stat directly with the
same scratch "struct stat" buffer. Let's pull that into a
helper, which has a few advantages:

- it makes the purpose of the stat calls more obvious

- it makes it clear that we don't care about the
information in "buf" remaining valid

- if we later decide to make the check more robust (e.g.,
complaining about non-directories), we can do it in one
place

Note that we could just use file_exists() for this, which
has identical code. But we specifically care about
directories, so this future-proofs us against that function
later getting more picky about seeing actual files.

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

t5600: modernize styleJeff King Tue, 2 Jan 2018 21:09:00 +0000 (16:09 -0500)

t5600: modernize style

This is an old script which could use some updating before
we add to it:

- use the standard line-breaking:

test_expect_success 'title' '
body
'

- run all code inside test_expect blocks to catch
unexpected failures in setup steps

- use "test_commit -C" instead of manually entering
sub-repo

- use test_when_finished for cleanup steps

- test_path_is_* as appropriate

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

t5600: fix outdated comment about unborn HEADJeff King Tue, 2 Jan 2018 21:08:33 +0000 (16:08 -0500)

t5600: fix outdated comment about unborn HEAD

Back when this test was written, git-clone could not handle
a repository without any commits. These days it works fine,
and this comment is out of date.

At first glance it seems like we could just drop this code
entirely now, but it's necessary for the final test, which
was added later. That test corrupts the repository by
temporarily removing its objects, which means we need to
have some objects to move.

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

travis-ci: check that all build artifacts are .gitignore-dSZEDER Gábor Sun, 31 Dec 2017 16:02:06 +0000 (17:02 +0100)

travis-ci: check that all build artifacts are .gitignore-d

Every once in a while our explicit .gitignore files get out of sync
when our build process learns to create new artifacts, like test
helper executables, but the .gitignore files are not updated
accordingly.

Use Travis CI to help catch such issues earlier: check that there are
no untracked files at the end of any build jobs building Git (i.e. the
64 bit Clang and GCC Linux and OSX build jobs, plus the GETTEXT_POISON
and 32 bit Linux build jobs) or its documentation, and fail the build
job if there are any present.

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

travis-ci: don't store P4 and Git LFS in the working... SZEDER Gábor Sun, 31 Dec 2017 16:02:05 +0000 (17:02 +0100)

travis-ci: don't store P4 and Git LFS in the working tree

The Clang and GCC 64 bit Linux build jobs download and store the P4
and Git LFS executables under the current directory, which is the
working tree that we are about to build and test. This means that Git
commands like 'status' or 'ls-files' would list these files as
untracked. The next commit is about to make sure that there are no
untracked files present after the build, and the downloaded
executables in the working tree are interfering with those upcoming
checks.

Therefore, let's download P4 and Git LFS in the home directory,
outside of the working tree.

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

merge: teach -Xours/-Xtheirs to symbolic link mergeJunio C Hamano Tue, 26 Sep 2017 02:40:42 +0000 (11:40 +0900)

merge: teach -Xours/-Xtheirs to symbolic link merge

The -Xours/-Xtheirs merge options were originally defined as a way
to "force" the resolution of 3way textual merge conflicts to take
one side without using your editor, hence did not even trigger in
situations where you would normally not get the <<< === >>> conflict
markers.

This was improved for binary files back in 2012 with a944af1d
("merge: teach -Xours/-Xtheirs to binary ll-merge driver",
2012-09-08).

Teach a similar trick to the codepath that deals with merging two
conflicting changes to symbolic links.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Tested-by: Yaroslav Halchenko <yoh@onerussian.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: fr.po v2.16.0 round 1Jean-Noel Avila Sun, 31 Dec 2017 16:35:53 +0000 (17:35 +0100)

l10n: fr.po v2.16.0 round 1

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>

travis-ci: record and skip successfully built treesSZEDER Gábor Sun, 31 Dec 2017 10:12:05 +0000 (11:12 +0100)

travis-ci: record and skip successfully built trees

Travis CI dutifully builds and tests each new branch tip, even if its
tree has previously been successfully built and tested. This happens
often enough in contributors' workflows, when a work-in-progress
branch is rebased changing e.g. only commit messages or the order or
number of commits while leaving the resulting code intact, and is then
pushed to a Travis CI-enabled GitHub fork.

This is wasting Travis CI's resources and is sometimes scary-annoying
when the new tip commit with a tree identical to the previous,
successfully tested one is suddenly reported in red, because one of
the OSX build jobs happened to exceed the time limit yet again.

So extend our Travis CI build scripts to skip building commits whose
trees have previously been successfully built and tested. Use the
Travis CI cache feature to keep a record of the object names of trees
that tested successfully, in a plain and simple flat text file, one
line per tree object name. Append the current tree's object name at
the end of every successful build job to this file, along with a bit
of additional info about the build job (commit object name, Travis CI
job number and id). Limit the size of this file to 1000 records, to
prevent it from growing too large for git/git's forever living
integration branches. Check, using a simple grep invocation, in each
build job whether the current commit's tree is already in there, and
skip the build if it is. Include a message in the skipped build job's
trace log, containing the URL to the build job successfully testing
that tree for the first time and instructions on how to force a
re-build. Catch the case when a build job, which successfully built
and tested a particular tree for the first time, is restarted and omit
the URL of the previous build job's trace log, as in this case it's
the same build job and the trace log has just been overwritten.

Note: this won't kick in if two identical trees are on two different
branches, because Travis CI caches are not shared between build jobs
of different branches.

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