gitweb.git
Merge branch 'nd/connect-ssh-command-config'Junio C Hamano Tue, 19 Jul 2016 20:22:12 +0000 (13:22 -0700)

Merge branch 'nd/connect-ssh-command-config'

A new configuration variable core.sshCommand has been added to
specify what value for GIT_SSH_COMMAND to use per repository.

* nd/connect-ssh-command-config:
connect: read $GIT_SSH_COMMAND from config file

use strbuf_addbuf() for appending a strbuf to anotherRené Scharfe Tue, 19 Jul 2016 18:36:29 +0000 (20:36 +0200)

use strbuf_addbuf() for appending a strbuf to another

Use strbuf_addbuf() where possible; it's shorter and more efficient.

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

git-svn: document svn.authorsProg in configEric Wong Tue, 19 Jul 2016 10:02:39 +0000 (10:02 +0000)

git-svn: document svn.authorsProg in config

This has always been supported since we read config variables
based on the command-line option parser. Document it explicitly
since users usually want to maintain the same program across
invocations.

Signed-off-by: Eric Wong <e@80x24.org>

fsck: optionally show more helpful info for broken... Johannes Schindelin Sun, 17 Jul 2016 11:00:02 +0000 (13:00 +0200)

fsck: optionally show more helpful info for broken links

When reporting broken links between commits/trees/blobs, it would be
quite helpful at times if the user would be told how the object is
supposed to be reachable.

With the new --name-objects option, git-fsck will try to do exactly
that: name the objects in a way that shows how they are reachable.

For example, when some reflog got corrupted and a blob is missing that
should not be, the user might want to remove the corresponding reflog
entry. This option helps them find that entry: `git fsck` will now
report something like this:

broken link from tree b5eb6ff... (refs/stash@{<date>}~37:)
to blob ec5cf80...

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

t/t8003-blame-corner-cases.sh: Use here documentsMike Hommey Fri, 15 Jul 2016 23:23:46 +0000 (08:23 +0900)

t/t8003-blame-corner-cases.sh: Use here documents

Somehow, this test was using:

{
echo A
echo B
} > file

block to feed file contents. This changes those to the form most common
in git test scripts:

cat >file <<-\EOF
A
B
EOF

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

blame: allow to blame paths freshly added to the indexMike Hommey Fri, 15 Jul 2016 23:23:45 +0000 (08:23 +0900)

blame: allow to blame paths freshly added to the index

When blaming files, changes in the work tree are taken into account
and displayed as being "Not Committed Yet".

However, when blaming a file that is not known to the current HEAD,
git blame fails with `no such path 'foo' in HEAD`, even when the file
was git add'ed.

Allowing such a blame is useful when the new file added to the index
(not yet committed) was created by renaming an existing file. It
also is useful when the new file was created from pieces already in
HEAD, moved or copied from other files and blaming with copy
detection (i.e. "-C").

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

cache-tree: do not generate empty trees as a result... Nguyễn Thái Ngọc Duy Sat, 16 Jul 2016 05:06:27 +0000 (07:06 +0200)

cache-tree: do not generate empty trees as a result of all i-t-a subentries

If a subdirectory contains nothing but i-t-a entries, we generate an
empty tree object and add it to its parent tree. Which is wrong. Such
a subdirectory should not be added.

Note that this has a cascading effect. If subdir 'a/b/c' contains
nothing but i-t-a entries, we ignore it. But then if 'a/b' contains
only (the non-existing) 'a/b/c', then we should ignore 'a/b' while
building 'a' too. And it goes all the way up to top directory.

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

cache-tree.c: fix i-t-a entry skipping directory update... Nguyễn Thái Ngọc Duy Sat, 16 Jul 2016 05:06:26 +0000 (07:06 +0200)

cache-tree.c: fix i-t-a entry skipping directory updates sometimes

Commit 3cf773e (cache-tree: fix writing cache-tree when CE_REMOVE is
present - 2012-12-16) skips i-t-a entries when building trees objects
from the index. Unfortunately it may skip too much.

The code in question checks if an entry is an i-t-a one, then no tree
entry will be written. But it does not take into account that
directories can also be written with the same code. Suppose we have
this in the index.

a-file
subdir/file1
subdir/file2
subdir/file3
the-last-file

We write an entry for a-file as normal and move on to subdir/file1,
where we realize the entry name for this level is simply just
"subdir", write down an entry for "subdir" then jump three items ahead
to the-last-file.

That is what happens normally when the first file in subdir is not an
i-t-a entry. If subdir/file1 is an i-t-a, because of the broken
condition in this code, we still think "subdir" is an i-t-a file and
not writing "subdir" down and jump to the-last-file. The result tree
now only has two items: a-file and the-last-file. subdir should be
there too (even though it only records two sub-entries, file2 and
file3).

If the i-t-a entry is subdir/file2 or subdir/file3, this is not a
problem because we jump over them anyway. Which may explain why the
bug is hidden for nearly four years.

Fix it by making sure we only skip i-t-a entries when the entry in
question is actual an index entry, not a directory.

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

test-lib.sh: introduce and use $EMPTY_BLOBNguyễn Thái Ngọc Duy Sat, 16 Jul 2016 05:06:25 +0000 (07:06 +0200)

test-lib.sh: introduce and use $EMPTY_BLOB

Similar to $EMPTY_TREE this makes it easier to recognize this special
SHA-1 and change hash later.

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

test-lib.sh: introduce and use $EMPTY_TREENguyễn Thái Ngọc Duy Sat, 16 Jul 2016 05:06:24 +0000 (07:06 +0200)

test-lib.sh: introduce and use $EMPTY_TREE

This is a special SHA1. Let's keep it at one place, easier to replace
later when the hash change comes, easier to recognize.

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

fsck: give the error function a chance to see the fsck_... Johannes Schindelin Sun, 17 Jul 2016 10:59:57 +0000 (12:59 +0200)

fsck: give the error function a chance to see the fsck_options

We will need this in the next commit, where fsck will be taught to
optionally name the objects when reporting issues about them.

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

fsck_walk(): optionally name objects on the goJohannes Schindelin Sun, 17 Jul 2016 10:59:49 +0000 (12:59 +0200)

fsck_walk(): optionally name objects on the go

If fsck_options->name_objects is initialized, and if it already has
name(s) for the object(s) that are to be the starting point(s) for
fsck_walk(), then that function will now add names for the objects
that were walked.

