git
8 years agoMerge branch 'ak/lazy-prereq-mktemp' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:11 +0000 (10:57 -0800)] 
Merge branch 'ak/lazy-prereq-mktemp' into next

Test code clean-up.

* ak/lazy-prereq-mktemp:
  t7610: clean up foo.XXXXXX tmpdir

8 years agoMerge branch 'nd/rebase-forget' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:10 +0000 (10:57 -0800)] 
Merge branch 'nd/rebase-forget' into next

"git rebase" learned "--forget" option, which allows a user to
remove the metadata left by an earlier "git rebase" that was
manually aborted without using "git rebase --abort".

* nd/rebase-forget:
  rebase: add --quit to cleanup rebase, leave everything else untouched

8 years agoMerge branch 'nd/worktree-list-fixup' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:09 +0000 (10:57 -0800)] 
Merge branch 'nd/worktree-list-fixup' into next

The output from "git worktree list" was made in readdir() order,
and was unstable.

* nd/worktree-list-fixup:
  worktree list: keep the list sorted
  worktree.c: get_worktrees() takes a new flag argument
  get_worktrees() must return main worktree as first item even on error
  worktree: reorder an if statement
  worktree.c: zero new 'struct worktree' on allocation

8 years agoMerge branch 'nd/qsort-in-merge-recursive' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:09 +0000 (10:57 -0800)] 
Merge branch 'nd/qsort-in-merge-recursive' into next

Code simplification.

* nd/qsort-in-merge-recursive:
  merge-recursive.c: use string_list_sort instead of qsort

8 years agoMerge branch 'bw/push-dry-run' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:08 +0000 (10:57 -0800)] 
Merge branch 'bw/push-dry-run' into next

"git push --dry-run --recurse-submodule=on-demand" wasn't
"--dry-run" in the submodules.

* bw/push-dry-run:
  push: fix --dry-run to not push submodules
  push: --dry-run updates submodules when --recurse-submodules=on-demand

8 years agoMerge branch 'jk/trailers-placeholder-in-pretty' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:08 +0000 (10:57 -0800)] 
Merge branch 'jk/trailers-placeholder-in-pretty' into next

In addition to %(subject), %(body), "log --pretty=format:..."
learned a new placeholder %(trailers).

* jk/trailers-placeholder-in-pretty:
  ref-filter: add support to display trailers as part of contents
  pretty: add %(trailers) format for displaying trailers of a commit message

8 years agoMerge branch 'jt/use-trailer-api-in-commands' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:07 +0000 (10:57 -0800)] 
Merge branch 'jt/use-trailer-api-in-commands' into next

Commands that operate on a log message and add lines to the trailer
blocks, such as "format-patch -s", "cherry-pick (-x|-s)", and
"commit -s", have been taught to use the logic of and share the
code with "git interpret-trailer".

* jt/use-trailer-api-in-commands:
  sequencer: use trailer's trailer layout
  trailer: have function to describe trailer layout
  trailer: avoid unnecessary splitting on lines
  commit: make ignore_non_trailer take buf/len
  trailer: be stricter in parsing separators

8 years agoMerge branch 'dt/empty-submodule-in-merge' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:07 +0000 (10:57 -0800)] 
Merge branch 'dt/empty-submodule-in-merge' into next

An empty directory in a working tree that can simply be nuked used
to interfere while merging or cherry-picking a change to create a
submodule directory there, which has been fixed..

* dt/empty-submodule-in-merge:
  submodules: allow empty working-tree dirs in merge/cherry-pick

8 years agoMerge branch 'jk/rev-parse-symbolic-parents-fix' into next
Junio C Hamano [Mon, 12 Dec 2016 18:57:06 +0000 (10:57 -0800)] 
Merge branch 'jk/rev-parse-symbolic-parents-fix' into next

"git rev-parse --symbolic" failed with a more recent notation like
"HEAD^-1" and "HEAD^!".

* jk/rev-parse-symbolic-parents-fix:
  rev-parse: fix parent shorthands with --symbolic

8 years agoref-filter: add support to display trailers as part of contents
Jacob Keller [Sat, 19 Nov 2016 00:58:15 +0000 (16:58 -0800)] 
ref-filter: add support to display trailers as part of contents

Add %(trailers) and %(contents:trailers) to display the trailers as
interpreted by trailer_info_get. Update documentation and add a test for
the new feature.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agopretty: add %(trailers) format for displaying trailers of a commit message
Jacob Keller [Sat, 19 Nov 2016 00:58:14 +0000 (16:58 -0800)] 
pretty: add %(trailers) format for displaying trailers of a commit message

Recent patches have expanded on the trailers.c code and we have the
builtin commant git-interpret-trailers which can be used to add or
modify trailer lines. However, there is no easy way to simply display
the trailers of a commit message.

Add support for %(trailers) format modifier which will use the
trailer_info_get() calls to read trailers in an identical way as git
interpret-trailers does. Use a long format option instead of a short
name so that future work can more easily unify ref-filter and pretty
formats.

Add documentation and tests for the same.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agorebase: add --quit to cleanup rebase, leave everything else untouched
Nguyễn Thái Ngọc Duy [Sat, 12 Nov 2016 02:00:41 +0000 (09:00 +0700)] 
rebase: add --quit to cleanup rebase, leave everything else untouched

There are occasions when you decide to abort an in-progress rebase and
move on to do something else but you forget to do "git rebase --abort"
first. Or the rebase has been in progress for so long you forgot about
it. By the time you realize that (e.g. by starting another rebase)
it's already too late to retrace your steps. The solution is normally

    rm -r .git/<some rebase dir>

and continue with your life. But there could be two different
directories for <some rebase dir> (and it obviously requires some
knowledge of how rebase works), and the ".git" part could be much
longer if you are not at top-dir, or in a linked worktree. And
"rm -r" is very dangerous to do in .git, a mistake in there could
destroy object database or other important data.

