gitweb.git
Merge branch 'jc/apply-reject-noop-hunk'Junio C Hamano Wed, 24 Jun 2015 19:21:39 +0000 (12:21 -0700)

Merge branch 'jc/apply-reject-noop-hunk'

"git apply" cannot diagnose a patch corruption when the breakage is
to mark the length of the hunk shorter than it really is on the
hunk header line "@@ -l,k +m,n @@"; one special case it could is
when the hunk becomes no-op (e.g. k == n == 2 for two-line context
patch output), and it learned how to do so.

* jc/apply-reject-noop-hunk:
apply: reject a hunk that does not do anything

Revert "diff-lib.c: adjust position of i-t-a entries... Junio C Hamano Tue, 23 Jun 2015 17:27:47 +0000 (10:27 -0700)

Revert "diff-lib.c: adjust position of i-t-a entries in diff"

This reverts commit d95d728aba06a34394d15466045cbdabdada58a2.

It turns out that many other commands that need to interact with the
result of running diff-files and diff-index, e.g. "git apply", "git
rm", etc., need to be adjusted to the new world order it brings in.
For example, it would break this sequence to correct a whitespace
breakage in the parts you changed:

git add -N file
git diff --cached file | git apply --cached --whitespace=fix
git checkout file

In the old world order, "diff" showed a patch to modify an existing
empty file by adding its full contents, and "apply" updated the
index by modifying the existing empty blob (which is what an
Intent-to-Add entry records in the index) with that patch.

In the new world order, "diff" shows a patch to create a new file
with its full contents, but because "apply" thinks that the i-t-a
entry already exists in the index, it refused to accept a creation.

Adjusting "apply" to this new world order is easy, but we need to
assess the extent of the damage to the rest of the system the new
world order brought in before going forward and adjust them all,
after which we can resurrect the commit being reverted here.

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

contrib/subtree: small tidy-up to testCharles Bailey Mon, 22 Jun 2015 13:53:30 +0000 (14:53 +0100)

contrib/subtree: small tidy-up to test

There's no need to switch branches to parse another branch's ancestry.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/subtree: fix broken &&-chains and revealed... Charles Bailey Mon, 22 Jun 2015 13:53:29 +0000 (14:53 +0100)

contrib/subtree: fix broken &&-chains and revealed test error

This fixes two instances where a &&-chain was broken in the subtree
tests and fixes a test error that was revealed because of this.

Many tests in t7900-subtree.sh make a commit and then use 'undo' to
reset the state for the next test. In the 'check hash of split' test,
an 'undo' was being invoked after a 'subtree split' even though the
particular invocation of 'subtree split' did not actually make a commit.
The subsequent check_equal was failing, but this failure was masked by
that broken &&-chain.

Removing this undo causes the failing check_equal to succeed but breaks
the a check_equal later on in the same test.

