gitweb.git
pack-objects: optimize "recency order"Junio C Hamano Thu, 30 Jun 2011 23:21:58 +0000 (16:21 -0700)

pack-objects: optimize "recency order"

This optimizes the "recency order" (see pack-heuristics.txt in
Documentation/technical/ directory) used to order objects within a
packfile in three ways:

- Commits at the tip of tags are written together, in the hope that
revision traversal done in incremental fetch (which starts by
putting them in a revision queue marked as UNINTERESTING) will see a
better locality of these objects;

- In the original recency order, trees and blobs are intermixed. Write
trees together before blobs, in the hope that this will improve
locality when running pathspec-limited revision traversal, i.e.
"git log paths...";

- When writing blob objects out, write the whole family of blobs that use
the same delta base object together, by starting from the root of the
delta chain, and writing its immediate children in a width-first
manner, in the hope that this will again improve locality when reading
blobs that belong to the same path, which are likely to be deltified
against each other.

I tried various workloads in the Linux kernel repositories (HEAD at
v3.0-rc6-71-g4dd1b49) packed with v1.7.6 and with this patch, counting how
large seeks are needed between adjacent accesses to objects in the pack,
and the result looks promising. The history has 2072052 objects, weighing
some 490MiB.

* Simple commit-only log.

$ git log >/dev/null

There are 254656 commits in total.

v1.7.6 with patch
Total number of access : 258,031 258,032
0.0% percentile : 12 12
10.0% percentile : 259 259
20.0% percentile : 294 294
30.0% percentile : 326 326
40.0% percentile : 363 363
50.0% percentile : 415 415
60.0% percentile : 513 513
70.0% percentile : 857 858
80.0% percentile : 10,434 10,441
90.0% percentile : 91,985 91,996
95.0% percentile : 260,852 260,885
99.0% percentile : 1,150,680 1,152,811
99.9% percentile : 3,148,435 3,148,435
Less than 2MiB seek: 99.70% 99.69%

95% of the pack accesses look at data that is no further than 260kB
from the previous location we accessed. The patch does not change the
order of commit objects very much, and the result is very similar.

* Pathspec-limited log.

$ git log drivers/net >/dev/null

The path is touched by 26551 commits and merges (among 254656 total).

v1.7.6 with patch
Total number of access : 559,511 558,663
0.0% percentile : 0 0
10.0% percentile : 182 167
20.0% percentile : 259 233
30.0% percentile : 357 304
40.0% percentile : 714 485
50.0% percentile : 5,046 3,976
60.0% percentile : 688,671 443,578
70.0% percentile : 319,574,732 110,370,100
80.0% percentile : 361,647,599 123,707,229
90.0% percentile : 393,195,669 128,947,636
95.0% percentile : 405,496,875 131,609,321
99.0% percentile : 412,942,470 133,078,115
99.5% percentile : 413,172,266 133,163,349
99.9% percentile : 413,354,356 133,240,445
Less than 2MiB seek: 61.71% 62.87%

With the current pack heuristics, more than 30% of accesses have to
seek further than 300MB; the updated pack heuristics ensures that less
than 0.1% of accesses have to seek further than 135MB. This is largely
due to the fact that the updated heuristics does not mix blobs and
trees together.

* Blame.

$ git blame drivers/net/ne.c >/dev/null

The path is touched by 34 commits and merges.

v1.7.6 with patch
Total number of access : 178,147 178,166
0.0% percentile : 0 0
10.0% percentile : 142 139
20.0% percentile : 222 194
30.0% percentile : 373 300
40.0% percentile : 1,168 837
50.0% percentile : 11,248 7,334
60.0% percentile : 305,121,284 106,850,130
70.0% percentile : 361,427,854 123,709,715
80.0% percentile : 388,127,343 128,171,047
90.0% percentile : 399,987,762 130,200,707
95.0% percentile : 408,230,673 132,174,308
99.0% percentile : 412,947,017 133,181,160
99.5% percentile : 413,312,798 133,220,425
99.9% percentile : 413,352,366 133,269,051
Less than 2MiB seek: 56.47% 56.83%

The result is very similar to the pathspec-limited log above, which
only looks at the tree objects.

* Packing recent history.

$ (git for-each-ref --format='^%(refname)' refs/tags; echo HEAD) |
git pack-objects --revs --stdout >/dev/null

This should pack data worth 71 commits.

v1.7.6 with patch
Total number of access : 11,511 11,514
0.0% percentile : 0 0
10.0% percentile : 48 47
20.0% percentile : 134 98
30.0% percentile : 332 178
40.0% percentile : 1,386 293
50.0% percentile : 8,030 478
60.0% percentile : 33,676 1,195
70.0% percentile : 147,268 26,216
80.0% percentile : 9,178,662 464,598
90.0% percentile : 67,922,665 965,782
95.0% percentile : 87,773,251 1,226,102
99.0% percentile : 98,011,763 1,932,377
99.5% percentile : 100,074,427 33,642,128
99.9% percentile : 105,336,398 275,772,650
Less than 2MiB seek: 77.09% 99.04%

The long-tail part of the result looks worse with the patch, but
the change helps majority of the access. 99.04% of the accesses
need less than 2MiB of seeking, compared to 77.09% with the current
packing heuristics.

* Index pack.

$ git index-pack -v .git/objects/pack/pack*.pack

v1.7.6 with patch
Total number of access : 2,791,228 2,788,802
0.0% percentile : 9 9
10.0% percentile : 140 89
20.0% percentile : 233 167
30.0% percentile : 322 235
40.0% percentile : 464 310
50.0% percentile : 862 423
60.0% percentile : 2,566 686
70.0% percentile : 25,827 1,498
80.0% percentile : 1,317,862 4,971
90.0% percentile : 11,926,385 119,398
95.0% percentile : 41,304,149 952,519
99.0% percentile : 227,613,070 6,709,650
99.5% percentile : 321,265,121 11,734,871
99.9% percentile : 382,919,785 33,155,191
Less than 2MiB seek: 81.73% 96.92%