Provide "git rebase --quit" for this use case, mimicking a precedent
that is "git cherry-pick --quit".

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jc/latin-1' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:04 +0000 (11:38 -0800)] 
Merge branch 'jc/latin-1' into next

Some platforms no longer understand "latin-1" that is still seen in
the wild in e-mail headers; replace them with "iso-8859-1" that is
more widely known when conversion fails from/to it.

* jc/latin-1:
  utf8: accept "latin-1" as ISO-8859-1
  utf8: refactor code to decide fallback encoding

8 years agoMerge branch 'sb/submodule-config-cleanup' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:03 +0000 (11:38 -0800)] 
Merge branch 'sb/submodule-config-cleanup' into next

Minor code clean-up.

* sb/submodule-config-cleanup:
  submodule-config: clarify parsing of null_sha1 element
  submodule-config: rename commit_sha1 to treeish_name
  submodule config: inline config_from_{name, path}

8 years agoMerge branch 'jc/compression-config' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:03 +0000 (11:38 -0800)] 
Merge branch 'jc/compression-config' into next

Compression setting for producing packfiles were spread across
three codepaths, one of which did not honor any configuration.
Unify these so that all of them honor core.compression and
pack.compression variables the same way.

* jc/compression-config:
  compression: unify pack.compression configuration parsing

8 years agoMerge branch 'dt/smart-http-detect-server-going-away' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:03 +0000 (11:38 -0800)] 
Merge branch 'dt/smart-http-detect-server-going-away' into next

When the http server gives an incomplete response to a smart-http
rpc call, it could lead to client waiting for a full response that
will never come.  Teach the client side to notice this condition
and abort the transfer.

An improvement counterproposal has failed.
cf. <20161114194049.mktpsvgdhex2f4zv@sigill.intra.peff.net>

* dt/smart-http-detect-server-going-away:
  upload-pack: optionally allow fetching any sha1
  remote-curl: don't hang when a server dies before any output

8 years agoMerge branch 'hv/submodule-not-yet-pushed-fix' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:02 +0000 (11:38 -0800)] 
Merge branch 'hv/submodule-not-yet-pushed-fix' into next

The code in "git push" to compute if any commit being pushed in the
superproject binds a commit in a submodule that hasn't been pushed
out was overly inefficient, making it unusable even for a small
project that does not have any submodule but have a reasonable
number of refs.

* hv/submodule-not-yet-pushed-fix:
  submodule_needs_pushing(): explain the behaviour when we cannot answer
  batch check whether submodule needs pushing into one call
  serialize collection of refs that contain submodule changes
  serialize collection of changed submodules

8 years agoMerge branch 'mm/gc-safety-doc' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:02 +0000 (11:38 -0800)] 
Merge branch 'mm/gc-safety-doc' into next

Doc update.

* mm/gc-safety-doc:
  git-gc.txt: expand discussion of races with other processes

8 years agoMerge branch 'mm/push-social-engineering-attack-doc' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:01 +0000 (11:38 -0800)] 
Merge branch 'mm/push-social-engineering-attack-doc' into next

Doc update on fetching and pushing.

* mm/push-social-engineering-attack-doc:
  doc: mention transfer data leaks in more places

8 years agoMerge branch 'jt/fetch-no-redundant-tag-fetch-map' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:01 +0000 (11:38 -0800)] 
Merge branch 'jt/fetch-no-redundant-tag-fetch-map' into next

Code cleanup to avoid using redundant refspecs while fetching with
the --tags option.

* jt/fetch-no-redundant-tag-fetch-map:
  fetch: do not redundantly calculate tag refmap

8 years agoMerge branch 'jc/push-default-explicit' into next
Junio C Hamano [Mon, 5 Dec 2016 19:38:00 +0000 (11:38 -0800)] 
Merge branch 'jc/push-default-explicit' into next

A lazy "git push" without refspec did not internally use a fully
specified refspec to perform 'current', 'simple', or 'upstream'
push, causing unnecessary "ambiguous ref" errors.

* jc/push-default-explicit:
  push: test pushing ambiguously named branches
  push: do not use potentially ambiguous default refspec

8 years agoMerge branch 'jk/no-looking-at-dotgit-outside-repo-final' into next
Junio C Hamano [Mon, 5 Dec 2016 19:37:59 +0000 (11:37 -0800)] 
Merge branch 'jk/no-looking-at-dotgit-outside-repo-final' into next

This is the endgame of the topic to avoid blindly falling back to
".git" when the setup sequence said we are _not_ in Git repository.
A corner case that happens to work right now may be broken by a
call to die("BUG").

* jk/no-looking-at-dotgit-outside-repo-final:
  setup_git_env: avoid blind fall-back to ".git"

8 years agoMerge branch 'jc/merge-drop-old-syntax' into next
Junio C Hamano [Mon, 5 Dec 2016 19:37:59 +0000 (11:37 -0800)] 
Merge branch 'jc/merge-drop-old-syntax' into next

Stop supporting "git merge <message> HEAD <commit>" syntax that has
been deprecated since October 2007, and issues a deprecation
warning message since v2.5.0.

* jc/merge-drop-old-syntax:
  merge: drop 'git merge <message> HEAD <commit>' syntax

8 years agoStart post 2.11 cycle
Junio C Hamano [Mon, 5 Dec 2016 19:31:47 +0000 (11:31 -0800)] 
Start post 2.11 cycle

For now, let's call it 2.12 tentatively.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoSync with maint-2.10
Junio C Hamano [Mon, 5 Dec 2016 19:25:47 +0000 (11:25 -0800)] 
Sync with maint-2.10

* maint-2.10:
  preparing for 2.10.3

8 years agopreparing for 2.10.3
Junio C Hamano [Mon, 5 Dec 2016 19:25:02 +0000 (11:25 -0800)] 
preparing for 2.10.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jk/common-main' into maint-2.10
Junio C Hamano [Mon, 5 Dec 2016 19:24:17 +0000 (11:24 -0800)] 
Merge branch 'jk/common-main' into maint-2.10

