git/git.git
4 years agogettext: add is_utf8_locale()
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:34 +0000 (07:22 +0200)]
gettext: add is_utf8_locale()

This function returns true if git is running under an UTF-8
locale. pcre in the next patch will need this.

is_encoding_utf8() is used instead of strcmp() to catch both "utf-8"
and "utf8" suffixes.

When built with no gettext support, we peek in several env variables
to detect UTF-8. pcre library might support utf-8 even if libc is
built without locale support.. The peeking code is a copy from
compat/regex/regcomp.c

Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogrep/pcre: prepare locale-dependent tables for icase matching
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:33 +0000 (07:22 +0200)]
grep/pcre: prepare locale-dependent tables for icase matching

The default tables are usually built with C locale and only suitable
for LANG=C or similar.  This should make case insensitive search work
correctly for all single-byte charsets.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogrep: rewrite an if/else condition to avoid duplicate expression
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:32 +0000 (07:22 +0200)]
grep: rewrite an if/else condition to avoid duplicate expression

"!icase || ascii_only" is repeated twice in this if/else chain as this
series evolves. Rewrite it (and basically revert the first if
condition back to before the "grep: break down an "if" stmt..." commit).

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogrep/icase: avoid kwsset when -F is specified
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:31 +0000 (07:22 +0200)]
grep/icase: avoid kwsset when -F is specified

Similar to the previous commit, we can't use kws on icase search
outside ascii range. But we can't simply pass the pattern to
regcomp/pcre like the previous commit because it may contain regex
special characters, so we need to quote the regex first.

To avoid misquote traps that could lead to undefined behavior, we
always stick to basic regex engine in this case. We don't need fancy
features for grepping a literal string anyway.

basic_regex_quote_buf() assumes that if the pattern is in a multibyte
encoding, ascii chars must be unambiguously encoded as single
bytes. This is true at least for UTF-8. For others, let's wait until
people yell up. Chances are nobody uses multibyte, non utf-8 charsets
anymore.

Noticed-by: Plamen Totev <plamen.totev@abv.bg>
Helped-by: René Scharfe <l.s.r@web.de>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogrep/icase: avoid kwsset on literal non-ascii strings
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:30 +0000 (07:22 +0200)]
grep/icase: avoid kwsset on literal non-ascii strings

When we detect the pattern is just a literal string, we avoid heavy
regex engine and use fast substring search implemented in kwsset.c.
But kws uses git-ctype which is locale-independent so it does not know
how to fold case properly outside ascii range. Let regcomp or pcre
take care of this case instead. Slower, but accurate.

Noticed-by: Plamen Totev <plamen.totev@abv.bg>
Helped-by: René Scharfe <l.s.r@web.de>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotest-regex: expose full regcomp() to the command line
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:29 +0000 (07:22 +0200)]
test-regex: expose full regcomp() to the command line

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotest-regex: isolate the bug test code
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:28 +0000 (07:22 +0200)]
test-regex: isolate the bug test code

This is in preparation to turn test-regex into some generic regex
testing command.

Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogrep: break down an "if" stmt in preparation for next changes
Nguyễn Thái Ngọc Duy [Sat, 25 Jun 2016 05:22:27 +0000 (07:22 +0200)]
grep: break down an "if" stmt in preparation for next changes

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSync with 2.7.1
Junio C Hamano [Fri, 5 Feb 2016 23:24:02 +0000 (15:24 -0800)]
Sync with 2.7.1

5 years agoGit 2.7.1 v2.7.1
Junio C Hamano [Fri, 5 Feb 2016 22:53:52 +0000 (14:53 -0800)]
Git 2.7.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'lv/add-doc-working-tree' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:22 +0000 (14:54 -0800)]
Merge branch 'lv/add-doc-working-tree' into maint

* lv/add-doc-working-tree:
  git-add doc: do not say working directory when you mean working tree

5 years agoMerge branch 'ss/clone-depth-single-doc' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:21 +0000 (14:54 -0800)]
Merge branch 'ss/clone-depth-single-doc' into maint

Documentation for "git fetch --depth" has been updated for clarity.

* ss/clone-depth-single-doc:
  docs: clarify that --depth for git-fetch works with newly initialized repos
  docs: say "commits" in the --depth option wording for git-clone
  docs: clarify that passing --depth to git-clone implies --single-branch

5 years agoMerge branch 'sg/t6050-failing-editor-test-fix' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:20 +0000 (14:54 -0800)]
Merge branch 'sg/t6050-failing-editor-test-fix' into maint

* sg/t6050-failing-editor-test-fix:
  t6050-replace: make failing editor test more robust

5 years agoMerge branch 'ew/for-each-ref-doc' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:19 +0000 (14:54 -0800)]
Merge branch 'ew/for-each-ref-doc' into maint

* ew/for-each-ref-doc:
  for-each-ref: document `creatordate` and `creator` fields

5 years agoMerge branch 'ss/user-manual' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:18 +0000 (14:54 -0800)]
Merge branch 'ss/user-manual' into maint

Drop a few old "todo" items by deciding that the change one of them
suggests is not such a good idea, and doing the change the other
one suggested to do.

* ss/user-manual:
  user-manual: add addition gitweb information
  user-manual: add section documenting shallow clones
  glossary: define the term shallow clone
  user-manual: remove temporary branch entry from todo list

5 years agoMerge branch 'jk/ref-cache-non-repository-optim' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:17 +0000 (14:54 -0800)]
Merge branch 'jk/ref-cache-non-repository-optim' into maint

The underlying machinery used by "ls-files -o" and other commands
have been taught not to create empty submodule ref cache for a
directory that is not a submodule.  This removes a ton of wasted
CPU cycles.

* jk/ref-cache-non-repository-optim:
  resolve_gitlink_ref: ignore non-repository paths
  clean: make is_git_repository a public function

5 years agoMerge branch 'js/dirname-basename' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:17 +0000 (14:54 -0800)]
Merge branch 'js/dirname-basename' into maint

dirname() emulation has been added, as Msys2 lacks it.

