gitweb.git
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>

travis-ci: create the cache directory early in the... SZEDER Gábor Sun, 31 Dec 2017 10:12:04 +0000 (11:12 +0100)

travis-ci: create the cache directory early in the build process

It seems that Travis CI creates the cache directory for us anyway,
even when a previous cache doesn't exist for the current build job.
Alas, this behavior is not explicitly documented, therefore we don't
rely on it and create the cache directory ourselves in those build
jobs that read/write cached data (currently only the prove state).

In the following commit we'll start to cache additional data in every
build job, and will access the cache much earlier in the build
process.

Therefore move creating the cache directory to 'ci/lib-travisci.sh' to
make sure that it exists at the very beginning of every build job.

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>

travis-ci: print the "tip of branch is exactly at tag... SZEDER Gábor Sun, 31 Dec 2017 10:12:03 +0000 (11:12 +0100)

travis-ci: print the "tip of branch is exactly at tag" message in color

To make this info message stand out from the regular build job trace
output.

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>

Merge branch 'master' of git://github.com/alshopov... Jiang Xin Tue, 2 Jan 2018 14:45:47 +0000 (22:45 +0800)

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

* 'master' of git://github.com/alshopov/git-po:
l10n: bg.po: Updated Bulgarian translation (3284t)

l10n: bg.po: Updated Bulgarian translation (3284t)Alexander Shopov Mon, 1 Jan 2018 20:41:26 +0000 (21:41 +0100)

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

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

l10n: sv.po: Update Swedish translation (3284t0f0u)Peter Krefting Mon, 1 Jan 2018 08:38:15 +0000 (09:38 +0100)

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

Also corrected spelling.

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

l10n: fr.po: "worktree list" mistranslated as pruneLouis Bettens Wed, 22 Nov 2017 17:24:40 +0000 (18:24 +0100)

l10n: fr.po: "worktree list" mistranslated as prune

Signed-off-by: Louis Bettens <louis@bettens.info>

Merge branch 'maint' of git://github.com/git-l10n/git-poJiang Xin Sun, 31 Dec 2017 02:48:20 +0000 (10:48 +0800)

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

* 'maint' of git://github.com/git-l10n/git-po:
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

l10n: git.pot: v2.16.0 round 1 (64 new, 25 removed)Jiang Xin Sun, 31 Dec 2017 02:46:19 +0000 (10:46 +0800)

l10n: git.pot: v2.16.0 round 1 (64 new, 25 removed)

Generate po/git.pot from v2.16.0-rc0 for git v2.16.0 l10n round 1.

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

Git 2.16-rc0 v2.16.0-rc0Junio C Hamano Thu, 28 Dec 2017 22:12:06 +0000 (14:12 -0800)

Git 2.16-rc0

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

Merge branch 'sb/describe-blob'Junio C Hamano Thu, 28 Dec 2017 22:08:50 +0000 (14:08 -0800)

Merge branch 'sb/describe-blob'

"git describe" was taught to dig trees deeper to find a
<commit-ish>:<path> that refers to a given blob object.

* sb/describe-blob:
builtin/describe.c: describe a blob
builtin/describe.c: factor out describe_commit
builtin/describe.c: print debug statements earlier
builtin/describe.c: rename `oid` to avoid variable shadowing
revision.h: introduce blob/tree walking in order of the commits
list-objects.c: factor out traverse_trees_and_blobs
t6120: fix typo in test name

Merge branch 'hi/merge-verify-sig-config'Junio C Hamano Thu, 28 Dec 2017 22:08:50 +0000 (14:08 -0800)

Merge branch 'hi/merge-verify-sig-config'

"git merge" learned to pay attention to merge.verifySignatures
configuration variable and pretend as if '--verify-signatures'
option was given from the command line.

* hi/merge-verify-sig-config:
t5573, t7612: clean up after unexpected success of 'pull' and 'merge'
t: add tests for pull --verify-signatures
merge: add config option for verifySignatures

Merge branch 'ws/curl-http-proxy-over-https'Junio C Hamano Thu, 28 Dec 2017 22:08:50 +0000 (14:08 -0800)

Merge branch 'ws/curl-http-proxy-over-https'

Git has been taught to support an https:// URL used for http.proxy
when using recent versions of libcurl.

* ws/curl-http-proxy-over-https:
http: support CURLPROXY_HTTPS

Merge branch 'ks/doc-previous-checkout'Junio C Hamano Thu, 28 Dec 2017 22:08:49 +0000 (14:08 -0800)

Merge branch 'ks/doc-previous-checkout'

Doc update.

* ks/doc-previous-checkout:
Doc/check-ref-format: clarify information about @{-N} syntax

Merge branch 'ks/rebase-error-messages'Junio C Hamano Thu, 28 Dec 2017 22:08:49 +0000 (14:08 -0800)

Merge branch 'ks/rebase-error-messages'

Error messages from "git rebase" have been somewhat cleaned up.

* ks/rebase-error-messages:
rebase: rebasing can also be done when HEAD is detached
rebase: distinguish user input by quoting it
rebase: consistently use branch_name variable

Merge branch 'sr/http-sslverify-config-doc'Junio C Hamano Thu, 28 Dec 2017 22:08:49 +0000 (14:08 -0800)

Merge branch 'sr/http-sslverify-config-doc'

Docfix.

* sr/http-sslverify-config-doc:
config: document default value of http.sslVerify

