gitweb.git
show_object_with_name: simplify by using path_name()Jeff King Thu, 11 Feb 2016 22:24:18 +0000 (17:24 -0500)

show_object_with_name: simplify by using path_name()

When "git rev-list" shows an object with its associated path
name, it does so by walking the name_path linked list and
printing each component (stopping at any embedded NULs or
newlines).

We'd like to eventually get rid of name_path entirely in
favor of a single buffer, and dropping this custom printing
code is part of that. As a first step, let's use path_name()
to format the list into a single buffer, and print that.
This is strictly less efficient than the original, but it's
a temporary step in the refactoring; our end game will be to
get the fully formatted name in the first place.

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

http-push: stop using name_pathJeff King Thu, 11 Feb 2016 22:23:48 +0000 (17:23 -0500)

http-push: stop using name_path

The graph traversal code here passes along a name_path to
build up the pathname at which we find each blob. But we
never actually do anything with the resulting names, making
it a waste of code and memory.

This usage came in aa1dbc9 (Update http-push functionality,
2006-03-07), and originally the result was passed to
"add_object" (which stored it, but didn't really use it,
either). But we stopped using that function in 1f1e895 (Add
"named object array" concept, 2006-06-19) in favor of
storing just the objects themselves.

Moreover, the generation of the name in process_tree() is
buggy. It sticks "name" onto the end of the name_path linked
list, and then passes it down again as it recurses (instead
of "entry.path"). So it's a good thing this was unused, as
the resulting path for "a/b/c/d" would end up as "a/a/a/a".

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

connect & http: support -4 and -6 switches for remote... Eric Wong Wed, 3 Feb 2016 04:09:14 +0000 (04:09 +0000)

connect & http: support -4 and -6 switches for remote operations

Sometimes it is necessary to force IPv4-only or IPv6-only operation
on networks where name lookups may return a non-routable address and
stall remote operations.

The ssh(1) command has an equivalent switches which we may pass when
we run them. There may be old ssh(1) implementations out there
which do not support these switches; they should report the
appropriate error in that case.

rsync support is untouched for now since it is deprecated and
scheduled to be removed.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Reviewed-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mergetool: reorder vim/gvim buffers in three-way diffsDickson Wong Fri, 29 Jan 2016 02:18:14 +0000 (18:18 -0800)

mergetool: reorder vim/gvim buffers in three-way diffs

When invoking default (g)vimdiff three-way merge, the merged file is
loaded as the first buffer but moved to the bottom as the fourth window.
This causes a disconnect between vim commands that operate on window
positions (e.g. CTRL-W_w) and those that operate on buffer index (e.g.
do/dp).

This change reorders the buffers to have the same index as windows while
keeping the cursor default to the merged result as the bottom window.

Signed-off-by: Dickson Wong <dicksonwong@gmail.com>
Tested-by: Michael J Gruber <git@drmicha.warpmail.net>
Acked-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

convert.c: simplify text_statTorsten Bögershausen Wed, 10 Feb 2016 16:24:43 +0000 (17:24 +0100)

convert.c: simplify text_stat

Simplify the statistics:
lonecr counts the CR which is not followed by a LF,
lonelf counts the LF which is not preceded by a CR,
crlf counts CRLF combinations.
This simplifies the evaluation of the statistics.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

convert.c: refactor crlf_actionTorsten Bögershausen Wed, 10 Feb 2016 16:24:41 +0000 (17:24 +0100)

convert.c: refactor crlf_action

Refactor the determination and usage of crlf_action.
Today, when no "crlf" attribute are set on a file, crlf_action is set to
CRLF_GUESS. Use CRLF_UNDEFINED instead, and search for "text" or "eol" as
before.
After searching for line ending attributes, save the value in
struct conv_attrs.crlf_action attr_action,
so that get_convert_attr_ascii() is able report the attributes.

Replace the old CRLF_GUESS usage:
CRLF_GUESS && core.autocrlf=true -> CRLF_AUTO_CRLF
CRLF_GUESS && core.autocrlf=false -> CRLF_BINARY
CRLF_GUESS && core.autocrlf=input -> CRLF_AUTO_INPUT