It turns out that an earlier test ('check if --message for merge works
with squash too') makes a commit but doesn't 'undo' to the state
expected by the remaining tests. None of the intervening tests cared
enough about the state of the test repo to fail and the spurious 'undo'
in 'check hash of split' restored the expected state for any remaining
test that might care.

Adding the missing 'undo' to 'check if --message for merge works
with squash too' and removing the spurious one from 'check hash of
split' fixes all tests once the &&-chains are completed.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/subtree: use tabs consitently for indentation... Charles Bailey Mon, 22 Jun 2015 13:53:28 +0000 (14:53 +0100)

contrib/subtree: use tabs consitently for indentation in tests

Although subtrees tests uses more spaces for indentation than tabs,
there are still quite a lot of lines indented with tabs. As tabs conform
with Git coding guidelines resolve the inconsistency in favour of tabs.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse-options: move unsigned long option parsing out... Charles Bailey Sun, 21 Jun 2015 18:25:44 +0000 (19:25 +0100)

parse-options: move unsigned long option parsing out of pack-objects.c

The unsigned long option parsing (including 'k'/'m'/'g' suffix
parsing) is more widely applicable. Add support for OPT_MAGNITUDE
to parse-options.h and change pack-objects.c use this support.

The error behavior on parse errors follows that of OPT_INTEGER. The
name of the option that failed to parse is reported with a brief
message describing the expect format for the option argument and
then the full usage message for the command invoked.

This differs from the previous behavior for OPT_ULONG used in
pack-objects for --max-pack-size and --window-memory which used to
display the value supplied in the error message and did not display
the full usage message.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-parse-options: update to handle negative intsCharles Bailey Sun, 21 Jun 2015 18:25:43 +0000 (19:25 +0100)

test-parse-options: update to handle negative ints

Fix the printf specification to treat 'integer' as the signed type
that it is and add a test that checks that we parse negative option
arguments.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for_each_packed_object: automatically open pack indexJeff King Mon, 22 Jun 2015 10:40:50 +0000 (06:40 -0400)

for_each_packed_object: automatically open pack index

When for_each_packed_object is called, we call
prepare_packed_git() to make sure we have the actual list of
packs. But the latter does not actually open the pack
indices, meaning that pack->nr_objects may simply be 0 if
the pack has not otherwise been used since the program
started.

In practice, this didn't come up for the current callers,
because they iterate the packed objects only after iterating
all reachable objects (so for it to matter you would have to
have a pack consisting only of unreachable objects). But it
is a dangerous and confusing interface that should be fixed
for future callers.

Note that we do not end the iteration when a pack cannot be
opened, but we do return an error. That lets you complete
the iteration even in actively-repacked repository where an
.idx file may racily go away, but it also lets callers know
that they may not have gotten the complete list (which the
current reachability-check caller does care about).

We have to tweak one of the prune tests due to the changed
return value; an earlier test creates bogus .idx files and
does not clean them up. Having to make this tweak is a good
thing; it means we will not prune in a broken repository,
and the test confirms that we do not negatively impact a
more lenient caller, count-objects.

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

verify-tag: add option to print raw gpg status informationbrian m. carlson Sun, 21 Jun 2015 23:14:43 +0000 (23:14 +0000)

verify-tag: add option to print raw gpg status information

verify-tag by default displays human-readable output on standard error.
However, it can also be useful to get access to the raw gpg status
information, which is machine-readable, allowing automated
implementation of signing policy. Add a --raw option to make verify-tag
produce the gpg status information on standard error instead of the
human-readable format.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify-commit: add option to print raw gpg status infor... brian m. carlson Sun, 21 Jun 2015 23:14:42 +0000 (23:14 +0000)

verify-commit: add option to print raw gpg status information

verify-commit by default displays human-readable output on standard
error. However, it can also be useful to get access to the raw gpg
status information, which is machine-readable, allowing automated
implementation of signing policy. Add a --raw option to make
verify-commit produce the gpg status information on standard error
instead of the human-readable format.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gpg: centralize printing signature buffersbrian m. carlson Sun, 21 Jun 2015 23:14:41 +0000 (23:14 +0000)

gpg: centralize printing signature buffers

The code to handle printing of signature data from a struct
signature_check is very similar between verify-commit and verify-tag.
Place this in a single function. verify-tag retains its special case
behavior of printing the tag even when no valid signature is found.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gpg: centralize signature checkbrian m. carlson Sun, 21 Jun 2015 23:14:40 +0000 (23:14 +0000)

gpg: centralize signature check

verify-commit and verify-tag both share a central codepath for verifying
commits: check_signature. However, verify-tag exited successfully for
untrusted signature, while verify-commit exited unsuccessfully.
Centralize this signature check and make verify-commit adopt the older
verify-tag behavior. This behavior is more logical anyway, as the
signature is in fact valid, whether or not there's a path of trust to
the author.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify-commit: add test for exit status on untrusted... brian m. carlson Sun, 21 Jun 2015 23:14:39 +0000 (23:14 +0000)

verify-commit: add test for exit status on untrusted signature

verify-tag exits successfully if the signature is good but the key is
untrusted. verify-commit exits unsuccessfully. This divergence in
behavior is unexpected and unwanted. Since verify-tag existed earlier,
add a failing test to have verify-commit share verify-tag's behavior.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify-tag: share code with verify-commitbrian m. carlson Sun, 21 Jun 2015 23:14:38 +0000 (23:14 +0000)

verify-tag: share code with verify-commit

verify-tag was executing an entirely different codepath than
verify-commit, except for the underlying verify_signed_buffer. Move
much of the code from check_commit_signature to a generic
check_signature function and adjust both codepaths to call it.

Update verify-tag to explicitly output the signature text, as we now
call verify_signed_buffer with strbufs to catch the output, which
prevents it from being printed automatically.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify-tag: add testsbrian m. carlson Sun, 21 Jun 2015 23:14:37 +0000 (23:14 +0000)

verify-tag: add tests

verify-tag was lacking tests. Add some, mirroring those used for
verify-commit.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mergetool-lib: fix default tool selectionMichael J Gruber Fri, 19 Jun 2015 09:30:55 +0000 (11:30 +0200)

mergetool-lib: fix default tool selection

When no diff nor merge tool is specified (config, option), mergetool-lib
is supposed to choose a default tool from a set of tools. That set is
constructed dynamically depending on the environment (graphical, editor
setting) as a space separated string of tool names.

719518f (mergetool--lib: set IFS for difftool and mergetool, 2015-05-20)
introduced a newline as IFS which breaks the parsing of the space
separated list into items, resulting in a failed search for an available
tool.

Set IFS to a space locally for the tool search.

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

git-multimail: update to release 1.1.0Matthieu Moy Thu, 18 Jun 2015 08:46:04 +0000 (10:46 +0200)

git-multimail: update to release 1.1.0

The changes are described in CHANGES.

Contributions-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Contributions-by: Richard Hansen <rhansen@rhansen.org>
Contributions-by: Michael Haggerty <mhagger@alum.mit.edu>
Contributions-by: Elijah Newren <newren@gmail.com>
Contributions-by: Luke Mewburn <luke@mewburn.net>
Contributions-by: Dave Boutcher <daveboutcher@gmail.com>
Contributions-by: Azat Khuzhin <a3at.mail@gmail.com>
Contributions-by: Sebastian Schuberth <sschuberth@gmail.com>
Contributions-by: Mikko Johannes Koivunalho <mikko.koivunalho@iki.fi>
Contributions-by: Elijah Newren <newren@palantir.com>
Contributions-by: Benoît Ryder <benoit@ryder.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib.sh: fix color support when tput needs ~/.terminfoRichard Hansen Wed, 17 Jun 2015 21:11:21 +0000 (17:11 -0400)

test-lib.sh: fix color support when tput needs ~/.terminfo

If tput needs ~/.terminfo for the current $TERM, then tput will
succeed before HOME is changed to $TRASH_DIRECTORY (causing color to
be set to 't') but fail afterward.

One possible way to fix this is to treat HOME like TERM: back up the
original value and temporarily restore it before say_color() runs
tput.

Instead, pre-compute and save the color control sequences before
changing either TERM or HOME. Use the saved control sequences in
say_color() rather than call tput each time. This avoids the need to
back up and restore the TERM and HOME variables, and it avoids the
overhead of a subshell and two invocations of tput per call to
say_color().

Signed-off-by: Richard Hansen <rhansen@bbn.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

docs: clarify that --encoding can produce invalid sequencesJeff King Wed, 17 Jun 2015 18:46:08 +0000 (14:46 -0400)

docs: clarify that --encoding can produce invalid sequences

In the common case that the commit encoding matches the
output encoding, we do not touch the buffer at all, which
makes things much more efficient. But it might be unclear to
a consumer that we will pass through bogus sequences.

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

git-checkout.txt: document "git checkout <pathspec... Torsten Bögershausen Wed, 17 Jun 2015 07:54:51 +0000 (09:54 +0200)

git-checkout.txt: document "git checkout <pathspec>" better

git checkout <pathspec> can be used to reset changes in the working tree.

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

Revert "test-lib.sh: do tests for color support after... Richard Hansen Wed, 17 Jun 2015 19:06:25 +0000 (15:06 -0400)

Revert "test-lib.sh: do tests for color support after changing HOME"

This reverts commit 102fc80d32094ad6598b17ab9d607516ee8edc4a.

There are two issues with that commit:

* It is buggy. In pseudocode, it is doing:

color is set || TERM != dumb && color works && color=t

when it should be doing:

color is set || { TERM != dumb && color works && color=t }

* It unnecessarily disables color when tput needs to read
~/.terminfo to get the control sequences.

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

fetch-pack: check for shallow if depth givenMike Edgar Wed, 17 Jun 2015 11:48:14 +0000 (07:48 -0400)

fetch-pack: check for shallow if depth given

When a repository is first fetched as a shallow clone, either by
git-clone or by fetching into an empty repo, the server's capabilities
are not currently consulted. The client will send shallow requests even
if the server does not understand them, and the resulting error may be
unhelpful to the user. This change pre-emptively checks so we can exit
with a helpful error if necessary.

Signed-off-by: Mike Edgar <adgar@google.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Eighth batch for 2.5Junio C Hamano Tue, 16 Jun 2015 21:39:31 +0000 (14:39 -0700)

Eighth batch for 2.5

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

Sync with 2.4.4Junio C Hamano Tue, 16 Jun 2015 21:39:01 +0000 (14:39 -0700)

Sync with 2.4.4

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

Git 2.4.4 v2.4.4Junio C Hamano Tue, 16 Jun 2015 21:38:01 +0000 (14:38 -0700)

Git 2.4.4

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

Merge branch 'jk/clone-dissociate' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:52 +0000 (14:33 -0700)

Merge branch 'jk/clone-dissociate' into maint

Code clean-up.

* jk/clone-dissociate:
clone: reorder --dissociate and --reference options
clone: use OPT_STRING_LIST for --reference

Merge branch 'sb/submodule-doc-intro' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:52 +0000 (14:33 -0700)

Merge branch 'sb/submodule-doc-intro' into maint

* sb/submodule-doc-intro:
submodule doc: reorder introductory paragraphs

Merge branch 'sb/glossary-submodule' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:51 +0000 (14:33 -0700)

Merge branch 'sb/glossary-submodule' into maint

* sb/glossary-submodule:
glossary: add "remote", "submodule", "superproject"

Merge branch 'ah/usage-strings' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:50 +0000 (14:33 -0700)

Merge branch 'ah/usage-strings' into maint

A few usage string updates.

* ah/usage-strings:
blame, log: format usage strings similarly to those in documentation

Merge branch 'mc/commit-doc-grammofix' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:49 +0000 (14:33 -0700)

Merge branch 'mc/commit-doc-grammofix' into maint

Doc grammar fix.

* mc/commit-doc-grammofix:
Documentation/git-commit: grammofix

Merge branch 'rs/janitorial' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:47 +0000 (14:33 -0700)

Merge branch 'rs/janitorial' into maint

Code clean-up.

* rs/janitorial:
dir: remove unused variable sb
clean: remove unused variable buf
use file_exists() to check if a file exists in the worktree

Merge branch 'sb/test-bitmap-free-at-end' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:47 +0000 (14:33 -0700)

Merge branch 'sb/test-bitmap-free-at-end' into maint

An earlier leakfix to bitmap testing code was incomplete.

* sb/test-bitmap-free-at-end:
test_bitmap_walk: free bitmap with bitmap_free

Merge branch 'dt/clean-pathspec-filter-then-lstat'... Junio C Hamano Tue, 16 Jun 2015 21:33:46 +0000 (14:33 -0700)

Merge branch 'dt/clean-pathspec-filter-then-lstat' into maint

"git clean pathspec..." tried to lstat(2) and complain even for
paths outside the given pathspec.

* dt/clean-pathspec-filter-then-lstat:
clean: only lstat files in pathspec

Merge branch 'jk/http-backend-deadlock' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:45 +0000 (14:33 -0700)

Merge branch 'jk/http-backend-deadlock' into maint

Communication between the HTTP server and http_backend process can
lead to a dead-lock when relaying a large ref negotiation request.
Diagnose the situation better, and mitigate it by reading such a
request first into core (to a reasonable limit).

* jk/http-backend-deadlock:
http-backend: spool ref negotiation requests to buffer
t5551: factor out tag creation
http-backend: fix die recursion with custom handler

Merge branch 'jh/filter-empty-contents' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:44 +0000 (14:33 -0700)

Merge branch 'jh/filter-empty-contents' into maint

The clean/smudge interface did not work well when filtering an
empty contents (failed and then passed the empty input through).
It can be argued that a filter that produces anything but empty for
an empty input is nonsense, but if the user wants to do strange
things, then why not?

* jh/filter-empty-contents:
sha1_file: pass empty buffer to index empty file

Merge branch 'jk/stash-options' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:43 +0000 (14:33 -0700)

Merge branch 'jk/stash-options' into maint

Make "git stash something --help" error out, so that users can
safely say "git stash drop --help".

* jk/stash-options:
stash: recognize "--help" for subcommands
stash: complain about unknown flags

Merge branch 'mm/log-format-raw-doc' into maintJunio C Hamano Tue, 16 Jun 2015 21:33:42 +0000 (14:33 -0700)

Merge branch 'mm/log-format-raw-doc' into maint

Clarify that "log --raw" and "log --format=raw" are unrelated
concepts.

* mm/log-format-raw-doc:
Documentation/log: clarify sha1 non-abbreviation in log --raw
Documentation/log: clarify what --raw means

Merge branch 'ep/do-not-feed-a-pointer-to-array-size... Junio C Hamano Tue, 16 Jun 2015 21:33:41 +0000 (14:33 -0700)

Merge branch 'ep/do-not-feed-a-pointer-to-array-size' into maint

Catch a programmer mistake to feed a pointer not an array to
ARRAY_SIZE() macro, by using a couple of GCC extensions.

* ep/do-not-feed-a-pointer-to-array-size:
git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array

Merge branch 'nd/slim-index-pack-memory-usage'Junio C Hamano Tue, 16 Jun 2015 21:27:08 +0000 (14:27 -0700)

Merge branch 'nd/slim-index-pack-memory-usage'

An earlier optimization broke index-pack for a large object
transfer; this fixes it before the breakage hits any released
version.

* nd/slim-index-pack-memory-usage:
index-pack: fix truncation of off_t in comparison

Merge branch 'sb/pack-protocol-mention-smart-http'Junio C Hamano Tue, 16 Jun 2015 21:27:07 +0000 (14:27 -0700)

Merge branch 'sb/pack-protocol-mention-smart-http'

Doc updates.

* sb/pack-protocol-mention-smart-http:
Documentation/technical/pack-protocol: mention http as possible protocol

Merge branch 'jk/make-fix-dependencies'Junio C Hamano Tue, 16 Jun 2015 21:27:06 +0000 (14:27 -0700)

Merge branch 'jk/make-fix-dependencies'

Build clean-up.

* jk/make-fix-dependencies:
Makefile: silence perl/PM.stamp recipe
Makefile: avoid timestamp updates to GIT-BUILD-OPTIONS
Makefile: drop dependency between git-instaweb and gitweb

Merge branch 'jk/die-on-bogus-worktree-late'Junio C Hamano Tue, 16 Jun 2015 21:27:06 +0000 (14:27 -0700)

Merge branch 'jk/die-on-bogus-worktree-late'

The setup code used to die when core.bare and core.worktree are set
inconsistently, even for commands that do not need working tree.

* jk/die-on-bogus-worktree-late:
setup_git_directory: delay core.bare/core.worktree errors

Merge branch 'sg/merge-summary-config'Junio C Hamano Tue, 16 Jun 2015 21:27:05 +0000 (14:27 -0700)

Merge branch 'sg/merge-summary-config'

Doc updates.

* sg/merge-summary-config:
Documentation: include 'merge.branchdesc' for merge and config as well

Merge branch 'ah/send-email-sendmail-alias'Junio C Hamano Tue, 16 Jun 2015 21:27:04 +0000 (14:27 -0700)

Merge branch 'ah/send-email-sendmail-alias'

"git send-email" learned the alias file format used by the sendmail
program (in an abbreviated form).

* ah/send-email-sendmail-alias:
t9001: write $HOME/, not ~/, to help shells without tilde expansion
send-email: add sendmail email aliases format

Documentation/describe: improve one-line summaryMatthieu Moy Tue, 16 Jun 2015 13:16:38 +0000 (15:16 +0200)

Documentation/describe: improve one-line summary

git describe does not show 'the most recent tag that is reachable from a
commit', but a descriptive name based on this tag. Fix the description to
reflect that.

Suggested-by: Albert Netymk <albertnetymk@gmail.com>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

clean: improve performance when removing lots of direct... Erik Elfström Mon, 15 Jun 2015 19:39:55 +0000 (21:39 +0200)

clean: improve performance when removing lots of directories

"git clean" uses resolve_gitlink_ref() to check for the presence of
nested git repositories, but it has the drawback of creating a
ref_cache entry for every directory that should potentially be
cleaned. The linear search through the ref_cache list causes a massive
performance hit for large number of directories.

Modify clean.c:remove_dirs to use setup.c:is_git_directory and
setup.c:read_gitfile_gently instead.

Both these functions will open files and parse contents when they find
something that looks like a git repository. This is ok from a
performance standpoint since finding repository candidates should be
comparatively rare.

Using is_git_directory and read_gitfile_gently should give a more
standardized check for what is and what isn't a git repository but
also gives three behavioral changes.

The first change is that we will now detect and avoid cleaning empty
nested git repositories (only init run). This is desirable.

Second, we will no longer die when cleaning a file named ".git" with
garbage content (it will be cleaned instead). This is also desirable.

The last change is that we will detect and avoid cleaning empty bare
repositories that have been placed in a directory named ".git". This
is not desirable but should have no real user impact since we already
fail to clean non-empty bare repositories in the same scenario. This
is thus deemed acceptable.

On top of this we add some extra precautions. If read_gitfile_gently
fails to open the git file, read the git file or verify the path in
the git file we assume that the path with the git file is a valid
repository and avoid cleaning.

Update t7300 to reflect these changes in behavior.

The time to clean an untracked directory containing 100000 sub
directories went from 61s to 1.7s after this change.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

p7300: add performance tests for cleanErik Elfström Mon, 15 Jun 2015 19:39:54 +0000 (21:39 +0200)

p7300: add performance tests for clean

The tests are run in dry-run mode to avoid having to restore the test
directories for each timed iteration. Using dry-run is an acceptable
compromise since we are mostly interested in the initial computation
of what to clean and not so much in the cleaning it self.

Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7300: add tests to document behavior of clean and... Erik Elfström Mon, 15 Jun 2015 19:39:53 +0000 (21:39 +0200)

t7300: add tests to document behavior of clean and nested git

Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

setup: sanity check file size in read_gitfile_gentlyErik Elfström Mon, 15 Jun 2015 19:39:52 +0000 (21:39 +0200)

setup: sanity check file size in read_gitfile_gently

read_gitfile_gently will allocate a buffer to fit the entire file that
should be read. Add a sanity check of the file size before opening to
avoid allocating a potentially huge amount of memory if we come across
a large file that someone happened to name ".git". The limit is set to
a sufficiently unreasonable size that should never be exceeded by a
genuine .git file.

Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Revert "stash: require a clean index to apply"Jeff King Mon, 15 Jun 2015 18:27:22 +0000 (14:27 -0400)

Revert "stash: require a clean index to apply"

This reverts commit ed178ef13a26136d86ff4e33bb7b1afb5033f908.

That commit was an attempt to improve the safety of applying
a stash, because the application process may create
conflicted index entries, after which it is hard to restore
the original index state.

Unfortunately, this hurts some common workflows around "git
stash -k", like:

git add -p ;# (1) stage set of proposed changes
git stash -k ;# (2) get rid of everything else
make test ;# (3) make sure proposal is reasonable
git stash apply ;# (4) restore original working tree

If you "git commit" between steps (3) and (4), then this
just works. However, if these steps are part of a pre-commit
hook, you don't have that opportunity (you have to restore
the original state regardless of whether the tests passed or
failed).