Merge branch 'nm/imap-send-quote-server-folder-name'Junio C Hamano Thu, 28 Dec 2017 22:08:48 +0000 (14:08 -0800)

Merge branch 'nm/imap-send-quote-server-folder-name'

"git imap-send" did not correctly quote the folder name when
making a request to the server, which has been corrected.

* nm/imap-send-quote-server-folder-name:
imap-send: URI encode server folder

Merge branch 'bp/fsmonitor'Junio C Hamano Thu, 28 Dec 2017 22:08:48 +0000 (14:08 -0800)

Merge branch 'bp/fsmonitor'

Test fix.

* bp/fsmonitor:
p7519: improve check for prerequisite WATCHMAN

Merge branch 'jh/partial-clone-doc'Junio C Hamano Thu, 28 Dec 2017 22:08:47 +0000 (14:08 -0800)

Merge branch 'jh/partial-clone-doc'

* jh/partial-clone-doc:
partial-clone: design doc

Merge branch 'jt/transport-hide-vtable'Junio C Hamano Thu, 28 Dec 2017 22:08:47 +0000 (14:08 -0800)

Merge branch 'jt/transport-hide-vtable'

Code clean-up.

* jt/transport-hide-vtable:
transport: make transport vtable more private
clone, fetch: remove redundant transport check

Merge branch 'js/enhanced-version-info'Junio C Hamano Thu, 28 Dec 2017 22:08:47 +0000 (14:08 -0800)

Merge branch 'js/enhanced-version-info'

"git version --build-options" learned to report the host CPU and
the exact commit object name the binary was built from.

* js/enhanced-version-info:
version --build-options: report commit, too, if possible
version --build-options: also report host CPU

Merge branch 'tz/lib-git-svn-svnserve-tests'Junio C Hamano Thu, 28 Dec 2017 22:08:46 +0000 (14:08 -0800)

Merge branch 'tz/lib-git-svn-svnserve-tests'

* tz/lib-git-svn-svnserve-tests:
t/lib-git-svn.sh: improve svnserve tests with parallel make test
t/lib-git-svn: cleanup inconsistent tab/space usage

Merge branch 'ew/svn-crlf'Junio C Hamano Thu, 28 Dec 2017 22:08:46 +0000 (14:08 -0800)

Merge branch 'ew/svn-crlf'

"git svn" has been updated to strip CRs in the commit messages, as
recent versions of Subversion rejects them.

* ew/svn-crlf:
git-svn: convert CRLF to LF in commit message to SVN

Merge branch 'cc/skip-to-optional-val'Junio C Hamano Thu, 28 Dec 2017 22:08:46 +0000 (14:08 -0800)

Merge branch 'cc/skip-to-optional-val'

Introduce a helper to simplify code to parse a common pattern that
expects either "--key" or "--key=<something>".

* cc/skip-to-optional-val:
t4045: reindent to make helpers readable
diff: add tests for --relative without optional prefix value
diff: use skip_to_optional_arg_default() in parsing --relative
diff: use skip_to_optional_arg_default()
diff: use skip_to_optional_arg()
index-pack: use skip_to_optional_arg()
git-compat-util: introduce skip_to_optional_arg()

Merge branch 'ra/prompt-eread-fix'Junio C Hamano Thu, 28 Dec 2017 22:08:45 +0000 (14:08 -0800)

Merge branch 'ra/prompt-eread-fix'

Update the shell prompt script (in contrib/) to strip trailing CR
from strings read from various "state" files.

* ra/prompt-eread-fix:
git-prompt: fix reading files with windows line endings
git-prompt: make __git_eread intended use explicit

Merge branch 'bw/path-doc'Junio C Hamano Thu, 28 Dec 2017 22:08:45 +0000 (14:08 -0800)

Merge branch 'bw/path-doc'

Doc updates.

* bw/path-doc:
path: document path functions

commit: remove unused function clear_commit_marks_for_o... René Scharfe Mon, 25 Dec 2017 17:48:34 +0000 (18:48 +0100)

commit: remove unused function clear_commit_marks_for_object_array()

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

revision: remove the unused flag leak_pendingRené Scharfe Mon, 25 Dec 2017 17:47:51 +0000 (18:47 +0100)

revision: remove the unused flag leak_pending

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

checkout: avoid using the rev_info flag leak_pendingRené Scharfe Mon, 25 Dec 2017 17:47:04 +0000 (18:47 +0100)

checkout: avoid using the rev_info flag leak_pending

The leak_pending flag is so awkward to use that multiple comments had to
be added around each occurrence. We only use it for remembering the
commits whose marks we have to clear after checking if the old HEAD is
detached. This is easy, though: We need to do that for the old commit,
the new one -- and for all refs.

Don't bother tracking exactly which commits need their flags cleared,
just nuke all we have in-core. This change is safe because refs can
point at anything, so other program parts can't depend on any kept flags
anyway. And since all refs are loaded we have to basically deal with
all commits anyway, so performance should not be negatively impacted.

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

bundle: avoid using the rev_info flag leak_pendingRené Scharfe Mon, 25 Dec 2017 17:46:14 +0000 (18:46 +0100)

bundle: avoid using the rev_info flag leak_pending

The leak_pending flag is so awkward to use that multiple comments had to
be added around each occurrence. We use it for remembering the
prerequisites for the bundle. That is easy, though: We have the
ref_list named "prerequisites" in the header for just that purpose.