This will be highly useful for teaching git-fsck to identify root causes
for broken links, which is the task for the next patch in this series.

Note that this patch opts for decorating the objects with plain strings
instead of full-blown structs (à la `struct rev_name` in the code of
the `git name-rev` command), for several reasons:

- the code is much simpler than if it had to work with structs that
describe arbitrarily long names such as "master~14^2~5:builtin/am.c",

- the string processing is actually quite light-weight compared to the
rest of fsck's operation,

- the caller of fsck_walk() is expected to provide names for the
starting points, and using plain and simple strings is just the
easiest way to do that.

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

fsck: refactor how to describe objectsJohannes Schindelin Sun, 17 Jul 2016 10:59:44 +0000 (12:59 +0200)

fsck: refactor how to describe objects

In many places, we refer to objects via their SHA-1s. Let's abstract
that into a function.

For the moment, it does nothing else than what we did previously: print
out the 40-digit hex string. But that will change over the course of the
next patches.

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

configure.ac: stronger test for pthread linkageEric Wong Mon, 18 Jul 2016 10:22:08 +0000 (10:22 +0000)

configure.ac: stronger test for pthread linkage

We need to test linkage of pthread_create and pthread_join,
as pthread_mutex_* and pthread_key_* functions do not need
extra linkage under FreeBSD 10.3, leading to a false-positive
of the empty case.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

daemon: ignore ENOTSOCK from setsockoptEric Wong Mon, 18 Jul 2016 04:59:11 +0000 (04:59 +0000)

daemon: ignore ENOTSOCK from setsockopt

In inetd mode, we are not guaranteed stdin or stdout is a
socket; callers could filter the data through a pipe
or be testing with regular files.

This prevents t5802 from polluting syslog.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

list: avoid incompatibility with *BSD sys/queue.hEric Wong Sun, 17 Jul 2016 00:25:34 +0000 (00:25 +0000)

list: avoid incompatibility with *BSD sys/queue.h

The OS X build pulls in sys/queue.h, which pollutes the preprocessor
namespace with a macro generically named LIST_HEAD, and clashes with
the name we use here.

ref: http://mid.gmane.org/FB76544F-16F7-45CA-9649-FD62EE44B0DE@gmail.com

Reported-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

archive-tar: huge offset and future timestamps would... Junio C Hamano Thu, 14 Jul 2016 20:04:43 +0000 (13:04 -0700)

archive-tar: huge offset and future timestamps would not work on 32-bit

As we are not yet moving everything to size_t but still using ulong
internally when talking about the size of object, platforms with
32-bit long will not be able to produce tar archive with 4GB+ file,
and cannot grok 077777777777UL as a constant. Disable the extended
header feature and do not test it on them.

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

Sync with 2.9.2Junio C Hamano Fri, 15 Jul 2016 17:49:23 +0000 (10:49 -0700)

Sync with 2.9.2

* maint:
Git 2.9.2
t0006: skip "far in the future" test when unsigned long is not long enough

Git 2.9.2 v2.9.2Junio C Hamano Fri, 15 Jul 2016 17:48:16 +0000 (10:48 -0700)

Git 2.9.2

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

Merge branch 'jk/tzoffset-fix' into maintJunio C Hamano Fri, 15 Jul 2016 16:43:42 +0000 (09:43 -0700)

Merge branch 'jk/tzoffset-fix' into maint

Skip tests that are unrunnable on platforms without 64-bit long
to avoid unnecessary test failures.

* jk/tzoffset-fix:
t0006: skip "far in the future" test when unsigned long is not long enough

t0006: skip "far in the future" test when unsigned... Jeff King Mon, 11 Jul 2016 23:54:18 +0000 (19:54 -0400)

t0006: skip "far in the future" test when unsigned long is not long enough

Git's source code refers to timestamps as unsigned longs. On 32-bit
platforms, as well as on Windows, unsigned long is not large enough
to capture dates that are "absurdly far in the future".

While we can fix this issue properly by replacing unsigned long with
a larger type, we want to be a bit more conservative and just skip
those tests on the maint track.

Signed-off-by: Jeff King <peff@peff.net>
Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add a test for push optionsStefan Beller Thu, 14 Jul 2016 21:49:48 +0000 (14:49 -0700)

add a test for push options

The functions `mk_repo_pair` as well as `test_refs` are borrowed from
t5543-atomic-push, with additional hooks installed.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

push: accept push optionsStefan Beller Thu, 14 Jul 2016 21:49:47 +0000 (14:49 -0700)

push: accept push options

This implements everything that is required on the client side to make use
of push options from the porcelain push command.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

receive-pack: implement advertising and receiving push... Stefan Beller Thu, 14 Jul 2016 21:49:46 +0000 (14:49 -0700)

receive-pack: implement advertising and receiving push options

The pre/post receive hook may be interested in more information from the
user. This information can be transmitted when both client and server
support the "push-options" capability, which when used is a phase directly
after update commands ended by a flush pkt.

Similar to the atomic option, the server capability can be disabled via
the `receive.advertisePushOptions` config variable. While documenting
this, fix a nit in the `receive.advertiseAtomic` wording.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

push options: {pre,post}-receive hook learns about... Stefan Beller Thu, 14 Jul 2016 21:49:45 +0000 (14:49 -0700)

push options: {pre,post}-receive hook learns about push options

The environment variable GIT_PUSH_OPTION_COUNT is set to the number of
push options sent, and GIT_PUSH_OPTION_{0,1,..} is set to the transmitted
option.

The code is not executed as the push options are set to NULL, nor is the
new capability advertised.

There was some discussion back and forth how to present these push options
to the user as there are some ways to do it:

Keep all options in one environment variable
============================================
+ easiest way to implement in Git
- This would make things hard to parse correctly in the hook.

Put the options in files instead,
filenames are in GIT_PUSH_OPTION_FILES
======================================
+ After a discussion about environment variables and shells, we may not
want to put user data into an environment variable (see [1] for example).
+ We could transmit binaries, i.e. we're not bound to C strings as
we are when using environment variables to the user.
+ Maybe easier to parse than constructing environment variable names
GIT_PUSH_OPTION_{0,1,..} yourself
- cleanup of the temporary files is hard to do reliably
- we have race conditions with multiple clients pushing, hence we'd need
to use mkstemp. That's not too bad, but still.