It's possible that we could provide better tools for this
sort of workflow. In particular, even before ed178ef, it
could fail with a conflict if there were conflicting hunks
in the working tree and index (since the "stash -k" puts the
index version into the working tree, and we then attempt to
apply the differences between HEAD and the old working tree
on top of that). But the fact remains that people have been
using it happily for a while, and the safety provided by
ed178ef is simply not that great. Let's revert it for now.
In the long run, people can work on improving stash for this
sort of workflow, but the safety tradeoff is not worth it in
the meantime.

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

am: teach mercurial patch parser how to read from stdinPaul Tan Mon, 15 Jun 2015 11:08:13 +0000 (19:08 +0800)

am: teach mercurial patch parser how to read from stdin

git-mailsplit, which splits mbox patches, will read the patch from stdin
when the filename is "-" or there are no files listed on the
command-line.

To be consistent with this behavior, teach the mercurial patch parser to
read from stdin if the filename is "-" or no files are listed on the
command-line.

Based-on-patch-by: Chris Packham <judge.packham@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am: use gmtime() to parse mercurial patch datePaul Tan Mon, 15 Jun 2015 11:08:12 +0000 (19:08 +0800)

am: use gmtime() to parse mercurial patch date

An example of the line in a mercurial patch that specifies the date of
the commit would be:

