gitweb.git
Merge branch 'ks/rebase-i-abbrev'Junio C Hamano Tue, 17 Feb 2015 18:15:18 +0000 (10:15 -0800)

Merge branch 'ks/rebase-i-abbrev'

The insn sheet "git rebase -i" creates did not fully honor
core.abbrev settings.

* ks/rebase-i-abbrev:
rebase -i: use full object name internally throughout the script

Merge branch 'mh/deref-symref-over-helper-transport'Junio C Hamano Tue, 17 Feb 2015 18:15:17 +0000 (10:15 -0800)

Merge branch 'mh/deref-symref-over-helper-transport'

"git fetch" over a remote-helper that cannot respond to "list"
command could not fetch from a symbolic reference e.g. HEAD.

* mh/deref-symref-over-helper-transport:
transport-helper: do not request symbolic refs to remote helpers

git-send-email.perl: support no- prefix with older... Kyle J. McKay Sat, 31 Jan 2015 02:40:17 +0000 (18:40 -0800)

git-send-email.perl: support no- prefix with older GetOptions

Only Perl version 5.8.0 or later is required, but that comes with
an older Getopt::Long (2.32) that does not support the 'no-'
prefix. Support for that was added in Getopt::Long version 2.33.

Since the help only mentions the 'no-' prefix and not the 'no'
prefix, add explicit support for the 'no-' prefix to support
older GetOptions versions.

Reported-by: Tom G. Christensen <tgc@statsbiblioteket.dk>
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Tested-by: Tom G. Christensen <tgc@statsbiblioteket.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git_push_config: drop cargo-culted wt_status pointerJeff King Mon, 16 Feb 2015 05:46:30 +0000 (00:46 -0500)

git_push_config: drop cargo-culted wt_status pointer

The push config callback does not expect any incoming data
via the void pointer. And if it did, it would certainly not
be a "struct wt_status". This probably got picked up
accidentally in b945901 (push: heed user.signingkey for
signed pushes, 2014-10-22), which copied the template for
the config callback from builtin/commit.c.

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

test-lib.sh: set prerequisite SANITY by testing what... Torsten Bögershausen Tue, 27 Jan 2015 15:39:01 +0000 (16:39 +0100)

test-lib.sh: set prerequisite SANITY by testing what we really need

What we wanted out of the SANITY precondition is that the filesystem
behaves sensibly with permission bits settings.

- You should not be able to remove a file in a read-only directory,

- You should not be able to tell if a file in a directory exists if
the directory lacks read or execute permission bits.

We used to cheat by approximating that condition with "is the /
writable?" test and/or "are we running as root?" test. Neither test
is sufficient or appropriate in environments like Cygwin.

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

t4008: modernise styleJunio C Hamano Sun, 15 Feb 2015 22:21:04 +0000 (14:21 -0800)

t4008: modernise style

Update this ancient test script to a more modern style in which the
expected result is prepared inside the body of the test that uses
it. Also, instead of using $tree, a shell variable, throughout the
test script, create a tag that points at it, to make it easier to
manually debug the test script in its trash directory.

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

t/diff-lib: check exact object names in compare_diff_rawJunio C Hamano Sun, 15 Feb 2015 21:47:36 +0000 (13:47 -0800)

t/diff-lib: check exact object names in compare_diff_raw

The "sanitize" helper wanted to strip the similarity and
dissimilarity scores when making comparison, but it was
stripping away the object names as well.

While we do not want to require the exact object names the tests
expect to be maintained, as it would be seen as an extra burden,
this would have prevented us catching a silly bug such as showing
non 0{40} object name on the preimage side of an addition or on the
postimage side of a deletion, because all [0-9a-f]{40} strings were
considered equally OK.

In the longer term, when a test only wants to see the status of the
change without having to worry about object names, it should be
rewritten not to inspect the raw format.

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

tests: do not borrow from COPYING and README from the... Junio C Hamano Sun, 15 Feb 2015 21:44:24 +0000 (13:44 -0800)

tests: do not borrow from COPYING and README from the real source

These two files have been modified since the tests started using
as test input, making the exact object names they expect to be
different from what actually happens in the trash repository they
use to run tests.

Instead, take a snapshot of these two files and keep them in
t/diff-lib/ so that we can update the real ones without having to
worry about breaking tests.

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

t4010: correct expected object namesJunio C Hamano Sun, 15 Feb 2015 21:35:19 +0000 (13:35 -0800)

t4010: correct expected object names

The output the test expects is bogus.

It was left unnoticed only because compare_diff_raw, which only
cares about the add/delete/rename/copy was used to check the result.

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

t9300: correct expected object namesJunio C Hamano Sun, 15 Feb 2015 21:35:19 +0000 (13:35 -0800)

t9300: correct expected object names

The output the test #36 expects is bogus. There are no blob objects
whose names are 36a590... or 046d037... when this test was run.

It was left unnoticed only because compare_diff_raw, which only
cares about the add/delete/rename/copy was used to check the result.

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

t4008: correct stale commentsJunio C Hamano Sun, 15 Feb 2015 20:42:59 +0000 (12:42 -0800)

t4008: correct stale comments

A complete rewrite of a single file was originally designed to be
expressed as a deletion immediately followed by a creation of the
same file, and the comments in the test updated here were written to
reflect that design decision made in f345b0a0 (Add -B flag to diff-*
brothers., 2005-05-30). However, we later realized that a complete
rewrite is merely how a textual diff should be represented at
366175ef (Rework -B output., 2005-06-19), and updated the actual
tests. But we forgot to update the introductory text while doing
so.

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

hex.c: reduce memory footprint of sha1_to_hex static... Stefan Beller Fri, 13 Feb 2015 21:18:49 +0000 (13:18 -0800)

hex.c: reduce memory footprint of sha1_to_hex static buffers

41 bytes is the exact number of bytes needed for having the returned
hex string represented. 50 seems to be an arbitrary number, such
that there are no benefits from alignment to certain address boundaries.

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

do not include the same header twiceДилян Палаузов Fri, 13 Feb 2015 14:47:39 +0000 (14:47 +0000)

do not include the same header twice

A few files include the same header file directly more than once.

As all these headers protect themselves against repeated inclusion
by the "#ifndef FOO_H / #define FOO_H / ... / #endif" idiom, leave
only the first inclusion and remove the later inclusion as a no-op
clean-up.

Signed-off-by: Дилян Палаузов <git-dpa@aegee.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

send-email: ask confirmation if given encoding name... Junio C Hamano Fri, 13 Feb 2015 20:20:25 +0000 (12:20 -0800)

send-email: ask confirmation if given encoding name is very short

Sometimes people respond "y<ENTER>" (or "yes<ENTER>") when asked
this question:

Which 8bit encoding should I declare [UTF-8]?

We already have a mechanism to avoid accepting a mistyped e-mail
address (we ask to confirm when the given address lacks "@" in it);
reuse it to trigger the same confirmation when given a very short
answer. As a typical charset name is probably at least 4 chars or
longer (e.g. "UTF8" spelled without the dash, or "Big5"), this would
prevent such a mistake.

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

transport-helper: ask the helper to set the same option... Mike Hommey Fri, 13 Feb 2015 05:24:46 +0000 (14:24 +0900)