Use environment variables, but restrict to key/value pairs
==========================================================
(When the user pushes a push option `foo=bar`, we'd
GIT_PUSH_OPTION_foo=bar)
+ very easy to parse for a simple model of push options
- it's not sufficient for more elaborate models, e.g.
it doesn't allow doubles (e.g. cc=reviewer@email)

Present the options in different environment variables
======================================================
(This is implemented)
* harder to parse as a user, but we have a sample hook for that.
- doesn't allow binary files
+ allows the same option twice, i.e. is not restrictive about
options, except for binary files.
+ doesn't clutter a remote directory with (possibly stale)
temporary files

As we first want to focus on getting simple strings to work
reliably, we go with the last option for now. If we want to
do transmission of binaries later, we can just attach a
'side-channel', e.g. "any push option that contains a '\0' is
put into a file instead of the environment variable and we'd
have new GIT_PUSH_OPTION_FILES, GIT_PUSH_OPTION_FILENAME_{0,1,..}
environment variables".

[1] 'Shellshock' https://lwn.net/Articles/614218/

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: document diff-filter exclusionJunio C Hamano Thu, 14 Jul 2016 19:17:47 +0000 (12:17 -0700)

diff: document diff-filter exclusion

In v1.8.5 days, 7f2ea5f0 (diff: allow lowercase letter to specify
what change class to exclude, 2013-07-17) taught the "--diff-filter"
mechanism to take lowercase letters as exclusion, but we forgot to
document it.

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

Merge branch 'jk/upload-pack-hook'Junio C Hamano Thu, 14 Jul 2016 17:38:57 +0000 (10:38 -0700)

Merge branch 'jk/upload-pack-hook'

A hot-fix to make a test working in mingw again.

* jk/upload-pack-hook:
mingw: fix regression in t1308-config-set

mingw: fix regression in t1308-config-setJohannes Schindelin Thu, 14 Jul 2016 13:58:59 +0000 (15:58 +0200)

mingw: fix regression in t1308-config-set

When we tried to fix in 58461bd (t1308: do not get fooled by symbolic
links to the source tree, 2016-06-02) an obscure case where the user
cd's into Git's source code via a symbolic link, a regression was
introduced that affects all test runs on Windows.

The original patch introducing the test case in question was careful to
use `$(pwd)` instead of `$PWD`.

This was done to account for the fact that Git's test suite uses shell
scripting even on Windows, where the shell's Unix-y paths are
incompatible with the main Git executable's idea of paths: it only
accepts Windows paths.

It is an awkward but necessary thing, then, to use `$(pwd)` (which gives
us a Windows path) when interacting with the Git executable and `$PWD`
(which gives the shell's idea of the current working directory in Unix-y
form) for shell scripts, including the test suite itself.

Obviously this broke the use case of the Git maintainer when changing
the working directory into Git's source code directory via a symlink,
i.e. when `$(pwd)` does not agree with `$PWD`.

However, we must not fix that use case at the expense of regressing
another use case.

Let's special-case Windows here, even if it is ugly, for lack of a more
elegant solution.

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

push: anonymize URL in status outputJeff King Wed, 13 Jul 2016 23:36:53 +0000 (19:36 -0400)

push: anonymize URL in status output

Commit 47abd85 (fetch: Strip usernames from url's before
storing them, 2009-04-17) taught fetch to anonymize URLs.
The primary purpose there was to avoid sticking passwords in
merge-commit messages, but as a side effect, we also avoid
printing them to stderr.

The push side does not have the merge-commit problem, but it
probably should avoid printing them to stderr. We can reuse
the same anonymizing function.

Note that for this to come up, the credentials would have to
appear either on the command line or in a git config file,
neither of which is particularly secure. So people _should_
be switching to using credential helpers instead, which
makes this problem go away. But that's no excuse not to
improve the situation for people who for whatever reason end
up using credentials embedded in the URL.

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

Fifth batch of topics for 2.10Junio C Hamano Wed, 13 Jul 2016 18:26:49 +0000 (11:26 -0700)

Fifth batch of topics for 2.10

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

Merge branch 'jk/big-and-future-archive-tar'Junio C Hamano Wed, 13 Jul 2016 18:24:18 +0000 (11:24 -0700)

Merge branch 'jk/big-and-future-archive-tar'

"git archive" learned to handle files that are larger than 8GB and
commits far in the future than expressible by the traditional US-TAR
format.

* jk/big-and-future-archive-tar:
archive-tar: drop return value
archive-tar: write extended headers for far-future mtime
archive-tar: write extended headers for file sizes >= 8GB
t5000: test tar files that overflow ustar headers
t9300: factor out portable "head -c" replacement

Merge branch 'nd/ita-cleanup'Junio C Hamano Wed, 13 Jul 2016 18:24:17 +0000 (11:24 -0700)

Merge branch 'nd/ita-cleanup'

Git does not know what the contents in the index should be for a
path added with "git add -N" yet, so "git grep --cached" should not
show hits (or show lack of hits, with -L) in such a path, but that
logic does not apply to "git grep", i.e. searching in the working
tree files. But we did so by mistake, which has been corrected.

* nd/ita-cleanup:
grep: fix grepping for "intent to add" files
t7810-grep.sh: fix a whitespace inconsistency
t7810-grep.sh: fix duplicated test name

Merge branch 'ps/rebase-i-auto-unstash-upon-abort'Junio C Hamano Wed, 13 Jul 2016 18:24:16 +0000 (11:24 -0700)

Merge branch 'ps/rebase-i-auto-unstash-upon-abort'

"git rebase -i --autostash" did not restore the auto-stashed change
when the operation was aborted.

* ps/rebase-i-auto-unstash-upon-abort:
rebase -i: restore autostash on abort

Merge branch 'js/t3404-grammo-fix'Junio C Hamano Wed, 13 Jul 2016 18:24:16 +0000 (11:24 -0700)

Merge branch 'js/t3404-grammo-fix'

Grammofix.

* js/t3404-grammo-fix:
t3404: fix a grammo (commands are ran -> commands are run)

Merge branch 'js/sign-empty-commit-fix'Junio C Hamano Wed, 13 Jul 2016 18:24:14 +0000 (11:24 -0700)

Merge branch 'js/sign-empty-commit-fix'