# Date 1433753301 25200

where the first number is the number of seconds since the unix epoch (in
UTC), and the second number is the offset of the timezone, in second s
west of UTC (negative if the timezone is east of UTC).

git-am uses localtime() to break down the first number into its
components (year, month, day, hours, minutes, seconds etc.). However,
the returned components are relative to the user's time zone. As a
result, if the user's time zone does not match the time zone specified
in the patch, the resulting commit will have the wrong author date.

Fix this by using gmtime() instead, which uses UTC instead of the user's
time zone.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4150: test applying StGit seriesPaul Tan Mon, 15 Jun 2015 11:08:11 +0000 (19:08 +0800)

t4150: test applying StGit series

A StGit series is a directory containing a "series" file which begins
with the line:

# This series applies on GIT commit XXXXX

where XXXXX is the commit ID that the patch series applies on. Every
following line names a patch in the directory to be applied.

Test that git-am, when given this "series" file, is able to detect it as
an StGit series and apply all the patches in the series.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am: teach StGit patch parser how to read from stdinPaul Tan Mon, 15 Jun 2015 11:08:10 +0000 (19:08 +0800)

am: teach StGit patch parser how to read from stdin

git-mailsplit, which splits mbox patches, will read the patch from stdin
when the filename is "-" or there are no files listed on the
command-line.

