gitweb.git
Merge branch 'maint-1.8.1' into maintJunio C Hamano Mon, 25 Mar 2013 20:46:42 +0000 (13:46 -0700)

Merge branch 'maint-1.8.1' into maint

* maint-1.8.1:
bundle: Add colons to list headings in "verify"
bundle: Fix "verify" output if history is complete
Documentation: filter-branch env-filter example
git-filter-branch.txt: clarify ident variables usage
git-compat-util.h: Provide missing netdb.h definitions
describe: Document --match pattern format
Documentation/githooks: Explain pre-rebase parameters
update-index: list supported idx versions and their features
diff-options: unconfuse description of --color
read-cache.c: use INDEX_FORMAT_{LB,UB} in verify_hdr()
index-format.txt: mention of v4 is missing in some places

Merge branch 'lf/bundle-verify-list-prereqs' into maint... Junio C Hamano Mon, 25 Mar 2013 20:46:02 +0000 (13:46 -0700)

Merge branch 'lf/bundle-verify-list-prereqs' into maint-1.8.1

"git bundle verify" did not say "records a complete history" for a
bundle that does not have any prerequisites.

* lf/bundle-verify-list-prereqs:
bundle: Add colons to list headings in "verify"
bundle: Fix "verify" output if history is complete

Merge branch 'tk/doc-filter-branch' into maint-1.8.1Junio C Hamano Mon, 25 Mar 2013 20:45:53 +0000 (13:45 -0700)

Merge branch 'tk/doc-filter-branch' into maint-1.8.1

Add an example use of "--env-filter" in "filter-branch"
documentation.

* tk/doc-filter-branch:
Documentation: filter-branch env-filter example
git-filter-branch.txt: clarify ident variables usage

Merge branch 'dm/ni-maxhost-may-be-missing' into maint... Junio C Hamano Mon, 25 Mar 2013 20:45:42 +0000 (13:45 -0700)

Merge branch 'dm/ni-maxhost-may-be-missing' into maint-1.8.1

Some sources failed to compile on systems that lack NI_MAXHOST in
their system header.

* dm/ni-maxhost-may-be-missing:
git-compat-util.h: Provide missing netdb.h definitions

Merge branch 'gp/describe-match-uses-glob-pattern'... Junio C Hamano Mon, 25 Mar 2013 20:45:33 +0000 (13:45 -0700)

Merge branch 'gp/describe-match-uses-glob-pattern' into maint-1.8.1

The "--match=<pattern>" argument "git describe" takes uses glob
pattern but it wasn't obvious from the documentation.

* gp/describe-match-uses-glob-pattern:
describe: Document --match pattern format

Merge branch 'nd/doc-index-format' into maint-1.8.1Junio C Hamano Mon, 25 Mar 2013 20:45:26 +0000 (13:45 -0700)

Merge branch 'nd/doc-index-format' into maint-1.8.1

The v4 index format was not documented.

* nd/doc-index-format:
update-index: list supported idx versions and their features
read-cache.c: use INDEX_FORMAT_{LB,UB} in verify_hdr()
index-format.txt: mention of v4 is missing in some places

Merge branch 'wk/doc-pre-rebase' into maint-1.8.1Junio C Hamano Mon, 25 Mar 2013 20:45:14 +0000 (13:45 -0700)

Merge branch 'wk/doc-pre-rebase' into maint-1.8.1

The arguments given to pre-rebase hook were not documented.

* wk/doc-pre-rebase:
Documentation/githooks: Explain pre-rebase parameters

Merge branch 'jc/color-diff-doc' into maint-1.8.1Junio C Hamano Mon, 25 Mar 2013 20:44:53 +0000 (13:44 -0700)

Merge branch 'jc/color-diff-doc' into maint-1.8.1

The "--color=<when>" argument to the commands in the diff family
was described poorly.

* jc/color-diff-doc:
diff-options: unconfuse description of --color

merge-one-file: force content conflict for "both sides... Junio C Hamano Mon, 25 Mar 2013 17:05:13 +0000 (10:05 -0700)

merge-one-file: force content conflict for "both sides added" case

Historically, we tried to be lenient to "both sides added, slightly
differently" case and as long as the files can be merged using a
made-up common ancestor cleanly, since f7d24bbefb06 (merge with
/dev/null as base, instead of punting O==empty case, 2005-11-07).

This was later further refined to use a better made-up common file
with fd66dbf5297a (merge-one-file: use empty- or common-base
condintionally in two-stage merge., 2005-11-10), but the spirit has
been the same.

But the original fix in f7d24bbefb06 to avoid punting on "both sides
added" case had a code to unconditionally error out the merge. When
this triggers, even though the content-level merge can be done
cleanly, we end up not saying "content conflict" in the message, but
still issue the error message, showing "ERROR: in <pathname>".

Move that "always fail for add/add conflict" logic a bit higher to
fix this.

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

transport.c: help gcc 4.6.3 users by squelching compile... Junio C Hamano Mon, 25 Mar 2013 19:51:50 +0000 (12:51 -0700)

transport.c: help gcc 4.6.3 users by squelching compiler warning

To a human reader, it is quite obvious that cmp is assigned before
it is used, but gcc 4.6.3 that ships with Ubuntu 12.04 is among
those that do not get this right.

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

git-merge-one-file: send "ERROR:" messages to stderrKevin Bracey Sun, 24 Mar 2013 12:26:24 +0000 (14:26 +0200)

git-merge-one-file: send "ERROR:" messages to stderr

Signed-off-by: Kevin Bracey <kevin@bracey.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-merge-one-file: style cleanupKevin Bracey Sun, 24 Mar 2013 12:26:23 +0000 (14:26 +0200)

git-merge-one-file: style cleanup

Update style to match Documentation/CodingGuidelines.

Signed-off-by: Kevin Bracey <kevin@bracey.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge-one-file: remove stale commentJunio C Hamano Mon, 25 Mar 2013 17:48:24 +0000 (10:48 -0700)

merge-one-file: remove stale comment

The "funny filename" comment was from b539c5e8fbd3 (git-merge-one:
new merge world order., 2005-12-07) where the removed code just
before that new comment ended with:

merge "$4" "$orig" "$src2"