Use this original list of prerequisites to check if all of them are
present and to clear their commit marks afterward. The two new loops
are intentionally kept similar to the first one in the function.
Calling parse_object() a second time is expected be quick and successful
in each case -- any errors should have been handled in the first round.

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

bisect: avoid using the rev_info flag leak_pendingRené Scharfe Mon, 25 Dec 2017 17:45:36 +0000 (18:45 +0100)

bisect: avoid using the rev_info flag leak_pending

The leak_pending flag is so awkward to use that multiple comments had to
be added around each occurrence. We only use it for remembering the
commits whose marks we have to clear after checking if all of the good
ones are ancestors of the bad one. This is easy, though: We need to do
that for the bad and good commits, of course.

Let check_good_are_ancestors_of_bad() create and own the array of bad
and good commits, and use it to clear the commit marks as well.

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

object: add clear_commit_marks_all()René Scharfe Mon, 25 Dec 2017 17:44:58 +0000 (18:44 +0100)

object: add clear_commit_marks_all()

Add a function for clearing the commit marks of all in-core commit
objects. It's similar to clear_object_flags(), but more precise, since
it leaves the other object types alone. It still has to iterate through
them, though.

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

ref-filter: use clear_commit_marks_many() in do_merge_f... René Scharfe Mon, 25 Dec 2017 17:44:12 +0000 (18:44 +0100)

ref-filter: use clear_commit_marks_many() in do_merge_filter()

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

commit: use clear_commit_marks_many() in remove_redundant()René Scharfe Mon, 25 Dec 2017 17:44:03 +0000 (18:44 +0100)

commit: use clear_commit_marks_many() in remove_redundant()

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

commit: avoid allocation in clear_commit_marks_many()René Scharfe Mon, 25 Dec 2017 17:43:37 +0000 (18:43 +0100)

commit: avoid allocation in clear_commit_marks_many()

Pass the entries of the commit array directly to clear_commit_marks_1()
instead of adding them to a commit_list first. The function clears the
commit and any first parent without allocation; only higher numbered
parents are added to a list for later treatment. This change extends
that optimization to clear_commit_marks_many().

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

Makefile: NO_OPENSSL=1 should no longer imply BLK_SHA1=1Ævar Arnfjörð Bjarmason Thu, 28 Dec 2017 14:07:41 +0000 (14:07 +0000)

Makefile: NO_OPENSSL=1 should no longer imply BLK_SHA1=1

Use the collision detecting SHA-1 implementation by default even when
NO_OPENSSL is set.

Setting NO_OPENSSL=UnfortunatelyYes has implied BLK_SHA1=1 ever since
the former was introduced in dd53c7ab29 (Support for NO_OPENSSL,
2005-07-29). That implication should have been removed when the
default SHA-1 implementation changed from OpenSSL to DC_SHA1 in
e6b07da278 (Makefile: make DC_SHA1 the default, 2017-03-17). Finish
what that commit started by removing the BLK_SHA1 fallback setting so
the default DC_SHA1 implementation will be used.

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

wt-status.c: handle worktree renamesNguyễn Thái Ngọc Duy Wed, 27 Dec 2017 10:18:39 +0000 (17:18 +0700)

wt-status.c: handle worktree renames