As the index-pack command already walks objects in the delta chain
order, writing the blobs out in the delta chain order seems to
drastically improve the locality of access.

Note that a half-a-gigabyte packfile comfortably fits in the buffer cache,
and you would unlikely to see much performance difference on a modern and
reasonably beefy machine with enough memory and local disks. Benchmarking
with cold cache (or over NFS) would be interesting.

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

core: log offset pack data accesses happenedJunio C Hamano Thu, 7 Jul 2011 02:08:55 +0000 (19:08 -0700)

core: log offset pack data accesses happened

In a workload other than "git log" (without pathspec nor any option that
causes us to inspect trees and blobs), the recency pack order is said to
cause the access jump around quite a bit. Add a hook to allow us observe
how bad it is.

"git config core.logpackaccess /var/tmp/pal.txt" will give you the log
in the specified file.

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

Merge branch 'ef/maint-win-verify-path'Junio C Hamano Thu, 30 Jun 2011 00:09:17 +0000 (17:09 -0700)

Merge branch 'ef/maint-win-verify-path'

* ef/maint-win-verify-path:
verify_dotfile(): do not assume '/' is the path seperator
verify_path(): simplify check at the directory boundary
verify_path: consider dos drive prefix
real_path: do not assume '/' is the path seperator
A Windows path starting with a backslash is absolute

Merge branch 'js/i18n-windows'Junio C Hamano Thu, 30 Jun 2011 00:03:13 +0000 (17:03 -0700)

Merge branch 'js/i18n-windows'

* js/i18n-windows:
Windows: teach getenv to do a case-sensitive search
mingw.c: move definition of mingw_getenv down
sh-i18n--envsubst: do not crash when no arguments are given

Merge branch 'rs/grep-color'Junio C Hamano Thu, 30 Jun 2011 00:03:13 +0000 (17:03 -0700)

Merge branch 'rs/grep-color'

* rs/grep-color:
grep: add --heading
grep: add --break
grep: fix coloring of hunk marks between files

Merge branch 'jc/maint-1.7.3-checkout-describe'Junio C Hamano Thu, 30 Jun 2011 00:03:12 +0000 (17:03 -0700)

Merge branch 'jc/maint-1.7.3-checkout-describe'

* jc/maint-1.7.3-checkout-describe:
checkout -b <name>: correctly detect existing branch

Merge branch 'db/http-cookies'Junio C Hamano Thu, 30 Jun 2011 00:03:12 +0000 (17:03 -0700)

Merge branch 'db/http-cookies'

* db/http-cookies:
http: pass http.cookiefile using CURLOPT_COOKIEFILE

Merge branch 'jk/maint-1.7.2-status-ignored'Junio C Hamano Thu, 30 Jun 2011 00:03:12 +0000 (17:03 -0700)

Merge branch 'jk/maint-1.7.2-status-ignored'

* jk/maint-1.7.2-status-ignored:
git status --ignored: tests and docs
status: fix bug with missing --ignore files

Conflicts:
Documentation/git-status.txt
t/t7508-status.sh

Merge branch 'jc/diff-index-quick-exit-early'Junio C Hamano Thu, 30 Jun 2011 00:03:11 +0000 (17:03 -0700)

Merge branch 'jc/diff-index-quick-exit-early'

* jc/diff-index-quick-exit-early:
diff-index --quiet: learn the "stop feeding the backend early" logic

Conflicts:
unpack-trees.h

Merge branch 'mg/diff-stat-count'Junio C Hamano Thu, 30 Jun 2011 00:03:10 +0000 (17:03 -0700)

Merge branch 'mg/diff-stat-count'

* mg/diff-stat-count:
diff --stat-count: finishing touches
diff-options.txt: describe --stat-{width,name-width,count}
diff: introduce --stat-lines to limit the stat lines
diff.c: omit hidden entries from namelen calculation with --stat

Merge branch 'jc/advice-about-to-lose-commit'Junio C Hamano Thu, 30 Jun 2011 00:03:10 +0000 (17:03 -0700)

Merge branch 'jc/advice-about-to-lose-commit'

* jc/advice-about-to-lose-commit:
checkout: make advice when reattaching the HEAD less loud

Conflicts:
builtin/checkout.c

Merge branch 'jk/combine-diff-binary-etc'Junio C Hamano Thu, 30 Jun 2011 00:03:10 +0000 (17:03 -0700)

Merge branch 'jk/combine-diff-binary-etc'

* jk/combine-diff-binary-etc:
combine-diff: respect textconv attributes
refactor get_textconv to not require diff_filespec
combine-diff: handle binary files as binary
combine-diff: calculate mode_differs earlier
combine-diff: split header printing into its own function

Merge branch 'instaweb' of git://bogomips.org/git-svnJunio C Hamano Wed, 29 Jun 2011 23:43:23 +0000 (16:43 -0700)

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

* 'instaweb' of git://bogomips.org/git-svn:
git-instaweb: Check that correct config file exists for (re)start
git-instaweb: Move all actions at the end of script
git-instaweb: Use $conf, not $fqgitdir/gitweb/httpd.conf
git-instaweb: Extract configuring web server into configure_httpd

Merge git://bogomips.org/git-svn into maintJunio C Hamano Wed, 29 Jun 2011 23:42:41 +0000 (16:42 -0700)

Merge git://bogomips.org/git-svn into maint

* git://bogomips.org/git-svn:
git-svn: Correctly handle root commits in mergeinfo ranges
git-svn: Disambiguate rev-list arguments to improve error message
git-svn: Demonstrate a bug with root commits in mergeinfo ranges

Merge branch 'maint-1.7.5' into maintJunio C Hamano Wed, 29 Jun 2011 23:41:55 +0000 (16:41 -0700)

Merge branch 'maint-1.7.5' into maint