(yes, we used to use "merge" program from the RCS suite). The
comment refers to one of the bad side effect the old code used to
have and warns against such a practice, i.e. it was talking about
the code that no longer existed.

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

match-trees: simplify score_trees() using tree_entry()René Scharfe Sun, 24 Mar 2013 22:46:28 +0000 (23:46 +0100)

match-trees: simplify score_trees() using tree_entry()

Convert the loop in score_trees() to tree_entry(). The code becomes
shorter and simpler because the calls to update_tree_entry() are not
needed any more.

Another benefit is that we need less variables to track the current
tree entries; as a side-effect of that the compiler has an easier
job figuring out the control flow and thus can avoid false warnings
about uninitialized variables.

Using struct name_entry also allows the use of tree_entry_len() for
finding the path length instead of strlen(), which may be slightly
more efficient.

Also unify the handling of missing entries in one of the two trees
(i.e. added or removed files): Just set cmp appropriately first, no
matter if we ran off the end of a tree or if we actually have two
entries to compare, and check its value a bit later without
duplicating the handler code.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7600: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:12 +0000 (22:06 +0100)

t7600: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Tests are modified to assume default configuration at entry,
and to reset the modified configuration variables at the end.

Test 'merge log message' was relying on the presence of option `--no-ff`
in the configuration. With the option, git show -s --pretty=format:%b HEAD
produces an empty line and without the option, it produces an empty file.
The test is modified to check with and without `--no-ff` option.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7502: remove clear_configYann Droneaud Sun, 24 Mar 2013 21:06:14 +0000 (22:06 +0100)

t7502: remove clear_config

Using test_config ensure the configuration variable are removed
at the end of the test, there's no need to remove variable
at the beginning of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7502: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:10 +0000 (22:06 +0100)

t7502: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9500: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:13 +0000 (22:06 +0100)

t9500: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7508: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:11 +0000 (22:06 +0100)

t7508: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7500: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:09 +0000 (22:06 +0100)

t7500: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5541: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:08 +0000 (22:06 +0100)

t5541: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5520: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:07 +0000 (22:06 +0100)

t5520: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4202: use test_config/test_unconfig to set/unset git... Yann Droneaud Sun, 24 Mar 2013 21:06:06 +0000 (22:06 +0100)

t4202: use test_config/test_unconfig to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Additionally, instead of
git config <key> ""
or
git config --unset <key>
uses
test_unconfig <key>
The latter doesn't failed if <key> is not defined.

Tests are modified to assume correct (default) configuration at entry,
and to reset the modified configuration variables at the end.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4034: use test_config/test_unconfig to set/unset git... Yann Droneaud Sun, 24 Mar 2013 21:06:05 +0000 (22:06 +0100)

t4034: use test_config/test_unconfig to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Additionally, instead of
git config <key> ""
or
git config --unset <key>
uses
test_unconfig <key>
The latter doesn't failed if <key> is not defined.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4304: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:04 +0000 (22:06 +0100)

t4304: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Tests are modified to assume correct (default) configuration at entry,
and to reset the modified configuration variables at the end.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3400: use test_config to set/unset git config variablesYann Droneaud Sun, 24 Mar 2013 21:06:03 +0000 (22:06 +0100)

t3400: use test_config to set/unset git config variables

Instead of using construct such as:
test_when_finished "git config --unset <key>"
git config <key> <value>
uses
test_config <key> <value>
The latter takes care of removing <key> at the end of the test.

Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refs.c: fix fread error handlingJohn Keeping Sat, 23 Mar 2013 17:16:46 +0000 (17:16 +0000)

refs.c: fix fread error handling

fread returns the number of items read, with no special error return.

Commit 98f85ff (reflog: add for_each_reflog_ent_reverse() API -
2013-03-08) introduced a call to fread which checks for an error with
"nread < 0" which is tautological since nread is unsigned. The correct
check in this case (which tries to read a single item) is "nread != 1".

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

status, branch: fix the misleading "bisecting" messageNguyễn Thái Ngọc Duy Sat, 23 Mar 2013 03:52:44 +0000 (10:52 +0700)

status, branch: fix the misleading "bisecting" message

The current message is "bisecting %s" (or "bisecting branch %s").
"%s" is the current branch when we started bisecting. Clarify that to
avoid confusion with good and bad refs passed to "bisect" command.

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

Fix revision walk for commits with the same datesKacper Kornet Fri, 22 Mar 2013 18:38:19 +0000 (19:38 +0100)

Fix revision walk for commits with the same dates

Logic in still_interesting function allows to stop the commits
traversing if the oldest processed commit is not older then the
youngest commit on the list to process and the list contains only
commits marked as not interesting ones. It can be premature when dealing
with a set of coequal commits. For example git rev-list A^! --not B
provides wrong answer if all commits in the range A..B had the same
commit time and there are more then 7 of them.

To fix this problem the relevant part of the logic in still_interesting
is changed to: the walk can be stopped if the oldest processed commit is
younger then the youngest commit on the list to processed.

Signed-off-by: Kacper Kornet <draenog@pld-linux.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule: clarify logic in show_submodule_summaryJeff King Fri, 22 Mar 2013 16:19:56 +0000 (12:19 -0400)

submodule: clarify logic in show_submodule_summary

There are two uses of the "left" and "right" commit variables that
make it hard to be sure what values they have (both for the reader,
and for gcc, which wrongly complains that they might be used
uninitialized).

The function starts with a cascading if statement, checking that the
input sha1s exist, and finally working up to preparing a revision
walk. We only prepare the walk if the cascading conditional did not
find any problems, which we check by seeing whether it set the
"message" variable or not. It's simpler and more obvious to just add
a condition to the end of the cascade.

Later, we check the same "message" variable when deciding whether to
clear commit marks on the left/right commits; if it is set, we
presumably never started the walk. This is wrong, though; we might
have started the walk and munged commit flags, only to encounter an
error afterwards. We should always clear the flags on left/right if
they exist, whether the walk was successful or not.

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

apply --whitespace=fix: avoid running over the postimag... Junio C Hamano Fri, 22 Mar 2013 18:10:03 +0000 (11:10 -0700)

apply --whitespace=fix: avoid running over the postimage buffer