* js/dirname-basename:
  mingw: avoid linking to the C library's isalpha()
  t0060: loosen overly strict expectations
  t0060: verify that basename() and dirname() work as expected
  compat/basename.c: provide a dirname() compatibility function
  compat/basename: make basename() conform to POSIX
  Refactor skipping DOS drive prefixes

5 years agoMerge branch 'tb/complete-word-diff-regex' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:17 +0000 (14:54 -0800)]
Merge branch 'tb/complete-word-diff-regex' into maint

* tb/complete-word-diff-regex:
  completion: complete "diff --word-diff-regex="

5 years agoMerge branch 'pw/completion-stash' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:16 +0000 (14:54 -0800)]
Merge branch 'pw/completion-stash' into maint

* pw/completion-stash:
  completion: update completion arguments for stash

5 years agoMerge branch 'pw/completion-show-branch' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:16 +0000 (14:54 -0800)]
Merge branch 'pw/completion-show-branch' into maint

* pw/completion-show-branch:
  completion: complete show-branch "--date-order"

5 years agoMerge branch 'jk/completion-rebase' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:16 +0000 (14:54 -0800)]
Merge branch 'jk/completion-rebase' into maint

* jk/completion-rebase:
  completion: add missing git-rebase options

5 years agoMerge branch 'nd/diff-with-path-params' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:15 +0000 (14:54 -0800)]
Merge branch 'nd/diff-with-path-params' into maint

A few options of "git diff" did not work well when the command was
run from a subdirectory.

* nd/diff-with-path-params:
  diff: make -O and --output work in subdirectory
  diff-no-index: do not take a redundant prefix argument

5 years agoMerge branch 'dw/subtree-split-do-not-drop-merge' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:15 +0000 (14:54 -0800)]
Merge branch 'dw/subtree-split-do-not-drop-merge' into maint

The "split" subcommand of "git subtree" (in contrib/) incorrectly
skipped merges when it shouldn't, which was corrected.

* dw/subtree-split-do-not-drop-merge:
  contrib/subtree: fix "subtree split" skipped-merge bug

5 years agoMerge branch 'ew/svn-1.9.0-auth' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:15 +0000 (14:54 -0800)]
Merge branch 'ew/svn-1.9.0-auth' into maint

* ew/svn-1.9.0-auth:
  git-svn: fix auth parameter handling on SVN 1.9.0+

5 years agoMerge branch 'jk/list-tag-2.7-regression' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:15 +0000 (14:54 -0800)]
Merge branch 'jk/list-tag-2.7-regression' into maint

"git tag" started listing a tag "foo" as "tags/foo" when a branch
named "foo" exists in the same repository; remove this unnecessary
disambiguation, which is a regression introduced in v2.7.0.

* jk/list-tag-2.7-regression:
  tag: do not show ambiguous tag names as "tags/foo"
  t6300: use test_atom for some un-modern tests

5 years agoMerge branch 'jk/sanity' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:14 +0000 (14:54 -0800)]
Merge branch 'jk/sanity' into maint

The description for SANITY prerequisite the test suite uses has
been clarified both in the comment and in the implementation.

* jk/sanity:
  test-lib: clarify and tighten SANITY

5 years agoMerge branch 'jk/filter-branch-no-index' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:13 +0000 (14:54 -0800)]
Merge branch 'jk/filter-branch-no-index' into maint

A recent optimization to filter-branch in v2.7.0 introduced a
regression when --prune-empty filter is used, which has been
corrected.

* jk/filter-branch-no-index:
  filter-branch: resolve $commit^{tree} in no-index case

5 years agoMerge branch 'js/close-packs-before-gc' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:13 +0000 (14:54 -0800)]
Merge branch 'js/close-packs-before-gc' into maint

Many codepaths that run "gc --auto" before exiting kept packfiles
mapped and left the file descriptors to them open, which was not
friendly to systems that cannot remove files that are open.  They
now close the packs before doing so.

* js/close-packs-before-gc:
  receive-pack: release pack files before garbage-collecting
  merge: release pack files before garbage-collecting
  am: release pack files before garbage-collecting
  fetch: release pack files before garbage-collecting

5 years agoMerge branch 'jk/ok-to-fail-gc-auto-in-rebase' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:13 +0000 (14:54 -0800)]
Merge branch 'jk/ok-to-fail-gc-auto-in-rebase' into maint

"git rebase", unlike all other callers of "gc --auto", did not
ignore the exit code from "gc --auto".

* jk/ok-to-fail-gc-auto-in-rebase:
  rebase: ignore failures from "gc --auto"

5 years agoMerge branch 'ho/gitweb-squelch-undef-warning' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:12 +0000 (14:54 -0800)]
Merge branch 'ho/gitweb-squelch-undef-warning' into maint

Asking gitweb for a nonexistent commit left a warning in the server
log.

Somebody may want to follow this up with a new test, perhaps?
IIRC, we do test that no Perl warnings are given to the server log,
so this should have been caught if our test coverage were good.

* ho/gitweb-squelch-undef-warning:
  gitweb: squelch "uninitialized value" warning

5 years agoMerge branch 'js/fopen-harder' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:11 +0000 (14:54 -0800)]
Merge branch 'js/fopen-harder' into maint

Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
(e.g. COMMIT_EDITMSG) that is meant to be left after the command is
done.  This however did not work well if the repository is set to
be shared with core.sharedRepository and the umask of the previous
user is tighter.  They have been made to work better by calling
unlink(2) and retrying after fopen(3) fails with EPERM.

* js/fopen-harder:
  Handle more file writes correctly in shared repos
  commit: allow editing the commit message even in shared repos

5 years agoMerge branch 'nd/exclusion-regression-fix' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:11 +0000 (14:54 -0800)]
Merge branch 'nd/exclusion-regression-fix' into maint

The ignore mechanism saw a few regressions around untracked file
listing and sparse checkout selection areas in 2.7.0; the change
that is responsible for the regression has been reverted.

* nd/exclusion-regression-fix:
  Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"

5 years agoMerge branch 'dk/reflog-walk-with-non-commit' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:10 +0000 (14:54 -0800)]
Merge branch 'dk/reflog-walk-with-non-commit' into maint