transport-helper: ask the helper to set the same options for import as for fetch

A remote helper is currently only told about the 'check-connectivity',
'cloning', and 'update-shallow' options when it supports the 'fetch'
command, but not when it supports 'import' instead.

This is especially important for the 'cloning' option, because it
means a remote helper that only supports 'import' can't distinguish
between a clone and a pull besides doing some assumptions from the
git directory state.

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

transport-helper: ask the helper to set progress and... Mike Hommey Fri, 13 Feb 2015 05:24:45 +0000 (14:24 +0900)

transport-helper: ask the helper to set progress and verbosity options after asking for its capabilities

Currently, a remote helper is only told about the progress and verbosity
options for the 'fetch' and 'push' commands. This means a remote helper
that implements 'import' and 'export' can never know the user requested
progress or verbosity (or lack thereof) through the command line.

Telling the remote helper about those options after asking for its
capabilities ensures it can act accordingly for all commands.

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

transport-helper: fix typo in error message when -... Mike Hommey Thu, 12 Feb 2015 10:10:01 +0000 (19:10 +0900)

transport-helper: fix typo in error message when --signed is not supported

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

refs: remove the gap in the REF_* constant valuesMichael Haggerty Thu, 12 Feb 2015 11:12:13 +0000 (12:12 +0100)

refs: remove the gap in the REF_* constant values

There is no reason to "reserve" a gap between the public and private
flags values.

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

refs: move REF_DELETING to refs.cMichael Haggerty Thu, 12 Feb 2015 11:12:12 +0000 (12:12 +0100)

refs: move REF_DELETING to refs.c

It is only used internally now. Document it a little bit better, too.

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

xread/xwrite: clip MAX_IO_SIZE to SSIZE_MAXJunio C Hamano Wed, 11 Feb 2015 21:13:10 +0000 (13:13 -0800)

xread/xwrite: clip MAX_IO_SIZE to SSIZE_MAX

Since 0b6806b9 (xread, xwrite: limit size of IO to 8MB, 2013-08-20),
we chomp our calls to read(2) and write(2) into chunks of
MAX_IO_SIZE bytes (8 MiB), because a large IO results in a bad
latency when the program needs to be killed. This also brought our
IO below SSIZE_MAX, which is a limit POSIX allows read(2) and
write(2) to fail when the IO size exceeds it, for OS X, where a
problem was originally reported.

However, there are other systems that define SSIZE_MAX smaller than
our default, and feeding 8 MiB to underlying read(2)/write(2) would
fail. Make sure we clip our calls to the lower limit as well.