"git commit --amend --allow-empty-message -S" for a commit without
any message body could have misidentified where the header of the
commit object ends.

* js/sign-empty-commit-fix:
commit -S: avoid invalid pointer with empty message

Merge branch 'mm/doc-tt'Junio C Hamano Wed, 13 Jul 2016 18:24:14 +0000 (11:24 -0700)

Merge branch 'mm/doc-tt'

More mark-up updates to typeset strings that are expected to
literally typed by the end user in fixed-width font.

* mm/doc-tt:
doc: typeset HEAD and variants as literal
CodingGuidelines: formatting HEAD in documentation
doc: typeset long options with argument as literal
doc: typeset '--' as literal
doc: typeset long command-line options as literal
doc: typeset short command-line options as literal
Documentation/git-mv.txt: fix whitespace indentation

Merge branch 'dg/subtree-rebase-test'Junio C Hamano Wed, 13 Jul 2016 18:24:13 +0000 (11:24 -0700)

Merge branch 'dg/subtree-rebase-test'

Add a test to specify the desired behaviour that currently is not
available in "git rebase -Xsubtree=...".

* dg/subtree-rebase-test:
contrib/subtree: Add a test for subtree rebase that loses commits

Merge branch 'nd/doc-new-command'Junio C Hamano Wed, 13 Jul 2016 18:24:12 +0000 (11:24 -0700)

Merge branch 'nd/doc-new-command'

Typofix in a doc.

* nd/doc-new-command:
new-command.txt: correct the command description file

Merge branch 'ew/gc-auto-pack-limit-fix'Junio C Hamano Wed, 13 Jul 2016 18:24:12 +0000 (11:24 -0700)

Merge branch 'ew/gc-auto-pack-limit-fix'

"gc.autoPackLimit" when set to 1 should not trigger a repacking
when there is only one pack, but the code counted poorly and did
so.

* ew/gc-auto-pack-limit-fix:
gc: fix off-by-one error with gc.autoPackLimit

Merge branch 'ah/unpack-trees-advice-messages'Junio C Hamano Wed, 13 Jul 2016 18:24:11 +0000 (11:24 -0700)

Merge branch 'ah/unpack-trees-advice-messages'

Grammofix.

* ah/unpack-trees-advice-messages:
unpack-trees: fix English grammar in do-this-before-that messages

Merge branch 'va/i18n-even-more'Junio C Hamano Wed, 13 Jul 2016 18:24:10 +0000 (11:24 -0700)

Merge branch 'va/i18n-even-more'

More markings of messages for i18n, with updates to various tests
to pass GETTEXT_POISON tests.

One patch from the original submission dropped due to conflicts
with jk/upload-pack-hook, which is still in flux.

* va/i18n-even-more: (38 commits)
t5541: become resilient to GETTEXT_POISON
i18n: branch: mark comment when editing branch description for translation
i18n: unmark die messages for translation
i18n: submodule: escape shell variables inside eval_gettext
i18n: submodule: join strings marked for translation
i18n: init-db: join message pieces
i18n: remote: allow translations to reorder message
i18n: remote: mark URL fallback text for translation
i18n: standardise messages
i18n: sequencer: add period to error message
i18n: merge: change command option help to lowercase
i18n: merge: mark messages for translation
i18n: notes: mark options for translation
i18n: notes: mark strings for translation
i18n: transport-helper.c: change N_() call to _()
i18n: bisect: mark strings for translation
t5523: use test_i18ngrep for negation
t4153: fix negated test_i18ngrep call
t9003: become resilient to GETTEXT_POISON
tests: unpack-trees: update to use test_i18n* functions
...

fsck: use streaming interface for large blobs in packNguyễn Thái Ngọc Duy Wed, 13 Jul 2016 15:44:04 +0000 (17:44 +0200)

fsck: use streaming interface for large blobs in pack

For blobs, we want to make sure the on-disk data is not corrupted
(i.e. can be inflated and produce the expected SHA-1). Blob content is
opaque, there's nothing else inside to check for.

For really large blobs, we may want to avoid unpacking the entire blob
in memory, just to check whether it produces the same SHA-1. On 32-bit
systems, we may not have enough virtual address space for such memory
allocation. And even on 64-bit where it's not a problem, allocating a
lot more memory could result in kicking other parts of systems to swap
file, generating lots of I/O and slowing everything down.

For this particular operation, not unpacking the blob and letting
check_sha1_signature, which supports streaming interface, do the job
is sufficient. check_sha1_signature() is not shown in the diff,
unfortunately. But if will be called when "data_valid && !data" is
false.

We will call the callback function "fn" with NULL as "data". The only
callback of this function is fsck_obj_buffer(), which does not touch
"data" at all if it's a blob.

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

pack-objects: do not truncate result in-pack object... Nguyễn Thái Ngọc Duy Wed, 13 Jul 2016 15:44:03 +0000 (17:44 +0200)

pack-objects: do not truncate result in-pack object size on 32-bit systems

A typical diff will not show what's going on and you need to see full
functions. The core code is like this, at the end of of write_one()

e->idx.offset = *offset;
size = write_object(f, e, *offset);
if (!size) {
e->idx.offset = recursing;
return WRITE_ONE_BREAK;
}
written_list[nr_written++] = &e->idx;

/* make sure off_t is sufficiently large not to wrap */
if (signed_add_overflows(*offset, size))
die("pack too large for current definition of off_t");
*offset += size;

Here we can see that the in-pack object size is returned by
write_object (or indirectly by write_reuse_object). And it's used to
calculate object offsets, which end up in the pack index file,
generated at the end.

If "size" overflows (on 32-bit sytems, unsigned long is 32-bit while
off_t can be 64-bit), we got wrong offsets and produce incorrect .idx
file, which may make it look like the .pack file is corrupted.

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

index-pack: correct "offset" type in unpack_entry_data()Nguyễn Thái Ngọc Duy Wed, 13 Jul 2016 15:44:02 +0000 (17:44 +0200)

index-pack: correct "offset" type in unpack_entry_data()

unpack_entry_data() receives an off_t value from unpack_raw_entry(),
which could be larger than unsigned long on 32-bit systems with large
file support. Correct the type so truncation does not happen. This
only affects bad object reporting though.

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