* maint-1.7.5:
test: skip clean-up when running under --immediate mode
"branch -d" can remove more than one branches

test: skip clean-up when running under --immediate... Junio C Hamano Mon, 27 Jun 2011 18:02:22 +0000 (11:02 -0700)

test: skip clean-up when running under --immediate mode

Some tests try to be too careful about cleaning themselves up and
do

test_expect_success description '
set-up some test refs and/or configuration &&
test_when_finished "revert the above changes" &&
the real test
'

Which is nice to make sure that a potential failure would not have
unexpected interaction with the next test. This however interferes when
"the real test" fails and we want to see what is going on, by running the
test with --immediate mode and descending into its trash directory after
the test stops. The precondition to run the real test and cause it to fail
is all gone after the clean-up procedure defined by test_when_finished is
done.

Update test_run_ which is the workhorse of running a test script
called from test_expect_success and test_expect_failure, so that we do not
run clean-up script defined with test_when_finished when a test that is
expected to succeed fails under the --immediate mode.

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

"branch -d" can remove more than one branchesJunio C Hamano Mon, 27 Jun 2011 22:04:32 +0000 (15:04 -0700)

"branch -d" can remove more than one branches

Since 03feddd (git-check-ref-format: reject funny ref names, 2005-10-13),
"git branch -d" can take more than one branch names to remove.

The documentation was correct, but the usage string was not.

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

git-svn: Correctly handle root commits in mergeinfo... Michael Haggerty Sat, 18 Jun 2011 06:48:00 +0000 (08:48 +0200)

git-svn: Correctly handle root commits in mergeinfo ranges

If the bottom of a mergeinfo range is a commit that maps to a git root
commit, then it doesn't have a parent. In such a case, use git commit
range "$top_commit" rather than "$bottom_commit^..$top_commit".

[ew: line-wrap at 80 columns]

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Acked-by: Eric Wong <normalperson@yhbt.net>

git-svn: Disambiguate rev-list arguments to improve... Michael Haggerty Sat, 18 Jun 2011 06:47:59 +0000 (08:47 +0200)

git-svn: Disambiguate rev-list arguments to improve error message

Add "--" in the "git rev-list" command line so that if there is a bug
and the revisions cannot be found, the error message is a bit less
cryptic.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Acked-by: Eric Wong <normalperson@yhbt.net>

git-svn: Demonstrate a bug with root commits in mergein... Michael Haggerty Sat, 18 Jun 2011 06:47:58 +0000 (08:47 +0200)

git-svn: Demonstrate a bug with root commits in mergeinfo ranges

If a svn:mergeinfo range starts at a commit that was converted as a
git root commit (e.g., r1 or a branch that was created out of thin
air), then there is an error when git-svn tries to run

git rev-list "$bottom_commit^..$top_commit"

because $bottom_commit (the git commit corresponding to r1) has no
parent.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Acked-by: Eric Wong <normalperson@yhbt.net>

git-instaweb: Check that correct config file exists... Jakub Narebski Thu, 23 Jun 2011 21:01:03 +0000 (23:01 +0200)

git-instaweb: Check that correct config file exists for (re)start

Currently start/restart does not generate any configuration files for
spawning a new instance. This means that

$ git instaweb --http=<server> --start

might pick up stale 'httpd.conf' file for a different web server
(e.g. for default lighttpd when requesting apache2).

This commit changes that, and makes git-instaweb generate web server
config file and/or gitweb config file if don't exists.

This required naming config files after the name of web server
(alternate solution would be to somehow mark for which web server was
config file generated).

Note that web servers that embed configuration in server script file,
namely webrick and plackup, and which delete "$conf" in their *_conf
function, would have their config (server script) always regenerated.

Note: this commit introduces a bit of code repetition (but only a few
lines).

Reported-by: Gurjeet Singh <singh.gurjeet@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>

git-instaweb: Move all actions at the end of scriptJakub Narebski Thu, 23 Jun 2011 20:59:26 +0000 (22:59 +0200)

git-instaweb: Move all actions at the end of script

As a nice side-effect now the order of parameters does not matter:

$ git instaweb --httpd=apache2 --start

is now (after this patch) the same as

$ git instaweb --start --httpd=apache2

Before this commit --start, --stop, --restart (and their subcommand
versions start, stop, restart) exited immediately.

This is preparatory work for making start/restart check that correct
configuration is set up; this change was required to have access in
start_httpd to requested web browser etc.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>

git-instaweb: Use $conf, not $fqgitdir/gitweb/httpd... Jakub Narebski Thu, 23 Jun 2011 19:56:37 +0000 (21:56 +0200)

git-instaweb: Use $conf, not $fqgitdir/gitweb/httpd.conf

Don't repeat yourself: use "$conf" instead of its [current] contents,
namely "$fqgitdir/gitweb/httpd.conf".

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>

git-instaweb: Extract configuring web server into confi... Jakub Narebski Thu, 23 Jun 2011 19:55:00 +0000 (21:55 +0200)

git-instaweb: Extract configuring web server into configure_httpd

This is preparatory work for making start/restart check that
git-instaweb set up correct configuration, and generate it if it is
missing.

Pure refactoring, no functional changes.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>

Git 1.7.6 v1.7.6Junio C Hamano Sun, 26 Jun 2011 19:41:16 +0000 (12:41 -0700)

Git 1.7.6

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

Merge branch 'maint'Junio C Hamano Sun, 26 Jun 2011 19:09:11 +0000 (12:09 -0700)

Merge branch 'maint'

* maint:
completion: replace core.abbrevguard to core.abbrev

Merge branch 'maint-1.7.4' into maintJunio C Hamano Fri, 24 Jun 2011 16:40:02 +0000 (09:40 -0700)

Merge branch 'maint-1.7.4' into maint

* maint-1.7.4:
completion: replace core.abbrevguard to core.abbrev