Originally update-pre-post-images could assume that any whitespace
fixing will make the result only shorter by unexpanding runs of
leading SPs into HTs and removing trailing whitespaces at the end of
lines. Updating the post-image we read from the patch to match the
actual result can be performed in-place under this assumption.
These days, however, we have tab-in-indent (aka Python) rule whose
result can be longer than the original, and we do need to allocate
a larger buffer than the input and replace the result.

Fortunately the support for lengthening rewrite was already added
when we began supporting "match while ignoring whitespace
differences" mode in 86c91f91794c (git apply: option to ignore
whitespace differences, 2009-08-04). We only need to correctly
count the number of bytes necessary to hold the updated result and
tell the function to allocate a new buffer.

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

Documentation: merging a tag is a special caseJunio C Hamano Thu, 21 Mar 2013 21:57:48 +0000 (22:57 +0100)

Documentation: merging a tag is a special case

When asking Git to merge a tag (such as a signed tag or annotated tag),
it will always create a merge commit even if fast-forward was possible.
It's like having --no-ff present on the command line.

It's a difference from the default behavior described in git-merge.txt.
It should be documented as an exception of "FAST-FORWARD MERGE" section
and "--ff" option description.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.8.3Junio C Hamano Thu, 21 Mar 2013 22:29:42 +0000 (15:29 -0700)

Update draft release notes to 1.8.3

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

CodingGuidelines: our documents are in AsciiDocJunio C Hamano Thu, 21 Mar 2013 21:17:32 +0000 (14:17 -0700)

CodingGuidelines: our documents are in AsciiDoc

Before talking about notations such as optional [--option] enclosed
in brackets, state that the documents are in AsciiDoc and processed
into other formats.

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

Merge branch 'maint'Junio C Hamano Thu, 21 Mar 2013 21:06:55 +0000 (14:06 -0700)

Merge branch 'maint'

* maint:
diff.c: diff.renamelimit => diff.renameLimit in message
wt-status: fix possible use of uninitialized variable
fast-import: clarify "inline" logic in file_change_m
run-command: always set failed_errno in start_command
transport: drop "int cmp = cmp" hack
drop some obsolete "x = x" compiler warning hacks
fast-import: use pointer-to-pointer to keep list tail

diff.c: diff.renamelimit => diff.renameLimit in messageMax Nanasy Thu, 21 Mar 2013 19:53:38 +0000 (12:53 -0700)

diff.c: diff.renamelimit => diff.renameLimit in message

In the warning message printed when rename or unmodified copy
detection was skipped due to too many files, change "diff.renamelimit"
to "diff.renameLimit", in order to make it consistent with git
documentation, which consistently uses "diff.renameLimit".

Signed-off-by: Max Nanasy <max.nanasy@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wt-status: fix possible use of uninitialized variableJeff King Thu, 21 Mar 2013 11:05:28 +0000 (07:05 -0400)

wt-status: fix possible use of uninitialized variable

In wt_status_print_change_data, we accept a change_type flag
that is meant to be either WT_STATUS_UPDATED or
WT_STATUS_CHANGED. We then switch() on this value to set
the local variable "status" for each case, but do not
provide a fallback "default" label to the switch statement.

As a result, the compiler realizes that "status" might be
unset, and complains with a warning. To silence this
warning, we use the "int status = status" trick. This is
correct with the current code, as all callers provide one of
the two expected change_type flags. However, it's also a
maintenance trap, as there is nothing to prevent future
callers from passing another flag, nor to document this
assumption.

Instead of using the "x = x" hack, let's handle the default
case in the switch() statement with a die("BUG"). That tells
the compiler and any readers of the code exactly what the
function's input assumptions are.

We could also convert the flag to an enum, which would
provide a compile-time check on the function input. However,
since these flags are part of a larger enum, that would make
the code unnecessarily complex (we would have to make a new
enum with just the two flags, and then convert it to the old
enum for passing to sub-functions).

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

fast-import: clarify "inline" logic in file_change_mJeff King Thu, 21 Mar 2013 15:44:39 +0000 (11:44 -0400)

fast-import: clarify "inline" logic in file_change_m

When we read a fast-import line like:

M 100644 :1 foo.c

we point the local object_entry variable "oe" to the object
named by the mark ":1". When the input uses the "inline"
construct, however, we do not have such an object_entry.

The current code is careful not to access "oe" in the inline
case, but we can make the assumption even more obvious (and
catch violations of it) by setting oe to NULL and adding a
comment. As a bonus, this also squelches an over-zealous gcc
-Wuninitialized warning, which means we can drop the "oe =
oe" initialization hack.

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

run-command: always set failed_errno in start_commandJeff King Thu, 21 Mar 2013 15:45:00 +0000 (11:45 -0400)

run-command: always set failed_errno in start_command

When we fail to fork, we set the failed_errno variable to
the value of errno so it is not clobbered by later syscalls.
However, we do so in a conditional, and it is hard to see
later under what conditions the variable has a valid value.

Instead of setting it only when fork fails, let's just
always set it after forking. This is more obvious for human
readers (as we are no longer setting it as a side effect of
a strerror call), and it is more obvious to gcc, which no
longer generates a spurious -Wuninitialized warning. It also
happens to match what the WIN32 half of the #ifdef does.

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

transport: drop "int cmp = cmp" hackJeff King Thu, 21 Mar 2013 11:13:33 +0000 (07:13 -0400)

transport: drop "int cmp = cmp" hack

According to 47ec794, this initialization is meant to
squelch an erroneous uninitialized variable warning from gcc
4.0.1. That version is quite old at this point, and gcc 4.1
and up handle it fine, with one exception. There seems to be
a regression in gcc 4.6.3, which produces the warning;
however, gcc versions 4.4.7 and 4.7.2 do not.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

drop some obsolete "x = x" compiler warning hacksJeff King Thu, 21 Mar 2013 11:10:28 +0000 (07:10 -0400)

drop some obsolete "x = x" compiler warning hacks

In cases where the setting and access of a variable are
protected by the same conditional flag, older versions of
gcc would generate a "might be used unitialized" warning. We
silence the warning by initializing the variable to itself,
a hack that gcc recognizes.