index-pack: report correct bad object offsets even... Nguyễn Thái Ngọc Duy Wed, 13 Jul 2016 15:44:01 +0000 (17:44 +0200)

index-pack: report correct bad object offsets even if they are large

Use the right type for offsets in this case, off_t, which makes a
difference on 32-bit systems with large file support, and change
formatting code accordingly.

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

index-pack: correct "len" type in unpack_data()Nguyễn Thái Ngọc Duy Wed, 13 Jul 2016 15:44:00 +0000 (17:44 +0200)

index-pack: correct "len" type in unpack_data()

On 32-bit systems with large file support, one entry could be larger
than 4GB and overflow "len". Correct it so we can unpack a full entry.

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

sha1_file.c: use type off_t* for object_info->disk_sizepNguyễn Thái Ngọc Duy Wed, 13 Jul 2016 15:43:59 +0000 (17:43 +0200)

sha1_file.c: use type off_t* for object_info->disk_sizep

This field, filled by sha1_object_info() contains the on-disk size of
an object, which could go over 4GB limit of unsigned long on 32-bit
systems. Use off_t for it instead and update all callers.

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

http-walker: reduce O(n) ops with doubly-linked listEric Wong Mon, 11 Jul 2016 20:51:31 +0000 (20:51 +0000)

http-walker: reduce O(n) ops with doubly-linked list

Using the a Linux-kernel-derived doubly-linked list
implementation from the Userspace RCU library allows us to
enqueue and delete items from the object request queue in
constant time.

This change reduces enqueue times in the prefetch() function
where object request queue could grow to several thousand
objects.

I left out the list_for_each_entry* family macros from list.h
which relied on the __typeof__ operator as we support platforms
without it. Thus, list_entry (aka "container_of") needs to be
called explicitly inside macro-wrapped for loops.

The downside is this costs us an additional pointer per object
request, but this is offset by reduced overhead on queue
operations leading to improved performance and shorter queue
depths.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http: avoid disconnecting on 404s for loose objectsEric Wong Mon, 11 Jul 2016 20:51:30 +0000 (20:51 +0000)

http: avoid disconnecting on 404s for loose objects

404s are common when fetching loose objects on static HTTP
servers, and reestablishing a connection for every single
404 adds additional latency.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http-walker: remove unused parameter from fetch_objectEric Wong Mon, 11 Jul 2016 20:51:29 +0000 (20:51 +0000)

http-walker: remove unused parameter from fetch_object

This parameter has not been used since commit 1d389ab65dc6
("Add support for parallel HTTP transfers") back in 2005

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree: use strbuf_add_absolute_path() directlyRené Scharfe Sat, 9 Jul 2016 15:43:59 +0000 (17:43 +0200)

worktree: use strbuf_add_absolute_path() directly

absolute_path() is a wrapper for strbuf_add_absolute_path(). Call the
latter directly for adding absolute paths to a strbuf. That's shorter
and avoids an extra string copy.

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

rm: reuse strbuf for all remove_dir_recursively() callsRené Scharfe Sat, 9 Jul 2016 14:47:04 +0000 (16:47 +0200)

rm: reuse strbuf for all remove_dir_recursively() calls

Don't throw the memory allocated for remove_dir_recursively() away after
a single call, use it for the other entries as well instead.

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

merge: avoid "safer crlf" during recording of merge... Junio C Hamano Fri, 8 Jul 2016 17:59:15 +0000 (10:59 -0700)

merge: avoid "safer crlf" during recording of merge results

When merge_recursive() decides what the correct blob object merge
result for a path should be, it uses update_file_flags() helper
function to write it out to a working tree file and then calls
add_cacheinfo(). The add_cacheinfo() function in turn calls
make_cache_entry() to create a new cache entry to replace the
higher-stage entries for the path that represents the conflict.

The make_cache_entry() function calls refresh_cache_entry() to fill
in the cached stat information. To mark a cache entry as
up-to-date, the data is re-read from the file in the working tree,
and goes through convert_to_git() conversion to be compared with the
blob object name the new cache entry records.