completion: replace core.abbrevguard to core.abbrevNamhyung Kim Fri, 24 Jun 2011 06:17:42 +0000 (15:17 +0900)

completion: replace core.abbrevguard to core.abbrev

The core.abbrevguard config variable had removed and
now core.abbrev has been used instead. Teach it.

Signed-off-by: Namhyung Kim <namhyung@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 1.7.6-rc3 v1.7.6-rc3Junio C Hamano Wed, 22 Jun 2011 23:13:16 +0000 (16:13 -0700)

Git 1.7.6-rc3

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

Merge branch 'maint'Junio C Hamano Wed, 22 Jun 2011 21:01:18 +0000 (14:01 -0700)

Merge branch 'maint'

* maint:
Documentation: git diff --check respects core.whitespace

Documentation: git diff --check respects core.whitespaceChristof Krüger Wed, 22 Jun 2011 15:33:02 +0000 (17:33 +0200)

Documentation: git diff --check respects core.whitespace

Fix documentation on "git diff --check" by adopting the description from
"git apply --whitespace".

Signed-off-by: Christof Krüger <git@christof-krueger.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Tue, 21 Jun 2011 21:56:59 +0000 (14:56 -0700)

Merge branch 'maint'

* maint:
gitweb: 'pickaxe' and 'grep' features requires 'search' to be enabled

gitweb: 'pickaxe' and 'grep' features requires 'search... Jakub Narebski Tue, 21 Jun 2011 06:41:16 +0000 (08:41 +0200)

gitweb: 'pickaxe' and 'grep' features requires 'search' to be enabled

Both 'pickaxe' (searching changes) and 'grep' (searching files)
require basic 'search' feature to be enabled to work. Enabling
e.g. only 'pickaxe' won't work.

Add a comment about this.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'mk/grep-pcre'Junio C Hamano Mon, 20 Jun 2011 21:49:44 +0000 (14:49 -0700)

Merge branch 'mk/grep-pcre'

* mk/grep-pcre:
t7810: avoid unportable use of "echo"

t7810: avoid unportable use of "echo"Junio C Hamano Mon, 20 Jun 2011 21:49:34 +0000 (14:49 -0700)

t7810: avoid unportable use of "echo"

Michael J Gruber noticed that under /bin/dash this test failed
(as is expected -- \n in the string can be interpreted by the
command), while it passed with bash. We probably could work it
around by using backquote in front of it, but it is safer and
more readable to avoid "echo" altogether in a case like this.

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

plug a few coverity-spotted leaksJim Meyering Mon, 20 Jun 2011 07:40:06 +0000 (09:40 +0200)

plug a few coverity-spotted leaks

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'di/no-no-existant'Junio C Hamano Sun, 19 Jun 2011 23:01:54 +0000 (16:01 -0700)

Merge branch 'di/no-no-existant'

* di/no-no-existant:
Fix typo: existant->existent

Merge branch 'maint'Junio C Hamano Sun, 19 Jun 2011 23:01:51 +0000 (16:01 -0700)

Merge branch 'maint'

* maint:
builtin/gc.c: add missing newline in message

builtin/gc.c: add missing newline in messageAndreas Schwab Sun, 19 Jun 2011 08:03:26 +0000 (10:03 +0200)

builtin/gc.c: add missing newline in message

Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: link shell libraries into valgrind directoryJeff King Fri, 17 Jun 2011 20:36:32 +0000 (16:36 -0400)

tests: link shell libraries into valgrind directory

When we run tests under valgrind, we symlink anything
executable that starts with git-* or test-* into a special
valgrind bin directory, and then make that our
GIT_EXEC_PATH.

However, shell libraries like git-sh-setup do not have the
executable bit marked, and did not get symlinked. This
means that any test looking for shell libraries in our
exec-path would fail to find them, even though that is a
fine thing to do when testing against a regular git build
(or in a git install, for that matter).

t2300 demonstrated this problem. The fix is to symlink these
shell libraries directly into the valgrind directory.

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

t/Makefile: pass test opts to valgrind target properlyJeff King Fri, 17 Jun 2011 08:29:57 +0000 (04:29 -0400)

t/Makefile: pass test opts to valgrind target properly

The valgrind target just reinvokes make with GIT_TEST_OPTS
set to "--valgrind". However, it does this using an
environment variable, which means GIT_TEST_OPTS in your
config.mak would override it, and "make valgrind" would
simply run the test suite without valgrind on.

Instead, we should pass GIT_TEST_OPTS on the command-line,
overriding what's in config.mak, and take care to append to
whatever the user has there already.

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

Merge branch 'ab/i18n-scripts-basic'Junio C Hamano Fri, 17 Jun 2011 18:40:32 +0000 (11:40 -0700)

Merge branch 'ab/i18n-scripts-basic'

* ab/i18n-scripts-basic:
sh-i18n--envsubst.c: do not #include getopt.h

sh-i18n--envsubst.c: do not #include getopt.hBrandon Casey Fri, 17 Jun 2011 18:19:26 +0000 (11:19 -0700)

sh-i18n--envsubst.c: do not #include getopt.h

The getopt.h header file is not used. It's inclusion is left over from the
original version of this source. Additionally, getopt.h does not exist on
all platforms (SunOS 5.7) and will cause a compilation failure. So, let's
remove it.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fix typo: existant->existentDmitry Ivankov Thu, 16 Jun 2011 13:42:48 +0000 (19:42 +0600)

Fix typo: existant->existent

refs.c had a error message "Trying to write ref with nonexistant object".
And no tests relied on the wrong spelling.
Also typo was present in some test scripts internals, these tests still pass.

Signed-off-by: Dmitry Ivankov <divanorama@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 1.7.6-rc2 v1.7.6-rc2Junio C Hamano Thu, 16 Jun 2011 16:21:36 +0000 (09:21 -0700)

Git 1.7.6-rc2

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