Save the action in conv_attrs.crlf_action (as before) and change
all callers.

Make more clear, what is what, by defining:

- CRLF_UNDEFINED : No attributes set. Temparally used, until core.autocrlf
and core.eol is evaluated and one of CRLF_BINARY,
CRLF_AUTO_INPUT or CRLF_AUTO_CRLF is selected
- CRLF_BINARY : No processing of line endings.
- CRLF_TEXT : attribute "text" is set, line endings are processed.
- CRLF_TEXT_INPUT: attribute "input" or "eol=lf" is set. This implies text.
- CRLF_TEXT_CRLF : attribute "eol=crlf" is set. This implies text.
- CRLF_AUTO : attribute "auto" is set.
- CRLF_AUTO_INPUT: core.autocrlf=input (no attributes)
- CRLF_AUTO_CRLF : core.autocrlf=true (no attributes)

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sixth batch for the 2.8 cycleJunio C Hamano Wed, 10 Feb 2016 22:24:14 +0000 (14:24 -0800)

Sixth batch for the 2.8 cycle

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

Merge branch 'js/test-lib-windows-emulated-yes'Junio C Hamano Wed, 10 Feb 2016 22:20:10 +0000 (14:20 -0800)

Merge branch 'js/test-lib-windows-emulated-yes'

The emulated "yes" command used in our test scripts has been
tweaked not to spend too much time generating unnecessary output
that is not used, to help those who test on Windows where it would
not stop until it fills the pipe buffer due to lack of SIGPIPE.

* js/test-lib-windows-emulated-yes:
test-lib: limit the output of the yes utility

Merge branch 'wp/sha1-name-negative-match'Junio C Hamano Wed, 10 Feb 2016 22:20:10 +0000 (14:20 -0800)

Merge branch 'wp/sha1-name-negative-match'

A new "<branch>^{/!-<pattern>}" notation can be used to name a
commit that is reachable from <branch> that does not match the
given <pattern>.

* wp/sha1-name-negative-match:
object name: introduce '^{/!-<negative pattern>}' notation
test for '!' handling in rev-parse's named commits

Merge branch 'jk/options-cleanup'Junio C Hamano Wed, 10 Feb 2016 22:20:08 +0000 (14:20 -0800)

Merge branch 'jk/options-cleanup'

Various clean-ups to the command line option parsing.

* jk/options-cleanup:
apply, ls-files: simplify "-z" parsing
checkout-index: disallow "--no-stage" option
checkout-index: handle "--no-index" option
checkout-index: handle "--no-prefix" option
checkout-index: simplify "-z" option parsing
give "nbuf" strbuf a more meaningful name

Merge branch 'aw/push-force-with-lease-reporting'Junio C Hamano Wed, 10 Feb 2016 22:20:08 +0000 (14:20 -0800)

Merge branch 'aw/push-force-with-lease-reporting'

"git push --force-with-lease" has been taught to report if the push
needed to force (or fast-forwarded).

* aw/push-force-with-lease-reporting:
push: fix ref status reporting for --force-with-lease

Merge branch 'ls/clean-smudge-override-in-config'Junio C Hamano Wed, 10 Feb 2016 22:20:07 +0000 (14:20 -0800)

Merge branch 'ls/clean-smudge-override-in-config'

Clean/smudge filters defined in a configuration file of lower
precedence can now be overridden to be a pass-through no-op by
setting the variable to an empty string.

* ls/clean-smudge-override-in-config:
convert: treat an empty string for clean/smudge filters as "cat"

Merge branch 'ew/connect-verbose'Junio C Hamano Wed, 10 Feb 2016 22:20:07 +0000 (14:20 -0800)

Merge branch 'ew/connect-verbose'

There were a few "now I am doing this thing" progress messages in
the TCP connection code that can be triggered by setting a verbose
option internally in the code, but "git fetch -v" and friends never
passed the verbose option down to that codepath.

There was a brief discussion about the impact on the end-user
experience by not limiting this to "fetch -v -v", but I think the
conclusion is that this is OK to enable with a single "-v" as it is
not too noisy.