"git reflog" incorrectly assumed that all objects that used to be
at the tip of a ref must be commits, which caused it to segfault.

* dk/reflog-walk-with-non-commit:
  reflog-walk: don't segfault on non-commit sha1's in the reflog

5 years agoMerge branch 'dw/signoff-doc' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:09 +0000 (14:54 -0800)]
Merge branch 'dw/signoff-doc' into maint

The documentation has been updated to hint the connection between
the '--signoff' option and DCO.

* dw/signoff-doc:
  Expand documentation describing --signoff

5 years agoMerge branch 'jk/clang-pedantic' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:09 +0000 (14:54 -0800)]
Merge branch 'jk/clang-pedantic' into maint

A few unportable C construct have been spotted by clang compiler
and have been fixed.

* jk/clang-pedantic:
  bswap: add NO_UNALIGNED_LOADS define
  avoid shifting signed integers 31 bits

5 years agoMerge branch 'ew/send-email-mutt-alias-fix' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:09 +0000 (14:54 -0800)]
Merge branch 'ew/send-email-mutt-alias-fix' into maint

"git send-email" was confused by escaped quotes stored in the alias
files saved by "mutt", which has been corrected.

* ew/send-email-mutt-alias-fix:
  git-send-email: do not double-escape quotes from mutt

5 years agoMerge branch 'nd/dir-exclude-cleanup' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:08 +0000 (14:54 -0800)]
Merge branch 'nd/dir-exclude-cleanup' into maint

The "exclude_list" structure has the usual "alloc, nr" pair of
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
array.

* nd/dir-exclude-cleanup:
  dir.c: clean the entire struct in clear_exclude_list()

5 years agoMerge branch 'nd/stop-setenv-work-tree' into maint
Junio C Hamano [Fri, 5 Feb 2016 22:54:07 +0000 (14:54 -0800)]
Merge branch 'nd/stop-setenv-work-tree' into maint

An earlier change in 2.5.x-era broke users' hooks and aliases by
exporting GIT_WORK_TREE to point at the root of the working tree,
interfering when they tried to use a different working tree without
setting GIT_WORK_TREE environment themselves.

* nd/stop-setenv-work-tree:
  Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"

5 years agoFifth batch for 2.8 cycle
Junio C Hamano [Wed, 3 Feb 2016 22:31:13 +0000 (14:31 -0800)]
Fifth batch for 2.8 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'kf/http-proxy-auth-methods'
Junio C Hamano [Wed, 3 Feb 2016 22:16:08 +0000 (14:16 -0800)]
Merge branch 'kf/http-proxy-auth-methods'

New http.proxyAuthMethod configuration variable can be used to
specify what authentication method to use, as a way to work around
proxies that do not give error response expected by libcurl when
CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
has been taught to use credential API to store the authentication
material in user's keyrings.

* kf/http-proxy-auth-methods:
  http: use credential API to handle proxy authentication
  http: allow selection of proxy authentication method

5 years agoMerge branch 'jk/ref-cache-non-repository-optim'
Junio C Hamano [Wed, 3 Feb 2016 22:16:07 +0000 (14:16 -0800)]
Merge branch 'jk/ref-cache-non-repository-optim'

The underlying machinery used by "ls-files -o" and other commands
have been taught not to create empty submodule ref cache for a
directory that is not a submodule.  This removes a ton of wasted
CPU cycles.

* jk/ref-cache-non-repository-optim:
  resolve_gitlink_ref: ignore non-repository paths
  clean: make is_git_repository a public function

5 years agoMerge branch 'ls/travis-prove-order'
Junio C Hamano [Wed, 3 Feb 2016 22:16:07 +0000 (14:16 -0800)]
Merge branch 'ls/travis-prove-order'

Automated tests in Travis CI environment has been optimized by
persisting runtime statistics of previous "prove" run, executing
tests that take longer before other ones; this reduces the total
wallclock time.

* ls/travis-prove-order:
  travis-ci: explicity use container-based infrastructure
  travis-ci: run previously failed tests first, then slowest to fastest

5 years agoMerge branch 'dt/unpack-compare-entry-optim'
Junio C Hamano [Wed, 3 Feb 2016 22:16:06 +0000 (14:16 -0800)]
Merge branch 'dt/unpack-compare-entry-optim'

"git checkout $branch" (and other operations that share the same
underlying machinery) has been optimized.

* dt/unpack-compare-entry-optim:
  unpack-trees: fix accidentally quadratic behavior
  do_compare_entry: use already-computed path

5 years agoMerge branch 'js/dirname-basename'
Junio C Hamano [Wed, 3 Feb 2016 22:16:06 +0000 (14:16 -0800)]
Merge branch 'js/dirname-basename'

dirname() emulation has been added, as Msys2 lacks it.

* js/dirname-basename:
  mingw: avoid linking to the C library's isalpha()
  t0060: loosen overly strict expectations
  t0060: verify that basename() and dirname() work as expected
  compat/basename.c: provide a dirname() compatibility function
  compat/basename: make basename() conform to POSIX
  Refactor skipping DOS drive prefixes

5 years agoMerge branch 'pw/completion-stash'
Junio C Hamano [Wed, 3 Feb 2016 22:16:06 +0000 (14:16 -0800)]
Merge branch 'pw/completion-stash'

* pw/completion-stash:
  completion: update completion arguments for stash

5 years agoMerge branch 'pw/completion-show-branch'
Junio C Hamano [Wed, 3 Feb 2016 22:16:05 +0000 (14:16 -0800)]
Merge branch 'pw/completion-show-branch'

* pw/completion-show-branch:
  completion: complete show-branch "--date-order"

5 years agoMerge branch 'jk/completion-rebase'
Junio C Hamano [Wed, 3 Feb 2016 22:16:05 +0000 (14:16 -0800)]
Merge branch 'jk/completion-rebase'

* jk/completion-rebase:
  completion: add missing git-rebase options

5 years agoMerge branch 'nd/diff-with-path-params'
Junio C Hamano [Wed, 3 Feb 2016 22:16:04 +0000 (14:16 -0800)]
Merge branch 'nd/diff-with-path-params'