It is important to note that this happens while the higher-stage
entries, which are going to be replaced with the new entry, are
still in the index. Unfortunately, the convert_to_git() conversion
has a misguided "safer crlf" mechanism baked in, and looks at the
existing cache entry for the path to decide how to convert the
contents in the working tree file. If our side (i.e. stage#2)
records a text blob with CRLF in it, even when the system is
configured to record LF in blobs and convert them to CRLF upon
checkout (and back to LF upon checkin), the "safer crlf" mechanism
stops us doing so.

This especially poses a problem during a renormalizing merge, where
the merge result for the path is computed by first "normalizing" the
blobs involved in the merge by using convert_to_working_tree()
followed by convert_to_git() with "safer crlf" disabled. The merge
result that is computed correctly and fed to add_cacheinfo() via
update_file_flags() does _not_ match what refresh_cache_entry() sees
by converting the working tree file via convert_to_git().

We can work this around by not refreshing the new cache entry in
make_cache_entry() called by add_cacheinfo(). After add_cacheinfo()
adds the new entry, we can call refresh_cache_entry() on that,
knowing that addition of this new cache entry would have removed the
stale cache entries that had CRLF in stage #2 that were carried over
before the renormalizing merge started and will not interfere with
the correct recording of the result.

The test update was taken from a series by Torsten Bögershausen
that attempted to fix this with a different approach.

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

pack-objects: pass length to check_pack_crc() without... Nguyễn Thái Ngọc Duy Tue, 5 Jul 2016 17:05:54 +0000 (19:05 +0200)

pack-objects: pass length to check_pack_crc() without truncation

On 32 bit systems with large file support, unsigned long is 32-bit
while the two offsets in the subtraction expression (pack-objects has
the exact same expression as in sha1_file.c but not shown in diff) are
in 64-bit. If an in-pack object is larger than 2^32 len/datalen is
truncated and we get a misleading "error: bad packed object CRC for
..." as a result.

Use off_t for len and datalen. check_pack_crc() already accepts this
argument as off_t and can deal with 4+ GB.

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

travis-ci: enable web server tests t55xx on LinuxLars Schneider Thu, 19 May 2016 08:45:11 +0000 (10:45 +0200)

travis-ci: enable web server tests t55xx on Linux

Install the "apache" package to run the Git web server tests on
Travis-CI Linux build machines. The tests are already executed on OS X
build machines since the apache web server is installed by default.

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

mingw: fix the shortlog --output=<file> testJohannes Schindelin Mon, 11 Jul 2016 13:11:37 +0000 (15:11 +0200)

mingw: fix the shortlog --output=<file> test

Adjust t4201 to pass on Windows; a couple of test cases need to be
skipped on Windows which leads to a different shortlog than on Linux.

Let's just fix that by limiting the shortlog's commit range to traverse
only one commit: that guarantees that it does not matter how many test
cases were skipped.

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

t/test-lib.sh: fix running tests with --valgrindJohannes Schindelin Mon, 11 Jul 2016 11:45:08 +0000 (13:45 +0200)

t/test-lib.sh: fix running tests with --valgrind

We forgot to adjust this code path after moving the test helpers to
t/helper/.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Acked-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: fix a double off-by-one with --ignore-space-at-eolJohannes Schindelin Sat, 9 Jul 2016 07:23:55 +0000 (09:23 +0200)

diff: fix a double off-by-one with --ignore-space-at-eol

When comparing two lines, ignoring any whitespace at the end, we first
try to match as many bytes as possible and break out of the loop only
upon mismatch, to let the remainder be handled by the code shared with
the other whitespace-ignoring code paths.

When comparing the bytes, however, we incremented the counters always,
even if the bytes did not match. And because we fall through to the
space-at-eol handling at that point, it is as if that mismatch never
happened.

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

diff: demonstrate a bug with --patience and --ignore... Johannes Schindelin Sat, 9 Jul 2016 07:23:50 +0000 (09:23 +0200)

diff: demonstrate a bug with --patience and --ignore-space-at-eol

When a single character is added to a line, the combination of these
two options results in an empty diff.

This bug was noticed and reported by Naja Melan.

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

config.mak.uname: define NEEDS_LIBRT under Linux, for nowEric Wong Sun, 10 Jul 2016 22:16:44 +0000 (22:16 +0000)

config.mak.uname: define NEEDS_LIBRT under Linux, for now

My Debian wheezy LTS system is still on glibc 2.13; and LTS
distros may use older glibc, still, so lets not unnecessarily
break things out-of-the-box.

We seem to assume Linux is using glibc in our Makefiles anyways,
so I don't think this will introduce new breakage for users of
alternative libc implementations.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with v2.9.1Junio C Hamano Mon, 11 Jul 2016 17:46:39 +0000 (10:46 -0700)

Sync with v2.9.1

* maint:
Git 2.9.1

Git 2.9.1 v2.9.1Junio C Hamano Mon, 11 Jul 2016 17:45:50 +0000 (10:45 -0700)

Git 2.9.1

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

Merge branch 'jc/t2300-setup' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:19 +0000 (10:44 -0700)

Merge branch 'jc/t2300-setup' into maint

Portability fix for Windows.

* jc/t2300-setup:
t2300: "git --exec-path" is not usable in $PATH on Windows as-is

Merge branch 'cb/t7810-test-label-fix' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:18 +0000 (10:44 -0700)

Merge branch 'cb/t7810-test-label-fix' into maint

Test clean-up.

* cb/t7810-test-label-fix:
t7810: fix duplicated test title

Merge branch 'sb/t5614-modernize' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:17 +0000 (10:44 -0700)

Merge branch 'sb/t5614-modernize' into maint

Test clean-up.

* sb/t5614-modernize:
t5614: don't use subshells

Merge branch 'jn/preformatted-doc-url' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:16 +0000 (10:44 -0700)

Merge branch 'jn/preformatted-doc-url' into maint

The top level documentation "git help git" still pointed at the
documentation set hosted at now-defunct google-code repository.
Update it to point to https://git.github.io/htmldocs/git.html
instead.

* jn/preformatted-doc-url:
doc: git-htmldocs.googlecode.com is no more

Merge branch 'ao/p4-has-branch-prefix-fix' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:16 +0000 (10:44 -0700)

Merge branch 'ao/p4-has-branch-prefix-fix' into maint

A bug, which caused "git p4" while running under verbose mode to
report paths that are omitted due to branch prefix incorrectly, has
been fixed; the command said "Ignoring file outside of prefix" for
paths that are _inside_.

* ao/p4-has-branch-prefix-fix:
git-p4: correct hasBranchPrefix verbose output

Merge branch 'js/perf-on-apple' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:15 +0000 (10:44 -0700)

Merge branch 'js/perf-on-apple' into maint

t/perf needs /usr/bin/time with GNU extension; the invocation of it
is updated to "gtime" on Darwin.

* js/perf-on-apple:
perf: accommodate for MacOSX

Merge branch 'ak/t7800-wo-readlink' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:15 +0000 (10:44 -0700)

Merge branch 'ak/t7800-wo-readlink' into maint

One among four invocations of readlink(1) in our test suite has
been rewritten so that the test can run on systems without the
command (others are in valgrind test framework and t9802).

* ak/t7800-wo-readlink:
t7800: readlink may not be available

Merge branch 'jk/tzoffset-fix' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:14 +0000 (10:44 -0700)

Merge branch 'jk/tzoffset-fix' into maint

The internal code used to show local timezone offset is not
prepared to handle timestamps beyond year 2100, and gave a
bogus offset value to the caller. Use a more benign looking
+0000 instead and let "git log" going in such a case, instead
of aborting.

* jk/tzoffset-fix:
local_tzoffset: detect errors from tm_to_time_t
t0006: test various date formats
t0006: rename test-date's "show" to "relative"

Merge branch 'js/mingw-parameter-less-c-functions'... Junio C Hamano Mon, 11 Jul 2016 17:44:13 +0000 (10:44 -0700)

Merge branch 'js/mingw-parameter-less-c-functions' into maint

Some platform-specific code had non-ANSI strict declarations of C
functions that do not take any parameters, which has been
corrected.

* js/mingw-parameter-less-c-functions:
mingw: let the build succeed with DEVELOPER=1

Merge branch 'lc/shell-default-value-noexpand' into... Junio C Hamano Mon, 11 Jul 2016 17:44:13 +0000 (10:44 -0700)

Merge branch 'lc/shell-default-value-noexpand' into maint

Fix unnecessarily waste in the idiomatic use of ': ${VAR=default}'
to set the default value, without enclosing it in double quotes.

* lc/shell-default-value-noexpand:
sh-setup: enclose setting of ${VAR=default} in double-quotes

Merge branch 'sb/clone-shallow-passthru' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:12 +0000 (10:44 -0700)

Merge branch 'sb/clone-shallow-passthru' into maint

Fix an unintended regression in v2.9 that breaks "clone --depth"
that recurses down to submodules by forcing the submodules to also
be cloned shallowly, which many server instances that host upstream
of the submodules are not prepared for.

* sb/clone-shallow-passthru:
clone: do not let --depth imply --shallow-submodules

Merge branch 'mg/signature-doc' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:11 +0000 (10:44 -0700)

Merge branch 'mg/signature-doc' into maint

Formats of the various data (and how to validate them) where we use
GPG signature have been documented.

* mg/signature-doc:
Documentation/technical: signed merge tag format
Documentation/technical: signed commit format
Documentation/technical: signed tag format
Documentation/technical: describe signature formats

Merge branch 'jk/bisect-show-tree' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:11 +0000 (10:44 -0700)

Merge branch 'jk/bisect-show-tree' into maint

"git bisect" makes an internal call to "git diff-tree" when
bisection finds the culprit, but this call did not initialize the
data structure to pass to the diff-tree API correctly.

* jk/bisect-show-tree:
bisect: always call setup_revisions after init_revisions

Merge branch 'km/fetch-do-not-free-remote-name' into... Junio C Hamano Mon, 11 Jul 2016 17:44:10 +0000 (10:44 -0700)

Merge branch 'km/fetch-do-not-free-remote-name' into maint

The ownership rule for the piece of memory that hold references to
be fetched in "git fetch" was screwy, which has been cleaned up.

* km/fetch-do-not-free-remote-name:
builtin/fetch.c: don't free remote->name after fetch

Merge branch 'nd/graph-width-padded' into maintJunio C Hamano Mon, 11 Jul 2016 17:44:09 +0000 (10:44 -0700)

Merge branch 'nd/graph-width-padded' into maint

"log --graph --format=" learned that "%>|(N)" specifies the width
relative to the terminal's left edge, not relative to the area to
draw text that is to the right of the ancestry-graph section. It
also now accepts negative N that means the column limit is relative
to the right border.

* nd/graph-width-padded:
pretty.c: support <direction>|(<negative number>) forms
pretty: pass graph width to pretty formatting for use in '%>|(N)'

Merge branch 'jk/add-i-diff-compact-heuristics' into... Junio C Hamano Mon, 11 Jul 2016 17:44:09 +0000 (10:44 -0700)

Merge branch 'jk/add-i-diff-compact-heuristics' into maint

"git add -i/-p" learned to honor diff.compactionHeuristic
experimental knob, so that the user can work on the same hunk split
as "git diff" output.

* jk/add-i-diff-compact-heuristics:
add--interactive: respect diff.compactionHeuristic

Fourth batch of topics for 2.10Junio C Hamano Mon, 11 Jul 2016 17:36:29 +0000 (10:36 -0700)

Fourth batch of topics for 2.10

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

Merge branch 'master' of git://bogomips.org/git-svnJunio C Hamano Mon, 11 Jul 2016 17:31:52 +0000 (10:31 -0700)

Merge branch 'master' of git://bogomips.org/git-svn

* 'master' of git://bogomips.org/git-svn:
git-svn: warn instead of dying when commit data is missing
git-svn: clone: Fail on missing url argument

Merge branch 'js/color-on-windows-comment'Junio C Hamano Mon, 11 Jul 2016 17:31:09 +0000 (10:31 -0700)

Merge branch 'js/color-on-windows-comment'

For a long time, we carried an in-code comment that said our
colored output would work only when we use fprintf/fputs on
Windows, which no longer is the case for the past few years.

* js/color-on-windows-comment:
color.h: remove obsolete comment about limitations on Windows

Merge branch 'mj/log-show-signature-conf'Junio C Hamano Mon, 11 Jul 2016 17:31:08 +0000 (10:31 -0700)

Merge branch 'mj/log-show-signature-conf'

"git log" learns log.showSignature configuration variable, and a
command line option "--no-show-signature" to countermand it.

* mj/log-show-signature-conf:
log: add log.showSignature configuration variable
log: add "--no-show-signature" command line option
t4202: refactor test

Merge branch 'js/find-commit-subject-ignore-leading... Junio C Hamano Mon, 11 Jul 2016 17:31:07 +0000 (10:31 -0700)

Merge branch 'js/find-commit-subject-ignore-leading-blanks'

A helper function that takes the contents of a commit object and
finds its subject line did not ignore leading blank lines, as is
commonly done by other codepaths. Make it ignore leading blank
lines to match.

* js/find-commit-subject-ignore-leading-blanks:
reset --hard: skip blank lines when reporting the commit subject
sequencer: use skip_blank_lines() to find the commit subject
commit -C: skip blank lines at the beginning of the message
commit.c: make find_commit_subject() more robust
pretty: make the skip_blank_lines() function public

Merge branch 'jn/preformatted-doc-url'Junio C Hamano Mon, 11 Jul 2016 17:31:06 +0000 (10:31 -0700)

Merge branch 'jn/preformatted-doc-url'

The top level documentation "git help git" still pointed at the
documentation set hosted at now-defunct google-code repository.
Update it to point to https://git.github.io/htmldocs/git.html
instead.

* jn/preformatted-doc-url:
doc: git-htmldocs.googlecode.com is no more

Merge branch 'jk/perf-any-version'Junio C Hamano Mon, 11 Jul 2016 17:31:06 +0000 (10:31 -0700)

Merge branch 'jk/perf-any-version'

Allow t/perf framework to use the features from the most recent
version of Git even when testing an older installed version.

* jk/perf-any-version:
p4211: explicitly disable renames in no-rename test
t/perf: fix regression in testing older versions of git

Merge branch 'jk/ansi-color'Junio C Hamano Mon, 11 Jul 2016 17:31:05 +0000 (10:31 -0700)

Merge branch 'jk/ansi-color'

The output coloring scheme learned two new attributes, italic and
strike, in addition to existing bold, reverse, etc.

* jk/ansi-color:
color: support strike-through attribute
color: support "italic" attribute
color: allow "no-" for negating attributes
color: refactor parse_attr
add skip_prefix_mem helper
doc: refactor description of color format
color: fix max-size comment

Merge branch 'sb/submodule-clone-retry'Junio C Hamano Mon, 11 Jul 2016 17:31:04 +0000 (10:31 -0700)

Merge branch 'sb/submodule-clone-retry'

"git submodule update" that drives many "git clone" could
eventually hit flaky servers/network conditions on one of the
submodules; the command learned to retry the attempt.

* sb/submodule-clone-retry:
submodule update: continue when a clone fails
submodule--helper: initial clone learns retry logic

Merge branch 'jc/send-email-skip-backup'Junio C Hamano Mon, 11 Jul 2016 17:31:04 +0000 (10:31 -0700)

Merge branch 'jc/send-email-skip-backup'

A careless invocation of "git send-email directory/" after editing
0001-change.patch with an editor often ends up sending both
0001-change.patch and its backup file, 0001-change.patch~, causing
embarrassment and a minor confusion. Detect such an input and
offer to skip the backup files when sending the patches out.

* jc/send-email-skip-backup:
send-email: detect and offer to skip backup files

hoist out handle_nonblock function for xread and xwriteEric Wong Sun, 10 Jul 2016 08:20:46 +0000 (08:20 +0000)

hoist out handle_nonblock function for xread and xwrite

At least for me, this improves the readability of xread and
xwrite; hopefully allowing missing "continue" statements to
be spotted more easily.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-svn: warn instead of dying when commit data is... Eric Wong Sat, 2 Jul 2016 10:33:18 +0000 (10:33 +0000)

git-svn: warn instead of dying when commit data is missing

It is possible to have refs globbed by git-svn which stores data
purely in git; gently skip those instead of dying and assuming
user error.

ref: http://mid.gmane.org/CALi1mtdtNF_GtzyPTbfb7N51wwxsFY7zm8hsgwxr3tHcZZboyg@mail.gmail.com

Suggested-by: Jacob Godserv <jacobgodserv@gmail.com>
Cc: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree.c: find_worktree() search by path suffixNguyễn Thái Ngọc Duy Mon, 13 Jun 2016 12:18:26 +0000 (19:18 +0700)

worktree.c: find_worktree() search by path suffix

This allows the user to do something like "worktree lock foo" or
"worktree lock to/foo" instead of "worktree lock /long/path/to/foo" if
it's unambiguous.

With completion support it could be quite convenient. While this base
name search can be done in the same worktree iteration loop, the code is
split into a separate function for clarity.

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

worktree: add "unlock" commandNguyễn Thái Ngọc Duy Mon, 13 Jun 2016 12:18:25 +0000 (19:18 +0700)

worktree: add "unlock" command

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

worktree: add "lock" commandNguyễn Thái Ngọc Duy Mon, 13 Jun 2016 12:18:24 +0000 (19:18 +0700)

worktree: add "lock" command

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

git-p4: place temporary refs used for branch import... Lars Schneider Wed, 29 Jun 2016 07:35:27 +0000 (09:35 +0200)

git-p4: place temporary refs used for branch import under refs/git-p4-tmp

Git-P4 used to place temporary refs under "git-p4-tmp". Since 3da1f37
Git checks that all refs are placed under "refs". Instruct Git-P4 to
place temporary refs under "refs/git-p4-tmp". There are no backwards
compatibility considerations as these refs are transient.

Use "git show-ref --verify" to check the (non-)existience of the refs
instead of file checks assuming the file-based ref backend.

All refs under "refs" are shared across all worktrees. This is not
desired for temporary Git-P4 refs and will be adressed in a later patch.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Reviewed-by: Vitor Antunes <vitor.hda@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am: counteract gender biasJohannes Schindelin Fri, 8 Jul 2016 07:17:34 +0000 (09:17 +0200)

am: counteract gender bias

Since 47f0b6d5 (Fall back to three-way merge when applying a patch.,
2005-10-06), i.e. for almost 11 years already, we used a male form
to describe "the other tree".

While it was unintended, this gave the erroneous impression as if
the Git developers thought of users as male, and were unaware of the
important role in software development played by female actors such
as Ada Lovelace, Grace Hopper and Margaret Hamilton. In fact, the
first professional software developers were all female.

Let's change those unfortunate references to the gender neutral
"their tree". Doing so also makes the fallback_merge_recursive(),
which is an oddball, more in line with the other parts of the system
where we contrast what we have vs what we obtain from others by
saying "ours" vs "theirs". This inconsistency was also unintended.

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

commit.c: remove print_commit_list()Junio C Hamano Fri, 8 Jul 2016 17:09:28 +0000 (10:09 -0700)

commit.c: remove print_commit_list()

The helper function tries to offer a way to conveniently show the
last one differently from others, presumably to allow you to say
something like

A, B, and C.

while iterating over a list that has these three elements.

However, there is only one caller, and it passes the same format
string "%s\n" for both the last one and the other ones. Retire the
helper function and update the caller with a simplified version.

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

avoid using sha1_to_hex output as printf formatJeff King Fri, 8 Jul 2016 10:35:15 +0000 (06:35 -0400)

avoid using sha1_to_hex output as printf format

We know that it should not contain any percent-signs, but
it's a good habit not to feed non-literals to printf
formatters.

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

walker: let walker_say take arbitrary formatsJeff King Fri, 8 Jul 2016 09:25:23 +0000 (05:25 -0400)

walker: let walker_say take arbitrary formats

We take a printf-style format and a single "char *"
parameter, and the format must therefore have at most one
"%s" in it. Besides being error-prone (and tickling
-Wformat-nonliteral), this is unnecessarily restrictive. We
can just provide the usual varargs interface.

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

branch: use write_file_buf instead of write_fileJeff King Fri, 8 Jul 2016 09:16:53 +0000 (05:16 -0400)

branch: use write_file_buf instead of write_file

If we already have a strbuf, then using write_file_buf is a
little nicer to read (no wondering whether "%s" will eat
your NULs), and it's more efficient (no extra formatting
step).

We don't care about the newline magic of write_file(), as we
have our own multi-line content.

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

use write_file_buf where applicableJeff King Fri, 8 Jul 2016 09:12:55 +0000 (05:12 -0400)

use write_file_buf where applicable

There are several places where we open a file, write some
content from a strbuf, and close it. These can be simplified
with write_file_buf(). As a bonus, many of these did not
catch write problems at close() time.

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