* ew/connect-verbose:
pass transport verbosity down to git_connect

Merge branch 'cc/untracked'Junio C Hamano Wed, 10 Feb 2016 22:20:06 +0000 (14:20 -0800)

Merge branch 'cc/untracked'

Update the untracked cache subsystem and change its primary UI from
"git update-index" to "git config".

* cc/untracked:
t7063: add tests for core.untrackedCache
test-dump-untracked-cache: don't modify the untracked cache
config: add core.untrackedCache
dir: simplify untracked cache "ident" field
dir: add remove_untracked_cache()
dir: add {new,add}_untracked_cache()
update-index: move 'uc' var declaration
update-index: add untracked cache notifications
update-index: add --test-untracked-cache
update-index: use enum for untracked cache options
dir: free untracked cache when removing it

Merge branch 'js/xmerge-marker-eol'Junio C Hamano Wed, 10 Feb 2016 22:20:06 +0000 (14:20 -0800)

Merge branch 'js/xmerge-marker-eol'

The low-level merge machinery has been taught to use CRLF line
termination when inserting conflict markers to merged contents that
are themselves CRLF line-terminated.

* js/xmerge-marker-eol:
merge-file: ensure that conflict sections match eol style
merge-file: let conflict markers match end-of-line style of the context

Merge branch 'nd/do-not-move-worktree-manually'Junio C Hamano Wed, 10 Feb 2016 22:20:05 +0000 (14:20 -0800)

Merge branch 'nd/do-not-move-worktree-manually'

"git worktree" had a broken code that attempted to auto-fix
possible inconsistency that results from end-users moving a
worktree to different places without telling Git (the original
repository needs to maintain backpointers to its worktrees, but
"mv" run by end-users who are not familiar with that fact will
obviously not adjust them), which actually made things worse
when triggered.

* nd/do-not-move-worktree-manually:
worktree: stop supporting moving worktrees manually
worktree.c: fix indentation

get_sha1: don't die() on bogus search stringsJeff King Wed, 10 Feb 2016 21:19:25 +0000 (16:19 -0500)

get_sha1: don't die() on bogus search strings

The get_sha1() function generally returns an error code
rather than dying, and we sometimes speculatively call it
with something that may be a revision or a pathspec, in
order to see which one it might be.

If it sees a bogus ":/" search string, though, it complains,
without giving the caller the opportunity to recover. We can
demonstrate this in t6133 by looking for ":/*.t", which
should mean "*.t at the root of the tree", but instead dies
because of the invalid regex (the "*" has nothing to operate
on).

We can fix this by returning an error rather than calling
die(). Unfortunately, the tradeoff is that the error message
is slightly worse in cases where we _do_ know we have a rev.
E.g., running "git log ':/*.t' --" before yielded:

fatal: Invalid search pattern: *.t

and now we get only:

fatal: bad revision ':/*.t'

There's not a simple way to fix this short of passing a
"quiet" flag all the way through the get_sha1() stack.

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

check_filename: tighten dwim-wildcard ambiguityJeff King Wed, 10 Feb 2016 21:14:46 +0000 (16:14 -0500)

check_filename: tighten dwim-wildcard ambiguity

When specifying both revisions and pathnames, we allow
"<rev> -- <pathspec>" to be spelled without the "--" as long
as it is not ambiguous. The original logic was something
like:

1. Resolve each item with get_sha1(). If successful,
we know it can be a <rev>. Verify that it _isn't_ a
filename, using verify_non_filename(), and complain of
ambiguity otherwise.

2. If get_sha1() didn't succeed, make sure that it _is_
a file, using verify_filename(). If not, complain
that it is neither a <rev> nor a <pathspec>.

Both verify_filename() and verify_non_filename() rely on
check_filename(), which definitely said "yes, this is a
file" or "no, it is not" using lstat().

Commit 28fcc0b (pathspec: avoid the need of "--" when
wildcard is used, 2015-05-02) introduced a convenience
feature: check_filename() will consider anything with
wildcard meta-characters as a possible filename, without
even checking the filesystem.