* jk/common-main:
  common-main: stop munging argv[0] path
  git-compat-util: move content inside ifdef/endif guards

8 years agosequencer: use trailer's trailer layout
Jonathan Tan [Wed, 2 Nov 2016 17:29:20 +0000 (10:29 -0700)] 
sequencer: use trailer's trailer layout

Make sequencer use trailer.c's trailer layout definition, as opposed to
parsing the footer by itself. This makes "commit -s", "cherry-pick -x",
and "format-patch --signoff" consistent with trailer, allowing
non-trailer lines and multiple-line trailers in trailer blocks under
certain conditions, and therefore suppressing the extra newline in those
cases.

Consistency with trailer extends to respecting trailer configs.  Tests
have been included to show that.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agotrailer: have function to describe trailer layout
Jonathan Tan [Wed, 2 Nov 2016 17:29:19 +0000 (10:29 -0700)] 
trailer: have function to describe trailer layout

Create a function that, taking a string, describes the position of its
trailer block (if available) and the contents thereof, and make trailer
use it. This makes it easier for other Git components, in the future, to
interpret trailer blocks in the same way as trailer.

In a subsequent patch, another component will be made to use this.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agotrailer: avoid unnecessary splitting on lines
Jonathan Tan [Wed, 2 Nov 2016 17:29:18 +0000 (10:29 -0700)] 
trailer: avoid unnecessary splitting on lines

trailer.c currently splits lines while processing a buffer (and also
rejoins lines when needing to invoke ignore_non_trailer).

Avoid such line splitting, except when generating the strings
corresponding to trailers (for ease of use by clients - a subsequent
patch will allow other components to obtain the layout of a trailer
block in a buffer, including the trailers themselves). The main purpose
of this is to make it easy to return pointers into the original buffer
(for a subsequent patch), but this also significantly reduces the number
of memory allocations required.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agocommit: make ignore_non_trailer take buf/len
Jonathan Tan [Wed, 2 Nov 2016 17:29:17 +0000 (10:29 -0700)] 
commit: make ignore_non_trailer take buf/len

Make ignore_non_trailer take a buf/len pair instead of struct strbuf.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agotrailer: be stricter in parsing separators
Jonathan Tan [Wed, 2 Nov 2016 17:29:16 +0000 (10:29 -0700)] 
trailer: be stricter in parsing separators

Currently, a line is interpreted to be a trailer line if it contains a
separator. Make parsing stricter by requiring the text on the left of
the separator, if not the empty string, to be of the "<token><optional
whitespace>" form.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'tk/diffcore-delta-remove-unused' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:28:03 +0000 (13:28 -0800)] 
Merge branch 'tk/diffcore-delta-remove-unused' into maint

Code cleanup.

* tk/diffcore-delta-remove-unused:
  diffcore-delta: remove unused parameter to diffcore_count_changes()

8 years agoMerge branch 'jk/create-branch-remove-unused-param' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:28:02 +0000 (13:28 -0800)] 
Merge branch 'jk/create-branch-remove-unused-param' into maint

Code clean-up.

* jk/create-branch-remove-unused-param:
  create_branch: drop unused "head" parameter

8 years agoMerge branch 'nd/worktree-lock' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:28:02 +0000 (13:28 -0800)] 
Merge branch 'nd/worktree-lock' into maint

Typofix.

* nd/worktree-lock:
  git-worktree.txt: fix typo "to"/"two", and add comma

8 years agoMerge branch 'ps/common-info-doc' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:28:01 +0000 (13:28 -0800)] 
Merge branch 'ps/common-info-doc' into maint

Doc fix.

* ps/common-info-doc:
  doc: fix location of 'info/' with $GIT_COMMON_DIR

8 years agoMerge branch 'rs/cocci' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:28:00 +0000 (13:28 -0800)] 
Merge branch 'rs/cocci' into maint

Improve the rule to convert "unsigned char [20]" into "struct
object_id *" in contrib/coccinelle/

* rs/cocci:
  cocci: avoid self-references in object_id transformations

8 years agoMerge branch 'nd/test-helpers' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:28:00 +0000 (13:28 -0800)] 
Merge branch 'nd/test-helpers' into maint

Update to the test framework made in 2.9 timeframe broke running
the tests under valgrind, which has been fixed.

* nd/test-helpers:
  valgrind: support test helpers

8 years agoMerge branch 'sc/fmt-merge-msg-doc-markup-fix' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:59 +0000 (13:27 -0800)] 
Merge branch 'sc/fmt-merge-msg-doc-markup-fix' into maint

Documentation fix.

* sc/fmt-merge-msg-doc-markup-fix:
  Documentation/fmt-merge-msg: fix markup in example

8 years agoMerge branch 'rs/commit-pptr-simplify' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:59 +0000 (13:27 -0800)] 
Merge branch 'rs/commit-pptr-simplify' into maint

Code simplification.

* rs/commit-pptr-simplify:
  commit: simplify building parents list

8 years agoMerge branch 'jk/rebase-config-insn-fmt-docfix' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:58 +0000 (13:27 -0800)] 
Merge branch 'jk/rebase-config-insn-fmt-docfix' into maint

Documentation fix.

* jk/rebase-config-insn-fmt-docfix:
  doc: fix missing "::" in config list

8 years agoMerge branch 'ak/pre-receive-hook-template-modefix' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:57 +0000 (13:27 -0800)] 
Merge branch 'ak/pre-receive-hook-template-modefix' into maint

A trivial clean-up to a recently graduated topic.

* ak/pre-receive-hook-template-modefix:
  pre-receive.sample: mark it executable

8 years agoMerge branch 'ls/macos-update' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:56 +0000 (13:27 -0800)] 
Merge branch 'ls/macos-update' into maint

Portability update and workaround for builds on recent Mac OS X.