gitweb: do not misparse nonnumeric content tag files... Jonathan Nieder Thu, 9 Jun 2011 07:08:57 +0000 (02:08 -0500)

gitweb: do not misparse nonnumeric content tag files that contain a digit

v1.7.6-rc0~27^2~4 (gitweb: Change the way "content tags" ('ctags') are
handled, 2011-04-29) tried to make gitweb's tag cloud feature more
intuitive for webmasters by checking whether the ctags/<label> under
a project's .git dir contains a number (representing the strength of
association to <label>) before treating it as one.

With that change, after putting '$feature{'ctags'}{'default'} = [1];'
in your $GITWEB_CONFIG, you could do

echo Linux >.git/ctags/linux

and gitweb would treat that as a request to tag the current repository
with the Linux tag, instead of the previous behavior of writing an
error page embedded in the projects list that triggers error messages
from Chromium and Firefox about malformed XML.

Unfortunately the pattern (\d+) used to match numbers is too loose,
and the "XML declaration allowed only at the start of the document"
error can still be experienced if you write "Linux-2.6" in place of
"Linux" in the example above. Fix it by tightening the pattern to
^\d+$.

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

Git 1.7.6-rc1 v1.7.6-rc1Junio C Hamano Thu, 9 Jun 2011 01:29:48 +0000 (18:29 -0700)

Git 1.7.6-rc1

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

Merge branch 'maint'Junio C Hamano Thu, 9 Jun 2011 01:13:39 +0000 (18:13 -0700)

Merge branch 'maint'

* maint:
fetch: do not leak a refspec

fetch: do not leak a refspecJim Meyering Wed, 8 Jun 2011 20:06:33 +0000 (22:06 +0200)

fetch: do not leak a refspec

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify_dotfile(): do not assume '/' is the path seperatorTheo Niessink Wed, 8 Jun 2011 12:04:41 +0000 (14:04 +0200)

verify_dotfile(): do not assume '/' is the path seperator

verify_dotfile() currently assumes that the path seperator is '/', but on
Windows it can also be '\\', so use is_dir_sep() instead.

Signed-off-by: Theo Niessink <theo@taletn.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify_path(): simplify check at the directory boundaryJunio C Hamano Tue, 7 Jun 2011 03:49:06 +0000 (20:49 -0700)

verify_path(): simplify check at the directory boundary

We simply want to say "At a directory boundary, be careful with a name
that begins with a dot, forbid a name that ends with the boundary
character or has duplicated bounadry characters".

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

Merge branch 'jc/magic-pathspec'Junio C Hamano Tue, 7 Jun 2011 15:32:42 +0000 (08:32 -0700)

Merge branch 'jc/magic-pathspec'

* jc/magic-pathspec:
t3703: skip more tests using colons in file names on Windows

t3703: skip more tests using colons in file names on... Alex Riesen Tue, 7 Jun 2011 09:49:44 +0000 (11:49 +0200)

t3703: skip more tests using colons in file names on Windows

Use the same test and prerequisite as introduced in similar
fix in 650af7ae8bdf92bd92df2.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jn/mime-type-with-params'Junio C Hamano Mon, 6 Jun 2011 18:40:22 +0000 (11:40 -0700)

Merge branch 'jn/mime-type-with-params'

* jn/mime-type-with-params:
gitweb: Fix usability of $prevent_xss

Merge branch 'jn/gitweb-docs'Junio C Hamano Mon, 6 Jun 2011 18:40:18 +0000 (11:40 -0700)

Merge branch 'jn/gitweb-docs'

* jn/gitweb-docs:
gitweb: Move "Requirements" up in gitweb/INSTALL
gitweb: Describe CSSMIN and JSMIN in gitweb/INSTALL
gitweb: Move information about installation from README to INSTALL

Merge branch 'jk/diff-not-so-quick'Junio C Hamano Mon, 6 Jun 2011 18:40:14 +0000 (11:40 -0700)

Merge branch 'jk/diff-not-so-quick'

* jk/diff-not-so-quick:
diff: futureproof "stop feeding the backend early" logic
diff_tree: disable QUICK optimization with diff filter

Conflicts:
diff.c

Merge branch 'bc/maint-status-z-to-use-porcelain'Junio C Hamano Mon, 6 Jun 2011 18:40:08 +0000 (11:40 -0700)

Merge branch 'bc/maint-status-z-to-use-porcelain'

* bc/maint-status-z-to-use-porcelain:
builtin/commit.c: set status_format _after_ option parsing
t7508: demonstrate status's failure to use --porcelain format with -z

Conflicts:
builtin/commit.c

Windows: teach getenv to do a case-sensitive searchJohannes Sixt Mon, 6 Jun 2011 07:08:13 +0000 (09:08 +0200)

Windows: teach getenv to do a case-sensitive search

getenv() on Windows looks up environment variables in a case-insensitive
manner. Even though all documentations claim that the environment is
case-insensitive, it is possible for applications to pass an environment
to child processes that has variables that differ only in case. Bash on
Windows does this, for example, and sh-i18n--envsubst depends on this
behavior.

With this patch environment variables are first looked up in a
case-sensitive manner; only if this finds nothing, the system's getenv() is
used as a fallback.

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

mingw.c: move definition of mingw_getenv downJohannes Sixt Mon, 6 Jun 2011 07:06:02 +0000 (09:06 +0200)

mingw.c: move definition of mingw_getenv down

We want to use static lookup_env() in a subsequent change.

At first sight, this change looks innocent. But it is not due to the
#undef getenv. There is one caller of getenv between the old location and
the new location whose behavior could change. But as can be seen from the
defintion of mingw_getenv, the behavior for this caller does not change
substantially.

To ensure consistent behavior in the future, change all getenv callers
in mingw.c to use mingw_getenv.

With this patch, this is not a big deal, yet, but with the subsequent
change, where we teach getenv to do a case-sensitive lookup, the behavior
of all call sites is changed.

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