To be consistent with this behavior, teach the StGit patch parser to
read from stdin if the filename is "-" or no files are listed on the
command-line.

Based-on-patch-by: Chris Packham <judge.packham@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ref-filter: add 'ref-filter.h'Karthik Nayak Sat, 13 Jun 2015 19:37:26 +0000 (01:07 +0530)

ref-filter: add 'ref-filter.h'

This is step one of creating a common library for 'for-each-ref',
'branch -l' and 'tag -l'. This creates a header file with the
functions and data structures that ref-filter will provide.
We move the data structures created in for-each-ref to this header
file.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for-each-ref: rename variables called sort to sortingKarthik Nayak Sat, 13 Jun 2015 19:37:25 +0000 (01:07 +0530)

for-each-ref: rename variables called sort to sorting

Rename all the variables called sort to sorting to match the
function/structure name changes made in the previous patch.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for-each-ref: rename some functions and make them publicKarthik Nayak Sat, 13 Jun 2015 19:37:24 +0000 (01:07 +0530)

for-each-ref: rename some functions and make them public

Rename some of the functions and make them publicly available.
This is a preparatory step for moving code from 'for-each-ref'
to 'ref-filter' to make meaningful, targeted services available to
other commands via public APIs.

Functions renamed are:
parse_atom() -> parse_ref_filter_atom()
verify_format() -> verify_ref_format()
get_value() -> get_ref_atom_value()
grab_single_ref() -> ref_filter_handler()
sort_refs() -> ref_array_sort()
show_ref() -> show_ref_array_item()
default_sort() -> ref_default_sorting()
opt_parse_sort() -> parse_opt_ref_sorting()
cmp_ref_sort() -> cmp_ref_sorting()

Rename 'struct ref_sort' to 'struct ref_sorting' in this context.

Based-on-patch-by: Jeff King <peff@peff.net>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for-each-ref: introduce 'ref_array_clear()'Karthik Nayak Sat, 13 Jun 2015 19:37:23 +0000 (01:07 +0530)

for-each-ref: introduce 'ref_array_clear()'

Introduce and implement 'ref_array_clear()' which will free
all allocated memory for 'ref_array'.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for-each-ref: introduce new structures for better organ... Karthik Nayak Sat, 13 Jun 2015 19:37:22 +0000 (01:07 +0530)

for-each-ref: introduce new structures for better organisation

Introduce 'ref_filter_cbdata' which will hold 'ref_filter'
(conditions to filter the refs on) and 'ref_array' (the array
of ref_array_items). Modify the code to use these new structures.

This is a preparatory patch to eventually move code from 'for-each-ref'
to 'ref-filter' and make it publicly available.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for-each-ref: rename 'refinfo' to 'ref_array_item'Karthik Nayak Sat, 13 Jun 2015 19:37:21 +0000 (01:07 +0530)

for-each-ref: rename 'refinfo' to 'ref_array_item'

Rename 'refinfo' to 'ref_array_item' as a preparatory step for
introduction of new structures in the forthcoming patch.

Re-order the fields in 'ref_array_item' so that refname can be
eventually converted to a FLEX_ARRAY.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for-each-ref: clean up codeKarthik Nayak Sat, 13 Jun 2015 19:37:20 +0000 (01:07 +0530)

for-each-ref: clean up code

In 'grab_single_ref()' remove the extra count variable 'cnt' and
use the variable 'grab_cnt' of structure 'grab_ref_cbdata' directly
instead.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for-each-ref: extract helper functions out of grab_sing... Karthik Nayak Sat, 13 Jun 2015 19:37:19 +0000 (01:07 +0530)

for-each-ref: extract helper functions out of grab_single_ref()

Extract two helper functions out of grab_single_ref(). Firstly,
new_refinfo() which is used to allocate memory for a new refinfo
structure and copy the objectname, refname and flag to it.
Secondly, match_name_as_path() which when given an array of patterns
and the refname checks if the refname matches any of the patterns
given while the pattern is a pathname, also supports wildcard
characters.

This is a preperatory patch for restructuring 'for-each-ref' and
eventually moving most of it to 'ref-filter' to provide the
functionality to similar commands via public API's.