A few options of "git diff" did not work well when the command was
run from a subdirectory.

* nd/diff-with-path-params:
  diff: make -O and --output work in subdirectory
  diff-no-index: do not take a redundant prefix argument

5 years agoMerge branch 'lv/add-doc-working-tree'
Junio C Hamano [Wed, 3 Feb 2016 22:16:04 +0000 (14:16 -0800)]
Merge branch 'lv/add-doc-working-tree'

* lv/add-doc-working-tree:
  git-add doc: do not say working directory when you mean working tree

5 years agoMerge branch 'dw/subtree-split-do-not-drop-merge'
Junio C Hamano [Wed, 3 Feb 2016 22:16:03 +0000 (14:16 -0800)]
Merge branch 'dw/subtree-split-do-not-drop-merge'

The "split" subcommand of "git subtree" (in contrib/) incorrectly
skipped merges when it shouldn't, which was corrected.

* dw/subtree-split-do-not-drop-merge:
  contrib/subtree: fix "subtree split" skipped-merge bug

5 years agoMerge branch 'tb/complete-word-diff-regex'
Junio C Hamano [Wed, 3 Feb 2016 22:16:03 +0000 (14:16 -0800)]
Merge branch 'tb/complete-word-diff-regex'

* tb/complete-word-diff-regex:
  completion: complete "diff --word-diff-regex="

5 years agoMerge branch 'mk/asciidoctor-bq-workaround'
Junio C Hamano [Wed, 3 Feb 2016 22:16:01 +0000 (14:16 -0800)]
Merge branch 'mk/asciidoctor-bq-workaround'

* mk/asciidoctor-bq-workaround:
  Documentation: remove unnecessary backslashes

5 years agoMerge branch 'dg/subtree-test'
Junio C Hamano [Wed, 3 Feb 2016 22:16:00 +0000 (14:16 -0800)]
Merge branch 'dg/subtree-test'

* dg/subtree-test:
  contrib/subtree: Make testing easier

5 years agoMerge branch 'tg/ls-remote-symref'
Junio C Hamano [Wed, 3 Feb 2016 22:16:00 +0000 (14:16 -0800)]
Merge branch 'tg/ls-remote-symref'

"ls-remote" learned an option to show which branch the remote
repository advertises as its primary by pointing its HEAD at.

* tg/ls-remote-symref:
  ls-remote: add support for showing symrefs
  ls-remote: use parse-options api
  ls-remote: fix synopsis
  ls-remote: document --refs option
  ls-remote: document --quiet option

5 years agoMerge branch 'tb/ls-files-eol'
Junio C Hamano [Wed, 3 Feb 2016 22:15:59 +0000 (14:15 -0800)]
Merge branch 'tb/ls-files-eol'

"git ls-files" learned a new "--eol" option to help diagnose
end-of-line problems.

* tb/ls-files-eol:
  ls-files: add eol diagnostics

5 years agoMerge branch 'jk/notes-merge-from-anywhere'
Junio C Hamano [Wed, 3 Feb 2016 22:15:59 +0000 (14:15 -0800)]
Merge branch 'jk/notes-merge-from-anywhere'

"git notes merge" used to limit the source of the merged notes tree
to somewhere under refs/notes/ hierarchy, which was too limiting
when inventing a workflow to exchange notes with remote
repositories using remote-tracking notes trees (located in e.g.
refs/remote-notes/ or somesuch).

* jk/notes-merge-from-anywhere:
  notes: allow merging from arbitrary references

5 years agoMerge branch 'jc/peace-with-crlf'
Junio C Hamano [Wed, 3 Feb 2016 22:15:58 +0000 (14:15 -0800)]
Merge branch 'jc/peace-with-crlf'

Many commands that read files that are expected to contain text
that is generated (or can be edited) by the end user to control
their behaviour (e.g. "git grep -f <filename>") have been updated
to be more tolerant to lines that are terminated with CRLF (they
used to treat such a line to contain payload that ends with CR,
which is usually not what the users expect).