Before 425a28e0a4 (diff-lib: allow ita entries treated as "not yet exist
in index" - 2016-10-24) there are never "new files" in the index, which
essentially disables rename detection because we only detect renames
when a new file appears in a diff pair.

After that commit, an i-t-a entry can appear as a new file in "git
diff-files". But the diff callback function in wt-status.c does not
handle this case and produces incorrect status output.

PS. The reader may notice that this patch adds a new xstrdup() but not
a free(). Yes we leak memory (the same for head_path). But wt_status
so far has been short lived, this leak should not matter in
practice.

Noticed-by: Alex Vandiver <alexmv@dropbox.com>
Helped-by: Igor Djordjevic <igor.d.djordjevic@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wt-status.c: rename rename-related fields in wt_status_... Nguyễn Thái Ngọc Duy Wed, 27 Dec 2017 10:18:38 +0000 (17:18 +0700)

wt-status.c: rename rename-related fields in wt_status_change_data

These field "head_path" is used for rename display only. In the next
patch we introduce another rename pair where the rename source is no
longer HEAD. Rename it to something more generic.

While at there, rename "score" as well and store the rename diff code
in a separate field instead of hardcoding key[0] (i.e. diff-index) in
porcelain v2 code.

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

wt-status.c: catch unhandled diff status codesNguyễn Thái Ngọc Duy Wed, 27 Dec 2017 10:18:37 +0000 (17:18 +0700)

wt-status.c: catch unhandled diff status codes

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

wt-status.c: coding style fixNguyễn Thái Ngọc Duy Wed, 27 Dec 2017 10:18:36 +0000 (17:18 +0700)

wt-status.c: coding style fix

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

Use DIFF_DETECT_RENAME for detect_rename assignmentsNguyễn Thái Ngọc Duy Wed, 27 Dec 2017 10:18:35 +0000 (17:18 +0700)

Use DIFF_DETECT_RENAME for detect_rename assignments

This field can have two values (2 for copy). Use this name instead for
clarity. Many places have already used this constant.

Note, the detect_rename assignments in merge-recursive.c remain
unchanged because it's actually a boolean there.

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

t2203: test status output with porcelain v2 formatNguyễn Thái Ngọc Duy Wed, 27 Dec 2017 10:18:34 +0000 (17:18 +0700)

t2203: test status output with porcelain v2 format

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

sequencer: do not invent whitespace when transforming... Johannes Schindelin Fri, 22 Dec 2017 23:56:00 +0000 (00:56 +0100)

sequencer: do not invent whitespace when transforming OIDs

For commands that do not have an argument, there is no need to append a
trailing space at the end of the line.

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

sequencer: report when noop has an argumentJohannes Schindelin Fri, 22 Dec 2017 23:55:57 +0000 (00:55 +0100)

sequencer: report when noop has an argument

The noop command cannot accept any argument, but we never told the user
about any bogus argument. Fix that.

while at it, mention clearly when an argument is required but missing
(for commands *other* than noop).

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

sequencer: remove superfluous conditionalJohannes Schindelin Fri, 22 Dec 2017 23:55:53 +0000 (00:55 +0100)

sequencer: remove superfluous conditional

In a conditional block that is only reached when handling a TODO_REWORD
(as seen even from a 3-line context), there is absolutely no need to
nest another block under the identical condition.

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

sequencer: strip bogus LF at end of error messagesJohannes Schindelin Fri, 22 Dec 2017 23:55:43 +0000 (00:55 +0100)

sequencer: strip bogus LF at end of error messages

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

rebase: do not continue when the todo list generation... Johannes Schindelin Fri, 22 Dec 2017 23:55:38 +0000 (00:55 +0100)

rebase: do not continue when the todo list generation failed

This is a *really* long-standing bug. As a matter of fact, this bug has
been with us from the very beginning of `rebase -i`: 1b1dce4bae7 (Teach
rebase an interactive mode, 2007-06-25), where the output of `rev-list`
was piped to `sed` (and any failure of the `rev-list` process would go
completely undetected).

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

travis-ci: only print test failures if there are test... SZEDER Gábor Wed, 27 Dec 2017 16:36:03 +0000 (17:36 +0100)

travis-ci: only print test failures if there are test results available

When a build job running the test suite fails, our
'ci/print-test-failures.sh' script scans all 't/test-results/*.exit'
files to find failed tests and prints their verbose output. However,
if a build job were to fail before it ever gets to run the test suite,
then there will be no files to match the above pattern and the shell
will take the pattern literally, resulting in errors like this in the
trace log:

cat: t/test-results/*.exit: No such file or directory
------------------------------------------------------------------------
t/test-results/*.out...
------------------------------------------------------------------------
cat: t/test-results/*.out: No such file or directory

Check upfront and proceed only if there are any such files present.

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>

travis-ci: save prove state for the 32 bit Linux buildSZEDER Gábor Wed, 27 Dec 2017 16:36:02 +0000 (17:36 +0100)

travis-ci: save prove state for the 32 bit Linux build

This change follows suit of 6272ed319 (travis-ci: run previously
failed tests first, then slowest to fastest, 2016-01-26), which did
this for the Linux and OSX build jobs. Travis CI build jobs run the
tests parallel, which is sligtly faster when tests are run in slowest
to fastest order, shortening the overall runtime of this build job by
about a minute / 10%.

Note, that the 32 bit Linux build job runs the tests suite in a Docker
container and we have to share the Travis CI cache directory with the
container as a second volume. Otherwise we couldn't use a symlink
pointing to the prove state file in the cache directory, because
that's outside of the directory hierarchy accessible from within the
container.

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>

travis-ci: don't install default addon packages for... SZEDER Gábor Wed, 27 Dec 2017 16:36:01 +0000 (17:36 +0100)

travis-ci: don't install default addon packages for the 32 bit Linux build

The 32 bit Linux build job compiles Git and runs the test suite in a
Docker container, while the additional packages (apache2, git-svn,
language-pack-is) are installed on the host, therefore don't have
any effect and are unnecessary.

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

travis-ci: fine tune the use of 'set -x' in 'ci/*'... SZEDER Gábor Wed, 27 Dec 2017 16:36:00 +0000 (17:36 +0100)

travis-ci: fine tune the use of 'set -x' in 'ci/*' scripts

The change in commit 4f2636667 (travis-ci: use 'set -x' in 'ci/*'
scripts for extra tracing output, 2017-12-12) left a couple of rough
edges:

- 'ci/run-linux32-build.sh' is executed in a Docker container and
therefore doesn't source 'ci/lib-travisci.sh', which would enable
tracing executed commands. Enable 'set -x' in this script, too.

- 'ci/print-test-failures.sh' iterates over all the files containing
the exit codes of all the executed test scripts. Since there are
over 800 such files, the loop produces way too much noise with
tracing executed commands enabled, so disable 'set -x' for this
script.

- 'ci/run-windows-build.sh' busily waits in a loop for the result of
the Windows build, producing too much noise with tracing executed
commands enabled as well. Disable 'set -x' for the duration of
that loop.

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

RelNotes: the eleventh batchJunio C Hamano Wed, 27 Dec 2017 19:20:27 +0000 (11:20 -0800)

RelNotes: the eleventh batch

Hopefully the last one before -rc0

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

Merge branch 'rb/quick-install-doc'Junio C Hamano Wed, 27 Dec 2017 19:16:30 +0000 (11:16 -0800)

Merge branch 'rb/quick-install-doc'

The build procedure now allows not just the repositories but also
the refs to be used to take pre-formatted manpages and html
documents to install.

* rb/quick-install-doc:
install-doc-quick: allow specifying what ref to install

Merge branch 'jt/transport-no-more-rsync'Junio C Hamano Wed, 27 Dec 2017 19:16:30 +0000 (11:16 -0800)

Merge branch 'jt/transport-no-more-rsync'

Code clean-up.

* jt/transport-no-more-rsync:
transport: remove unused "push" in vtable

Merge branch 'sg/travis-fixes'Junio C Hamano Wed, 27 Dec 2017 19:16:30 +0000 (11:16 -0800)

Merge branch 'sg/travis-fixes'

Assorted updates for TravisCI integration.

* sg/travis-fixes:
travis-ci: use 'set -x' in 'ci/*' scripts for extra tracing output
travis-ci: set GIT_TEST_HTTPD in 'ci/lib-travisci.sh'
travis-ci: move setting environment variables to 'ci/lib-travisci.sh'
travis-ci: introduce a $jobname variable for 'ci/*' scripts

Merge branch 'sb/test-helper-excludes'Junio C Hamano Wed, 27 Dec 2017 19:16:29 +0000 (11:16 -0800)

Merge branch 'sb/test-helper-excludes'

Simplify the ignore rules for t/helper directory.

* sb/test-helper-excludes:
t/helper: ignore everything but sources

Merge branch 'ot/pretty'Junio C Hamano Wed, 27 Dec 2017 19:16:29 +0000 (11:16 -0800)

Merge branch 'ot/pretty'

Code clean-up.

* ot/pretty:
format: create docs for pretty.h
format: create pretty.h file

Merge branch 'bw/submodule-sans-cache-compat'Junio C Hamano Wed, 27 Dec 2017 19:16:28 +0000 (11:16 -0800)

Merge branch 'bw/submodule-sans-cache-compat'

Code clean-up.

* bw/submodule-sans-cache-compat:
submodule: convert get_next_submodule to not rely on the_index
submodule: used correct index in is_staging_gitmodules_ok
submodule: convert stage_updated_gitmodules to take a struct index_state

Merge branch 'es/clone-shared-worktree'Junio C Hamano Wed, 27 Dec 2017 19:16:28 +0000 (11:16 -0800)

Merge branch 'es/clone-shared-worktree'

"git clone --shared" to borrow from a (secondary) worktree did not
work, even though "git clone --local" did. Both are now accepted.

* es/clone-shared-worktree:
clone: support 'clone --shared' from a worktree

Merge branch 'tb/delimit-pretty-trailers-args-with... Junio C Hamano Wed, 27 Dec 2017 19:16:27 +0000 (11:16 -0800)

Merge branch 'tb/delimit-pretty-trailers-args-with-comma'

Doc updates.

* tb/delimit-pretty-trailers-args-with-comma:
docs/pretty-formats: mention commas in %(trailers) syntax

Merge branch 'rs/fmt-merge-msg-leakfix'Junio C Hamano Wed, 27 Dec 2017 19:16:26 +0000 (11:16 -0800)

Merge branch 'rs/fmt-merge-msg-leakfix'

Leakfix.

* rs/fmt-merge-msg-leakfix:
transport-helper: plug strbuf and string_list leaks

Merge branch 'jt/decorate-api'Junio C Hamano Wed, 27 Dec 2017 19:16:26 +0000 (11:16 -0800)

Merge branch 'jt/decorate-api'

A few structures and variables that are implementation details of
the decorate API have been renamed and then the API got documented
better.

* jt/decorate-api:
decorate: clean up and document API

Merge branch 'jk/cvsimport-quoting'Junio C Hamano Wed, 27 Dec 2017 19:16:26 +0000 (11:16 -0800)

Merge branch 'jk/cvsimport-quoting'

Typo/Logico fix.

* jk/cvsimport-quoting:
cvsimport: apply shell-quoting regex globally

Merge branch 'db/doc-workflows-neuter-the-maintainer'Junio C Hamano Wed, 27 Dec 2017 19:16:25 +0000 (11:16 -0800)

Merge branch 'db/doc-workflows-neuter-the-maintainer'

Docfix.

* db/doc-workflows-neuter-the-maintainer:
doc: reword gitworkflows.txt for neutrality

Merge branch 'ks/branch-cleanup'Junio C Hamano Wed, 27 Dec 2017 19:16:25 +0000 (11:16 -0800)

Merge branch 'ks/branch-cleanup'

Code clean-up.

* ks/branch-cleanup:
builtin/branch: strip refs/heads/ using skip_prefix
branch: update warning message shown when copying a misnamed branch
branch: group related arguments of create_branch()
branch: improve documentation and naming of create_branch() parameters

Merge branch 'rs/strbuf-read-once-reset-length'Junio C Hamano Wed, 27 Dec 2017 19:16:24 +0000 (11:16 -0800)

Merge branch 'rs/strbuf-read-once-reset-length'

Leakfix.

* rs/strbuf-read-once-reset-length:
strbuf: release memory on read error in strbuf_read_once()

Merge branch 'rs/fmt-merge-msg-string-leak-fix'Junio C Hamano Wed, 27 Dec 2017 19:16:23 +0000 (11:16 -0800)

Merge branch 'rs/fmt-merge-msg-string-leak-fix'

Leakfix.

* rs/fmt-merge-msg-string-leak-fix:
fmt-merge-msg: avoid leaking strbuf in shortlog()

Merge branch 'rs/am-builtin-leakfix'Junio C Hamano Wed, 27 Dec 2017 19:16:22 +0000 (11:16 -0800)

Merge branch 'rs/am-builtin-leakfix'

Leakfix.

* rs/am-builtin-leakfix:
am: release strbuf after use in split_mail_mbox()

Merge branch 'es/worktree-checkout-hook'Junio C Hamano Wed, 27 Dec 2017 19:16:21 +0000 (11:16 -0800)

Merge branch 'es/worktree-checkout-hook'

"git worktree add" learned to run the post-checkout hook, just like
"git checkout" does, after the initial checkout.

* es/worktree-checkout-hook:
worktree: invoke post-checkout hook (unless --no-checkout)

Merge branch 'lb/rebase-i-short-command-names'Junio C Hamano Wed, 27 Dec 2017 19:16:21 +0000 (11:16 -0800)

Merge branch 'lb/rebase-i-short-command-names'

With a configuration variable rebase.abbreviateCommands set,
"git rebase -i" produces the todo list with a single-letter
command names.

* lb/rebase-i-short-command-names:
sequencer.c: drop 'const' from function return type
t3404: add test case for abbreviated commands
rebase -i: learn to abbreviate command names
rebase -i -x: add exec commands via the rebase--helper
rebase -i: update functions to use a flags parameter
rebase -i: replace reference to sha1 with oid
rebase -i: refactor transform_todo_ids
rebase -i: set commit to null in exec commands
Documentation: use preferred name for the 'todo list' script
Documentation: move rebase.* configs to new file

Merge branch 'tb/check-crlf-for-safe-crlf'Junio C Hamano Wed, 27 Dec 2017 19:16:21 +0000 (11:16 -0800)

Merge branch 'tb/check-crlf-for-safe-crlf'

The "safe crlf" check incorrectly triggered for contents that does
not use CRLF as line endings, which has been corrected.

* tb/check-crlf-for-safe-crlf:
t0027: Adapt the new MIX tests to Windows
convert: tighten the safe autocrlf handling

Merge branch 'jh/object-filtering'Junio C Hamano Wed, 27 Dec 2017 19:16:20 +0000 (11:16 -0800)

Merge branch 'jh/object-filtering'

In preparation for implementing narrow/partial clone, the object
walking machinery has been taught a way to tell it to "filter" some
objects from enumeration.

* jh/object-filtering:
rev-list: support --no-filter argument
list-objects-filter-options: support --no-filter
list-objects-filter-options: fix 'keword' typo in comment
pack-objects: add list-objects filtering
rev-list: add list-objects filtering support
list-objects: filter objects in traverse_commit_list
oidset: add iterator methods to oidset
oidmap: add oidmap iterator methods
dir: allow exclusions from blob in addition to file

sequencer.c: drop 'const' from function return typeJunio C Hamano Wed, 27 Dec 2017 19:12:45 +0000 (11:12 -0800)

sequencer.c: drop 'const' from function return type

With -Werror=ignored-qualifiers, a function that claims to return
"const char" gets this error:

CC sequencer.o
sequencer.c:798:19: error: type qualifiers ignored on function return
type [-Werror=ignored-qualifiers]
static const char command_to_char(const enum todo_command command)
^

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

describe: prepend "tags/" when describing tags with... Daniel Knittl-Frank Mon, 11 Dec 2017 17:24:54 +0000 (18:24 +0100)

describe: prepend "tags/" when describing tags with embedded name

The man page of the "git describe" command explains the expected
output when using the --all option, i.e. the full reference path is
shown, including heads/ or tags/ prefix.

When 212945d4a85dfa172ea55ec73b1d830ef2d8582f ("Teach git-describe
to verify annotated tag names before output") made Git favor the
embedded name of annotated tags, it accidentally changed the output
format when the --all flag is given, only printing the tag's name
without the prefix.

Check if --all was specified and re-add the "tags/" prefix for this
special case to fix the regresssion.

Signed-off-by: Daniel Knittl-Frank <knittl89+git@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

strbuf: fix urlencode format string on signed charJulien Dusser Fri, 22 Dec 2017 17:24:37 +0000 (18:24 +0100)

strbuf: fix urlencode format string on signed char

Git credential fails with special char in password with

remote: Invalid username or password.
fatal: Authentication failed for

File ~/.git-credential contains badly urlencoded characters
%ffffffXX%ffffffYY instead of %XX%YY.

Add a cast to an unsigned char to fix urlencode use of %02x on a
char.

Signed-off-by: Julien Dusser <julien.dusser@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

send-pack: use internal argv_array of struct child_processRené Scharfe Fri, 22 Dec 2017 08:14:10 +0000 (09:14 +0100)

send-pack: use internal argv_array of struct child_process

Avoid a magic number of NULL placeholder values and a magic index by
constructing the command line for pack-objects using the embedded
argv_array of the child_process. The resulting code is shorter and
easier to extend.

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

http: use internal argv_array of struct child_processRené Scharfe Fri, 22 Dec 2017 11:56:59 +0000 (12:56 +0100)

http: use internal argv_array of struct child_process

Avoid a strangely magic array size (it's slightly too big) and explicit
index numbers by building the command line for index-pack using the
embedded argv_array of the child_process. Add the flag -o and its
argument with argv_array_pushl() to make it obvious that they belong
together. The resulting code is shorter and easier to extend.

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

git-p4: update multiple shelved change listsLuke Diamand Thu, 21 Dec 2017 11:06:14 +0000 (11:06 +0000)

git-p4: update multiple shelved change lists

--update-shelve can now be specified multiple times on the
command-line, to update multiple shelved changelists in a single
submit.

This then means that a git patch series can be mirrored to a
sequence of shelved changelists, and (relatively easily) kept in
sync as changes are made in git.

Note that Perforce does not really support overlapping shelved
changelists where one change touches the files modified by
another. Trying to do this will result in merge conflicts.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit: add support for --fixup <commit> -m"<extra... Ævar Arnfjörð Bjarmason Fri, 22 Dec 2017 20:41:52 +0000 (20:41 +0000)

commit: add support for --fixup <commit> -m"<extra message>"

Add support for supplying the -m option with --fixup. Doing so has
errored out ever since --fixup was introduced. Before this, the only
way to amend the fixup message while committing was to use --edit and
amend it in the editor.

The use-case for this feature is one of:

* Leaving a quick note to self when creating a --fixup commit when
it's not self-evident why the commit should be squashed without a
note into another one.

* (Ab)using the --fixup feature to "fix up" commits that have already
been pushed to a branch that doesn't allow non-fast-forwards,
i.e. just noting "this should have been part of that other commit",
and if the history ever got rewritten in the future the two should
be combined.

In such a case you might want to leave a small message,
e.g. "forgot this part, which broke XYZ".

With this, --fixup <commit> -m"More" -m"Details" will result in a
commit message like:

!fixup <subject of <commit>>

More

Details

The reason the test being added here seems to squash "More" at the end
of the subject line of the commit being fixed up is because the test
code is using "%s%b" so the body immediately follows the subject, it's
not a bug in this code, and other tests t7500-commit.sh do the same
thing.

When the --fixup option was initially added the "Option -m cannot be
combined" error was expanded from -c, -C and -F to also include
--fixup[1]

Those options could also support combining with -m, but given what
they do I can't think of a good use-case for doing that, so I have not
made the more invasive change of splitting up the logic in commit.c to
first act on those, and then on -m options.

1. d71b8ba7c9 ("commit: --fixup option for use with rebase
--autosquash", 2010-11-02)

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

check-non-portable-shell.pl: `wc -l` may have leading WSTorsten Bögershausen Thu, 21 Dec 2017 21:26:46 +0000 (22:26 +0100)

check-non-portable-shell.pl: `wc -l` may have leading WS

Test scripts count number of lines in an output and check it againt
its expectation. fb3340a6 ("test-lib: introduce test_line_count to
measure files", 2010-10-31) introduced a helper to show a failure in
such a test in a more readable way than comparing `wc -l` output with
a number.

Besides, on some platforms, "$(wc -l <file)" is padded with leading
whitespace on the left, so

test "$(wc -l <file)" = 4

would not work (most notably on macosX); the users of test_line_count
helper would not suffer from such a portability glitch.

Add a check in check-non-portable-shell.pl to find '"' between
`wc -l` and '=' and hint the user about test_line_count().

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Reviewed-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config.txt: document behavior of backslashes in subsectionsDave Borowitz Thu, 21 Dec 2017 13:10:42 +0000 (08:10 -0500)

config.txt: document behavior of backslashes in subsections

Unrecognized escape sequences are invalid in values:

$ git config -f - --list <<EOF
[foo]
bar = "\t\\\y\"\u"
EOF
fatal: bad config line 2 in standard input

But in subsection names, the backslash is simply dropped if the
following character does not produce a recognized escape sequence:

$ git config -f - --list <<EOF
[foo "\t\\\y\"\u"]
bar = baz
EOF
foo.t\y"u.bar=baz

Although it would be nice for subsection names and values to have
consistent behavior, changing the behavior for subsection names is a
nonstarter since it would cause existing, valid config files to
suddenly be interpreted differently.

Signed-off-by: Dave Borowitz <dborowitz@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ew/empty-merge-with-dirty-index-maint... Junio C Hamano Fri, 22 Dec 2017 20:48:38 +0000 (12:48 -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: 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-recursive: avoid incorporating uncommitted change... Elijah Newren Thu, 21 Dec 2017 19:19:07 +0000 (11:19 -0800)

merge-recursive: avoid incorporating uncommitted changes in a merge

builtin/merge.c contains this important requirement for merge strategies:
/*
* At this point, we need a real merge. No matter what strategy
* we use, it would operate on the index, possibly affecting the
* working tree, and when resolved cleanly, have the desired
* tree in the index -- this means that the index must be in
* sync with the head commit. The strategies are responsible
* to ensure this.
*/

merge-recursive does not do this check directly, instead it relies on
unpack_trees() to do it. However, merge_trees() has a special check for
the merge branch exactly matching the merge base; when it detects that
situation, it returns early without calling unpack_trees(), because it
knows that the HEAD commit already has the correct result. Unfortunately,
it didn't check that the index matched HEAD, so after it returned, the
outer logic ended up creating a merge commit that included something
other than HEAD.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

move index_has_changes() from builtin/am.c to merge... Elijah Newren Thu, 21 Dec 2017 19:19:06 +0000 (11:19 -0800)

move index_has_changes() from builtin/am.c to merge.c for reuse

index_has_changes() is a function we want to reuse outside of just am,
making it also available for merge-recursive and merge-ort.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6044: recursive can silently incorporate dirty changes... Elijah Newren Thu, 21 Dec 2017 19:19:05 +0000 (11:19 -0800)

t6044: recursive can silently incorporate dirty changes in a merge

The recursive merge strategy has some special handling when the tree for
the merge branch exactly matches the merge base, but that code path is
missing checks for the index having changes relative to HEAD. Add a
testcase covering this scenario.

Reported-by: Andreas Krey <a.krey@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit doc: document that -c, -C, -F and --fixup with... Ævar Arnfjörð Bjarmason Fri, 22 Dec 2017 16:00:55 +0000 (16:00 +0000)

commit doc: document that -c, -C, -F and --fixup with -m error

Document that providing any of -c, -C, -F and --fixup along with -m
will result in an error. Some variant of this has been errored about
explicitly since 0c091296c0 ("git-commit: log parameter updates.",
2005-08-08), but the documentation was never updated to reflect this.

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

t/helper/test-lazy-name-hash: fix compilationStefan Beller Mon, 18 Dec 2017 21:49:47 +0000 (13:49 -0800)

t/helper/test-lazy-name-hash: fix compilation

I was compiling origin/master today with DEVELOPER compiler flags
and was greeted by:

t/helper/test-lazy-init-name-hash.c: In function ‘cmd_main’:
t/helper/test-lazy-init-name-hash.c:172:5: error: ‘nr_threads_used’ may be used uninitilized in this function [-Werror=maybe-uninitialized]
printf("avg [size %8d] [single %f] %c [multi %f %d]\n",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nr,
~~~
(double)avg_single/1000000000,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(avg_single < avg_multi ? '<' : '>'),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(double)avg_multi/1000000000,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nr_threads_used);
~~~~~~~~~~~~~~~~
t/helper/test-lazy-init-name-hash.c:115:6: note: ‘nr_threads_used’ was declared here
int nr_threads_used;
^~~~~~~~~~~~~~~

I do not see how we can arrive at that line without having `nr_threads_used`
initialized, as we'd have `count > 1` (which asserts that we ran the
loop above at least once, such that it *should* be initialized).