Reported-by: Joachim Schmitz <jojo@schmitz-digital.de>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Post 2.3 cycle (batch #1)Junio C Hamano Wed, 11 Feb 2015 21:54:03 +0000 (13:54 -0800)

Post 2.3 cycle (batch #1)

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

Merge branch 'ah/usage-strings'Junio C Hamano Wed, 11 Feb 2015 21:44:19 +0000 (13:44 -0800)

Merge branch 'ah/usage-strings'

* ah/usage-strings:
standardize usage info string format

Merge branch 'jc/pretty-format-doc'Junio C Hamano Wed, 11 Feb 2015 21:44:16 +0000 (13:44 -0800)

Merge branch 'jc/pretty-format-doc'

* jc/pretty-format-doc:
"log --pretty" documentation: do not forget "tformat:"

Merge branch 'jc/unused-symbols'Junio C Hamano Wed, 11 Feb 2015 21:44:07 +0000 (13:44 -0800)

Merge branch 'jc/unused-symbols'

Mark file-local symbols as "static", and drop functions that nobody
uses.

* jc/unused-symbols:
shallow.c: make check_shallow_file_for_update() static
remote.c: make clear_cas_option() static
urlmatch.c: make match_urls() static
revision.c: make save_parents() and free_saved_parents() static
line-log.c: make line_log_data_init() static
pack-bitmap.c: make pack_bitmap_filename() static
prompt.c: remove git_getpass() nobody uses
http.c: make finish_active_slot() and handle_curl_result() static

Merge branch 'jc/push-to-checkout'Junio C Hamano Wed, 11 Feb 2015 21:43:56 +0000 (13:43 -0800)

Merge branch 'jc/push-to-checkout'

Extending the js/push-to-deploy topic, the behaviour of "git push"
when updating the working tree and the index with an update to the
branch that is checked out can be tweaked by push-to-checkout hook.

* jc/push-to-checkout:
receive-pack: support push-to-checkout hook
receive-pack: refactor updateInstead codepath

Merge branch 'sb/atomic-push'Junio C Hamano Wed, 11 Feb 2015 21:43:50 +0000 (13:43 -0800)

Merge branch 'sb/atomic-push'

"git push" has been taught a "--atomic" option that makes push to
update more than one ref an "all-or-none" affair.

* sb/atomic-push:
Document receive.advertiseatomic
t5543-atomic-push.sh: add basic tests for atomic pushes
push.c: add an --atomic argument
send-pack.c: add --atomic command line argument
send-pack: rename ref_update_to_be_sent to check_to_send_update
receive-pack.c: negotiate atomic push support
receive-pack.c: add execute_commands_atomic function
receive-pack.c: move transaction handling in a central place
receive-pack.c: move iterating over all commands outside execute_commands
receive-pack.c: die instead of error in case of possible future bug
receive-pack.c: shorten the execute_commands loop over all commands

Merge branch 'mh/reflog-expire'Junio C Hamano Wed, 11 Feb 2015 21:43:38 +0000 (13:43 -0800)

Merge branch 'mh/reflog-expire'

Restructure "reflog expire" to fit the reflogs better with the
recently updated ref API.

Looked reasonable (except that some shortlog entries stood out like
a sore thumb).

* mh/reflog-expire: (24 commits)
refs.c: let fprintf handle the formatting
refs.c: don't expose the internal struct ref_lock in the header file
lock_any_ref_for_update(): inline function
refs.c: remove unlock_ref/close_ref/commit_ref from the refs api
reflog_expire(): new function in the reference API
expire_reflog(): treat the policy callback data as opaque
Move newlog and last_kept_sha1 to "struct expire_reflog_cb"
expire_reflog(): move rewrite to flags argument
expire_reflog(): move verbose to flags argument
expire_reflog(): pass flags through to expire_reflog_ent()
struct expire_reflog_cb: a new callback data type
Rename expire_reflog_cb to expire_reflog_policy_cb
expire_reflog(): move updateref to flags argument
expire_reflog(): move dry_run to flags argument
expire_reflog(): add a "flags" argument
expire_reflog(): extract two policy-related functions
Extract function should_expire_reflog_ent()
expire_reflog(): use a lock_file for rewriting the reflog file
expire_reflog(): return early if the reference has no reflog
expire_reflog(): rename "ref" parameter to "refname"
...

Merge branch 'cj/log-invert-grep'Junio C Hamano Wed, 11 Feb 2015 21:42:39 +0000 (13:42 -0800)

Merge branch 'cj/log-invert-grep'

"git log --invert-grep --grep=WIP" will show only commits that do
not have the string "WIP" in their messages.

* cj/log-invert-grep:
log: teach --invert-grep option

Merge branch 'km/gettext-n'Junio C Hamano Wed, 11 Feb 2015 21:42:00 +0000 (13:42 -0800)

Merge branch 'km/gettext-n'

* km/gettext-n:
gettext.h: add parentheses around N_ expansion if supported

Merge branch 'bc/http-fallback-to-password-after-krb... Junio C Hamano Wed, 11 Feb 2015 21:41:55 +0000 (13:41 -0800)

Merge branch 'bc/http-fallback-to-password-after-krb-fails'

After attempting and failing a password-less authentication
(e.g. kerberos), libcURL refuses to fall back to password based
Basic authentication without a bit of help/encouragement.

* bc/http-fallback-to-password-after-krb-fails:
remote-curl: fall back to Basic auth if Negotiate fails

Merge branch 'dk/format-patch-ignore-diff-submodule'Junio C Hamano Wed, 11 Feb 2015 21:41:51 +0000 (13:41 -0800)

Merge branch 'dk/format-patch-ignore-diff-submodule'

Setting diff.submodule to 'log' made "git format-patch" produce
broken patches.

* dk/format-patch-ignore-diff-submodule:
format-patch: ignore diff.submodule setting
t4255: test am submodule with diff.submodule

Merge branch 'jn/rerere-fail-on-auto-update-failure'Junio C Hamano Wed, 11 Feb 2015 21:41:44 +0000 (13:41 -0800)

Merge branch 'jn/rerere-fail-on-auto-update-failure'

"git rerere" (invoked internally from many mergy operations) did
not correctly signal errors when told to update the working tree
files and failed to do so for whatever reason.

* jn/rerere-fail-on-auto-update-failure:
rerere: error out on autoupdate failure

Merge branch 'jk/blame-commit-label'Junio C Hamano Wed, 11 Feb 2015 21:39:50 +0000 (13:39 -0800)

Merge branch 'jk/blame-commit-label'

"git blame HEAD -- missing" failed to correctly say "HEAD" when it
tried to say "No such path 'missing' in HEAD".

* jk/blame-commit-label:
blame.c: fix garbled error message
use xstrdup_or_null to replace ternary conditionals
builtin/commit.c: use xstrdup_or_null instead of envdup
builtin/apply.c: use xstrdup_or_null instead of null_strdup
git-compat-util: add xstrdup_or_null helper

Merge branch 'ld/p4-submit-hint'Junio C Hamano Wed, 11 Feb 2015 21:39:44 +0000 (13:39 -0800)

Merge branch 'ld/p4-submit-hint'

* ld/p4-submit-hint:
git-p4: correct --prepare-p4-only instructions

Merge branch 'ld/p4-exclude-in-sync'Junio C Hamano Wed, 11 Feb 2015 21:38:41 +0000 (13:38 -0800)

Merge branch 'ld/p4-exclude-in-sync'

Like the "clone" subcommand, allow excluding subdirectories in the
"sync" subcommand.

* ld/p4-exclude-in-sync:
git-p4: support excluding paths on sync

git-p4: support excluding paths on syncLuke Diamand Sat, 17 Jan 2015 20:56:38 +0000 (20:56 +0000)

git-p4: support excluding paths on sync

The clone subcommand has long had support for excluding
subdirectories, but sync has not. This is a nuisance,
since as soon as you do a sync, any changed files that
were initially excluded start showing up.

Move the "exclude" command-line option into the parent
class; the actual behavior was already present there so
it simply had to be exposed.

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

Merge branch 'jc/coding-guidelines'Junio C Hamano Wed, 11 Feb 2015 21:37:42 +0000 (13:37 -0800)

Merge branch 'jc/coding-guidelines'

* jc/coding-guidelines:
CodingGuidelines: clarify C #include rules

Merge branch 'ak/typofixes'Junio C Hamano Wed, 11 Feb 2015 21:37:38 +0000 (13:37 -0800)

Merge branch 'ak/typofixes'

* ak/typofixes:
t/lib-terminal.sh: fix typo
pack-bitmap: fix typo

merge-file: correctly open files when in a subdirAleksander Boruch-Gruszecki Sun, 8 Feb 2015 16:53:53 +0000 (17:53 +0100)

merge-file: correctly open files when in a subdir

run_setup_gently() is called before merge-file. This may result in changing
current working directory, which wasn't taken into account when opening a file
for writing.

Fix by prepending the passed prefix. Previous var is left so that error
messages keep referring to the file from the user's working directory
perspective.

Signed-off-by: Aleksander Boruch-Gruszecki <aleksander.boruchgruszecki@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: do not touch a file beyond a symbolic linkJunio C Hamano Thu, 29 Jan 2015 20:41:22 +0000 (12:41 -0800)

apply: do not touch a file beyond a symbolic link

Because Git tracks symbolic links as symbolic links, a path that
has a symbolic link in its leading part (e.g. path/to/dir/file,
where path/to/dir is a symbolic link to somewhere else, be it
inside or outside the working tree) can never appear in a patch
that validly applies, unless the same patch first removes the
symbolic link to allow a directory to be created there.

Detect and reject such a patch.

Things to note:

- Unfortunately, we cannot reuse the has_symlink_leading_path()
from dir.c, as that is only about the working tree, but "git
apply" can be told to apply the patch only to the index or to
both the index and to the working tree.

- We cannot directly use has_symlink_leading_path() even when we
are applying only to the working tree, as an early patch of a
valid input may remove a symbolic link path/to/dir and then a
later patch of the input may create a path path/to/dir/file, but
"git apply" first checks the input without touching either the
index or the working tree. The leading symbolic link check must
be done on the interim result we compute in-core (i.e. after the
first patch, there is no path/to/dir symbolic link and it is
perfectly valid to create path/to/dir/file).

Similarly, when an input creates a symbolic link path/to/dir and
then creates a file path/to/dir/file, we need to flag it as an
error without actually creating path/to/dir symbolic link in the
filesystem.

Instead, for any patch in the input that leaves a path (i.e. a non
deletion) in the result, we check all leading paths against the
resulting tree that the patch would create by inspecting all the
patches in the input and then the target of patch application
(either the index or the working tree).

This way, we catch a mischief or a mistake to add a symbolic link
path/to/dir and a file path/to/dir/file at the same time, while
allowing a valid patch that removes a symbolic link path/to/dir and
then adds a file path/to/dir/file.

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

apply: do not read from beyond a symbolic linkJunio C Hamano Fri, 30 Jan 2015 23:34:13 +0000 (15:34 -0800)

apply: do not read from beyond a symbolic link

We should reject a patch, whether it renames/copies dir/file to
elsewhere with or without modificiation, or updates dir/file in
place, if "dir/" part is actually a symbolic link to elsewhere,
by making sure that the code to read the preimage does not read
from a path that is beyond a symbolic link.

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

apply: do not read from the filesystem under --indexJunio C Hamano Fri, 30 Jan 2015 23:15:59 +0000 (15:15 -0800)

apply: do not read from the filesystem under --index

We currently read the preimage to apply a patch from the index only
when the --cached option is given. Do so also when the command is
running under the --index option. With --index, the index entry and
the working tree file for a path that is involved in a patch must be
identical, so this should not affect the result, but by reading from
the index, we will get the protection to avoid reading an unintended
path beyond a symbolic link automatically.

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

apply: reject input that touches outside the working... Junio C Hamano Thu, 29 Jan 2015 23:35:24 +0000 (15:35 -0800)

apply: reject input that touches outside the working area

By default, a patch that affects outside the working area (either a
Git controlled working tree, or the current working directory when
"git apply" is used as a replacement of GNU patch) is rejected as a
mistake (or a mischief). Git itself does not create such a patch,
unless the user bends over backwards and specifies a non-standard
prefix to "git diff" and friends.

When `git apply` is used as a "better GNU patch", the user can pass
the `--unsafe-paths` option to override this safety check. This
option has no effect when `--index` or `--cached` is in use.

The new test was stolen from Jeff King with slight enhancements.
Note that a few new tests for touching outside the working area by
following a symbolic link are still expected to fail at this step,
but will be fixed in later steps.

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

fast-import: avoid running end_packfile recursivelyJeff King Tue, 10 Feb 2015 01:07:19 +0000 (20:07 -0500)

fast-import: avoid running end_packfile recursively

When an import has finished, we run end_packfile() to
finalize the data and move the packfile into place. If this
process fails, we call die() and end up in our die_nicely()
handler. Which unfortunately includes running end_packfile
to save any progress we made. We enter the function again,
and start operating on the pack_data struct while it is in
an inconsistent state, leading to a segfault.

One way to trigger this is to simply start two identical
fast-imports at the same time. They will both create the
same packfiles, which will then try to create identically
named ".keep" files. One will win the race, and the other
will die(), and end up with the segfault.

Since 3c078b9, we already reset the pack_data pointer to
NULL at the end of end_packfile. That covers the case of us
calling die() right after end_packfile, before we have
reinitialized the pack_data pointer. This new problem is
quite similar, except that we are worried about calling
die() _during_ end_packfile, not right after. Ideally we
would simply set pack_data to NULL as soon as we enter the
function, and operate on a copy of the pointer.

Unfortunately, it is not so easy. pack_data is a global, and
end_packfile calls into other functions which operate on the
global directly. We would have to teach each of these to
take an argument, and there is no guarantee that we would
catch all of the spots.

Instead, we can simply use a static flag to avoid
recursively entering the function. This is a little less
elegant, but it's short and fool-proof.

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

builtin/blame: destroy initialized commit_info onlyEric Sunshine Mon, 9 Feb 2015 21:28:07 +0000 (16:28 -0500)

builtin/blame: destroy initialized commit_info only

Since ea02ffa3 (mailmap: simplify map_user() interface, 2013-01-05),
find_alignment() has been invoking commit_info_destroy() on an
uninitialized auto 'struct commit_info' (when METAINFO_SHOWN is not
set). commit_info_destroy() calls strbuf_release() for each
'commit_info' strbuf member, which randomly invokes free() on
whatever random stack value happens to reside in strbuf.buf, thus
leading to periodic crashes.

Reported-by: Dilyan Palauzov <dilyan.palauzov@aegee.org>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'sb/atomic-push' into mh/ref-trans-value... Junio C Hamano Mon, 9 Feb 2015 22:37:17 +0000 (14:37 -0800)

Merge branch 'sb/atomic-push' into mh/ref-trans-value-check

* sb/atomic-push:
Document receive.advertiseatomic
t5543-atomic-push.sh: add basic tests for atomic pushes
push.c: add an --atomic argument
send-pack.c: add --atomic command line argument
send-pack: rename ref_update_to_be_sent to check_to_send_update
receive-pack.c: negotiate atomic push support
receive-pack.c: add execute_commands_atomic function
receive-pack.c: move transaction handling in a central place
receive-pack.c: move iterating over all commands outside execute_commands
receive-pack.c: die instead of error in case of possible future bug
receive-pack.c: shorten the execute_commands loop over all commands

Merge branch 'mh/reflog-expire' into mh/ref-trans-value... Junio C Hamano Mon, 9 Feb 2015 22:37:01 +0000 (14:37 -0800)

Merge branch 'mh/reflog-expire' into mh/ref-trans-value-check

* mh/reflog-expire: (24 commits)
refs.c: let fprintf handle the formatting
refs.c: don't expose the internal struct ref_lock in the header file
lock_any_ref_for_update(): inline function
refs.c: remove unlock_ref/close_ref/commit_ref from the refs api
reflog_expire(): new function in the reference API
expire_reflog(): treat the policy callback data as opaque
Move newlog and last_kept_sha1 to "struct expire_reflog_cb"
expire_reflog(): move rewrite to flags argument
expire_reflog(): move verbose to flags argument
expire_reflog(): pass flags through to expire_reflog_ent()
struct expire_reflog_cb: a new callback data type
Rename expire_reflog_cb to expire_reflog_policy_cb
expire_reflog(): move updateref to flags argument
expire_reflog(): move dry_run to flags argument
expire_reflog(): add a "flags" argument
expire_reflog(): extract two policy-related functions
Extract function should_expire_reflog_ent()
expire_reflog(): use a lock_file for rewriting the reflog file
expire_reflog(): return early if the reference has no reflog
expire_reflog(): rename "ref" parameter to "refname"
...

sha1_file: fix iterating loose alternate objectsJonathon Mah Mon, 9 Feb 2015 01:15:39 +0000 (20:15 -0500)

sha1_file: fix iterating loose alternate objects

The string in 'base' contains a path suffix to a specific object;
when its value is used, the suffix must either be filled (as in
stat_sha1_file, open_sha1_file, check_and_freshen_nonlocal) or
cleared (as in prepare_packed_git) to avoid junk at the end.

660c889e (sha1_file: add for_each iterators for loose and packed
objects, 2014-10-15) introduced loose_from_alt_odb(), but this did
neither and treated 'base' as a complete path to the "base" object
directory, instead of a pointer to the "base" of the full path
string.

The trailing path after 'base' is still initialized to NUL, hiding
the bug in some common cases. Additionally the descendent
for_each_file_in_obj_subdir() function swallows ENOENT, so an error
only shows if the alternate's path was last filled with a valid
object (where statting /path/to/existing/00/0bjectfile/00 fails).

Signed-off-by: Jonathon Mah <me@JonathonMah.com>
Helped-by: Kyle J. McKay <mackyle@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for_each_loose_file_in_objdir: take an optional strbuf... Jeff King Mon, 9 Feb 2015 01:13:22 +0000 (20:13 -0500)

for_each_loose_file_in_objdir: take an optional strbuf path

We feed a root "objdir" path to this iterator function,
which then copies the result into a strbuf, so that it can
repeatedly append the object sub-directories to it. Let's
make it easy for callers to just pass us a strbuf in the
first place.

We leave the original interface as a convenience for callers
who want to just pass a const string like the result of
get_object_directory().

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

git-compat-util: do not step on MAC_OS_X_VERSION_MIN_RE... Kyle J. McKay Fri, 6 Feb 2015 09:35:31 +0000 (01:35 -0800)

git-compat-util: do not step on MAC_OS_X_VERSION_MIN_REQUIRED

MAC_OS_X_VERSION_MIN_REQUIRED may be defined by the builder to a
specific version in order to produce compatible binaries for a
particular system. Blindly defining it to MAC_OS_X_VERSION_10_6
is bad.

Additionally MAC_OS_X_VERSION_10_6 will not be defined on older
systems and should AvailabilityMacros.h be included on such as
system an error will result. However, using the explicit value
of 1060 (which is what MAC_OS_X_VERSION_10_6 is defined to) does
not solve the problem.

The changes that introduced stepping on MAC_OS_X_VERSION_MIN were
made in b195aa00 (git-compat-util: suppress unavoidable
Apple-specific deprecation warnings) to avoid deprecation
warnings.

Instead of blindly setting MAC_OS_X_VERSION_MIN to 1060 change
the definition of DEPRECATED_ATTRIBUTE to empty to avoid the
warnings. This preserves any MAC_OS_X_VERSION_MIN_REQUIRED
setting while avoiding the warnings as intended by b195aa00.

Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.3 v2.3.0Junio C Hamano Thu, 5 Feb 2015 21:23:56 +0000 (13:23 -0800)

Git 2.3

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

config_buf_ungetc: warn when pushing back a random... Jeff King Thu, 5 Feb 2015 21:00:24 +0000 (16:00 -0500)

config_buf_ungetc: warn when pushing back a random character

Our config code simulates a stdio stream around a buffer,
but our fake ungetc() does not behave quite like the real
one. In particular, we only rewind the position by one
character, but do _not_ actually put the character from the
caller into position.

It turns out that this does not matter, because we only ever
push back the character we just read. In other words, such
an assignment would be a noop. But because the function is
called ungetc, and because it takes a character parameter,
it is a mistake waiting to happen.

Actually assigning the character into the buffer would be
ideal, but our pointer is actually a "const" copy of the
buffer. We do not know who the real owner of the buffer is
in this code, and would not want to munge their contents.

Instead, we can simply add an assertion that matches what
the current caller does, and will let us know if new callers
are added that violate the contract.

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

decimal_width: avoid integer overflowJeff King Thu, 5 Feb 2015 08:14:19 +0000 (03:14 -0500)

decimal_width: avoid integer overflow

The decimal_width function originally appeared in blame.c as
"lineno_width", and was designed for calculating the
print-width of small-ish integer values (line numbers in
text files). In ec7ff5b, it was made into a reusable
function, and in dc801e7, we started using it to align
diffstats.

Binary files in a diffstat show byte counts rather than line
numbers, meaning they can be quite large (e.g., consider
adding or removing a 2GB file). decimal_width is not up to
the challenge for two reasons:

1. It takes the value as an "int", whereas large files may
easily surpass this. The value may be truncated, in
which case we will produce an incorrect value.

2. It counts "up" by repeatedly multiplying another
integer by 10 until it surpasses the value. This can
cause an infinite loop when the value is close to the
largest representable integer.

For example, consider using a 32-bit signed integer,
and a value of 2,140,000,000 (just shy of 2^31-1).
We will count up and eventually see that 1,000,000,000
is smaller than our value. The next step would be to
multiply by 10 and see that 10,000,000,000 is too
large, ending the loop. But we can't represent that
value, and we have signed overflow.

This is technically undefined behavior, but a common
behavior is to lose the high bits, in which case our
iterator will certainly be less than the number. So
we'll keep multiplying, overflow again, and so on.

This patch changes the argument to a uintmax_t (the same
type we use to store the diffstat information for binary
filese), and counts "down" by repeatedly dividing our value
by 10.

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

config: do not ungetc EOFJeff King Thu, 5 Feb 2015 06:53:28 +0000 (01:53 -0500)

config: do not ungetc EOF

When we are parsing a config value, if we see a carriage
return, we fgetc the next character to see if it is a
line feed (in which case we silently drop the CR). If it
isn't, we then ungetc the character, and take the literal
CR.

But we never check whether we in fact got a character at
all. If the config file ends in CR, we will get EOF here,
and try to ungetc EOF. This works OK for a real stdio
stream. The ungetc returns an error, and the next fgetc will
then return EOF again.

However, our custom buffer-based stream is not so fortunate.
It happily rewinds the position of the stream by one
character, ignoring the fact that we fed it EOF. The next
fgetc call returns the final CR again, over and over, and we
end up in an infinite loop.

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

check-builtins: strip executable suffix $X when enumera... Sebastian Schuberth Thu, 5 Feb 2015 13:28:04 +0000 (14:28 +0100)

check-builtins: strip executable suffix $X when enumerating builtins

On Windows, the builtin executable names are suffixed with $X.

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

run_diff_files(): clarify computation of sha1 validityJunio C Hamano Thu, 11 Dec 2014 21:11:06 +0000 (13:11 -0800)

run_diff_files(): clarify computation of sha1 validity

Remove the need to have duplicated "if there is a change then feed
null_sha1 and otherwise sha1 from the cache entry" for the "new"
side of the diff by introducing two temporary variables to point
at the object name of the old and the new side of the blobs.

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

ewah: fix building with gcc < 3.4.0Tom G. Christensen Wed, 4 Feb 2015 08:23:16 +0000 (09:23 +0100)

ewah: fix building with gcc < 3.4.0

The __builtin_ctzll function was added in gcc 3.4.0.
This extends the check for gcc so that use of __builtin_ctzll is only
enabled if gcc >= 3.4.0.

Signed-off-by: Tom G. Christensen <tgc@statsbiblioteket.dk>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: handle broken curl version number in version... Tom G. Christensen Fri, 30 Jan 2015 09:52:34 +0000 (10:52 +0100)

Makefile: handle broken curl version number in version check

curl 7.11.0 through 7.12.2 when built from their official release
archives will present a 5 digit version number instead of the documented
6 digits which breaks the version check in the Makefile.
Correct these broken version numbers on the fly when extracting them to
ensure the comparison works correctly.

[jc: shortened the new sed scripts a bit]

Signed-off-by: Tom G. Christensen <tgc@statsbiblioteket.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http: support curl < 7.10.7Tom G. Christensen Tue, 3 Feb 2015 17:30:08 +0000 (18:30 +0100)

http: support curl < 7.10.7

Commit dd61399 introduced support for http proxies that require
authentication but it relies on the CURL_PROXYAUTH option which was
added in curl 7.10.7.
This makes sure proxy authentication is only enabled if libcurl can
support it.

Signed-off-by: Tom G. Christensen <tgc@statsbiblioteket.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-submodule.sh: fix '/././' path normalizationPatrick Steinhardt Fri, 30 Jan 2015 15:14:03 +0000 (16:14 +0100)

git-submodule.sh: fix '/././' path normalization

When we add a new submodule the path of the submodule is being
normalized. We fail to normalize multiple adjacent '/./', though.
Thus 'path/to/././submodule' will become 'path/to/./submodule' where
it should be 'path/to/submodule' instead.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Acked-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge git://github.com/git-l10n/git-poJunio C Hamano Mon, 2 Feb 2015 20:05:56 +0000 (12:05 -0800)

Merge git://github.com/git-l10n/git-po

* git://github.com/git-l10n/git-po:
l10n: ca.po: Fix trailing whitespace

CodingGuidelines: describe naming rules for configurati... Junio C Hamano Tue, 27 Jan 2015 20:26:03 +0000 (12:26 -0800)

CodingGuidelines: describe naming rules for configuration variables

We may want to say something about command line option names in the
new section as well, but for now, let's make sure everybody is clear
on how to structure and name their configuration variables.

The text for the rules are partly taken from the log message of
Jonathan's 6b3020a2 (add: introduce add.ignoreerrors synonym for
add.ignore-errors, 2010-12-01).

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

l10n: ca.po: Fix trailing whitespaceAlex Henrie Fri, 30 Jan 2015 22:02:34 +0000 (15:02 -0700)

l10n: ca.po: Fix trailing whitespace

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>

Documentation/git-remote.txt: stress that set-url is... Junio C Hamano Thu, 29 Jan 2015 20:26:09 +0000 (12:26 -0800)

Documentation/git-remote.txt: stress that set-url is not for triangular

It seems to be a common mistake to try using a single remote
(e.g. 'origin') to fetch from one place (i.e. upstream) while
pushing to another (i.e. your publishing point).

That will never work satisfactorily, and it is easy to understand
why if you think about what refs/remotes/origin/* would mean in such
a world. It fundamentally cannot reflect the reality. If it
follows the state of your upstream, it cannot match what you have
published, and vice versa.

It may be that misinformation is spread by some people. Let's
counter them by adding a few words to our documentation.

- The description was referring to <oldurl> and <newurl>, but never
mentioned <name> argument you give from the command line. By
mentioning "remote <name>", stress the fact that it is configuring
a single remote.

- Add a reminder that explicitly states that this is about a single
remote, which the triangular workflow is not about.

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

t/lib-gpg: sanity-check that we can actually signJeff King Thu, 29 Jan 2015 15:51:11 +0000 (10:51 -0500)

t/lib-gpg: sanity-check that we can actually sign

Some older versions of gpg (reportedly v1.2.6 from RHEL4) cannot
import the keyrings found in our test suite, and thus cannot even
make a signature. The previous change works it around, but we
cannot anticipate breakages update to GPG would cause in the future.

Do a test-sign before declaring the GPG prerequisite fulfilled
to future-proof our tests.

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

t/lib-gpg: include separate public keys in keyring.gpgJeff King Thu, 29 Jan 2015 15:43:20 +0000 (10:43 -0500)

t/lib-gpg: include separate public keys in keyring.gpg

Since 1e3eefb (tests: replace binary GPG keyrings with
ASCII-armored keys, 2014-12-12), we import our test GPG keys
from a single file. Each keypair in the import stream
contains both the secret and public keys. However, older
versions of gpg reportedly fail to import the public half of
the key. We can solve this by including duplicates of the
public keys separately. The duplicates are ignored by modern
gpg, and this makes older versions work.

Reported by Tom G. Christensen <tgc@statsbiblioteket.dk> on
gpg 1.2.6 (from RHEL4).

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

t4122: use test_write_lines from test-lib-functionsJunio C Hamano Thu, 29 Jan 2015 05:15:24 +0000 (21:15 -0800)

t4122: use test_write_lines from test-lib-functions

Instead of using a custom lecho function, just use what the test
framework already gives us.

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

diff-format doc: a score can follow M for rewriteJunio C Hamano Wed, 28 Jan 2015 21:17:19 +0000 (13:17 -0800)

diff-format doc: a score can follow M for rewrite

b6d8f309 (diff-raw format update take #2., 2005-05-23) started
documenting the diff format, and it said

...
(8) sha1 for "dst"; 0{40} if creation, unmerged or "look at work tree".
(9) status, followed by similarlity index number only for C and R.
(10) a tab or a NUL when '-z' option is used.
...

because C and R _were_ the only ones that came with a number back
then. This was corrected by ddafa7e9 (diff-helper: Fix R/C score
parsing under -z flag., 2005-05-29) and we started saying "score"
instead of "similarlity index" (because we can have other kind of
score there), and stopped saying "only for C and R" (because Git is
an ever evolving system). Later f345b0a0 (Add -B flag to diff-*
brothers., 2005-05-30) introduced a new concept, "dissimilarity"
score; it did not have to fix any documentation.

The current text that says only C and R can have scores came
independently from a5a323f3 (Add reference for status letters in
documentation., 2008-11-02) and it was wrong from the day one.

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

git-push.txt: document the behavior of --repoMichael J Gruber Tue, 27 Jan 2015 12:35:53 +0000 (13:35 +0100)

git-push.txt: document the behavior of --repo

As per the code, the --repo <repo> option is equivalent to the
<repo> argument to 'git push', but somehow it was documented as
something that is more than that. [It exists for historical
reasons, back from the time when options had to come before
arguments.]

Say so. [But not that.]

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

do not check truth value of flex arraysJeff King Wed, 28 Jan 2015 17:58:50 +0000 (12:58 -0500)

do not check truth value of flex arrays

There is no point in checking "!ref->name" when ref is a
"struct ref". The name field is a flex-array, and there
always has a non-zero address. This is almost certainly not
hurting anything, but it does cause clang-3.6 to complain.

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

read_and_strip_branch: fix typo'd address-of operatorJeff King Wed, 28 Jan 2015 17:57:35 +0000 (12:57 -0500)

read_and_strip_branch: fix typo'd address-of operator

When we are chomping newlines from the end of a strbuf, we
must check "sb.len != 0" before accessing "sb.buf[sb.len - 1]".
However, this code mistakenly checks "&sb.len", which is
always true (it is a part of an auto struct, so the address
is always non-zero). This could lead to us accessing memory
outside the strbuf when we read an empty file.

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

config.txt: mark deprecated variables more prominentlyJunio C Hamano Tue, 27 Jan 2015 20:25:48 +0000 (12:25 -0800)

config.txt: mark deprecated variables more prominently

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

config.txt: clarify that add.ignore-errors is deprecatedJunio C Hamano Tue, 27 Jan 2015 20:19:11 +0000 (12:19 -0800)

config.txt: clarify that add.ignore-errors is deprecated

The old text gave an impression that even in a new repository using
old form might be safer. Only Git from pre 1.7.0 days choke on the
correctly named variable, which is ancient by today's standard.

We have no intention to remove the support for deprecated ones, but
let's make sure that we do not give room for confused questions such
as "why does core.sparse-checkout not work, when add.ignore-errors
does?"

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

http: add Accept-Language header if possibleYi EungJun Wed, 28 Jan 2015 12:04:37 +0000 (21:04 +0900)

http: add Accept-Language header if possible

Add an Accept-Language header which indicates the user's preferred
languages defined by $LANGUAGE, $LC_ALL, $LC_MESSAGES and $LANG.

Examples:
LANGUAGE= -> ""
LANGUAGE=ko:en -> "Accept-Language: ko, en;q=0.9, *;q=0.1"
LANGUAGE=ko LANG=en_US.UTF-8 -> "Accept-Language: ko, *;q=0.1"
LANGUAGE= LANG=en_US.UTF-8 -> "Accept-Language: en-US, *;q=0.1"

This gives git servers a chance to display remote error messages in
the user's preferred language.

Limit the number of languages to 1,000 because q-value must not be
smaller than 0.001, and limit the length of Accept-Language header to
4,000 bytes for some HTTP servers which cannot accept such long header.

Signed-off-by: Yi EungJun <eungjun.yi@navercorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.3.0-rc2 v2.3.0-rc2Junio C Hamano Tue, 27 Jan 2015 22:39:53 +0000 (14:39 -0800)

Git 2.3.0-rc2

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

dumb-http: do not pass NULL path to parse_pack_indexJeff King Tue, 27 Jan 2015 20:02:27 +0000 (15:02 -0500)

dumb-http: do not pass NULL path to parse_pack_index

Once upon a time, dumb http always fetched .idx files
directly into their final location, and then checked their
validity with parse_pack_index. This was refactored in
commit 750ef42 (http-fetch: Use temporary files for
pack-*.idx until verified, 2010-04-19), which uses the
following logic:

1. If we have the idx already in place, see if it's
valid (using parse_pack_index). If so, use it.

2. Otherwise, fetch the .idx to a tempfile, check
that, and if so move it into place.

3. Either way, fetch the pack itself if necessary.

However, it got step 1 wrong. We pass a NULL path parameter
to parse_pack_index, so an existing .idx file always looks
broken. Worse, we do not treat this broken .idx as an
opportunity to re-fetch, but instead return an error,
ignoring the pack entirely. This can lead to a dumb-http
fetch failing to retrieve the necessary objects.

This doesn't come up much in practice, because it must be a
packfile that we found out about (and whose .idx we stored)
during an earlier dumb-http fetch, but whose packfile we
_didn't_ fetch. I.e., we did a partial clone of a
repository, didn't need some packfiles, and now a followup
fetch needs them.

Discovery and tests by Charles Bailey <charles@hashpling.org>.

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

Merge git://github.com/git-l10n/git-poJunio C Hamano Tue, 27 Jan 2015 19:01:05 +0000 (11:01 -0800)

Merge git://github.com/git-l10n/git-po

* git://github.com/git-l10n/git-po:
l10n: de.po: correct singular form
l10n: de.po: translate "leave behind" correctly
l10n: de.po: fix typo
l10n: ca.po: update translation

Merge branch 'master' of git://github.com/alexhenrie... Jiang Xin Tue, 27 Jan 2015 07:00:48 +0000 (15:00 +0800)

Merge branch 'master' of git://github.com/alexhenrie/git-po

* 'master' of git://github.com/alexhenrie/git-po:
l10n: ca.po: update translation

commit: reword --author error messageMichael J Gruber Mon, 26 Jan 2015 15:48:33 +0000 (16:48 +0100)

commit: reword --author error message

If an --author argument is specified but does not contain a '>' then git tries
to find the argument within the existing authors; and gives the error
message "No existing author found with '%s'" if there is no match.

This is confusing for users who try to specify a valid complete author
name.

Rename the error message to make it clearer that the failure has two
reasons in this case.

(This codepath is touched only when we know already that the argument
cannot be a completely wellformed author ident.)

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

l10n: de.po: correct singular formMichael J Gruber Mon, 26 Jan 2015 15:34:32 +0000 (16:34 +0100)

l10n: de.po: correct singular form

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

l10n: de.po: translate "leave behind" correctlyMichael J Gruber Mon, 26 Jan 2015 15:34:31 +0000 (16:34 +0100)

l10n: de.po: translate "leave behind" correctly

This message is about leaving orphaned commits behind, not about
behind an upstream branch. Try to make this clear.

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

l10n: de.po: fix typoBenedikt Heine Sun, 25 Jan 2015 11:00:04 +0000 (12:00 +0100)

l10n: de.po: fix typo

Signed-off-by: Benedikt Heine <bebe@bebehei.de>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

l10n: ca.po: update translationAlex Henrie Mon, 26 Jan 2015 17:12:50 +0000 (10:12 -0700)

l10n: ca.po: update translation

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>

wincred: fix get credential if username has "@"Aleksey Vasenev Wed, 19 Nov 2014 21:47:32 +0000 (00:47 +0300)

wincred: fix get credential if username has "@"

Such a username with "@" in it isn't all that unusual these days.

cf. https://groups.google.com/forum/#!msg/msysgit/YVuCqmwwRyY/HULHj5OoE88J

Signed-off-by: Aleksey Vasenev <margtu-fivt@ya.ru>
Acked-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: what does "git log --indexed-objects... Junio C Hamano Fri, 23 Jan 2015 19:49:05 +0000 (11:49 -0800)

Documentation: what does "git log --indexed-objects" even mean?

4fe10219 (rev-list: add --indexed-objects option, 2014-10-16) adds
"--indexed-objects" option to "rev-list", and it is only useful in
the context of "git rev-list" and not "git log". There are other
object traversal options that do not make sense for "git log" that
are shown in the manual page.

Move the description of "--indexed-objects" to the object traversal
section so that it sits together with its friends "--objects",
"--objects-edge", etc. and then show them only in "git rev-list"
documentation.

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

git-p4: correct --prepare-p4-only instructionsLuke Diamand Fri, 23 Jan 2015 09:15:12 +0000 (09:15 +0000)

git-p4: correct --prepare-p4-only instructions

If you use git-p4 with the "--prepare-p4-only" option, then
it prints the p4 command line to use. However, the command
line was incorrect: the changelist specification must be
supplied on standard input, not as an argument to p4.

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

add -i: return from list_and_choose if there is no... Alexander Kuleshov Thu, 22 Jan 2015 08:39:44 +0000 (14:39 +0600)

add -i: return from list_and_choose if there is no candidate

The list_and_choose() helper is given a prompt and a list, asks the
user to make selection from the list, and then returns a list of
items chosen. Even when it is given an empty list as the original
candidate set to choose from, it gave a prompt to the user, who can
only say "I am done choosing".

Return an empty result when the input is an empty list without
bothering the user. The existing caller must already have a logic
to say "Nothing to do" or an equivalent when the returned list is
empty (i.e. the user chose to select nothing) if it is necessary, so
no change to the callers is necessary.

This fixes the case where "add untracked" is asked in "git add -i"
and there is no untracked files in the working tree. We used to give
an empty list of files to choose from with a prompt, but with this
change, we no longer do.

Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'js/t1050'Junio C Hamano Thu, 22 Jan 2015 21:46:45 +0000 (13:46 -0800)

Merge branch 'js/t1050'

* js/t1050:
t1050-large: generate large files without dd

Merge branch 'ak/cat-file-clean-up'Junio C Hamano Thu, 22 Jan 2015 21:46:38 +0000 (13:46 -0800)

Merge branch 'ak/cat-file-clean-up'

* ak/cat-file-clean-up:
cat-file: use "type" and "size" from outer scope

Merge git://github.com/git-l10n/git-poJunio C Hamano Thu, 22 Jan 2015 21:45:07 +0000 (13:45 -0800)

Merge git://github.com/git-l10n/git-po

* git://github.com/git-l10n/git-po:
l10n: correct indentation of show-branch usage
l10n: de.po: translate 3 messages
l10n: zh_CN: various fixes on command arguments
l10n: vi.po(2298t): Updated 3 new strings
l10n: sv.po: Update Swedish translation (2298t0f0u)
l10n: fr.po v2.3.0 round 2
l10n: git.pot: v2.3.0 round 2 (3 updated)
l10n: de.po: translate 13 new messages
l10n: de.po: fix typo
l10n: de.po: translate "track" as "versionieren"
l10n: zh_CN: translations for git v2.3.0-rc0
l10n: sv.po: Update Swedish translation (2298t0f0u)
l10n: fr.po v2.3.0 round 1
l10n: vi.po(2298t): Updated and change Plural-Forms
l10n: git.pot: v2.3.0 round 1 (13 new, 11 removed)
l10n: ca.po: various fixes

Merge branch 'sh/asciidoc-git-version-fix'Junio C Hamano Thu, 22 Jan 2015 21:44:47 +0000 (13:44 -0800)

Merge branch 'sh/asciidoc-git-version-fix'

* sh/asciidoc-git-version-fix:
Documentation: fix version numbering

Documentation: fix version numberingSven van Haastregt Thu, 22 Jan 2015 19:32:33 +0000 (19:32 +0000)

Documentation: fix version numbering

Version numbers in asciidoc-generated content (such as man pages)
went missing as of da8a366 (Documentation: refactor common operations
into variables). Fix by putting the underscore back in the variable
name.

Signed-off-by: Sven van Haastregt <svenvh@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jh/empty-notes'Junio C Hamano Thu, 22 Jan 2015 21:42:37 +0000 (13:42 -0800)

Merge branch 'jh/empty-notes'

* jh/empty-notes:
Fix unclosed here document in t3301.sh

apply: detect and mark whitespace errors in context... Junio C Hamano Fri, 16 Jan 2015 21:21:13 +0000 (13:21 -0800)

apply: detect and mark whitespace errors in context lines when fixing

When the incoming patch has whitespace errors in a common context
line (i.e. a line that is expected to be found and is not modified
by the patch), "apply --whitespace=fix" corrects the whitespace
errors the line has, in addition to the whitespace error on a line
that is updated by the patch. However, we did not count and report
that we fixed whitespace errors on such lines.

[jc: This is iffy. What if the whitespace error has been fixed in
the target since the patch was written? A common context line we
see in the patch has errors, and it matches a line in the target
that has the errors already corrected, resulting in no change, which
we may not want to count after all. On the other hand, we are
reporting whitespace errors _in_ the incoming patch, so...]

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

apply: count the size of postimage correctlyJunio C Hamano Fri, 16 Jan 2015 23:32:00 +0000 (15:32 -0800)

apply: count the size of postimage correctly

Under --whitespace=fix option, match_fragment() function examines
the preimage (the common context and the removed lines in the patch)
and the file being patched and checks if they match after correcting
all whitespace errors. When they are found to match, the common
context lines in the preimage is replaced with the fixed copy,
because these lines will then be copied to the corresponding place
in the postimage by a later call to update_pre_post_images(). Lines
that are added in the postimage, under --whitespace=fix, have their
whitespace errors already fixed when apply_one_fragment() prepares
the preimage and the postimage, so in the end, application of the
patch can be done by replacing the block of text in the file being
patched that matched the preimage with what is in the postimage that
was updated by update_pre_post_images().

In the earlier days, fixing whitespace errors always resulted in
reduction of size, either collapsing runs of spaces in the indent to
a tab or removing the trailing whitespaces. These days, however,
some whitespace error fix results in extending the size.

250b3c6c (apply --whitespace=fix: avoid running over the postimage
buffer, 2013-03-22) tried to compute the final postimage size but
its math was flawed. It counted the size of the block of text in
the original being patched after fixing the whitespace errors on its
lines that correspond to the preimage. That number does not have
much to do with how big the final postimage would be.

Instead count (1) the added lines in the postimage, whose size is
the same as in the final patch result because their whitespace
errors have already been corrected, and (2) the fixed size of the
lines that are common.

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

apply: make update_pre_post_images() sanity check the... Junio C Hamano Fri, 16 Jan 2015 19:54:47 +0000 (11:54 -0800)

apply: make update_pre_post_images() sanity check the given postlen

"git apply --whitespace=fix" used to be able to assume that fixing
errors will always reduce the size by e.g. stripping whitespaces at
the end of lines or collapsing runs of spaces into tabs at the
beginning of lines. An update to accomodate fixes that lengthens
the result by e.g. expanding leading tabs into spaces were made long
time ago but the logic miscounted the necessary space after such
whitespace fixes, leading to either under-allocation or over-usage
of already allocated space.

Illustrate this with a runtime sanity-check to protect us from
future breakage. The test was stolen from Kyle McKay who helped
to identify the problem.

Helped-by: "Kyle J. McKay" <mackyle@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply.c: typofixJunio C Hamano Fri, 16 Jan 2015 21:54:52 +0000 (13:54 -0800)

apply.c: typofix

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

Fix unclosed here document in t3301.shKacper Kornet Thu, 22 Jan 2015 11:59:36 +0000 (12:59 +0100)

Fix unclosed here document in t3301.sh

Commit 908a3203632a02568df230c0fccf9a2cd8da24e6 introduced indentation
to here documents in t3301.sh. However in one place <<-EOF was missing
-, which broke this test when run with mksh-50d. This commit fixes it.

Signed-off-by: Kacper Kornet <draenog@pld-linux.org>
Acked-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rebase -i: use full object name internally throughout... Kirill A. Shutemov Thu, 22 Jan 2015 11:50:15 +0000 (13:50 +0200)

rebase -i: use full object name internally throughout the script

In earlier days, the abbreviated commit object name shown to the end
users were generated with hardcoded --abbrev=7; 56895038 (rebase
-i: respect core.abbrev, 2013-09-28) tried to make it honor the user
specified core.abbrev, but it missed the very initial invocation of
the editor.

These days, we try to use the full 40-hex object names internally to
avoid ambiguity that can arise after rebase starts running. Newly
created objects during the rebase may share the same prefix with
existing commits listed in the insn sheet. These object names are
shortened just before invoking the sequence editor to present the
insn sheet to the end user, and then expanded back to full object
names when the editor returns.

But the code still used the shortened names when preparing the insn
sheet for the very first time, resulting "7 hexdigits or more"
output to the user. Change the code to use full 40-hex commit
object names from the very beginning to make things more uniform.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

transport-helper: do not request symbolic refs to remot... Mike Hommey Mon, 19 Jan 2015 01:35:07 +0000 (10:35 +0900)

transport-helper: do not request symbolic refs to remote helpers

A typical remote helper will return a `list` of refs containing a symbolic
ref HEAD, pointing to, e.g. refs/heads/master. In the case of a clone, all
the refs are being requested through `fetch` or `import`, including the
symbolic ref.

While this works properly, in some cases of a fetch, like `git fetch url`
or `git fetch origin HEAD`, or any fetch command involving a symbolic ref
without also fetching the corresponding ref it points to, the fetch command
fails with:

fatal: bad object 0000000000000000000000000000000000000000
error: <remote> did not send all necessary objects

(in the case the remote helper returned '?' values to the `list` command).

This is because there is only one ref given to fetch(), and it's not
further resolved to something at the end of fetch_with_import().

While this can be somehow handled in the remote helper itself, by adding
a refspec for the symbolic ref, and storing an explicit ref in a private
namespace, and then handling the `import` for that symbolic ref
specifically, very few existing remote helpers are actually doing that.

So, instead of requesting the exact list of wanted refs to remote helpers,
treat symbolic refs differently and request the ref they point to instead.
Then, resolve the symbolic refs values based on the pointed ref.
This assumes there is no more than one level of indirection (a symbolic
ref doesn't point to another symbolic ref).

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