* jc/peace-with-crlf:
  test-sha1-array: read command stream with strbuf_getline()
  grep: read -f file with strbuf_getline()
  send-pack: read list of refs with strbuf_getline()
  column: read lines with strbuf_getline()
  cat-file: read batch stream with strbuf_getline()
  transport-helper: read helper response with strbuf_getline()
  clone/sha1_file: read info/alternates with strbuf_getline()
  remote.c: read $GIT_DIR/remotes/* with strbuf_getline()
  ident.c: read /etc/mailname with strbuf_getline()
  rev-parse: read parseopt spec with strbuf_getline()
  revision: read --stdin with strbuf_getline()
  hash-object: read --stdin-paths with strbuf_getline()

5 years agoGetting closer to 2.7.1
Junio C Hamano [Mon, 1 Feb 2016 23:17:29 +0000 (15:17 -0800)]
Getting closer to 2.7.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'jk/list-tag-2.7-regression'
Junio C Hamano [Mon, 1 Feb 2016 23:14:24 +0000 (15:14 -0800)]
Merge branch 'jk/list-tag-2.7-regression'

"git tag" started listing a tag "foo" as "tags/foo" when a branch
named "foo" exists in the same repository; remove this unnecessary
disambiguation, which is a regression introduced in v2.7.0.

* jk/list-tag-2.7-regression:
  tag: do not show ambiguous tag names as "tags/foo"
  t6300: use test_atom for some un-modern tests

5 years agoMerge branch 'ew/svn-1.9.0-auth'
Junio C Hamano [Mon, 1 Feb 2016 23:14:23 +0000 (15:14 -0800)]
Merge branch 'ew/svn-1.9.0-auth'

* ew/svn-1.9.0-auth:
  git-svn: fix auth parameter handling on SVN 1.9.0+

5 years agoFourth batch for 2.8.cycle
Junio C Hamano [Fri, 29 Jan 2016 00:14:25 +0000 (16:14 -0800)]
Fourth batch for 2.8.cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'jk/shortlog'
Junio C Hamano [Fri, 29 Jan 2016 00:10:14 +0000 (16:10 -0800)]
Merge branch 'jk/shortlog'

"git shortlog" used to accumulate various pieces of information
regardless of what was asked to be shown in the final output.  It
has been optimized by noticing what need not to be collected
(e.g. there is no need to collect the log messages when showing
only the number of changes).

* jk/shortlog:
  shortlog: don't warn on empty author
  shortlog: optimize out useless string list
  shortlog: optimize out useless "<none>" normalization
  shortlog: optimize "--summary" mode
  shortlog: replace hand-parsing of author with pretty-printer
  shortlog: use strbufs to read from stdin
  shortlog: match both "Author:" and "author" on stdin

5 years agoMerge branch 'jc/strbuf-getline'
Junio C Hamano [Fri, 29 Jan 2016 00:10:14 +0000 (16:10 -0800)]
Merge branch 'jc/strbuf-getline'

The preliminary clean-up for jc/peace-with-crlf topic.

* jc/strbuf-getline:
  strbuf: give strbuf_getline() to the "most text friendly" variant
  checkout-index: there are only two possible line terminations
  update-index: there are only two possible line terminations
  check-ignore: there are only two possible line terminations
  check-attr: there are only two possible line terminations
  mktree: there are only two possible line terminations
  strbuf: introduce strbuf_getline_{lf,nul}()
  strbuf: make strbuf_getline_crlf() global
  strbuf: miniscule style fix

5 years agoMerge branch 'js/msys2'
Junio C Hamano [Fri, 29 Jan 2016 00:10:13 +0000 (16:10 -0800)]
Merge branch 'js/msys2'

Beginning of the upstreaming process of Git for Windows effort.

* js/msys2:
  mingw: uglify (a, 0) definitions to shut up warnings
  mingw: squash another warning about a cast
  mingw: avoid warnings when casting HANDLEs to int
  mingw: avoid redefining S_* constants
  compat/winansi: support compiling with MSys2
  compat/mingw: support MSys2-based MinGW build
  nedmalloc: allow compiling with MSys2's compiler
  config.mak.uname: supporting 64-bit MSys2
  config.mak.uname: support MSys2

5 years agoMerge branch 'tk/interpret-trailers-in-place'
Junio C Hamano [Fri, 29 Jan 2016 00:10:13 +0000 (16:10 -0800)]
Merge branch 'tk/interpret-trailers-in-place'

"interpret-trailers" has been taught to optionally update a file in
place, instead of always writing the result to the standard output.

* tk/interpret-trailers-in-place:
  interpret-trailers: add option for in-place editing
  trailer: allow to write to files other than stdout

5 years agoMerge branch 'jk/sanity'
Junio C Hamano [Fri, 29 Jan 2016 00:10:13 +0000 (16:10 -0800)]
Merge branch 'jk/sanity'

The description for SANITY prerequisite the test suite uses has
been clarified both in the comment and in the implementation.

* jk/sanity:
  test-lib: clarify and tighten SANITY

5 years agoMerge branch 'jk/filter-branch-no-index'
Junio C Hamano [Fri, 29 Jan 2016 00:10:12 +0000 (16:10 -0800)]
Merge branch 'jk/filter-branch-no-index'

A recent optimization to filter-branch in v2.7.0 introduced a
regression when --prune-empty filter is used, which has been
corrected.

* jk/filter-branch-no-index:
  filter-branch: resolve $commit^{tree} in no-index case

5 years agogit-svn: fix auth parameter handling on SVN 1.9.0+
Eric Wong [Sat, 16 Jan 2016 10:17:19 +0000 (10:17 +0000)]
git-svn: fix auth parameter handling on SVN 1.9.0+

For users with "store-passwords = no" set in the "[auth]" section of
their ~/.subversion/config, SVN 1.9.0+ would fail with the
following message when attempting to call svn_auth_set_parameter:

  Value is not a string (or undef) at Git/SVN/Ra.pm

Ironically, this breakage was caused by r1553823 in subversion:

  "Make svn_auth_set_parameter() usable from Perl bindings."

Since 2007 (602015e0e6ec), git-svn has used a workaround to make
svn_auth_set_parameter usable internally.  However this workaround
breaks under SVN 1.9+, which deals properly with the type mapping
and fails to recognize our workaround.

For pre-1.9.0 SVN, we continue to use the existing workaround for
the lack of proper type mapping in the bindings.

Tested under subversion 1.6.17 and 1.9.3.

I've also verified r1553823 was not backported to SVN 1.8.x:

  BRANCH=http://svn.apache.org/repos/asf/subversion/branches/1.8.x
  svn log -v $BRANCH/subversion/bindings/swig/core.i

ref: https://bugs.debian.org/797705
Cc: 797705@bugs.debian.org
Reported-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Tested-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoThird batch for 2.8 cycle
Junio C Hamano [Tue, 26 Jan 2016 23:41:04 +0000 (15:41 -0800)]
Third batch for 2.8 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'jk/symbolic-ref'
Junio C Hamano [Tue, 26 Jan 2016 23:40:30 +0000 (15:40 -0800)]
Merge branch 'jk/symbolic-ref'

The low-level code that is used to create symbolic references has
been updated to share more code with the code that deals with
normal references.

* jk/symbolic-ref:
  lock_ref_sha1_basic: handle REF_NODEREF with invalid refs
  lock_ref_sha1_basic: always fill old_oid while holding lock
  checkout,clone: check return value of create_symref
  create_symref: write reflog while holding lock
  create_symref: use existing ref-lock code
  create_symref: modernize variable names

5 years agoMerge branch 'ak/format-patch-odir-config'
Junio C Hamano [Tue, 26 Jan 2016 23:40:30 +0000 (15:40 -0800)]
Merge branch 'ak/format-patch-odir-config'

"git format-patch" learned to notice format.outputDirectory
configuration variable.  This allows "-o <dir>" option to be
omitted on the command line if you always use the same directory in
your workflow.

* ak/format-patch-odir-config:
  format-patch: introduce format.outputDirectory configuration

5 years agoMerge branch 'rp/p4-filetype-change'
Junio C Hamano [Tue, 26 Jan 2016 23:40:29 +0000 (15:40 -0800)]
Merge branch 'rp/p4-filetype-change'

* rp/p4-filetype-change:
  git-p4.py: add support for filetype change

5 years agoMerge branch 'js/close-packs-before-gc'
Junio C Hamano [Tue, 26 Jan 2016 23:40:29 +0000 (15:40 -0800)]
Merge branch 'js/close-packs-before-gc'

Many codepaths that run "gc --auto" before exiting kept packfiles
mapped and left the file descriptors to them open, which was not
friendly to systems that cannot remove files that are open.  They
now close the packs before doing so.

* js/close-packs-before-gc:
  receive-pack: release pack files before garbage-collecting
  merge: release pack files before garbage-collecting
  am: release pack files before garbage-collecting
  fetch: release pack files before garbage-collecting

5 years agoMerge branch 'jk/ok-to-fail-gc-auto-in-rebase'
Junio C Hamano [Tue, 26 Jan 2016 23:40:29 +0000 (15:40 -0800)]
Merge branch 'jk/ok-to-fail-gc-auto-in-rebase'

"git rebase", unlike all other callers of "gc --auto", did not
ignore the exit code from "gc --auto".

* jk/ok-to-fail-gc-auto-in-rebase:
  rebase: ignore failures from "gc --auto"

5 years agoMerge branch 'js/pull-rebase-i'
Junio C Hamano [Tue, 26 Jan 2016 23:40:28 +0000 (15:40 -0800)]
Merge branch 'js/pull-rebase-i'

"git pull --rebase" has been extended to allow invoking
"rebase -i".

* js/pull-rebase-i:
  completion: add missing branch.*.rebase values
  remote: handle the config setting branch.*.rebase=interactive
  pull: allow interactive rebase with --rebase=interactive

5 years agotag: do not show ambiguous tag names as "tags/foo"
Jeff King [Tue, 26 Jan 2016 03:00:05 +0000 (22:00 -0500)]
tag: do not show ambiguous tag names as "tags/foo"

Since b7cc53e9 (tag.c: use 'ref-filter' APIs, 2015-07-11),
git-tag has started showing tags with ambiguous names (i.e.,
when both "heads/foo" and "tags/foo" exists) as "tags/foo"
instead of just "foo". This is both:

  - pointless; the output of "git tag" includes only
    refs/tags, so we know that "foo" means the one in
    "refs/tags".

and

  - ambiguous; in the original output, we know that the line
    "foo" means that "refs/tags/foo" exists. In the new
    output, it is unclear whether we mean "refs/tags/foo" or
    "refs/tags/tags/foo".

The reason this happens is that commit b7cc53e9 switched
git-tag to use ref-filter's "%(refname:short)" output
formatting, which was adapted from for-each-ref. This more
general code does not know that we care only about tags, and
uses shorten_unambiguous_ref to get the short-name. We need
to tell it that we care only about "refs/tags/", and it
should shorten with respect to that value.

In theory, the ref-filter code could figure this out by us
passing FILTER_REFS_TAGS. But there are two complications
there:

  1. The handling of refname:short is deep in formatting
     code that does not even have our ref_filter struct, let
     alone the arguments to the filter_ref struct.

  2. In git v2.7.0, we expose the formatting language to the
     user. If we follow this path, it will mean that
     "%(refname:short)" behaves differently for "tag" versus
     "for-each-ref" (including "for-each-ref refs/tags/"),
     which can lead to confusion.

Instead, let's add a new modifier to the formatting
language, "strip", to remove a specific set of prefix
components. This fixes "git tag", and lets users invoke the
same behavior from their own custom formats (for "tag" or
"for-each-ref") while leaving ":short" with its same
consistent meaning in all places.

We introduce a test in t7004 for "git tag", which fails
without this patch. We also add a similar test in t3203 for
"git branch", which does not actually fail. But since it is
likely that "branch" will eventually use the same formatting
code, the test helps defend against future regressions.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: use credential API to handle proxy authentication
Knut Franke [Tue, 26 Jan 2016 13:02:48 +0000 (13:02 +0000)]
http: use credential API to handle proxy authentication

Currently, the only way to pass proxy credentials to curl is by including them
in the proxy URL. Usually, this means they will end up on disk unencrypted, one
way or another (by inclusion in ~/.gitconfig, shell profile or history). Since
proxy authentication often uses a domain user, credentials can be security
sensitive; therefore, a safer way of passing credentials is desirable.

If the configured proxy contains a username but not a password, query the
credential API for one. Also, make sure we approve/reject proxy credentials
properly.

For consistency reasons, add parsing of http_proxy/https_proxy/all_proxy
environment variables, which would otherwise be evaluated as a fallback by curl.
Without this, we would have different semantics for git configuration and
environment variables.

Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Knut Franke <k.franke@science-computing.de>
Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: allow selection of proxy authentication method
Knut Franke [Tue, 26 Jan 2016 13:02:47 +0000 (13:02 +0000)]
http: allow selection of proxy authentication method

CURLAUTH_ANY does not work with proxies which answer unauthenticated requests
with a 307 redirect to an error page instead of a 407 listing supported
authentication methods. Therefore, allow the authentication method to be set
using the environment variable GIT_HTTP_PROXY_AUTHMETHOD or configuration
variables http.proxyAuthmethod and remote.<name>.proxyAuthmethod (in analogy
to http.proxy and remote.<name>.proxy).

The following values are supported:

* anyauth (default)
* basic
* digest
* negotiate
* ntlm

Signed-off-by: Knut Franke <k.franke@science-computing.de>
Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agotravis-ci: explicity use container-based infrastructure
Lars Schneider [Tue, 26 Jan 2016 09:53:43 +0000 (10:53 +0100)]
travis-ci: explicity use container-based infrastructure

Set `sudo: false` to explicitly use the (faster) container-based
infrastructure for the Travis-CI Linux build.

More info:
https://docs.travis-ci.com/user/ci-environment/#Virtualization-environments

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agotravis-ci: run previously failed tests first, then slowest to fastest
Lars Schneider [Tue, 26 Jan 2016 09:53:42 +0000 (10:53 +0100)]
travis-ci: run previously failed tests first, then slowest to fastest

The Travis-CI machines are in a clean state in the beginning of every run
(transient by default). Use the Travis-CI cache feature to make the prove
state persistent across consecutive Travis-CI runs on the same branch.
This allows to run previously failed tests first and run remaining tests
in slowest to fastest order. As a result it is less likely that Travis-CI
needs to wait for a single test at the end which speeds up the test suite
execution by ~2 min.

Travis-CI can only cache entire directories. Prove stores the .prove file
always in the t/ directory but we don't want to cache the entire t/ directory.
Therefore we create a symlink from $HOME/travis-cache/.prove to t/.prove and
cache the $HOME/travis-cache directory.

Unfortunately the cache feature is only available (for free) on the
Travis-CI Linux environment.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agocompletion: update completion arguments for stash
Paul Wagland [Tue, 26 Jan 2016 09:37:19 +0000 (10:37 +0100)]
completion: update completion arguments for stash

Add --all and --include-untracked to the git stash save completions.
Add --quiet to the git stash drop completions.
Update git stash branch so that the first argument expands out to the
possible branch names, and the other arguments expand to the stash
names.

Signed-off-by: Paul Wagland <paul@kungfoocoder.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agocompletion: complete show-branch "--date-order"
Paul Wagland [Sat, 23 Jan 2016 01:25:54 +0000 (02:25 +0100)]
completion: complete show-branch "--date-order"

Signed-off-by: Paul Wagland <paul@kungfoocoder.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agocompletion: add missing git-rebase options
John Keeping [Thu, 21 Jan 2016 20:52:24 +0000 (20:52 +0000)]
completion: add missing git-rebase options

This adds the --no-* variants where those are documented in
git-rebase(1).

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomingw: avoid linking to the C library's isalpha()
Johannes Sixt [Mon, 25 Jan 2016 21:47:56 +0000 (22:47 +0100)]
mingw: avoid linking to the C library's isalpha()

The implementation of mingw_skip_dos_drive_prefix() calls isalpha() via
has_dos_drive_prefix(). Since the definition occurs long before isalpha()
is defined in git-compat-util.h, my build environment reports:

    CC alloc.o
In file included from git-compat-util.h:186,
                 from cache.h:4,
                 from alloc.c:12:
compat/mingw.h: In function 'mingw_skip_dos_drive_prefix':
compat/mingw.h:365: warning: implicit declaration of function 'isalpha'

Dscho does not see a similar warning in his build and suspects that
ctype.h is included somehow behind the scenes. This implies that his build
links to the C library's isalpha() and does not use git's isalpha().

To fix both the warning in my build and the inconsistency in Dscho's
build, move the function definition to mingw.c. Then it picks up git's
isalpha() because git-compat-util.h is included at the top of the file.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot6300: use test_atom for some un-modern tests
Jeff King [Sun, 24 Jan 2016 23:08:18 +0000 (18:08 -0500)]
t6300: use test_atom for some un-modern tests

Because this script has to test so many formatters, we have
the nice "test_atom" helper, but we don't use it
consistently. Let's do so. This is shorter, gets rid of some
tests that have their "expected" setup outside of a
test_expect_success block, and lets us organize the changes
better (e.g., putting "refname:short" near "refname").

We also expand the "%(push)" tests a little to match the
"%(upstream)" ones.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoresolve_gitlink_ref: ignore non-repository paths
Jeff King [Fri, 22 Jan 2016 22:29:30 +0000 (17:29 -0500)]
resolve_gitlink_ref: ignore non-repository paths

When we want to look up a submodule ref, we use
get_ref_cache(path) to find or auto-create its ref cache.
But if we feed a path that isn't actually a git repository,
we blindly create the ref cache, and then may die deeper in
the code when we try to access it. This is a problem because
many callers speculatively feed us a path that looks vaguely
like a repository, and expect us to tell them when it is
not.

This patch teaches resolve_gitlink_ref to reject
non-repository paths without creating a ref_cache. This
avoids the die(), and also performs better if you have a
large number of these faux-submodule directories (because
the ref_cache lookup is linear, under the assumption that
there won't be a large number of submodules).

To accomplish this, we also break get_ref_cache into two
pieces: the lookup and auto-creation (the latter is lumped
into create_ref_cache). This lets us first cheaply ask our
cache "is it a submodule we know about?" If so, we can avoid
repeating our filesystem lookup. So lookups of real
submodules are not penalized; they examine the submodule's
.git directory only once.

The test in t3000 demonstrates a case where this improves
correctness (we used to just die). The new perf case in
p7300 shows off the speed improvement in an admittedly
pathological repository:

Test                  HEAD^               HEAD
----------------------------------------------------------------
7300.4: ls-files -o   66.97(66.15+0.87)   0.33(0.08+0.24) -99.5%

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoclean: make is_git_repository a public function
Jeff King [Fri, 22 Jan 2016 22:27:33 +0000 (17:27 -0500)]
clean: make is_git_repository a public function

We have always had is_git_directory(), for looking at a
specific directory to see if it contains a git repo. In
0179ca7 (clean: improve performance when removing lots of
directories, 2015-06-15), we added is_git_repository() which
checks for a non-bare repository by looking at its ".git"
entry.

However, the fix in 0179ca7 needs to be applied other
places, too. Let's make this new helper globally available.
We need to give it a better name, though, to avoid confusion
with is_git_directory(). This patch does that, documents
both functions with a comment to reduce confusion, and
removes the clean-specific references in the comments.

Based-on-a-patch-by: Andreas Krey <a.krey@gmx.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'ep/shell-command-substitution-style'
Junio C Hamano [Fri, 22 Jan 2016 21:08:46 +0000 (13:08 -0800)]
Merge branch 'ep/shell-command-substitution-style'

A shell script style update to change `command substitution` into
$(command substitution).  Coverts contrib/ and much of the t/
directory contents.

* ep/shell-command-substitution-style: (92 commits)
  t9901-git-web--browse.sh: use the $( ... ) construct for command substitution
  t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
  t9350-fast-export.sh: use the $( ... ) construct for command substitution
  t9300-fast-import.sh: use the $( ... ) construct for command substitution
  t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
  t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
  t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
  t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
  t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
  t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
  t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
  t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
  t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
  t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
  t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
  t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
  t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
  t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
  t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
  t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
  ...

5 years agoMerge branch 'rm/subtree-unwrap-tags'
Junio C Hamano [Fri, 22 Jan 2016 21:08:45 +0000 (13:08 -0800)]
Merge branch 'rm/subtree-unwrap-tags'

"git subtree" (in contrib/) records the tag object name in the
commit log message when a subtree is added using a tag, without
peeling it down to the underlying commit.  The tag needs to be
peeled when "git subtree split" wants to work on the commit, but
the command forgot to do so.

* rm/subtree-unwrap-tags:
  contrib/subtree: unwrap tag refs

5 years agounpack-trees: fix accidentally quadratic behavior
David Turner [Fri, 22 Jan 2016 19:58:43 +0000 (14:58 -0500)]
unpack-trees: fix accidentally quadratic behavior

While unpacking trees (e.g. during git checkout), when we hit a cache
entry that's past and outside our path, we cut off iteration.

This provides about a 45% speedup on git checkout between master and
master^20000 on Twitter's monorepo.  Speedup in general will depend on
repostitory structure, number of changes, and packfile packing
decisions.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agodiff: make -O and --output work in subdirectory
Duy Nguyen [Thu, 21 Jan 2016 11:48:44 +0000 (18:48 +0700)]
diff: make -O and --output work in subdirectory

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agodiff-no-index: do not take a redundant prefix argument
Nguyễn Thái Ngọc Duy [Wed, 20 Jan 2016 11:06:02 +0000 (18:06 +0700)]
diff-no-index: do not take a redundant prefix argument

Prefix is already set up in "revs". The same prefix should be used for
all options parsing. So kill the last argument. This patch does not
actually change anything because the only caller does use the same
prefix for init_revisions() and diff_no_index().

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agogit-add doc: do not say working directory when you mean working tree
Lars Vogel [Thu, 21 Jan 2016 10:09:15 +0000 (11:09 +0100)]
git-add doc: do not say working directory when you mean working tree

The usage of working directory is inconsistent in the git add help.
Also http://git-scm.com/docs/git-clone speaks only about working tree.
Remaining entry found by "git grep -B1 '^directory' git-add.txt" really
relates to a directory.

Signed-off-by: Lars Vogel <Lars.Vogel@vogella.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agocompletion: complete "diff --word-diff-regex="
Thomas Braun [Wed, 20 Jan 2016 17:34:58 +0000 (18:34 +0100)]
completion: complete "diff --word-diff-regex="

Signed-off-by: Thomas Braun <thomas.braun@virtuell-zuhause.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoDocumentation: remove unnecessary backslashes
Matthew Kraai [Wed, 20 Jan 2016 17:21:37 +0000 (09:21 -0800)]
Documentation: remove unnecessary backslashes

asciidoctor does not remove backslashes used to escape curly brackets from
the HTML output if the contents of the curly brackets are empty or contain
at least a <, -, or space.  asciidoc does not require the backslashes in
these cases, so just remove them.

Signed-off-by: Matthew Kraai <matt.kraai@abbott.com>
Reported-by: Philip Oakley <philipoakley@iee.org>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agocontrib/subtree: fix "subtree split" skipped-merge bug
Dave Ware [Fri, 15 Jan 2016 00:41:43 +0000 (13:41 +1300)]
contrib/subtree: fix "subtree split" skipped-merge bug

'git subtree split' can incorrectly skip a merge even when both parents
act on the subtree, provided the merge results in a tree identical to
one of the parents. Fix by copying the merge if at least one parent is
non-identical, and the non-identical parent is not an ancestor of the
identical parent.

Also, add a test case which checks that a descendant remains a
descendent on the subtree in this case.

Signed-off-by: Dave Ware <davidw@realtimegenomics.com>
Reviewed-by: David A. Greene <greened@obbligato.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSecond batch for 2.8 cycle
Junio C Hamano [Wed, 20 Jan 2016 19:54:46 +0000 (11:54 -0800)]
Second batch for 2.8 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'tg/grep-no-index-fallback'
Junio C Hamano [Wed, 20 Jan 2016 19:43:38 +0000 (11:43 -0800)]
Merge branch 'tg/grep-no-index-fallback'

"git grep" by default does not fall back to its "--no-index"
behaviour outside a directory under Git's control (otherwise the
user may by mistake end up running a huge recursive search); with a
new configuration (set in $HOME/.gitconfig--by definition this
cannot be set in the config file per project), this safety can be
disabled.

* tg/grep-no-index-fallback:
  builtin/grep: add grep.fallbackToNoIndex config
  t7810: correct --no-index test

5 years agoMerge branch 'ho/gitweb-squelch-undef-warning'
Junio C Hamano [Wed, 20 Jan 2016 19:43:36 +0000 (11:43 -0800)]
Merge branch 'ho/gitweb-squelch-undef-warning'

Asking gitweb for a nonexistent commit left a warning in the server
log.

Somebody may want to follow this up with a new test, perhaps?
IIRC, we do test that no Perl warnings are given to the server log,
so this should have been caught if our test coverage were good.

* ho/gitweb-squelch-undef-warning:
  gitweb: squelch "uninitialized value" warning

5 years agoMerge branch 'js/fopen-harder'
Junio C Hamano [Wed, 20 Jan 2016 19:43:35 +0000 (11:43 -0800)]
Merge branch 'js/fopen-harder'

Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
(e.g. COMMIT_EDITMSG) that is meant to be left after the command is
done.  This however did not work well if the repository is set to
be shared with core.sharedRepository and the umask of the previous
user is tighter.  They have been made to work better by calling
unlink(2) and retrying after fopen(3) fails with EPERM.

* js/fopen-harder:
  Handle more file writes correctly in shared repos
  commit: allow editing the commit message even in shared repos