Just clear the variable at the beginning of the function to squelch
the warning.

Signed-off-by: Stefan Beller <sbeller@google.com>
Acked-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5573, t7612: clean up after unexpected success of... Junio C Hamano Fri, 15 Dec 2017 19:42:36 +0000 (11:42 -0800)

t5573, t7612: clean up after unexpected success of 'pull' and 'merge'

The previous steps added test_when_finished to tests that run 'git
pull' or 'git merge' with expectation of success, so that the test
after them can start from a known state even when their 'git pull'
invocation unexpectedly fails. However, tests that run 'git pull'
or 'git merge' expecting it not to succeed forgot to protect later
tests the same way---if they unexpectedly succeed, the test after
them would start from an unexpected state.

Reset and checkout the initial commit after all these tests, whether
they expect their invocations to succeed or fail.

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

RelNotes: the tenth batchJunio C Hamano Tue, 19 Dec 2017 19:34:35 +0000 (11:34 -0800)

RelNotes: the tenth batch

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

Merge branch 'ls/editor-waiting-message'Junio C Hamano Tue, 19 Dec 2017 19:33:59 +0000 (11:33 -0800)

Merge branch 'ls/editor-waiting-message'

Git shows a message to tell the user that it is waiting for the
user to finish editing when spawning an editor, in case the editor
opens to a hidden window or somewhere obscure and the user gets
lost.