Helped-by: Junio C Hamano <gitster@pobox.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge tag 'l10n-2.4-maint-de-updates' of git://github... Junio C Hamano Sun, 14 Jun 2015 21:24:49 +0000 (14:24 -0700)

Merge tag 'l10n-2.4-maint-de-updates' of git://github.com/git-l10n/git-po into maint

l10n-2.4-maint-de-updates

* tag 'l10n-2.4-maint-de-updates' of git://github.com/git-l10n/git-po:
l10n: de.po: translation fix for fall-back to 3way merge
l10n: de.po: punctuation fixes
l10n: de.po: grammar fix
l10n: de.po: change error message from "sagen" to "Meinten Sie"

hooks/pre-auto-gc: adjust power checking for newer... Panagiotis Astithas Thu, 11 Jun 2015 14:37:25 +0000 (17:37 +0300)

hooks/pre-auto-gc: adjust power checking for newer OS X

The output of "pmset -g batt" changed at some point from "Currently
drawing from 'AC Power'" to the slightly different "Now drawing from
'AC Power'". Starting the match from "drawing" makes the check work
in both old and new versions of OS X.

Signed-off-by: Panagiotis Astithas <pastith@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Allow to control where the replace refs are looked forMike Hommey Thu, 11 Jun 2015 21:34:59 +0000 (06:34 +0900)

Allow to control where the replace refs are looked for

It can be useful to have grafts or replace refs for specific use-cases while
keeping the default "view" of the repository pristine (or with a different
set of grafts/replace refs).

It is possible to use a different graft file with GIT_GRAFT_FILE, but while
replace refs are more powerful, they don't have an equivalent override.

Add a GIT_REPLACE_REF_BASE environment variable to control where git is
going to look for replace refs.

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

checkout: don't check worktrees when not necessaryNguyễn Thái Ngọc Duy Fri, 12 Jun 2015 10:49:24 +0000 (17:49 +0700)

checkout: don't check worktrees when not necessary

When --patch or pathspecs are passed to git checkout, the working tree
will not be switching branch, so there's no need to check if the branch
that we are running checkout on is already checked out.

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

t0302: "unreadable" test needs SANITY prereqPaul Tan Fri, 12 Jun 2015 13:29:58 +0000 (21:29 +0800)

t0302: "unreadable" test needs SANITY prereq

The test expects that "chmod -r ~/.git-credentials" would make it
unreadable to the user, and thus needs the SANITY prerequisite.

Reported-by: Jean-Yves LENHOF <jean-yves@lenhof.eu.org>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: de.po: translation fix for fall-back to 3way... Michael J Gruber Tue, 19 May 2015 08:51:34 +0000 (10:51 +0200)

l10n: de.po: translation fix for fall-back to 3way merge

The English version is correct, but misleading: It is not the 3way merge
that is being patched also, but that is being fallen back to also.

The German version translates the former meaning. Make it translate the
latter.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

l10n: de.po: punctuation fixesMichael J Gruber Tue, 19 May 2015 08:51:33 +0000 (10:51 +0200)

l10n: de.po: punctuation fixes

This respects the ellipsis style used in de.po.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

l10n: de.po: grammar fixMichael J Gruber Tue, 19 May 2015 08:51:32 +0000 (10:51 +0200)

l10n: de.po: grammar fix

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

l10n: de.po: change error message from "sagen" to ... Phillip Sz Sat, 9 May 2015 11:28:55 +0000 (13:28 +0200)

l10n: de.po: change error message from "sagen" to "Meinten Sie"

We should not use "sagen" if someone has written something wrong.
Although it's "say" in English, we should not use it in German
and instead use our normal error message.

Signed-off-by: Phillip Sz <phillip.szelat@gmail.com>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

Second half of seventh batchJunio C Hamano Thu, 11 Jun 2015 16:35:25 +0000 (09:35 -0700)

Second half of seventh batch

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

Merge branch 'tb/complete-sequencing'Junio C Hamano Thu, 11 Jun 2015 16:29:59 +0000 (09:29 -0700)

Merge branch 'tb/complete-sequencing'

The bash completion script (in contrib/) learned a few options that
"git revert" takes.

* tb/complete-sequencing:
completion: suggest sequencer commands for revert

Merge branch 'jk/squelch-missing-link-warning-for-unrea... Junio C Hamano Thu, 11 Jun 2015 16:29:58 +0000 (09:29 -0700)

Merge branch 'jk/squelch-missing-link-warning-for-unreachable'

Recent "git prune" traverses young unreachable objects to safekeep
old objects in the reachability chain from them, which sometimes
caused error messages that are unnecessarily alarming.

* jk/squelch-missing-link-warning-for-unreachable:
suppress errors on missing UNINTERESTING links
silence broken link warnings with revs->ignore_missing_links
add quieter versions of parse_{tree,commit}

Merge branch 'pt/pull-tests'Junio C Hamano Thu, 11 Jun 2015 16:29:58 +0000 (09:29 -0700)

Merge branch 'pt/pull-tests'

Add more test coverage to "git pull".

* pt/pull-tests:
t5520: check reflog action in fast-forward merge
t5521: test --dry-run does not make any changes
t5520: test --rebase failure on unborn branch with index
t5520: test --rebase with multiple branches
t5520: test work tree fast-forward when fetch updates head
t5520: test for failure if index has unresolved entries
t5520: test no merge candidates cases
t5520: prevent field splitting in content comparisons

Merge branch 'sb/glossary-submodule'Junio C Hamano Thu, 11 Jun 2015 16:29:57 +0000 (09:29 -0700)

Merge branch 'sb/glossary-submodule'

* sb/glossary-submodule:
glossary: add "remote", "submodule", "superproject"

Merge branch 'sb/submodule-doc-intro'Junio C Hamano Thu, 11 Jun 2015 16:29:56 +0000 (09:29 -0700)

Merge branch 'sb/submodule-doc-intro'

* sb/submodule-doc-intro:
submodule doc: reorder introductory paragraphs

Merge branch 'jk/diagnose-config-mmap-failure'Junio C Hamano Thu, 11 Jun 2015 16:29:55 +0000 (09:29 -0700)

Merge branch 'jk/diagnose-config-mmap-failure'