Modern versions of gcc are smart enough to get this right,
going back to at least version 4.3.5. gcc 4.1 does get it
wrong in both cases, but is sufficiently old that we
probably don't need to care about it anymore.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: use pointer-to-pointer to keep list tailJeff King Thu, 21 Mar 2013 11:08:17 +0000 (07:08 -0400)

fast-import: use pointer-to-pointer to keep list tail

This is shorter, idiomatic, and it means the compiler does
not get confused about whether our "e" pointer is valid,
letting us drop the "e = e" hack.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'we/submodule-update-prefix-output'Junio C Hamano Thu, 21 Mar 2013 21:03:10 +0000 (14:03 -0700)

Merge branch 'we/submodule-update-prefix-output'

"git submodule update", when recursed into sub-submodules, did not
acccumulate the prefix paths.

* we/submodule-update-prefix-output:
submodule update: when using recursion, show full path

Merge branch 'jk/mailsplit-maildir-muttsort'Junio C Hamano Thu, 21 Mar 2013 21:03:08 +0000 (14:03 -0700)

Merge branch 'jk/mailsplit-maildir-muttsort'

Sort filenames read from the maildir/ in a way that is more likely
to sort messages in the order the writing MUA meant to, by sorting
numeric segment in numeric order and non-numeric segment in
alphabetical order.

* jk/mailsplit-maildir-muttsort:
mailsplit: sort maildir filenames more cleverly

Merge branch 'rs/zip-compresssed-size-with-export-subst'Junio C Hamano Thu, 21 Mar 2013 21:03:04 +0000 (14:03 -0700)

Merge branch 'rs/zip-compresssed-size-with-export-subst'

When export-subst is used, "zip" output recorded incorrect
size of the file.

* rs/zip-compresssed-size-with-export-subst:
archive-zip: fix compressed size for stored export-subst files

Merge branch 'mn/send-email-works-with-credential'Junio C Hamano Thu, 21 Mar 2013 21:03:02 +0000 (14:03 -0700)

Merge branch 'mn/send-email-works-with-credential'

Hooks the credential system to send-email.

* mn/send-email-works-with-credential:
git-send-email: use git credential to obtain password
Git.pm: add interface for git credential command
Git.pm: allow pipes to be closed prior to calling command_close_bidi_pipe
Git.pm: refactor command_close_bidi_pipe to use _cmd_close
Git.pm: fix example in command_close_bidi_pipe documentation
Git.pm: allow command_close_bidi_pipe to be called as method

Merge branch 'tz/credential-authinfo'Junio C Hamano Thu, 21 Mar 2013 21:03:00 +0000 (14:03 -0700)

Merge branch 'tz/credential-authinfo'

A new read-only credential helper (in contrib/) to interact with
the .netrc/.authinfo files. Hopefully mn/send-email-authinfo topic
can rebuild on top of something like this.

* tz/credential-authinfo:
Add contrib/credentials/netrc with GPG support

Merge branch 'jk/utf-8-can-be-spelled-differently'Junio C Hamano Thu, 21 Mar 2013 21:02:58 +0000 (14:02 -0700)

Merge branch 'jk/utf-8-can-be-spelled-differently'

Some platforms and users spell UTF-8 differently; retry with the
most official "UTF-8" when the system does not understand the
user-supplied encoding name that are the common alternative
spellings of UTF-8.

* jk/utf-8-can-be-spelled-differently:
utf8: accept alternate spellings of UTF-8

Merge branch 'mg/gpg-interface-using-status'Junio C Hamano Thu, 21 Mar 2013 21:02:55 +0000 (14:02 -0700)

Merge branch 'mg/gpg-interface-using-status'

Call "gpg" using the right API when validating the signature on
tags.

* mg/gpg-interface-using-status:
pretty: make %GK output the signing key for signed commits
pretty: parse the gpg status lines rather than the output
gpg_interface: allow to request status return
log-tree: rely upon the check in the gpg_interface
gpg-interface: check good signature in a reliable way

Merge branch 'rt/commit-cleanup-config'Junio C Hamano Thu, 21 Mar 2013 21:02:53 +0000 (14:02 -0700)

Merge branch 'rt/commit-cleanup-config'

Fix tests that contaminated their environments and affected new
tests introduced later in the sequence by containing their effects
in their own subshells.

* rt/commit-cleanup-config:
t7502: perform commits using alternate editor in a subshell

Merge branch 'nd/branch-error-cases'Junio C Hamano Thu, 21 Mar 2013 21:02:51 +0000 (14:02 -0700)

Merge branch 'nd/branch-error-cases'

"git branch" had more cases where it did not bother to check
nonsense command line parameters.

* nd/branch-error-cases:
branch: segfault fixes and validation

Merge branch 'ap/maint-update-index-h-is-for-help'Junio C Hamano Thu, 21 Mar 2013 21:02:48 +0000 (14:02 -0700)

Merge branch 'ap/maint-update-index-h-is-for-help'

"git update-index -h" did not do the usual "-h(elp)" thing.

* ap/maint-update-index-h-is-for-help:
update-index: allow "-h" to also display options

Merge branch 'jc/perl-cat-blob'Junio C Hamano Thu, 21 Mar 2013 21:02:46 +0000 (14:02 -0700)

Merge branch 'jc/perl-cat-blob'

perl/Git.pm::cat_blob slurped everything in core only to write it
out to a file descriptor, which was not a very smart thing to do.

* jc/perl-cat-blob:
Git.pm: fix cat_blob crashes on large files

Merge branch 'da/difftool-fixes'Junio C Hamano Thu, 21 Mar 2013 21:02:43 +0000 (14:02 -0700)

Merge branch 'da/difftool-fixes'

Minor maintenance updates to difftool, and updates to its tests.

* da/difftool-fixes:
t7800: "defaults" is no longer a builtin tool name
t7800: modernize tests
t7800: update copyright notice
difftool: silence uninitialized variable warning

Merge branch 'ob/imap-send-ssl-verify'Junio C Hamano Thu, 21 Mar 2013 21:02:39 +0000 (14:02 -0700)

Merge branch 'ob/imap-send-ssl-verify'

Correctly connect to SSL/TLS sites that serve multiple hostnames on
a single IP by including Server Name Indication in the client-hello.