* ls/editor-waiting-message:
launch_editor(): indicate that Git waits for user input
refactor "dumb" terminal determination

Merge branch 'sg/setup-doc-update'Junio C Hamano Tue, 19 Dec 2017 19:33:58 +0000 (11:33 -0800)

Merge branch 'sg/setup-doc-update'

Comment update.

* sg/setup-doc-update:
setup.c: fix comment about order of .git directory discovery

Merge branch 'ar/unconfuse-three-dots'Junio C Hamano Tue, 19 Dec 2017 19:33:58 +0000 (11:33 -0800)

Merge branch 'ar/unconfuse-three-dots'

Ancient part of codebase still shows dots after an abbreviated
object name just to show that it is not a full object name, but
these ellipses are confusing to people who newly discovered Git
who are used to seeing abbreviated object names and find them
confusing with the range syntax.

* ar/unconfuse-three-dots:
t2020: test variations that matter
t4013: test new output from diff --abbrev --raw
diff: diff_aligned_abbrev: remove ellipsis after abbreviated SHA-1 value
t4013: prepare for upcoming "diff --raw --abbrev" output format change
checkout: describe_detached_head: remove ellipsis after committish
print_sha1_ellipsis: introduce helper
Documentation: user-manual: limit usage of ellipsis
Documentation: revisions: fix typo: "three dot" ---> "three-dot" (in line with "two-dot").

Merge branch 'tg/worktree-create-tracking'Junio C Hamano Tue, 19 Dec 2017 19:33:57 +0000 (11:33 -0800)

Merge branch 'tg/worktree-create-tracking'

The way "git worktree add" determines what branch to create from
where and checkout in the new worktree has been updated a bit.

* tg/worktree-create-tracking:
add worktree.guessRemote config option
worktree: add --guess-remote flag to add subcommand
worktree: make add <path> <branch> dwim
worktree: add --[no-]track option to the add subcommand
worktree: add can be created from any commit-ish
checkout: factor out functions to new lib file