The configuration reader/writer uses mmap(2) interface to access
the files; when we find a directory, it barfed with "Out of memory?".

* jk/diagnose-config-mmap-failure:
xmmap(): drop "Out of memory?"
config.c: rewrite ENODEV into EISDIR when mmap fails
config.c: avoid xmmap error messages
config.c: fix mmap leak when writing config
read-cache.c: drop PROT_WRITE from mmap of index

Merge branch 'mt/p4-depotFile-at-version'Junio C Hamano Thu, 11 Jun 2015 16:29:55 +0000 (09:29 -0700)

Merge branch 'mt/p4-depotFile-at-version'

* mt/p4-depotFile-at-version:
p4: retrieve the right revision of the file in UTF-16 codepath

Merge branch 'mh/verify-lock-error-report'Junio C Hamano Thu, 11 Jun 2015 16:29:54 +0000 (09:29 -0700)

Merge branch 'mh/verify-lock-error-report'

Bring consistency to error reporting mechanism used in "refs" API.

* mh/verify-lock-error-report:
ref_transaction_commit(): do not capitalize error messages
verify_lock(): do not capitalize error messages
verify_lock(): report errors via a strbuf
verify_lock(): on errors, let the caller unlock the lock
verify_lock(): return 0/-1 rather than struct ref_lock *

Merge branch 'jk/color-diff-plain-is-context'Junio C Hamano Thu, 11 Jun 2015 16:29:53 +0000 (09:29 -0700)

Merge branch 'jk/color-diff-plain-is-context'

"color.diff.plain" was a misnomer; give it 'color.diff.context' as
a more logical synonym.

* jk/color-diff-plain-is-context:
diff.h: rename DIFF_PLAIN color slot to DIFF_CONTEXT
diff: accept color.diff.context as a synonym for "plain"

Merge branch 'jk/clone-dissociate'Junio C Hamano Thu, 11 Jun 2015 16:29:52 +0000 (09:29 -0700)

Merge branch 'jk/clone-dissociate'

Code clean-up.

* jk/clone-dissociate:
clone: reorder --dissociate and --reference options
clone: use OPT_STRING_LIST for --reference

Merge branch 'jc/diff-ws-error-highlight'Junio C Hamano Thu, 11 Jun 2015 16:29:51 +0000 (09:29 -0700)

Merge branch 'jc/diff-ws-error-highlight'

Allow whitespace breakages in deleted and context lines to be also
painted in the output.

* jc/diff-ws-error-highlight:
diff.c: --ws-error-highlight=<kind> option
diff.c: add emit_del_line() and emit_context_line()
t4015: separate common setup and per-test expectation
t4015: modernise style

git-prompt.sh: document GIT_PS1_STATESEPARATORJoe Cridge Wed, 10 Jun 2015 17:19:24 +0000 (18:19 +0100)

git-prompt.sh: document GIT_PS1_STATESEPARATOR

The environment variable GIT_PS1_STATESEPARATOR can be used to set the
separator between the branch name and the state symbols in the prompt.

At present the variable is not mentioned in the inline documentation which
makes it difficult for the casual user to identify.

Signed-off-by: Joe Cridge <joe.cridge@me.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: format-patch: fix typoFrans Klaver Wed, 10 Jun 2015 21:01:14 +0000 (23:01 +0200)

doc: format-patch: fix typo

reroll count documentation states that v<n> will be pretended to the
filename. Judging by the examples that should have been 'prepended'.

Signed-off-by: Frans Klaver <fransklaver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: fixing --changes-block-size handlingLuke Diamand Wed, 10 Jun 2015 07:30:59 +0000 (08:30 +0100)

git-p4: fixing --changes-block-size handling

The --changes-block-size handling was intended to help when
a user has a limited "maxscanrows" (see "p4 group"). It used
"p4 changes -m $maxchanges" to limit the number of results.

Unfortunately, it turns out that the "maxscanrows" and "maxresults"
limits are actually applied *before* the "-m maxchanges" parameter
is considered (experimentally).

Fix the block-size handling so that it gets blocks of changes
limited by revision number ($Start..$Start+$N, etc). This limits
the number of results early enough that both sets of tests pass.

Note that many other Perforce operations can fail for the same
reason (p4 print, p4 files, etc) and it's probably not possible
to workaround this. In the real world, this is probably not
usually a problem.

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

git-p4: add tests for non-numeric revision rangeLuke Diamand Wed, 10 Jun 2015 07:30:58 +0000 (08:30 +0100)

git-p4: add tests for non-numeric revision range

Test that git-p4 can handle a sync with a non-numeric revision
range (e.g. a date).

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

setup: add gentle version of read_gitfileErik Elfström Tue, 9 Jun 2015 18:24:35 +0000 (20:24 +0200)

setup: add gentle version of read_gitfile

read_gitfile will die on most error cases. This makes it unsuitable
for speculative calls. Extract the core logic and provide a gentle
version that returns NULL on failure.

The first usecase of the new gentle version will be to probe for
submodules during git clean.

Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

index-pack: avoid excessive re-reading of pack directoryJeff King Tue, 9 Jun 2015 17:24:37 +0000 (13:24 -0400)

index-pack: avoid excessive re-reading of pack directory

Since 45e8a74 (has_sha1_file: re-check pack directory before
giving up, 2013-08-30), we spend extra effort for
has_sha1_file to give the right answer when somebody else is
repacking. Usually this effort does not matter, because
after finding that the object does not exist, the next step
is usually to die().

However, some code paths make a large number of
has_sha1_file checks which are _not_ expected to return 1.
The collision test in index-pack.c is such a case. On a
local system, this can cause a performance slowdown of
around 5%. But on a system with high-latency system calls
(like NFS), it can be much worse.

This patch introduces a "quick" flag to has_sha1_file which
callers can use when they would prefer high performance at
the cost of false negatives during repacks. There may be
other code paths that can use this, but the index-pack one
is the most obviously critical, so we'll start with
switching that one.

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

commit: cope with scissors lines in commit messageSZEDER Gábor Tue, 9 Jun 2015 00:28:34 +0000 (02:28 +0200)

commit: cope with scissors lines in commit message

The diff and submodule shortlog appended to the commit message template
by 'git commit --verbose' are not stripped when the commit message
contains an indented scissors line.