* ls/macos-update:
  travis-ci: disable GIT_TEST_HTTPD for macOS
  Makefile: set NO_OPENSSL on macOS by default

8 years agoMerge branch 'as/merge-attr-sleep' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:56 +0000 (13:27 -0800)] 
Merge branch 'as/merge-attr-sleep' into maint

Fix for a racy false-positive test failure.

* as/merge-attr-sleep:
  t6026: clarify the point of "kill $(cat sleep.pid)"
  t6026: ensure that long-running script really is
  Revert "t6026-merge-attr: don't fail if sleep exits early"
  Revert "t6026-merge-attr: ensure that the merge driver was called"
  t6026-merge-attr: ensure that the merge driver was called
  t6026-merge-attr: don't fail if sleep exits early

8 years agoMerge branch 'ak/sh-setup-dot-source-i18n-fix' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:56 +0000 (13:27 -0800)] 
Merge branch 'ak/sh-setup-dot-source-i18n-fix' into maint

Recent update to git-sh-setup (a library of shell functions that
are used by our in-tree scripted Porcelain commands) included
another shell library git-sh-i18n without specifying where it is,
relying on the $PATH.  This has been fixed to be more explicit by
prefixing $(git --exec-path) output in front.

* ak/sh-setup-dot-source-i18n-fix:
  git-sh-setup: be explicit where to dot-source git-sh-i18n from.

8 years agoMerge branch 'jk/daemon-path-ok-check-truncation' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:55 +0000 (13:27 -0800)] 
Merge branch 'jk/daemon-path-ok-check-truncation' into maint

"git daemon" used fixed-length buffers to turn URL to the
repository the client asked for into the server side directory
path, using snprintf() to avoid overflowing these buffers, but
allowed possibly truncated paths to the directory.  This has been
tightened to reject such a request that causes overlong path to be
required to serve.

* jk/daemon-path-ok-check-truncation:
  daemon: detect and reject too-long paths

8 years agoMerge branch 'rs/ring-buffer-wraparound' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:55 +0000 (13:27 -0800)] 
Merge branch 'rs/ring-buffer-wraparound' into maint

The code that we have used for the past 10+ years to cycle
4-element ring buffers turns out to be not quite portable in
theoretical world.

* rs/ring-buffer-wraparound:
  hex: make wraparound of the index into ring-buffer explicit

8 years agoMerge branch 'mm/send-email-cc-cruft-after-address' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:54 +0000 (13:27 -0800)] 
Merge branch 'mm/send-email-cc-cruft-after-address' into maint

"git send-email" attempts to pick up valid e-mails from the
trailers, but people in real world write non-addresses there, like
"Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
on the availability and vintage of Mail::Address perl module.

* mm/send-email-cc-cruft-after-address:
  Git.pm: add comment pointing to t9000
  t9000-addresses: update expected results after fix
  parse_mailboxes: accept extra text after <...> address

8 years agoMerge branch 'cp/completion-negative-refs' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:53 +0000 (13:27 -0800)] 
Merge branch 'cp/completion-negative-refs' into maint

The command-line completion script (in contrib/) learned to
complete "git cmd ^mas<HT>" to complete the negative end of
reference to "git cmd ^master".

* cp/completion-negative-refs:
  completion: support excluding refs

8 years agoMerge branch 'jc/am-read-author-file' into maint
Junio C Hamano [Tue, 29 Nov 2016 21:27:53 +0000 (13:27 -0800)] 
Merge branch 'jc/am-read-author-file' into maint

Extract a small helper out of the function that reads the authors
script file "git am" internally uses.
This by itself is not useful until a second caller appears in the
future for "rebase -i" helper.

* jc/am-read-author-file:
  am: refactor read_author_script()

8 years agoGit 2.11 v2.11.0
Junio C Hamano [Tue, 29 Nov 2016 20:23:07 +0000 (12:23 -0800)] 
Git 2.11

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jk/common-main'
Junio C Hamano [Tue, 29 Nov 2016 20:22:13 +0000 (12:22 -0800)] 
Merge branch 'jk/common-main'

Fix for a small regression in a topic already in 'master'.

* jk/common-main:
  common-main: stop munging argv[0] path

8 years agoMerge tag 'l10n-2.11.0-rnd3.1' of git://github.com/git-l10n/git-po
Junio C Hamano [Tue, 29 Nov 2016 19:36:11 +0000 (11:36 -0800)] 
Merge tag 'l10n-2.11.0-rnd3.1' of git://github.com/git-l10n/git-po

l10n-2.11.0-rnd3.1: update ru and ca translations

* tag 'l10n-2.11.0-rnd3.1' of git://github.com/git-l10n/git-po:
  l10n: ru.po: update Russian translation
  l10n: ca.po: update translation

8 years agocommon-main: stop munging argv[0] path
Jeff King [Sun, 27 Nov 2016 04:31:13 +0000 (23:31 -0500)] 
common-main: stop munging argv[0] path

Since 650c44925 (common-main: call git_extract_argv0_path(),
2016-07-01), the argv[0] that is seen in cmd_main() of
individual programs is always the basename of the
executable, as common-main strips off the full path. This
can produce confusing results for git-daemon, which wants to
re-exec itself.

For instance, if the program was originally run as
"/usr/lib/git/git-daemon", it will try just re-execing
"git-daemon", which will find the first instance in $PATH.
If git's exec-path has not been prepended to $PATH, we may
find the git-daemon from a different version (or no
git-daemon at all).

Normally this isn't a problem. Git commands are run as "git
daemon", the git wrapper puts the exec-path at the front of
$PATH, and argv[0] is already "daemon" anyway. But running
git-daemon via its full exec-path, while not really a
recommended method, did work prior to 650c44925. Let's make
it work again.

The real goal of 650c44925 was not to munge argv[0], but to
reliably set the argv0_path global. The only reason it
munges at all is that one caller, the git.c wrapper,
piggy-backed on that computation to find the command
basename.  Instead, let's leave argv[0] untouched in
common-main, and have git.c do its own basename computation.