* ob/imap-send-ssl-verify:
imap-send: support Server Name Indication (RFC4366)

Merge branch 'bc/commit-complete-lines-given-via-m... Junio C Hamano Thu, 21 Mar 2013 21:02:37 +0000 (14:02 -0700)

Merge branch 'bc/commit-complete-lines-given-via-m-option'

'git commit -m "$str"' when $str was already terminated with a LF
now avoids adding an extra LF to the message.

* bc/commit-complete-lines-given-via-m-option:
Documentation/git-commit.txt: rework the --cleanup section
git-commit: only append a newline to -m mesg if necessary
t7502: demonstrate breakage with a commit message with trailing newlines
t/t7502: compare entire commit message with what was expected

Merge branch 'nd/count-garbage'Junio C Hamano Thu, 21 Mar 2013 21:02:34 +0000 (14:02 -0700)

Merge branch 'nd/count-garbage'

"git count-objects -v" did not count leftover temporary packfiles
and other kinds of garbage.

* nd/count-garbage:
count-objects: report how much disk space taken by garbage files
count-objects: report garbage files in pack directory too
sha1_file: reorder code in prepare_packed_git_one()
git-count-objects.txt: describe each line in -v output

Merge branch 'jc/fetch-raw-sha1'Junio C Hamano Thu, 21 Mar 2013 21:02:27 +0000 (14:02 -0700)

Merge branch 'jc/fetch-raw-sha1'

Allows requests to fetch objects at any tip of refs (including
hidden ones). It seems that there may be use cases even outside
Gerrit (e.g. $gmane/215701).

* jc/fetch-raw-sha1:
fetch: fetch objects by their exact SHA-1 object names
upload-pack: optionally allow fetching from the tips of hidden refs
fetch: use struct ref to represent refs to be fetched
parse_fetch_refspec(): clarify the codeflow a bit

Merge branch 'nd/preallocate-hash'Junio C Hamano Thu, 21 Mar 2013 21:02:19 +0000 (14:02 -0700)

Merge branch 'nd/preallocate-hash'

When we know approximately how many entries we will have in the
hash-table, it makes sense to size the hash table to that number
from the beginning to avoid unnecessary rehashing.

* nd/preallocate-hash:
Preallocate hash tables when the number of inserts are known in advance

Merge branch 'nd/index-pack-l10n-buf-overflow'Junio C Hamano Thu, 21 Mar 2013 21:02:16 +0000 (14:02 -0700)

Merge branch 'nd/index-pack-l10n-buf-overflow'

* nd/index-pack-l10n-buf-overflow:
index-pack: fix buffer overflow caused by translations

Merge branch 'tb/document-status-u-tradeoff'Junio C Hamano Thu, 21 Mar 2013 21:02:10 +0000 (14:02 -0700)

Merge branch 'tb/document-status-u-tradeoff'

Suggest users to look into using--untracked=no option when "git
status" takes too long.

* tb/document-status-u-tradeoff:
status: advise to consider use of -u when read_directory takes too long
git status: document trade-offs in choosing parameters to the -u option

Merge branch 'jn/shell-disable-interactive'Junio C Hamano Thu, 21 Mar 2013 21:01:53 +0000 (14:01 -0700)

Merge branch 'jn/shell-disable-interactive'

When the interactive access to git-shell is not enabled, we issue a
message meant to help the system admininstrator to enable it. Add
an explicit way to help the end users who connect to the service by
issuing custom messages to refuse such an access.

* jn/shell-disable-interactive:
shell: new no-interactive-login command to print a custom message
shell doc: emphasize purpose and security model

Merge branch 'jc/maint-push-refspec-default-doc'Junio C Hamano Thu, 21 Mar 2013 21:01:47 +0000 (14:01 -0700)

Merge branch 'jc/maint-push-refspec-default-doc'

Clarify in the documentation "what" gets pushed to "where" when the
command line to "git push" does not say these explicitly.

* jc/maint-push-refspec-default-doc:
Documentation/git-push: clarify the description of defaults

git-am: show the final log message on "Applying:" indicatorSimon Ruderich Thu, 21 Mar 2013 02:40:17 +0000 (03:40 +0100)

git-am: show the final log message on "Applying:" indicator

The "Applying:" message "git am" shows to tell the user which patch
is being applied has traditionally been to help identifying the
input, but we started showing the edited result since f23272f3fd84
(git-am -i: report rewritten title, 2007-12-04), because it was
found more confusing to show the original during an interactive
session.

Treat the modification by the applypatch-msg hook in a similar way
and use the edited result in the progress indication, even though
this is usually not interactive.

Signed-off-by: Simon Ruderich <simon@ruderich.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

do not use GIT_TRACE_PACKET=3 in testsJeff King Wed, 20 Mar 2013 17:43:47 +0000 (13:43 -0400)

do not use GIT_TRACE_PACKET=3 in tests

Some test scripts use the GIT_TRACE mechanism to dump
debugging information to descriptor 3 (and point it to a
file using the shell). On Windows, however, bash is unable
to set up descriptor 3. We do not write our trace to the
file, and worse, we may interfere with other operations
happening on descriptor 3, causing tests to fail or even
behave inconsistently.

Prior to commit 97a83fa (upload-pack: remove packet debugging
harness), these tests used GIT_DEBUG_SEND_PACK, which only
supported output to a descriptor. The tests in t5503 were
always broken on Windows, and were marked to be skipped via
the NOT_MINGW prerequisite. In t5700, the tests used to pass
prior to 97a83fa, but only because they were not careful
enough; because we only grepped the trace file, an empty
file looked successful to us. But post-97a83fa, the writing
to descriptor 3 causes "git fetch" to hang (presumably
because we are throwing random bytes into the middle of the
protocol).

Now that we are using the GIT_TRACE mechanism, we can
improve both scripts by asking git to write directly to a
file rather than a descriptor. That fixes the hang in t5700,
and should allow t5503 to successfully run on Windows.

In both cases we now also use "test -s" to double-check that
our trace file actually contains output, which should reduce
the possibility of an erroneously passing test.

Signed-off-by: Jeff King <peff@peff.net>
Tested-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3200 (branch): modernize styleRamkumar Ramachandra Wed, 20 Mar 2013 12:30:12 +0000 (18:00 +0530)