This works well for case 2. For such a wildcard, we would
previously have died and said "it is neither". Post-28fcc0b,
we assume it's a pathspec and proceed.

But it makes some instances of case 1 worse. We may have an
extended sha1 expression that contains meta-characters
(e.g., "HEAD^{/foo.*bar}"), and we now complain that it's
also a filename, due to the wildcard characters (even though
that wildcard would not match anything in the filesystem).

One solution would be to actually expand the pathname and
see if it matches anything on the filesystem. But that's
potentially expensive, and we do not have to be so rigorous
for this DWIM magic (if you want rigor, use "--").

Instead, we can just use different rules for cases 1 and 2.
When we know something is a rev, we will complain only if it
meets a much higher standard for "this is also a file";
namely that it actually exists in the filesystem. Case 2
remains the same: we use the looser "it could be a filename"
standard introduced by 28fcc0b.

We can accomplish this by pulling the wildcard logic out of
check_filename() and putting it into verify_filename(). Its
partner verify_non_filename() does not need a change, since
check_filename() goes back to implementing the "higher
standard".

Besides these two callers of check_filename(), there is one
other: git-checkout does a similar DWIM itself. It hits this
code path only after get_sha1() has returned failure, making
it case 2, which gets the special wildcard treatment.

Note that we drop the tests in t2019 in favor of a more
complete set in t6133. t2019 was not the right place for
them (it's about refname ambiguity, not dwim parsing
ambiguity), and the second test explicitly checked for the
opposite result of the case we are fixing here (which didn't
really make any sense; as shown by the test_must_fail in the
test, it would only serve to annoy people).

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

checkout: reorder check_filename conditionalJeff King Wed, 10 Feb 2016 21:12:34 +0000 (16:12 -0500)

checkout: reorder check_filename conditional

If we have a "--" flag, we should not be doing DWIM magic
based on whether arguments can be filenames. Reorder the
conditional to avoid the check_filename() call entirely in
this case. The outcome is the same, but the short-circuit
makes the dependency more clear.

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

Documentation/git-clean.txt: don't mention deletion... Matt McCutchen Sat, 6 Feb 2016 20:25:41 +0000 (15:25 -0500)

Documentation/git-clean.txt: don't mention deletion of .git/modules/*

The latter half of this sentence, the removal of the submodules, was
never done with (or without) double -f back when it was written, and
we still do not do so.

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

rerere: replace strcpy with xsnprintfJeff King Mon, 8 Feb 2016 22:25:01 +0000 (17:25 -0500)

rerere: replace strcpy with xsnprintf

This shouldn't overflow, as we are copying a sha1 hex into a
41-byte buffer. But it does not hurt to use a bound-checking
function, which protects us and makes auditing for overflows
easier.

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

t9100: fix breakage when SHELL_PATH is not /bin/shMichael J Gruber Sun, 7 Feb 2016 19:11:37 +0000 (20:11 +0100)

t9100: fix breakage when SHELL_PATH is not /bin/sh