While we're at it, let's drop the return value from
git_extract_argv0_path(). It was only ever used in this one
callsite, and its dual purposes is what led to this
confusion in the first place.

Note that by changing the interface, the compiler can
confirm for us that there are no other callers storing the
return value. But the compiler can't tell us whether any of
the cmd_main() functions (besides git.c) were relying on the
basename munging. However, we can observe that prior to
650c44925, no other cmd_main() functions did that munging,
and no new cmd_main() functions have been introduced since
then. So we can't be regressing any of those cases.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agot7610: clean up foo.XXXXXX tmpdir
Jeff King [Sun, 27 Nov 2016 06:34:45 +0000 (01:34 -0500)] 
t7610: clean up foo.XXXXXX tmpdir

The lazy prereq for MKTEMP uses "mktemp -t" to see if
mergetool's internal mktemp call will be able to run. But
unlike the call inside mergetool, we do not ever bother to
clean up the result, and the /tmp of git developers will
slowly fill up with "foo.XXXXXX" directories as they run the
test suite over and over.  Let's clean up the directory
after we've verified its creation.

Note that we don't use test_when_finished here, and instead
just make rmdir part of the &&-chain. We should only remove
something that we're confident we just created. A failure in
the middle of the chain either means there's nothing to
clean up, or we are very confused and should err on the side
of caution.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'russian-l10n' of https://github.com/DJm00n/git-po-ru
Jiang Xin [Tue, 29 Nov 2016 13:19:43 +0000 (21:19 +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

8 years agol10n: ru.po: update Russian translation
Dimitriy Ryazantcev [Tue, 29 Nov 2016 09:33:07 +0000 (11:33 +0200)] 
l10n: ru.po: update Russian translation

Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>
8 years agol10n: ca.po: update translation
Alex Henrie [Tue, 29 Nov 2016 03:06:25 +0000 (20:06 -0700)] 
l10n: ca.po: update translation

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
8 years agoRelNotes: spelling and phrasing fixups
Marc Branchaud [Thu, 24 Nov 2016 16:59:00 +0000 (11:59 -0500)] 
RelNotes: spelling and phrasing fixups

Signed-off-by: Marc Branchaud <marcnarc@xiplink.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agomerge-recursive.c: use string_list_sort instead of qsort
Nguyễn Thái Ngọc Duy [Thu, 24 Nov 2016 11:45:36 +0000 (18:45 +0700)] 
merge-recursive.c: use string_list_sort instead of qsort

Merge-recursive sorts a string list using a raw qsort(), where it
feeds the "items" from one struct but the "nr" and size fields from
another struct. This isn't a bug because one list is a copy of the
other, but it's unnecessarily confusing (and also caused our recent
QSORT() cleanups via coccinelle to miss this call site).

Let's use string_list_sort() instead, which is more concise and harder
to get wrong. Note that we need to adjust our comparison function,
which gets fed only the strings now, not the string_list_items. That's
OK because we don't use the "util" field as part of our sort.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge tag 'l10n-2.11.0-rnd3' of git://github.com/git-l10n/git-po
Junio C Hamano [Mon, 28 Nov 2016 23:28:04 +0000 (15:28 -0800)] 
Merge tag 'l10n-2.11.0-rnd3' of git://github.com/git-l10n/git-po

l10n-2.11.0-rnd3

* tag 'l10n-2.11.0-rnd3' of git://github.com/git-l10n/git-po:
  l10n: de.po: translate 210 new messages
  l10n: fix unmatched single quote in error message

8 years agoworktree list: keep the list sorted
Nguyễn Thái Ngọc Duy [Mon, 28 Nov 2016 09:36:56 +0000 (16:36 +0700)] 
worktree list: keep the list sorted

It makes it easier to write tests for. But it should also be good for
the user since locating a worktree by eye would be easier once they
notice this.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoworktree.c: get_worktrees() takes a new flag argument
Nguyễn Thái Ngọc Duy [Mon, 28 Nov 2016 09:36:55 +0000 (16:36 +0700)] 
worktree.c: get_worktrees() takes a new flag argument

This is another no-op patch, in preparation for get_worktrees() to do
optional things, like sorting.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoget_worktrees() must return main worktree as first item even on error
Nguyễn Thái Ngọc Duy [Mon, 28 Nov 2016 09:36:54 +0000 (16:36 +0700)] 
get_worktrees() must return main worktree as first item even on error

This is required by git-worktree.txt, stating that the main worktree is
the first line (especially in --porcelain mode when we can't just change
behavior at will).

There's only one case when get_worktrees() may skip main worktree, when
parse_ref() fails. Update the code so that we keep first item as main
worktree and return something sensible in this case:

 - In user-friendly mode, since we're not constraint by anything,
   returning "(error)" should do the job (we already show "(detached
   HEAD)" which is not machine-friendly). Actually errors should be
   printed on stderr by parse_ref() (*)

 - In plumbing mode, we do not show neither 'bare', 'detached' or
   'branch ...', which is possible by the format description if I read
   it right.

Careful readers may realize that when the local variable "head_ref" in
get_main_worktree() is emptied, add_head_info() will do nothing to
wt->head_sha1. But that's ok because head_sha1 is zero-ized in the
previous patch.

(*) Well, it does not. But it's supposed to be a stop gap implementation
    until we can reuse refs code to parse "ref: " stuff in HEAD, from
    resolve_refs_unsafe(). Now may be the time since refs refactoring is
    mostly done.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoworktree: reorder an if statement
Nguyễn Thái Ngọc Duy [Mon, 28 Nov 2016 09:36:53 +0000 (16:36 +0700)] 
worktree: reorder an if statement

This is no-op. But it helps reduce diff noise in 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>
8 years agol10n: de.po: translate 210 new messages
Ralf Thielow [Wed, 2 Nov 2016 17:51:08 +0000 (18:51 +0100)] 
l10n: de.po: translate 210 new messages

Translate 210 new messages came from git.pot update in fda7b09
(l10n: git.pot: v2.11.0 round 1 (209 new, 53 removed)) and c091ffb
(l10n: git.pot: v2.11.0 round 2 (1 new, 1 removed)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
8 years agol10n: fix unmatched single quote in error message
Jiang Xin [Sun, 20 Nov 2016 12:26:17 +0000 (20:26 +0800)] 
l10n: fix unmatched single quote in error message

Translate one message introduced by commit:

 * 358718064b i18n: fix unmatched single quote in error message

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
8 years agoGit 2.11-rc3 v2.11.0-rc3
Junio C Hamano [Wed, 23 Nov 2016 19:24:59 +0000 (11:24 -0800)] 
Git 2.11-rc3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'jc/setup-cleanup-fix'
Junio C Hamano [Wed, 23 Nov 2016 19:23:17 +0000 (11:23 -0800)] 
Merge branch 'jc/setup-cleanup-fix'

"git archive" and "git mailinfo" stopped reading from local
configuration file with a recent update.

* jc/setup-cleanup-fix:
  archive: read local configuration
  mailinfo: read local configuration

8 years agoMerge branch 'jt/trailer-with-cruft'
Junio C Hamano [Wed, 23 Nov 2016 19:23:17 +0000 (11:23 -0800)] 
Merge branch 'jt/trailer-with-cruft'

Doc update.

* jt/trailer-with-cruft:
  doc: mention user-configured trailers

8 years agoMerge branch 'js/rebase-i-commentchar-fix'
Junio C Hamano [Wed, 23 Nov 2016 19:23:17 +0000 (11:23 -0800)] 
Merge branch 'js/rebase-i-commentchar-fix'

"git rebase -i" did not work well with core.commentchar
configuration variable for two reasons, both of which have been
fixed.

* js/rebase-i-commentchar-fix:
  rebase -i: handle core.commentChar=auto
  stripspace: respect repository config
  rebase -i: highlight problems with core.commentchar

8 years agoMerge branch 'jc/for-each-ref-head-segfault-fix'
Junio C Hamano [Wed, 23 Nov 2016 19:23:16 +0000 (11:23 -0800)] 
Merge branch 'jc/for-each-ref-head-segfault-fix'

Using a %(HEAD) placeholder in "for-each-ref --format=" option
caused the command to segfault when on an unborn branch.

* jc/for-each-ref-head-segfault-fix:
  for-each-ref: do not segv with %(HEAD) on an unborn branch

8 years agoworktree.c: zero new 'struct worktree' on allocation
Nguyễn Thái Ngọc Duy [Tue, 22 Nov 2016 10:00:44 +0000 (17:00 +0700)] 
worktree.c: zero new 'struct worktree' on allocation

This keeps things a bit simpler when we add more fields, knowing that
default values are always zero.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agopush: fix --dry-run to not push submodules
Brandon Williams [Thu, 17 Nov 2016 18:46:04 +0000 (10:46 -0800)] 
push: fix --dry-run to not push submodules

Teach push to respect the --dry-run option when configured to
recursively push submodules 'on-demand'.  This is done by passing the
--dry-run flag to the child process which performs a push for a
submodules when performing a dry-run.

In order to preserve good user experience, the additional check for
unpushed submodules is skipped during a dry-run when
--recurse-submodules=on-demand.  The check is skipped because the submodule
pushes were performed as dry-runs and this check would always fail as the
submodules would still need to be pushed.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agopush: --dry-run updates submodules when --recurse-submodules=on-demand
Brandon Williams [Thu, 17 Nov 2016 18:46:03 +0000 (10:46 -0800)] 
push: --dry-run updates submodules when --recurse-submodules=on-demand

This patch adds a test to illustrate how push run with --dry-run doesn't
actually perform a dry-run when push is configured to push submodules
on-demand.  Instead all submodules which need to be pushed are actually
pushed to their remotes while any updates for the superproject are
performed as a dry-run.  This is a bug and not the intended behaviour of
a dry-run.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosubmodule-config: clarify parsing of null_sha1 element
Stefan Beller [Tue, 22 Nov 2016 20:14:38 +0000 (12:14 -0800)] 
submodule-config: clarify parsing of null_sha1 element

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosubmodule-config: rename commit_sha1 to treeish_name
Stefan Beller [Tue, 22 Nov 2016 20:14:37 +0000 (12:14 -0800)] 
submodule-config: rename commit_sha1 to treeish_name

It is also possible to pass in any treeish name to lookup a submodule
config. Make it clear by naming the variables accordingly. Looking up
a submodule config by tree hash will come in handy in a later patch.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosubmodule config: inline config_from_{name, path}
Stefan Beller [Tue, 22 Nov 2016 20:14:36 +0000 (12:14 -0800)] 
submodule config: inline config_from_{name, path}

There is no other user of config_from_{name, path}, such that there is no
reason for the existence of these one liner functions. Just inline these
to increase readability.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge tag 'l10n-2.11.0-rnd2' of git://github.com/git-l10n/git-po
Junio C Hamano [Tue, 22 Nov 2016 22:16:06 +0000 (14:16 -0800)] 
Merge tag 'l10n-2.11.0-rnd2' of git://github.com/git-l10n/git-po

l10n-2.11.0-rnd2

* tag 'l10n-2.11.0-rnd2' of git://github.com/git-l10n/git-po:
  l10n: Fixed typo of git fetch-pack command
  l10n: git.pot: v2.11.0 round 2 (1 new, 1 removed)
  l10n: zh_CN: for git v2.11.0 l10n round 1
  l10n: pt_PT: update Portuguese translation
  l10n: fr.po fix grammar mistakes
  l10n: fr.po v2.11.0_rnd1
  l10n: sv.po: Update Swedish translation (2913t0f0u)
  l10n: vi.po: Updated translation to v2.11.0 (2913t)
  l10n: ko.po: Update Korean translation
  l10n: git.pot: v2.11.0 round 1 (209 new, 53 removed)
  l10n: ru.po: update Russian translation

8 years agoMerge branch 'js/prepare-sequencer'
Junio C Hamano [Tue, 22 Nov 2016 22:15:38 +0000 (14:15 -0800)] 
Merge branch 'js/prepare-sequencer'

Fix for an error message string.

* js/prepare-sequencer:
  i18n: fix unmatched single quote in error message

8 years agoarchive: read local configuration
Junio C Hamano [Tue, 22 Nov 2016 21:37:04 +0000 (13:37 -0800)] 
archive: read local configuration

Since b9605bc4f2 ("config: only read .git/config from configured
repos", 2016-09-12), we do not read from ".git/config" unless we
know we are in a repository.  "git archive" however didn't do the
repository discovery and instead relied on the old behaviour.

Teach the command to run a "gentle" version of repository discovery
so that local configuration variables are honoured.

[jc: stole tests from peff]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agomailinfo: read local configuration
Junio C Hamano [Tue, 22 Nov 2016 21:13:16 +0000 (13:13 -0800)] 
mailinfo: read local configuration

Since b9605bc4f2 ("config: only read .git/config from configured
repos", 2016-09-12), we do not read from ".git/config" unless we
know we are in a repository.  "git mailinfo" however didn't do the
repository discovery and instead relied on the old behaviour.  This
was mostly OK because it was merely run as a helper program by other
porcelain scripts that first chdir's up to the root of the working
tree.

Teach the command to run a "gentle" version of repository discovery
so that local configuration variables like mailinfo.scissors are
honoured.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agol10n: Fixed typo of git fetch-pack command
Jiang Xin [Tue, 22 Nov 2016 14:24:59 +0000 (22:24 +0800)] 
l10n: Fixed typo of git fetch-pack command

Git 2.11.0-rc2 introduced one small l10n update, and this commit fixed
the affected translations all in one batch.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
8 years agol10n: git.pot: v2.11.0 round 2 (1 new, 1 removed)
Jiang Xin [Tue, 22 Nov 2016 14:22:59 +0000 (22:22 +0800)] 
l10n: git.pot: v2.11.0 round 2 (1 new, 1 removed)

Generate po/git.pot from v2.11.0-rc2 for git v2.11.0 l10n round 2.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
8 years agoMerge branch 'master' of git://github.com/git-l10n/git-po
Jiang Xin [Tue, 22 Nov 2016 14:08:47 +0000 (22:08 +0800)] 
Merge branch 'master' of git://github.com/git-l10n/git-po

* 'master' of git://github.com/git-l10n/git-po:
  l10n: zh_CN: for git v2.11.0 l10n round 1
  l10n: pt_PT: update Portuguese translation
  l10n: fr.po fix grammar mistakes
  l10n: fr.po v2.11.0_rnd1
  l10n: sv.po: Update Swedish translation (2913t0f0u)
  l10n: vi.po: Updated translation to v2.11.0 (2913t)
  l10n: ko.po: Update Korean translation
  l10n: git.pot: v2.11.0 round 1 (209 new, 53 removed)
  l10n: ru.po: update Russian translation

8 years agodoc: mention user-configured trailers
Jonathan Tan [Mon, 21 Nov 2016 20:47:21 +0000 (12:47 -0800)] 
doc: mention user-configured trailers

In commit 1462450 ("trailer: allow non-trailers in trailer block",
2016-10-21), functionality was added (and tested [1]) to allow
non-trailer lines in trailer blocks, as long as those blocks contain at
least one Git-generated or user-configured trailer, and consists of at
least 25% trailers. The documentation was updated to mention this new
functionality, but did not mention "user-configured trailer".

Further update the documentation to also mention "user-configured
trailer".

[1] "with non-trailer lines mixed with a configured trailer" in
t/t7513-interpret-trailers.sh

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agorebase -i: handle core.commentChar=auto
Johannes Schindelin [Mon, 21 Nov 2016 14:18:29 +0000 (15:18 +0100)] 
rebase -i: handle core.commentChar=auto

When 84c9dc2 (commit: allow core.commentChar=auto for character auto
selection, 2014-05-17) extended the core.commentChar functionality to
allow for the value 'auto', it forgot that rebase -i was already taught to
handle core.commentChar, and in turn forgot to let rebase -i handle that
new value gracefully.

Reported by Taufiq Hoven.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agostripspace: respect repository config
Johannes Schindelin [Mon, 21 Nov 2016 14:18:24 +0000 (15:18 +0100)] 
stripspace: respect repository config

The way "git stripspace" reads the configuration was not quite
kosher, in that the code forgot to probe for a possibly existing
repository (note: stripspace is designed to be usable outside the
repository as well).  It read .git/config only when it was run from
the top-level of the working tree by accident.  A recent change
b9605bc4f2 ("config: only read .git/config from configured repos",
2016-09-12) stopped reading the repository-local configuration file
".git/config" unless the repository discovery process is done, so
that .git/config is never read even when run from the top-level,
exposing the old bug more.

When rebasing interactively with a commentChar defined in the
current repository's config, the help text at the bottom of the edit
script potentially used an incorrect comment character. This was not
only funny-looking, but also resulted in tons of warnings like this
one:

Warning: the command isn't recognized in the following line
 - #

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agorebase -i: highlight problems with core.commentchar
Johannes Schindelin [Mon, 21 Nov 2016 14:18:05 +0000 (15:18 +0100)] 
rebase -i: highlight problems with core.commentchar

The interactive rebase does not currently play well with
core.commentchar. Let's add some tests to highlight those problems
that will be fixed in the remainder of the series.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoi18n: fix unmatched single quote in error message
Jiang Xin [Sun, 20 Nov 2016 12:26:17 +0000 (20:26 +0800)] 
i18n: fix unmatched single quote in error message

Fixed unmatched single quote introduced by commit:

 * f56fffef9a sequencer: teach write_message() to append an optional LF

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agol10n: zh_CN: for git v2.11.0 l10n round 1
Jiang Xin [Thu, 27 Oct 2016 13:53:37 +0000 (21:53 +0800)] 
l10n: zh_CN: for git v2.11.0 l10n round 1

Update 209 translations (2913t0f0u) for git v2.11.0-rc0.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
8 years agofor-each-ref: do not segv with %(HEAD) on an unborn branch
Junio C Hamano [Fri, 18 Nov 2016 23:21:12 +0000 (15:21 -0800)] 
for-each-ref: do not segv with %(HEAD) on an unborn branch

The code to flip between "*" and " " prefixes depending on what
branch is checked out used in --format='%(HEAD)' did not consider
that HEAD may resolve to an unborn branch and dereferenced a NULL.

This will become a lot easier to trigger as the codepath will be
used to reimplement "git branch [--list]" in the future.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoupload-pack: optionally allow fetching any sha1
David Turner [Fri, 11 Nov 2016 17:23:48 +0000 (12:23 -0500)] 
upload-pack: optionally allow fetching any sha1

It seems a little silly to do a reachabilty check in the case where we
trust the user to access absolutely everything in the repository.

Also, it's racy in a distributed system -- perhaps one server
advertises a ref, but another has since had a force-push to that ref,
and perhaps the two HTTP requests end up directed to these different
servers.

Signed-off-by: David Turner <dturner@twosigma.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoremote-curl: don't hang when a server dies before any output
David Turner [Fri, 18 Nov 2016 20:30:49 +0000 (15:30 -0500)] 
remote-curl: don't hang when a server dies before any output

In the event that a HTTP server closes the connection after giving a
200 but before giving any packets, we don't want to hang forever
waiting for a response that will never come.  Instead, we should die
immediately.

One case where this happens is when attempting to fetch a dangling
object by its object name.  In this case, the server dies before
sending any data.  Prior to this patch, fetch-pack would wait for
data from the server, and remote-curl would wait for fetch-pack,
causing a deadlock.

Despite this patch, there is other possible malformed input that could
cause the same deadlock (e.g. a half-finished pktline, or a pktline but
no trailing flush).  There are a few possible solutions to this:

1. Allowing remote-curl to tell fetch-pack about the EOF (so that
fetch-pack could know that no more data is coming until it says
something else).  This is tricky because an out-of-band signal would
be required, or the http response would have to be re-framed inside
another layer of pkt-line or something.

2. Make remote-curl understand some of the protocol.  It turns out
that in addition to understanding pkt-line, it would need to watch for
ack/nak.  This is somewhat fragile, as information about the protocol
would end up in two places.  Also, pkt-lines which are already at the
length limit would need special handling.

Both of these solutions would require a fair amount of work, whereas
this hack is easy and solves at least some of the problem.

Still to do: it would be good to give a better error message
than "fatal: The remote end hung up unexpectedly".

Signed-off-by: David Turner <dturner@twosigma.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agosubmodules: allow empty working-tree dirs in merge/cherry-pick
David Turner [Mon, 7 Nov 2016 18:31:31 +0000 (13:31 -0500)] 
submodules: allow empty working-tree dirs in merge/cherry-pick

When a submodule is being merged or cherry-picked into a working
tree that already contains a corresponding empty directory, do not
record a conflict.

One situation where this bug appears is:

- Commit 1 adds a submodule
- Commit 2 removes that submodule and re-adds it into a subdirectory
       (sub1 to sub1/sub1).
- Commit 3 adds an unrelated file.

Now the user checks out commit 1 (first deinitializing the submodule),
and attempts to cherry-pick commit 3.  Previously, this would fail,
because the incoming submodule sub1/sub1 would falsely conflict with
the empty sub1 directory.

This patch ignores the empty sub1 directory, fixing the bug.  We only
ignore the empty directory if the object being emplaced is a
submodule, which expects an empty directory.

Signed-off-by: David Turner <dturner@twosigma.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoGit 2.11-rc2 v2.11.0-rc2
Junio C Hamano [Thu, 17 Nov 2016 21:47:36 +0000 (13:47 -0800)] 
Git 2.11-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 years agoMerge branch 'tk/diffcore-delta-remove-unused'
Junio C Hamano [Thu, 17 Nov 2016 21:45:22 +0000 (13:45 -0800)] 
Merge branch 'tk/diffcore-delta-remove-unused'

Code cleanup.

* tk/diffcore-delta-remove-unused:
  diffcore-delta: remove unused parameter to diffcore_count_changes()

8 years agoMerge branch 'jk/create-branch-remove-unused-param'
Junio C Hamano [Thu, 17 Nov 2016 21:45:21 +0000 (13:45 -0800)] 
Merge branch 'jk/create-branch-remove-unused-param'

Code clean-up.

* jk/create-branch-remove-unused-param:
  create_branch: drop unused "head" parameter

8 years agoMerge branch 'nd/worktree-lock'
Junio C Hamano [Thu, 17 Nov 2016 21:45:21 +0000 (13:45 -0800)] 
Merge branch 'nd/worktree-lock'

Typofix.

* nd/worktree-lock:
  git-worktree.txt: fix typo "to"/"two", and add comma

8 years agogit-gc.txt: expand discussion of races with other processes
Matt McCutchen [Tue, 15 Nov 2016 19:08:51 +0000 (14:08 -0500)] 
git-gc.txt: expand discussion of races with other processes

In general, "git gc" may delete objects that another concurrent process
is using but hasn't created a reference to.  Git has some mitigations,
but they fall short of a complete solution.  Document this in the
git-gc(1) man page and add a reference from the documentation of the
gc.pruneExpire config variable.

Based on a write-up by Jeff King:

http://marc.info/?l=git&m=147922960131779&w=2

Signed-off-by: Matt McCutchen <matt@mattmccutchen.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>