t3200 (branch): modernize style

Style is inconsistent throughout the file. Make the following
changes:

1. Indent everything with tabs.

2. Put the opening quote (') for the test in the same line as
test_expect_success, and the closing quote on a line by itself.

3. Do not add extra space between redirection operator and filename,
i.e. "cmd >dst", not "cmd > dst".

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

index-pack: always zero-initialize object_entry listJeff King Tue, 19 Mar 2013 16:17:22 +0000 (12:17 -0400)

index-pack: always zero-initialize object_entry list

Commit 38a4556 (index-pack: start learning to emulate
"verify-pack -v", 2011-06-03) added a "delta_depth" counter
to each "struct object_entry". Initially, all object entries
have their depth set to 0; in resolve_delta, we then set the
depth of each delta to "base + 1". Base entries never have
their depth touched, and remain at 0.

To ensure that all depths start at 0, that commit changed
calls to xmalloc the object_entry list into calls to
xcalloc. However, it forgot that we grow the list with
xrealloc later. These extra entries are used when we add an
object from elsewhere to complete a thin pack. If we add a
non-delta object, its depth value will just be uninitialized
heap data.

This patch fixes it by zero-initializing entries we add to
the objects list via the xrealloc.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t2003: work around path mangling issue on WindowsJohannes Sixt Wed, 20 Mar 2013 08:47:57 +0000 (09:47 +0100)

t2003: work around path mangling issue on Windows

MSYS bash considers the part "/g" in the sed expression "s/./=/g" as an
absolute path after an assignment, and mangles it to a C:/something
string. Do not attract bash's attention by avoiding the equals sign.

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

The first wave of topics for 1.8.3Junio C Hamano Tue, 19 Mar 2013 19:30:25 +0000 (12:30 -0700)

The first wave of topics for 1.8.3

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

Merge branch 'jc/add-2.0-u-A-sans-pathspec' (early... Junio C Hamano Tue, 19 Mar 2013 19:21:27 +0000 (12:21 -0700)

Merge branch 'jc/add-2.0-u-A-sans-pathspec' (early part)

* 'jc/add-2.0-u-A-sans-pathspec' (early part):
t2200: check that "add -u" limits itself to subdirectory

Merge branch 'lf/bundle-verify-list-prereqs'Junio C Hamano Tue, 19 Mar 2013 19:21:09 +0000 (12:21 -0700)

Merge branch 'lf/bundle-verify-list-prereqs'

* lf/bundle-verify-list-prereqs:
bundle: Add colons to list headings in "verify"
bundle: Fix "verify" output if history is complete

Merge branch 'jk/graph-c-expose-symbols-for-cgit'Junio C Hamano Tue, 19 Mar 2013 19:20:56 +0000 (12:20 -0700)

Merge branch 'jk/graph-c-expose-symbols-for-cgit'

In the v1.8.0 era, we changed symbols that do not have to be global
to file scope static, but a few functions in graph.c were used by
CGit from sideways bypassing the entry points of the API the
in-tree users use.

* jk/graph-c-expose-symbols-for-cgit:
Revert "graph.c: mark private file-scope symbols as static"

Merge branch 'tk/doc-filter-branch'Junio C Hamano Tue, 19 Mar 2013 19:20:50 +0000 (12:20 -0700)

Merge branch 'tk/doc-filter-branch'

* tk/doc-filter-branch:
Documentation: filter-branch env-filter example
git-filter-branch.txt: clarify ident variables usage

Merge branch 'wk/user-manual-literal-format'Junio C Hamano Tue, 19 Mar 2013 19:20:44 +0000 (12:20 -0700)

Merge branch 'wk/user-manual-literal-format'

* wk/user-manual-literal-format:
user-manual: Standardize backtick quoting

Merge branch 'rj/msvc-build'Junio C Hamano Tue, 19 Mar 2013 19:20:40 +0000 (12:20 -0700)

Merge branch 'rj/msvc-build'

* rj/msvc-build:
msvc: avoid collisions between "tags" and "TAGS"
msvc: test-svn-fe: Fix linker "unresolved external" error
msvc: Fix build by adding missing symbol defines
msvc: git-daemon: Fix linker "unresolved external" errors
msvc: Fix compilation errors caused by poll.h emulation

Merge branch 'dm/ni-maxhost-may-be-missing'Junio C Hamano Tue, 19 Mar 2013 19:18:21 +0000 (12:18 -0700)

Merge branch 'dm/ni-maxhost-may-be-missing'

On systems without NI_MAXHOST in their system header files,
connect.c (hence most of the transport) did not compile.

* dm/ni-maxhost-may-be-missing:
git-compat-util.h: Provide missing netdb.h definitions

Merge branch 'gp/describe-match-uses-glob-pattern'Junio C Hamano Tue, 19 Mar 2013 19:16:31 +0000 (12:16 -0700)

Merge branch 'gp/describe-match-uses-glob-pattern'

The syntax of the pattern given to the "--match=<pattern>" argument
to "git describe" was not documented to be a glob.

* gp/describe-match-uses-glob-pattern:
describe: Document --match pattern format

Merge branch 'gp/avoid-explicit-mention-of-dot-git... Junio C Hamano Tue, 19 Mar 2013 19:16:22 +0000 (12:16 -0700)

Merge branch 'gp/avoid-explicit-mention-of-dot-git-refs'

* gp/avoid-explicit-mention-of-dot-git-refs:
Fix ".git/refs" stragglers

Merge branch 'da/downcase-u-in-usage'Junio C Hamano Tue, 19 Mar 2013 19:15:54 +0000 (12:15 -0700)

Merge branch 'da/downcase-u-in-usage'

* da/downcase-u-in-usage:
contrib/mw-to-git/t/install-wiki.sh: use a lowercase "usage:" string
contrib/examples/git-remote.perl: use a lowercase "usage:" string
tests: use a lowercase "usage:" string
git-svn: use a lowercase "usage:" string
Documentation/user-manual.txt: use a lowercase "usage:" string
templates/hooks--update.sample: use a lowercase "usage:" string
contrib/hooks/setgitperms.perl: use a lowercase "usage:" string
contrib/examples: use a lowercase "usage:" string
contrib/fast-import/import-zips.py: use spaces instead of tabs
contrib/fast-import/import-zips.py: fix broken error message
contrib/fast-import: use a lowercase "usage:" string
contrib/credential: use a lowercase "usage:" string
git-cvsimport: use a lowercase "usage:" string
git-cvsimport: use a lowercase "usage:" string
git-cvsexportcommit: use a lowercase "usage:" string
git-archimport: use a lowercase "usage:" string
git-merge-one-file: use a lowercase "usage:" string
git-relink: use a lowercase "usage:" string
git-svn: use a lowercase "usage:" string
git-sh-setup: use a lowercase "usage:" string

Merge branch 'nd/doc-index-format'Junio C Hamano Tue, 19 Mar 2013 19:15:14 +0000 (12:15 -0700)

Merge branch 'nd/doc-index-format'

Update the index format documentation to mention the v4 format.

* nd/doc-index-format:
update-index: list supported idx versions and their features
read-cache.c: use INDEX_FORMAT_{LB,UB} in verify_hdr()
index-format.txt: mention of v4 is missing in some places

Merge branch 'wk/doc-pre-rebase'Junio C Hamano Tue, 19 Mar 2013 19:14:05 +0000 (12:14 -0700)

Merge branch 'wk/doc-pre-rebase'

* wk/doc-pre-rebase:
Documentation/githooks: Explain pre-rebase parameters

Merge branch 'jc/color-diff-doc'Junio C Hamano Tue, 19 Mar 2013 19:11:31 +0000 (12:11 -0700)

Merge branch 'jc/color-diff-doc'

The --color[=<when>] option to the diff family was documented in a
confusing way.

* jc/color-diff-doc:
diff-options: unconfuse description of --color

push test: rely on &&-chaining instead of 'if bad;... Jonathan Nieder Mon, 18 Mar 2013 23:14:26 +0000 (16:14 -0700)

push test: rely on &&-chaining instead of 'if bad; then echo Oops; fi'

When it is unclear which command from a test has failed, usual
practice these days is to debug by running the test again with "sh -x"
instead of relying on debugging 'echo' statements.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

push test: simplify check of push resultJonathan Nieder Mon, 18 Mar 2013 23:13:41 +0000 (16:13 -0700)

push test: simplify check of push result

This test checks each ref with code like the following:

r=$(git show-ref -s --verify refs/$ref) &&
test "z$r" = "z$the_first_commit"

Afterward it counts refs:

test 1 = $(git for-each-ref refs/remotes/origin | wc -l)

Simpler to test the number and values of relevant refs in for-each-ref
output at the same time using test_cmp. This makes the test more
readable and provides more helpful "./t5516-push-push.sh -v" output
when the test fails.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

push test: use test_config when appropriateJonathan Nieder Mon, 18 Mar 2013 23:12:11 +0000 (16:12 -0700)

push test: use test_config when appropriate

Configuration from test_config does not last beyond the end of the
current test assertion, making each test easier to think about in
isolation.

This changes the meaning of some of the tests. For example, currently
"push with insteadOf" passes even if the line setting
"url.$TRASH.pushInsteadOf" is dropped because an url.$TRASH.insteadOf
setting leaks in from a previous test.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge: a random object may not necssarily be a commitJunio C Hamano Tue, 19 Mar 2013 16:55:34 +0000 (09:55 -0700)

merge: a random object may not necssarily be a commit

The user could have said "git merge $(git rev-parse v1.0.0)"; we
shouldn't mark it as "Merge commit '15999998fb...'" as the merge
name, even though such an invocation might be crazy.

We could even read the "tag " header from the tag object and replace
the object name the user gave us, but let's not lose the information
by doing so, at least not yet.

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

t4018,7810,7811: remove test_config() redefinitionRamkumar Ramachandra Tue, 19 Mar 2013 10:43:14 +0000 (16:13 +0530)

t4018,7810,7811: remove test_config() redefinition

test_config() is already a well-defined function in
test-lib-functions.sh. Don't duplicate it unnecessarily.

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

index-pack: guard nr_resolved_deltas reads by lockThomas Rast Tue, 19 Mar 2013 14:16:41 +0000 (15:16 +0100)

index-pack: guard nr_resolved_deltas reads by lock

The threaded parts of index-pack increment the number of resolved
deltas in nr_resolved_deltas guarded by counter_mutex. However, the
per-thread outer loop accessed nr_resolved_deltas without any locks.

This is not wrong as such, since it doesn't matter all that much
whether we get an outdated value. However, unless someone proves that
this one lock makes all the performance difference, it would be much
cleaner to guard _all_ accesses to the variable with the lock.

The only such use is display_progress() in the threaded section (all
others are in the conclude_pack() callchain outside the threaded
part). To make it obvious that it cannot deadlock, move it out of
work_mutex.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Reviewed-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

index-pack: protect deepest_delta in multithread codeNguyễn Thái Ngọc Duy Tue, 19 Mar 2013 13:01:15 +0000 (20:01 +0700)

index-pack: protect deepest_delta in multithread code

deepest_delta is a global variable but is updated without protection
in resolve_delta(), a multithreaded function. Add a new mutex for it,
but only protect and update when it's actually used (i.e. show_stat is
non-zero).

Another variable that will not be updated is delta_depth in "struct
object_entry" as it's only useful when show_stat is 1. Putting it in
"if (show_stat)" makes it clearer.

The local variable "stat" is renamed to "show_stat" after moving to
global scope because the name "stat" conflicts with stat(2) syscall.

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

Start the post 1.8.2 cycleJunio C Hamano Mon, 18 Mar 2013 22:01:19 +0000 (15:01 -0700)

Start the post 1.8.2 cycle

Again, tentatively let's call this cycle 1.8.3.

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

pack-refs: add fully-peeled traitMichael Haggerty Mon, 18 Mar 2013 11:37:32 +0000 (07:37 -0400)

pack-refs: add fully-peeled trait

Older versions of pack-refs did not write peel lines for
refs outside of refs/tags. This meant that on reading the
pack-refs file, we might set the REF_KNOWS_PEELED flag for
such a ref, even though we do not know anything about its
peeled value.

The previous commit updated the writer to always peel, no
matter what the ref is. That means that packed-refs files
written by newer versions of git are fine to be read by both
old and new versions of git. However, we still have the
problem of reading packed-refs files written by older
versions of git, or by other implementations which have not
yet learned the same trick.

The simplest fix would be to always unset the
REF_KNOWS_PEELED flag for refs outside of refs/tags that do
not have a peel line (if it has a peel line, we know it is
valid, but we cannot assume a missing peel line means
anything). But that loses an important optimization, as
upload-pack should not need to load the object pointed to by
refs/heads/foo to determine that it is not a tag.

Instead, we add a "fully-peeled" trait to the packed-refs
file. If it is set, we know that we can trust a missing peel
line to mean that a ref cannot be peeled. Otherwise, we fall
back to assuming nothing.

[commit message and tests by Jeff King <peff@peff.net>]

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

Merge branch 'maint'Junio C Hamano Sun, 17 Mar 2013 22:39:43 +0000 (15:39 -0700)

Merge branch 'maint'

* maint:
t1507: Test that branchname@{upstream} is interpreted as branch

t1507: Test that branchname@{upstream} is interpreted... Kacper Kornet Sun, 17 Mar 2013 22:17:09 +0000 (23:17 +0100)

t1507: Test that branchname@{upstream} is interpreted as branch

Syntax branchname@{upstream} should interpret its argument as a name of
a branch. Add the test to check that it doesn't try to interpret it as a
refname if the branch in question does not exist.

Signed-off-by: Kacper Kornet <draenog@pld-linux.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-export: do not load blob objects twiceJeff King Sun, 17 Mar 2013 08:38:57 +0000 (04:38 -0400)

fast-export: do not load blob objects twice

When fast-export wants to export a blob object, it first
calls parse_object to get a "struct object" and check
whether we have already shown the object. If we haven't
shown it, we then use read_sha1_file to pull it from disk
and write it out.

That means we load each blob from disk twice: once for
parse_object to find its type and check its sha1, and a
second time when we actually output it. We can drop this to
a single load by using lookup_object to check the SHOWN
flag, and then checking the signature on and outputting a
single buffer.

This provides modest speedups on git.git (best-of-five, "git
fast-export HEAD >/dev/null"):

[before] [after]
real 0m14.347s real 0m13.780s
user 0m14.084s user 0m13.620s
sys 0m0.208s sys 0m0.100s

and somewhat more on more blob-heavy repos (this is a
repository full of media files):

[before] [after]
real 0m52.236s real 0m44.451s
user 0m50.568s user 0m43.000s
sys 0m1.536s sys 0m1.284s

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

fast-export: rename handle_object functionJeff King Sun, 17 Mar 2013 08:33:12 +0000 (04:33 -0400)

fast-export: rename handle_object function

The handle_object function is rather vaguely named; it only
operates on blobs, and its purpose is to export the blob to
the output stream. Let's call it "export_blob" to make it
more clear what it does.

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

pack-refs: write peeled entry for non-tagsJeff King Sun, 17 Mar 2013 08:23:46 +0000 (04:23 -0400)

pack-refs: write peeled entry for non-tags

When we pack an annotated tag ref, we write not only the
sha1 of the tag object along with the ref, but also the sha1
obtained by peeling the tag. This lets readers of the
pack-refs file know the peeled value without having to
actually load the object, speeding up upload-pack's ref
advertisement.

The writer marks a packed-refs file with peeled refs using
the "peeled" trait at the top of the file. When the reader
sees this trait, it knows that each ref is either followed
by its peeled value, or it is not an annotated tag.

However, there is a mismatch between the assumptions of the
reader and writer. The writer will only peel refs under
refs/tags, but the reader does not know this; it will assume
a ref without a peeled value must not be a tag object. Thus
an annotated tag object placed outside of the refs/tags
hierarchy will not have its peeled value printed by
upload-pack.

The simplest way to fix this is to start writing peel values
for all refs. This matches what the reader expects for both
new and old versions of git.

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

use parse_object_or_die instead of die("bad object")Jeff King Sun, 17 Mar 2013 08:23:31 +0000 (04:23 -0400)

use parse_object_or_die instead of die("bad object")

Some call-sites do:

o = parse_object(sha1);
if (!o)
die("bad object %s", some_name);

We can now handle that as a one-liner, and get more
consistent output.

In the third case of this patch, it looks like we are losing
information, as the existing message also outputs the sha1
hex; however, parse_object will already have written a more
specific complaint about the sha1, so there is no point in
repeating it here.

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

avoid segfaults on parse_object failureJeff King Sun, 17 Mar 2013 08:22:36 +0000 (04:22 -0400)

avoid segfaults on parse_object failure

Many call-sites of parse_object assume that they will get a
non-NULL return value; this is not the case if we encounter
an error while parsing the object.

This patch adds a wrapper function around parse_object that
handles dying automatically, and uses it anywhere we
immediately try to access the return value as a non-NULL
pointer (i.e., anywhere that we would currently segfault).

This wrapper may also be useful in other places. The most
obvious one is code like:

o = parse_object(sha1);
if (!o)
die(...);

However, these should not be mechanically converted to
parse_object_or_die, as the die message is sometimes
customized. Later patches can address these sites on a
case-by-case basis.

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

Merge branch 'maint'Junio C Hamano Sun, 17 Mar 2013 07:11:11 +0000 (00:11 -0700)

Merge branch 'maint'

* maint:
rev-parse: clarify documentation of $name@{upstream} syntax
sha1_name: pass object name length to diagnose_invalid_sha1_path()
Makefile: keep LIB_H entries together and sorted

rev-parse: clarify documentation of $name@{upstream... Kacper Kornet Sat, 16 Mar 2013 18:51:43 +0000 (19:51 +0100)

rev-parse: clarify documentation of $name@{upstream} syntax

"git rev-parse" interprets string in string@{upstream} as a name of
a branch not a ref. For example, refs/heads/master@{upstream} looks
for an upstream branch that is merged by git-pull to ref
refs/heads/refs/heads/master not to refs/heads/master.

However the documentation could mislead a user to believe that the
string is interpreted as ref.

Signed-off-by: Kacper Kornet <draenog@pld-linux.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>