When cleaning up a commit message with 'git commit --verbose' or
'--cleanup=scissors' the code is careful and triggers only on a pure
scissors line, i.e. a line containing nothing but a comment character, a
space, and the scissors cut. This is good, because people can embed
scissors lines in the commit message while using 'git commit --verbose',
and the text they write after their indented scissors line doesn't get
deleted.

While doing so, however, the cleanup function only looks at the first
line matching the scissors pattern and if it doesn't start at the
beginning of the line, then the function just returns without performing
any cleanup. This is wrong, because a "real" scissors line added by
'git commit --verbose' might follow, and in that case the diff and
submodule shortlog get included in the commit message.

Fix this by changing the scissors pattern to match only at the beginning
of the line, yet be careful to catch scissors on the first line as well.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-completion.tcsh: fix redirect with noclobberAriel Faigon Tue, 9 Jun 2015 17:25:15 +0000 (10:25 -0700)

git-completion.tcsh: fix redirect with noclobber

tcsh users who happen to have 'set noclobber' elsewhere in their
~/.tcshrc or ~/.cshrc startup files get a 'File exist' error, and
the tcsh completion file doesn't get generated/updated.

Adding a `!` in the redirect works correctly for both clobber (default)
and 'set noclobber' users.

Reviewed-by: Christian Couder <christian.couder@gmail.com>
Signed-off-by: Ariel Faigon <github.2009@yendor.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am --abort: keep unrelated commits on unborn branchPaul Tan Sat, 6 Jun 2015 11:46:12 +0000 (19:46 +0800)

am --abort: keep unrelated commits on unborn branch

Since 7b3b7e3 (am --abort: keep unrelated commits since the last failure
and warn, 2010-12-21), git-am would refuse to rewind HEAD if commits
were made since the last git-am failure. This check was implemented in
safe_to_abort(), which checked to see if HEAD's hash matched the
abort-safety file.

However, this check was skipped if the abort-safety file was empty,
which can happen if git-am failed while on an unborn branch. As such, if
any commits were made since then, they would be discarded. Fix this by
carrying on the abort safety check even if the abort-safety file is
empty.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am --abort: support aborting to unborn branchPaul Tan Sat, 6 Jun 2015 11:46:11 +0000 (19:46 +0800)

am --abort: support aborting to unborn branch

When git-am is first run on an unborn branch, no ORIG_HEAD is created.
As such, any applied commits will remain even after a git am --abort.

To be consistent with the behavior of git am --abort when it is not run
from an unborn branch, we empty the index, and then destroy the branch
pointed to by HEAD if there is no ORIG_HEAD.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am --abort: revert changes introduced by failed 3way... Paul Tan Sat, 6 Jun 2015 11:46:10 +0000 (19:46 +0800)

am --abort: revert changes introduced by failed 3way merge

Even when a merge conflict occurs with am --3way, the index will be
modified with the results of any successfully merged files. These
changes to the index will not be reverted with a
"git read-tree --reset -u HEAD ORIG_HEAD", as git read-tree will not be
aware of how the current index differs from HEAD or ORIG_HEAD.

To fix this, we first reset any conflicting entries in the index. The
resulting index will contain the results of successfully merged files
introduced by the failed merge. We write this index to a tree, and then
use git read-tree to fast-forward this "index tree" back to ORIG_HEAD,
thus undoing all the changes from the failed merge.

When we are on an unborn branch, HEAD and ORIG_HEAD will not point to
valid trees. In this case, use an empty tree.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am --skip: support skipping while on unborn branchPaul Tan Sat, 6 Jun 2015 11:46:09 +0000 (19:46 +0800)

am --skip: support skipping while on unborn branch

When git am --skip is run, git am will copy HEAD's tree entries to the
index with "git reset HEAD". However, on an unborn branch, HEAD does not
point to a tree, so "git reset HEAD" will fail.

Fix this by treating HEAD as en empty tree when we are on an unborn
branch.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am -3: support 3way merge on unborn branchPaul Tan Sat, 6 Jun 2015 11:46:08 +0000 (19:46 +0800)

am -3: support 3way merge on unborn branch

While on an unborn branch, git am -3 will fail to do a threeway merge as
it references HEAD as "our tree", but HEAD does not point to a valid
tree.

Fix this by using an empty tree as "our tree" when we are on an unborn
branch.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am --skip: revert changes introduced by failed 3way... Paul Tan Sat, 6 Jun 2015 11:46:07 +0000 (19:46 +0800)

am --skip: revert changes introduced by failed 3way merge

Even when a merge conflict occurs with am --3way, the index will be
modified with the results of any succesfully merged files (such as a new
file). These changes to the index will not be reverted with a
"git read-tree --reset -u HEAD HEAD", as git read-tree will not be aware
of how the current index differs from HEAD.

To fix this, we first reset any conflicting entries from the index. The
resulting index will contain the results of successfully merged files.
We write the index to a tree, then use git read-tree -m to fast-forward
the "index tree" back to HEAD, thus undoing all the changes from the
failed merge.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4150: test applying StGit patchPaul Tan Mon, 8 Jun 2015 15:48:47 +0000 (23:48 +0800)

t4150: test applying StGit patch

By default, an StGit patch separates the subject from the commit message
and headers as follows:

$subject

From: $author_name <$author_email>

$message
---
$diffstats

We test git-am's ability to detect such a patch as an StGit patch, and
its ability to be able to extract the commit author, date and message
from such a patch.

Based-on-patch-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fsck: report errors if reflog entries point at invalid... Michael Haggerty Mon, 8 Jun 2015 13:40:05 +0000 (15:40 +0200)

fsck: report errors if reflog entries point at invalid objects

Previously, if a reflog entry's old or new SHA-1 was not resolvable to
an object, that SHA-1 was silently ignored. Instead, report such cases
as errors.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fsck_handle_reflog_sha1(): new functionMichael Haggerty Mon, 8 Jun 2015 13:40:04 +0000 (15:40 +0200)

fsck_handle_reflog_sha1(): new function

New function, extracted from fsck_handle_reflog_ent(). The extra
is_null_sha1() test for the new reference is currently unnecessary, as
reflogs are deleted when the reference itself is deleted. But it
doesn't hurt, either.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>