sh-i18n--envsubst: do not crash when no arguments are... Johannes Sixt Mon, 6 Jun 2011 06:59:10 +0000 (08:59 +0200)

sh-i18n--envsubst: do not crash when no arguments are given

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

checkout -b <name>: correctly detect existing branchJunio C Hamano Mon, 6 Jun 2011 05:17:04 +0000 (22:17 -0700)

checkout -b <name>: correctly detect existing branch

When create a new branch, we fed "refs/heads/<proposed name>" as a string
to get_sha1() and expected it to fail when a branch already exists.

The right way to check if a ref exists is to check with resolve_ref().

A naïve solution that might appear attractive but does not work is to
forbid slashes in get_describe_name() but that will not work. A describe
name is is in the form of "ANYTHING-g<short sha1>", and that ANYTHING part
comes from a original tag name used in the repository the user ran the
describe command. A sick user could have a confusing hierarchical tag
whose name is "refs/heads/foobar" (stored as refs/tags/refs/heads/foobar")
to generate a describe name "refs/heads/foobar-6-g02ac983", and we should
be able to use that name to refer to the object whose name is 02ac983.

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

grep: add --headingRené Scharfe Sun, 5 Jun 2011 15:24:36 +0000 (17:24 +0200)

grep: add --heading

With --heading, the filename is printed once before matches from that
file instead of at the start of each line, giving more screen space to
the actual search results.

This option is taken from ack (http://betterthangrep.com/). And now
git grep can dress up like it:

$ git config alias.ack "grep --break --heading --line-number"

$ git ack -e --heading
Documentation/git-grep.txt
154:--heading::

t/t7810-grep.sh
785:test_expect_success 'grep --heading' '
786: git grep --heading -e char -e lo_w hello.c hello_world >actual &&
808: git grep --break --heading -n --color \

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

grep: add --breakRené Scharfe Sun, 5 Jun 2011 15:24:25 +0000 (17:24 +0200)

grep: add --break

With --break, an empty line is printed between matches from different
files, increasing readability. This option is taken from ack
(http://betterthangrep.com/).

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

grep: fix coloring of hunk marks between filesRené Scharfe Sun, 5 Jun 2011 15:24:15 +0000 (17:24 +0200)

grep: fix coloring of hunk marks between files

Commit 431d6e7b (grep: enable threading for context line printing)
split the printing of the "--\n" mark between results from different
files out into two places: show_line() in grep.c for the non-threaded
case and work_done() in builtin/grep.c for the threaded case. Commit
55f638bd (grep: Colorize filename, line number, and separator) updated
the former, but not the latter, so the separators between files are
not colored if threads are used.

This patch merges the two. In the threaded case, hunk marks are now
printed by show_line() for every file, including the first one, and the
very first mark is simply skipped in work_done(). This ensures that the
output is properly colored and works just as well.

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

gitweb: Fix usability of $prevent_xssJakub Narebski Sat, 4 Jun 2011 08:43:35 +0000 (10:43 +0200)

gitweb: Fix usability of $prevent_xss

With XSS prevention on (enabled using $prevent_xss), blobs
('blob_plain') of all types except a few known safe ones are served
with "Content-Disposition: attachment". However the check was too
strict; it didn't take into account optional parameter attributes,

media-type = type "/" subtype *( ";" parameter )

as described in RFC 2616

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7

This fixes that, and it for example treats following as safe MIME
media type:

text/plain; charset=utf-8

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Move "Requirements" up in gitweb/INSTALLJakub Narebski Fri, 3 Jun 2011 16:31:48 +0000 (18:31 +0200)

gitweb: Move "Requirements" up in gitweb/INSTALL

This way you can examine prerequisites at first glance, before
detailed instructions on installing gitweb. Straightforward
text movement.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http: pass http.cookiefile using CURLOPT_COOKIEFILEDuncan Brown Thu, 2 Jun 2011 20:31:25 +0000 (16:31 -0400)

http: pass http.cookiefile using CURLOPT_COOKIEFILE

If the config option http.cookiefile is set, pass this file to libCURL using
the CURLOPT_COOKIEFILE option. This is similar to calling curl with the -b
option. This allows git http authorization with authentication mechanisms
that use cookies, such as SAML Enhanced Client or Proxy (ECP) used by
Shibboleth.

To use SAML/ECP, the user needs to request a session cookie with their own ECP
code. See for example:

<https://wiki.shibboleth.net/confluence/display/SHIB2/ECP>

Once the cookie file has been created, it can be passed to git with, e.g.

git config --global http.cookiefile "/home/dbrown/.curlcookies"

libCURL will then pass the appropriate session cookies to the git http server.

Signed-off-by: Duncan Brown <duncan.brown@ligo.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git status --ignored: tests and docsJunio C Hamano Thu, 2 Jun 2011 16:07:11 +0000 (09:07 -0700)

git status --ignored: tests and docs

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

gitweb: Describe CSSMIN and JSMIN in gitweb/INSTALLJakub Narebski Thu, 2 Jun 2011 14:55:53 +0000 (16:55 +0200)

gitweb: Describe CSSMIN and JSMIN in gitweb/INSTALL

The build-time configuration variables JSMIN and CSSMIN were mentioned
only in Makefile; add their description to gitweb/INSTALL.

This required moving description of GITWEB_JS up, near GITWEB_CSS and
just introduced CSMIN and JSMIN.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Move information about installation from README... Jakub Narebski Thu, 2 Jun 2011 14:55:52 +0000 (16:55 +0200)

gitweb: Move information about installation from README to INSTALL

Almost straightformard moving of "How to configure gitweb for your
local system" section from gitweb/README to gitweb/INSTALL, as it is
about build time configuration. Updated references to it.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

status: fix bug with missing --ignore filesJeff King Thu, 2 Jun 2011 05:54:49 +0000 (01:54 -0400)

status: fix bug with missing --ignore files

Commit 1b908b6 (wt-status: rename and restructure
status-print-untracked, 2010-04-10) converted the
wt_status_print_untracked function into
wt_status_print_other, taking a string_list of either
untracked or ignored items to print. However, the "nothing
to show" early return still checked the wt_status->untracked
list instead of the passed-in list.

That meant that if we had ignored items to show, but no
untracked items, we would erroneously exit early and fail to
show the ignored items.

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

Sync with 1.7.5.4 v1.7.6-rc0Junio C Hamano Wed, 1 Jun 2011 21:11:17 +0000 (14:11 -0700)

Sync with 1.7.5.4

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

Git 1.7.5.4 v1.7.5.4Junio C Hamano Wed, 1 Jun 2011 21:08:26 +0000 (14:08 -0700)

Git 1.7.5.4

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

Merge branch 'jk/maint-config-alias-fix' into maintJunio C Hamano Wed, 1 Jun 2011 21:05:22 +0000 (14:05 -0700)

Merge branch 'jk/maint-config-alias-fix' into maint

* jk/maint-config-alias-fix:
handle_options(): do not miscount how many arguments were used
config: always parse GIT_CONFIG_PARAMETERS during git_config
git_config: don't peek at global config_parameters
config: make environment parsing routines static

Merge branch 'jc/fmt-req-fix' into maintJunio C Hamano Wed, 1 Jun 2011 21:03:07 +0000 (14:03 -0700)

Merge branch 'jc/fmt-req-fix' into maint

* jc/fmt-req-fix:
userformat_find_requirements(): find requirement for the correct format

Merge branch 'jk/maint-docs' into maintJunio C Hamano Wed, 1 Jun 2011 21:02:52 +0000 (14:02 -0700)

Merge branch 'jk/maint-docs' into maint

* jk/maint-docs:
docs: fix some antique example output
docs: make sure literal "->" isn't converted to arrow
docs: update status --porcelain format
docs: minor grammar fixes to git-status

Merge branch 'jn/doc-remote-helpers' into maintJunio C Hamano Wed, 1 Jun 2011 21:02:45 +0000 (14:02 -0700)

Merge branch 'jn/doc-remote-helpers' into maint

* jn/doc-remote-helpers:
Documentation: do not misinterpret refspecs as bold text

Merge branch 'kk/maint-prefix-in-config-mak' into maintJunio C Hamano Wed, 1 Jun 2011 21:02:39 +0000 (14:02 -0700)

Merge branch 'kk/maint-prefix-in-config-mak' into maint

* kk/maint-prefix-in-config-mak:
config.mak.in: allow "configure --sysconfdir=/else/where"

diffcore-rename.c: avoid set-but-not-used warningJim Meyering Fri, 29 Apr 2011 09:42:41 +0000 (11:42 +0200)

diffcore-rename.c: avoid set-but-not-used warning

Since 9d8a5a5 (diffcore-rename: refactor "too many candidates" logic,
2011-01-06), diffcore_rename() initializes num_src but does not use it
anymore. "-Wunused-but-set-variable" in gcc-4.6 complains about this.

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.7.6Junio C Hamano Tue, 31 May 2011 19:22:50 +0000 (12:22 -0700)

Update draft release notes to 1.7.6

I think we are almost there for the feature freeze.

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

Merge branch 'jk/format-patch-am'Junio C Hamano Tue, 31 May 2011 19:19:11 +0000 (12:19 -0700)

Merge branch 'jk/format-patch-am'

* jk/format-patch-am:
format-patch: preserve subject newlines with -k
clean up calling conventions for pretty.c functions
pretty: add pp_commit_easy function for simple callers
mailinfo: always clean up rfc822 header folding
t: test subject handling in format-patch / am pipeline

Conflicts:
builtin/branch.c
builtin/log.c
commit.h

Merge branch 'jn/doc-remote-helpers'Junio C Hamano Tue, 31 May 2011 19:09:35 +0000 (12:09 -0700)

Merge branch 'jn/doc-remote-helpers'

* jn/doc-remote-helpers:
Documentation: do not misinterpret refspecs as bold text

Merge branch 'jk/format-patch-empty-prefix'Junio C Hamano Tue, 31 May 2011 19:09:27 +0000 (12:09 -0700)

Merge branch 'jk/format-patch-empty-prefix'

* jk/format-patch-empty-prefix:
format-patch: make zero-length subject prefixes prettier

Merge branch 'ab/i18n-envsubst-doc-fix'Junio C Hamano Tue, 31 May 2011 19:09:21 +0000 (12:09 -0700)

Merge branch 'ab/i18n-envsubst-doc-fix'

* ab/i18n-envsubst-doc-fix:
git-sh-i18n--envsubst: add SYNOPSIS section to the documentation

Merge branch 'jc/log-quiet-fix'Junio C Hamano Tue, 31 May 2011 19:09:18 +0000 (12:09 -0700)

Merge branch 'jc/log-quiet-fix'

* jc/log-quiet-fix:
log: --quiet should serve as synonym to -s

Merge branch 'kk/maint-prefix-in-config-mak'Junio C Hamano Tue, 31 May 2011 19:09:12 +0000 (12:09 -0700)

Merge branch 'kk/maint-prefix-in-config-mak'

* kk/maint-prefix-in-config-mak:
config.mak.in: allow "configure --sysconfdir=/else/where"

Merge branch 'jk/rebase-head-reflog'Junio C Hamano Tue, 31 May 2011 19:09:08 +0000 (12:09 -0700)

Merge branch 'jk/rebase-head-reflog'

* jk/rebase-head-reflog:
rebase: write a reflog entry when finishing
rebase: create HEAD reflog entry when aborting

Merge branch 'jk/maint-docs'Junio C Hamano Tue, 31 May 2011 19:09:00 +0000 (12:09 -0700)

Merge branch 'jk/maint-docs'

* jk/maint-docs:
docs: fix some antique example output
docs: make sure literal "->" isn't converted to arrow
docs: update status --porcelain format
docs: minor grammar fixes to git-status

Merge branch 'jk/read-in-full-stops-on-error'Junio C Hamano Tue, 31 May 2011 19:08:55 +0000 (12:08 -0700)

Merge branch 'jk/read-in-full-stops-on-error'

* jk/read-in-full-stops-on-error:
read_in_full: always report errors

Merge branch 'jk/maint-remote-mirror-safer'Junio C Hamano Tue, 31 May 2011 19:08:52 +0000 (12:08 -0700)

Merge branch 'jk/maint-remote-mirror-safer'

* jk/maint-remote-mirror-safer:
remote: allow "-t" with fetch mirrors

Merge branch 'jl/read-tree-m-dry-run'Junio C Hamano Tue, 31 May 2011 19:08:48 +0000 (12:08 -0700)

Merge branch 'jl/read-tree-m-dry-run'

* jl/read-tree-m-dry-run:
Teach read-tree the -n|--dry-run option
unpack-trees: add the dry_run flag to unpack_trees_options

Sync with maintJunio C Hamano Tue, 31 May 2011 19:07:14 +0000 (12:07 -0700)

Sync with maint

Start 1.7.5.4 draft release notesJunio C Hamano Tue, 31 May 2011 19:06:40 +0000 (12:06 -0700)

Start 1.7.5.4 draft release notes

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

Merge branch 'tr/add-i-no-escape' into maintJunio C Hamano Tue, 31 May 2011 19:02:04 +0000 (12:02 -0700)

Merge branch 'tr/add-i-no-escape' into maint

* tr/add-i-no-escape:
add -i: ignore terminal escape sequences

Merge branch 'vh/config-interactive-singlekey-doc'... Junio C Hamano Tue, 31 May 2011 19:01:06 +0000 (12:01 -0700)

Merge branch 'vh/config-interactive-singlekey-doc' into maint

* vh/config-interactive-singlekey-doc:
git-reset.txt: better docs for '--patch'
git-checkout.txt: better docs for '--patch'
git-stash.txt: better docs for '--patch'
git-add.txt: document 'interactive.singlekey'
config.txt: 'interactive.singlekey; is used by...

Merge branch 'ml/test-readme' into maintJunio C Hamano Tue, 31 May 2011 19:00:43 +0000 (12:00 -0700)

Merge branch 'ml/test-readme' into maint

* ml/test-readme:
t/README: unify documentation of test function args

Merge branch 'ab/i18n-fixup' into maintJunio C Hamano Tue, 31 May 2011 19:00:27 +0000 (12:00 -0700)

Merge branch 'ab/i18n-fixup' into maint

* ab/i18n-fixup: (24 commits)
i18n: use test_i18n{cmp,grep} in t7600, t7607, t7611 and t7811
i18n: use test_i18n{grep,cmp} in t7508
i18n: use test_i18ngrep in t7506
i18n: use test_i18ngrep and test_i18ncmp in t7502
i18n: use test_i18ngrep in t7501
i18n: use test_i18ncmp in t7500
i18n: use test_i18ngrep in t7201
i18n: use test_i18ncmp and test_i18ngrep in t7102 and t7110
i18n: use test_i18ncmp and test_i18ngrep in t5541, t6040, t6120, t7004, t7012 and t7060
i18n: use test_i18ncmp and test_i18ngrep in t3700, t4001 and t4014
i18n: use test_i18ncmp and test_i18ngrep in t3203, t3501 and t3507
i18n: use test_i18ngrep in t2020, t2204, t3030, and t3200
i18n: use test_i18ngrep in lib-httpd and t2019
i18n: do not overuse C_LOCALE_OUTPUT (grep)
i18n: use test_i18ncmp in t1200 and t2200
i18n: .git file is not a human readable message (t5601)
i18n: do not overuse C_LOCALE_OUTPUT
i18n: mark init-db messages for translation
i18n: mark checkout plural warning for translation
i18n: mark checkout --detach messages for translation
...

Merge branch 'jc/rename-degrade-cc-to-c' into maintJunio C Hamano Tue, 31 May 2011 19:00:02 +0000 (12:00 -0700)

Merge branch 'jc/rename-degrade-cc-to-c' into maint

* jc/rename-degrade-cc-to-c:
diffcore-rename: fall back to -C when -C -C busts the rename limit
diffcore-rename: record filepair for rename src
diffcore-rename: refactor "too many candidates" logic
builtin/diff.c: remove duplicated call to diff_result_code()

Merge branch 'rr/doc-content-type' into maintJunio C Hamano Tue, 31 May 2011 18:59:39 +0000 (11:59 -0700)

Merge branch 'rr/doc-content-type' into maint

* rr/doc-content-type:
Documentation: Allow custom diff tools to be specified in 'diff.tool'
Documentation: Add diff.<driver>.* to config
Documentation: Move diff.<driver>.* from config.txt to diff-config.txt
Documentation: Add filter.<driver>.* to config

diff-index --quiet: learn the "stop feeding the backend... Junio C Hamano Tue, 31 May 2011 17:06:44 +0000 (10:06 -0700)

diff-index --quiet: learn the "stop feeding the backend early" logic

A negative return from the unpack callback function usually means unpack
failed for the entry and signals the unpack_trees() machinery to fail the
entire merge operation, immediately and there is no other way for the
callback to tell the machinery to exit early without reporting an error.

This is what we usually want to make a merge all-or-nothing operation, but
the machinery is also used for diff-index codepath by using a custom
unpack callback function. And we do sometimes want to exit early without
failing, namely when we are under --quiet and can short-cut the diff upon
finding the first difference.

Add "exiting_early" field to unpack_trees_options structure, to signal the
unpack_trees() machinery that the negative return value is not signaling
an error but an early return from the unpack_trees() machinery. As this by
definition hasn't unpacked everything, discard the resulting index just
like the failure codepath.

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