bcb11f1 (mingw: mark t9100's test cases with appropriate prereqs, 2016-01-27)
replaced "/bin/sh" in exec.sh by the shell specified in SHELL_PATH, but
that breaks the subtest which checks for a specific checksum of a tree
containing.

Revert that change that was not explained in the commit message anyways
(exec.sh is never executed).

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-path-utils: use xsnprintf in favor of strcpyJeff King Mon, 8 Feb 2016 22:21:55 +0000 (17:21 -0500)

test-path-utils: use xsnprintf in favor of strcpy

This strcpy will never overflow because it's copying from
baked-in test data. But we would prefer to avoid strcpy
entirely, as it makes it harder to audit for real security
bugs.

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

gitignore: ignore generated test-fake-ssh executableJohannes Schindelin Sat, 6 Feb 2016 14:42:49 +0000 (15:42 +0100)

gitignore: ignore generated test-fake-ssh executable

In "mingw: fix t5601-clone.sh", this developer introduced a new test
executable, test-fake-ssh but forgot to update the .gitignore file
accordingly. Fix that.

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

ident: add user.useConfigOnly boolean for when ident... Dan Aloni Sat, 6 Feb 2016 06:23:36 +0000 (08:23 +0200)

ident: add user.useConfigOnly boolean for when ident shouldn't be guessed

It used to be that:

git config --global user.email "(none)"

was a viable way for people to force themselves to set user.email in
each repository. This was helpful for people with more than one
email address, targeting different email addresses for different
clones, as it barred git from creating a commit unless the user.email
config was set in the per-repo config to the correct email address.

A recent change, 19ce497c (ident: keep a flag for bogus
default_email, 2015-12-10), however, declared that an explicitly
configured user.email is not bogus, no matter what its value is, so
this hack no longer works.

Provide the same functionality by adding a new configuration
variable user.useConfigOnly; when this variable is set, the
user must explicitly set user.email configuration.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Dan Aloni <alonid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

convert.c: use text_eol_is_crlf()Torsten Bögershausen Fri, 5 Feb 2016 16:13:25 +0000 (17:13 +0100)

convert.c: use text_eol_is_crlf()

Add a helper function to find out, which line endings text files
should get at checkout, depending on core.autocrlf and core.eol
configuration variables.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

convert.c: remove input_crlf_action()Torsten Bögershausen Fri, 5 Feb 2016 16:13:23 +0000 (17:13 +0100)

convert.c: remove input_crlf_action()

Integrate the code of input_crlf_action() into convert_attrs(),
so that ca.crlf_action is always valid after calling convert_attrs().
Keep a copy of crlf_action in attr_action, this is needed for
get_convert_attr_ascii().

Remove eol_attr from struct conv_attrs, as it is now used temporally.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

convert.c: remove unused parameter 'path'Torsten Bögershausen Fri, 5 Feb 2016 16:13:22 +0000 (17:13 +0100)

convert.c: remove unused parameter 'path'

Some functions get a parameter path, but don't use it.
Remove the unused parameter.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0027: add tests for get_stream_filter()Torsten Bögershausen Fri, 5 Feb 2016 16:13:20 +0000 (17:13 +0100)

t0027: add tests for get_stream_filter()

When a filter is configured, a different code-path is used in convert.c
and entry.c via get_stream_filter(), but there are no test cases yet.

Add tests for the filter API by configuring the ident filter.
The result of the SHA1 conversion is not checked, this is already
done in other TC.

Add a parameter to checkout_files() in t0027.
While changing the signature, add another parameter for the eol= attribute.
This is currently unused, tests for e.g.
"* text=auto eol=lf" will be added in a separate commit.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with 2.7.1Junio C Hamano Fri, 5 Feb 2016 23:24:02 +0000 (15:24 -0800)

Sync with 2.7.1

Git 2.7.1 v2.7.1Junio 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>

Merge branch 'lv/add-doc-working-tree' into maintJunio 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

Merge branch 'ss/clone-depth-single-doc' into maintJunio 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

Merge branch 'sg/t6050-failing-editor-test-fix' into... 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

Merge branch 'ew/for-each-ref-doc' into maintJunio 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

Merge branch 'ss/user-manual' into maintJunio 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

Merge branch 'jk/ref-cache-non-repository-optim' into... 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

Merge branch 'js/dirname-basename' into maintJunio 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

Merge branch 'tb/complete-word-diff-regex' into maintJunio 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="

Merge branch 'pw/completion-stash' into maintJunio 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

Merge branch 'pw/completion-show-branch' into maintJunio 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"

Merge branch 'jk/completion-rebase' into maintJunio 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

Merge branch 'nd/diff-with-path-params' into maintJunio 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

Merge branch 'dw/subtree-split-do-not-drop-merge' into... 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

Merge branch 'ew/svn-1.9.0-auth' into maintJunio 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+

Merge branch 'jk/list-tag-2.7-regression' into maintJunio 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

Merge branch 'jk/sanity' into maintJunio 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

Merge branch 'jk/filter-branch-no-index' into maintJunio 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

Merge branch 'js/close-packs-before-gc' into maintJunio 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

Merge branch 'jk/ok-to-fail-gc-auto-in-rebase' into... 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"

Merge branch 'ho/gitweb-squelch-undef-warning' into... 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

Merge branch 'js/fopen-harder' into maintJunio 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

Merge branch 'nd/exclusion-regression-fix' into maintJunio 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"

Merge branch 'dk/reflog-walk-with-non-commit' into... 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

Merge branch 'dw/signoff-doc' into maintJunio 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

Merge branch 'jk/clang-pedantic' into maintJunio 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

Merge branch 'ew/send-email-mutt-alias-fix' into maintJunio 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

Merge branch 'nd/dir-exclude-cleanup' into maintJunio 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()

Merge branch 'nd/stop-setenv-work-tree' into maintJunio 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"

fmt_ident: refactor strictness checksJeff King Thu, 4 Feb 2016 09:12:38 +0000 (11:12 +0200)

fmt_ident: refactor strictness checks

This function has evolved quite a bit over time, and as a
result, the logic for "is this an OK ident" has been
sprinkled throughout. This ends up with a lot of redundant
conditionals, like checking want_name repeatedly. Worse,
we want to know in many cases whether we are using the
"default" ident, and we do so by comparing directly to the
global strbuf, which violates the abstraction of the
ident_default_* functions.

Let's reorganize the function into a hierarchy of
conditionals to handle similar cases together. The only
case that doesn't just work naturally for this is that of an
empty name, where our advice is different based on whether
we came from ident_default_name() or not. We can use a
simple flag to cover this case.

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

Fifth batch for 2.8 cycleJunio 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>

Merge 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

Merge 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

Merge 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

Merge 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

Merge 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

Merge 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

Merge 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"

Merge 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

Merge 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

Merge 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

Merge 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

Merge 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="

Merge 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

Merge 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

Merge 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

Merge 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

Merge 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

Merge 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()

restore_env(): free the saved environment variable... Junio C Hamano Tue, 2 Feb 2016 23:42:59 +0000 (15:42 -0800)

restore_env(): free the saved environment variable once we are done

Just like we free orig_cwd, which is the value of the original
working directory saved in save_env_before_alias(), once we are
done with it, the contents of orig_env[] array, saved in the
save_env_before_alias() function should be freed; otherwise,
the second and subsequent calls to save/restore pair will leak
the memory allocated in save_env_before_alias().

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

test-lib: limit the output of the yes utilityJohannes Schindelin Tue, 2 Feb 2016 18:15:53 +0000 (19:15 +0100)

test-lib: limit the output of the yes utility

On Windows, there is no SIGPIPE. A consequence of this is that the
upstream process of a pipe does not notice the death of the downstream
process until the pipe buffer is full and writing more data returns an
error. This behavior is the reason for an annoying delay during the
execution of t7610-mergetool.sh: There are a number of test cases where
'yes' is invoked upstream. Since the utility is basically an endless
loop it runs, on Windows, until the pipe buffer is full. This does take
a few seconds.

The test suite has its own implementation of 'yes'. Modify it to produce
only a limited amount of output that is sufficient for the test suite.
The amount chosen should be sufficiently high for any test case, assuming
that future test cases will not exaggerate their demands of input from
an upstream 'yes' invocation.

[j6t: commit message]

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

Getting closer to 2.7.1Junio 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>

Merge 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

Merge 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+

push: fix ref status reporting for --force-with-leaseAndrew Wheeler Fri, 29 Jan 2016 23:18:42 +0000 (17:18 -0600)

push: fix ref status reporting for --force-with-lease

The --force--with-lease push option leads to less
detailed status information than --force. In particular,
the output indicates that a reference was fast-forwarded,
even when it was force-updated.

Modify the --force-with-lease ref status logic to leverage
the --force ref status logic when the "lease" conditions
are met.

Also, enhance tests to validate output status reporting.

Signed-off-by: Andrew Wheeler <awheeler@motorola.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply, ls-files: simplify "-z" parsingJeff King Sun, 31 Jan 2016 11:35:46 +0000 (06:35 -0500)

apply, ls-files: simplify "-z" parsing

As a short option, we cannot handle negation. Thus a callback
handling "unset" is overkill, and we can just use OPT_SET_INT
instead to handle setting the option.

Anybody who adds "--nul" synonym to this later would need to be
careful not to break "--no-nul", which should mean that lines are
terminated with LF at the end.

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

checkout-index: disallow "--no-stage" optionJeff King Mon, 1 Feb 2016 03:18:24 +0000 (22:18 -0500)

checkout-index: disallow "--no-stage" option

We do not really expect people to use "--no-stage", but if
they do, git currently segfaults. We could instead have it
undo the effects of a previous "--stage", but this gets
tricky around the "to_tempfile" flag. We cannot simply reset
it to 0, because we don't know if it was set by a previous
"--stage=all" or an explicit "--temp" option.

We could solve this by setting a flag and resolving
to_tempfile later, but it's not worth the effort. Nobody
actually wants to use "--no-stage"; we are just trying to
fix a potential segfault here.

While we're in the area, let's improve the user-facing
messages for this option. The error string should be
translatable, and we should give some hint in the "-h"
output about what can go in the argument field.

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

checkout-index: handle "--no-index" optionJeff King Sun, 31 Jan 2016 11:29:36 +0000 (06:29 -0500)

checkout-index: handle "--no-index" option

The parsing of "--index" is done in a callback, but it does
not handle an "unset" option. We don't necessarily expect
anyone to use this, but the current behavior is to treat it
exactly like "--index", which would probably be surprising.

Instead, let's just turn it into an OPT_BOOL, and handle it
after we're done parsing. This makes "--no-index" just work
(it cancels a previous "--index").

As a bonus, this makes the logic easier to follow. The old
code opened the index during the option parsing, leaving the
reader to wonder if there was some timing issue (there
isn't; none of the other options care that we've opened it).
And then if we found that "--prefix" had been given, we had
to rollback the index. Now we can simply avoid opening it in
the first place.

Note that it might make more sense for checkout-index to
complain when "--index --prefix=foo" is given (rather than
silently ignoring "--index"), but since it has been that way
since 415e96c ([PATCH] Implement git-checkout-cache -u to
update stat information in the cache., 2005-05-15), it's
safer to leave it as-is.

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

checkout-index: handle "--no-prefix" optionJeff King Sun, 31 Jan 2016 11:26:16 +0000 (06:26 -0500)

checkout-index: handle "--no-prefix" option

We use a custom callback to parse "--prefix", but it does
not handle the "unset" case. As a result, passing
"--no-prefix" will cause a segfault.

We can fix this by switching it to an OPT_STRING, which
makes "--no-prefix" counteract a previous "--prefix". Note
that this assigns NULL, so we bump our default-case
initialization to lower in the main function.

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

checkout-index: simplify "-z" option parsingJeff King Sun, 31 Jan 2016 11:25:43 +0000 (06:25 -0500)

checkout-index: simplify "-z" option parsing

Now that we act as a simple bool, there's no need to use a
custom callback.

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

give "nbuf" strbuf a more meaningful nameJeff King Sun, 31 Jan 2016 11:25:26 +0000 (06:25 -0500)

give "nbuf" strbuf a more meaningful name

It's a common pattern in our code to read paths from stdin,
separated either by newlines or NULs, and unquote as
necessary. In each of these five cases we use "nbuf" to
temporarily store the unquoted value. Let's give it the more
meaningful name "unquoted", which makes it easier to
understand the purpose of the variable.

While we're at it, let's also static-initialize all of our
strbufs. It's not wrong to call strbuf_init, but it
increases the cognitive load on the reader, who might wonder
"do we sometimes avoid initializing them? why?".

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

object name: introduce '^{/!-<negative pattern>}' notationWill Palmer Sun, 31 Jan 2016 00:06:01 +0000 (17:06 -0700)

object name: introduce '^{/!-<negative pattern>}' notation

To name a commit, you can now use the :/!-<negative pattern> regex
style, and consequentially, say

$ git rev-parse HEAD^{/!-foo}

and it will return the hash of the first commit reachable from HEAD,
whose commit message does not contain "foo". This is the opposite of the
existing <rev>^{/<pattern>} syntax.

The specific use-case this is intended for is to perform an operation,
excluding the most-recent commits containing a particular marker. For
example, if you tend to make "work in progress" commits, with messages
beginning with "WIP", you work, then it could be useful to diff against
"the most recent commit which was not a WIP commit". That sort of thing
now possible, via commands such as:

$ git diff @^{/!-^WIP}

The leader '/!-', rather than simply '/!', to denote a negative match,
is chosen to leave room for additional modifiers in the future.

Signed-off-by: Will Palmer <wmpalmer@gmail.com>
Signed-off-by: Stephen P. Smith <ischis2@cox.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

transport: drop support for git-over-rsyncJeff King Sat, 30 Jan 2016 07:21:26 +0000 (02:21 -0500)

transport: drop support for git-over-rsync

The git-over-rsync protocol is inefficient and broken, and
has been for a long time. It transfers way more objects than
it needs (grabbing all of the remote's "objects/",
regardless of which objects we need). It does its own ad-hoc
parsing of loose and packed refs from the remote, but
doesn't properly override packed refs with loose ones,
leading to garbage results (e.g., expecting the other side
to have an object pointed to by a stale packed-refs entry,
or complaining that the other side has two copies of the
refs[1]).

This latter breakage means that nobody could have
successfully pulled from a moderately active repository
since cd547b4 (fetch/push: readd rsync support, 2007-10-01).

We never made an official deprecation notice in the release
notes for git's rsync protocol, but the tutorial has marked
it as such since 914328a (Update tutorial., 2005-08-30).
And on the mailing list as far back as Oct 2005, we can find
Junio mentioning it as having "been deprecated for quite
some time."[2,3,4]. So it was old news then; cogito had
deprecated the transport in July of 2005[5] (though it did
come back briefly when Linus broke git-http-pull!).

Of course some people professed their love of rsync through
2006, but Linus clarified in his usual gentle manner[6]:

> Thanks! This is why I still use rsync, even though
> everybody and their mother tells me "Linus says rsync is
> deprecated."

No. You're using rsync because you're actively doing
something _wrong_.

The deprecation sentiment was reinforced in 2008, with a
mention that cloning via rsync is broken (with no fix)[7].

Even the commit porting rsync over to C from shell (cd547b4)
lists it as deprecated! So between the 10 years of informal
warnings, and the fact that it has been severely broken
since 2007, it's probably safe to simply remove it without
further deprecation warnings.

[1] http://article.gmane.org/gmane.comp.version-control.git/285101
[2] http://article.gmane.org/gmane.comp.version-control.git/10093
[3] http://article.gmane.org/gmane.comp.version-control.git/17734
[4] http://article.gmane.org/gmane.comp.version-control.git/18911
[5] http://article.gmane.org/gmane.comp.version-control.git/5617
[6] http://article.gmane.org/gmane.comp.version-control.git/19354
[7] http://article.gmane.org/gmane.comp.version-control.git/103635

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

stripspace: call U+0020 a "space" instead of a "blank"Alex Henrie Fri, 29 Jan 2016 03:10:56 +0000 (20:10 -0700)

stripspace: call U+0020 a "space" instead of a "blank"

I couldn't find any other examples of people referring to this
character as a "blank".

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

convert: treat an empty string for clean/smudge filters... Lars Schneider Fri, 29 Jan 2016 08:21:37 +0000 (09:21 +0100)

convert: treat an empty string for clean/smudge filters as "cat"

Once a lower-priority configuration file defines a clean or smudge
filter, there is no convenient way to override it to produce as-is
output. Even though the configuration mechanism implements "the
last one wins" semantics, you cannot set them to an empty string and
expect them to work, as apply_filter() would try to run the empty
string as an external command and fail. The conversion is not done,
but the function would still report a failure to convert.

Even though resetting the variable to "cat" (i.e. pass the data back
as-is and report success) is an obvious and a viable way to solve
this, it is wasteful to spawn an external process just as a
workaround.

Instead, teach apply_filter() to treat an empty string as a no-op
filter that always returns successfully its input as-is without
conversion.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fourth batch for 2.8.cycleJunio 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>

Merge 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

Merge 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

Merge 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

Merge 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