gitweb.git
Documentation/git-clone: mention progress in -vTay Ray Chuan Wed, 24 Feb 2010 12:50:20 +0000 (20:50 +0800)

Documentation/git-clone: mention progress in -v

After 5a518ad (clone: use --progress to force progress reporting),
-v/--verbose did not affect whether progress status was reported to
stderr, and users accustomed to using -v to do so since 21188b1
(Implement git clone -v) may be confused.

Mitigate such risks by stating -v does not affect progress in the
documentation.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Tue, 23 Feb 2010 22:27:55 +0000 (14:27 -0800)

Merge branch 'maint'

* maint:
am: remove rebase-apply directory before gc
rerere: fix memory leak if rerere images can't be read
Documentation: mention conflict marker size argument (%L) for merge driver

am: remove rebase-apply directory before gcJonathan Nieder Mon, 22 Feb 2010 14:35:46 +0000 (08:35 -0600)

am: remove rebase-apply directory before gc

When git am does an automatic gc it doesn't clean up the rebase-apply
directory until after this has finished. This means that if the user
aborts the gc then future am or rebase operations will report that an
existing operation is in progress, which is undesirable and confusing.

Reported by Mark Brown <broonie@debian.org> through
http://bugs.debian.org/570966

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

rerere: fix memory leak if rerere images can't be readBert Wesarg Tue, 23 Feb 2010 20:11:53 +0000 (21:11 +0100)

rerere: fix memory leak if rerere images can't be read

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Print RUNTIME_PREFIX warning only when GIT_TRACE is setJohannes Sixt Tue, 23 Feb 2010 11:42:56 +0000 (12:42 +0100)

Print RUNTIME_PREFIX warning only when GIT_TRACE is set

When RUNTIME_PREFIX is enabled, the installation prefix is derived by
trying a limited set of known locations where the git executable can
reside. If none of these is found, a warning is emitted.

When git is built in a directory that matches neither of these known names,
the warning would always be emitted when the uninstalled executable is run.
This is a problem on Windows, where gitk picks the uninstalled git when
invoked from the build directory and gets confused by the warning.

Print the warning only when GIT_TRACE is set.

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

Allow '+', '-' and '.' in remote helper namesIlari Liusvaara Tue, 23 Feb 2010 12:33:48 +0000 (14:33 +0200)

Allow '+', '-' and '.' in remote helper names

According to relevant RFCs, in addition to alphanumerics, the following
characters are valid in URL scheme parts: '+', '-' and '.', but
currently only alphanumerics are allowed in remote helper names.

Allow those three characters in remote helper names (both 'foo://' and
'foo::' syntax).

Signed-off-by: Ilari Liusvaara <ilari.liusvaara@elisanet.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: mention conflict marker size argument... Bert Wesarg Tue, 23 Feb 2010 20:11:12 +0000 (21:11 +0100)

Documentation: mention conflict marker size argument (%L) for merge driver

23a64c9e (conflict-marker-size: new attribute, 2010-01-16) introduced the
new attribute and also pass the conflict marker size as %L to merge driver
commands. This documents the substitution.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

move encode_in_pack_object_header() to a better placeNicolas Pitre Tue, 23 Feb 2010 20:02:37 +0000 (15:02 -0500)

move encode_in_pack_object_header() to a better place

Commit 1b22b6c897 made duplicated versions of encode_header() into a
common version called encode_in_pack_object_header(). There is however
a better location that sha1_file.c for such a function though, as
sha1_file.c contains nothing related to the creation of packs, and
it is quite populated already.

Also the comment that was moved to the header file should really remain
near the function as it covers implementation details and provides no
information about the actual function interface.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add-interactive: fix bogus diff header line orderingJeff King Tue, 23 Feb 2010 01:05:44 +0000 (20:05 -0500)

add-interactive: fix bogus diff header line ordering

When we look at a patch for adding hunks interactively, we
first split it into a header and a list of hunks. Some of
the header lines, such as mode changes and deletion, however,
become their own selectable hunks. Later when we reassemble
the patch, we simply concatenate the header and the selected
hunks. This leads to patches like this:

diff --git a/file b/file
index d95f3ad..0000000
--- a/file
+++ /dev/null
deleted file mode 100644
@@ -1 +0,0 @@
-content

Notice how the deletion comes _after_ the ---/+++ lines,
when it should come before.

In many cases, we can get away with this as git-apply
accepts the slightly bogus input. However, in the specific
case of a deletion line that is being applied via "apply
-R", this malformed patch triggers an assert in git-apply.
This comes up when discarding a deletion via "git checkout
-p".

Rather than try to make git-apply accept our odd input,
let's just reassemble the patch in the correct order.

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

Use git_mkstemp_mode instead of plain mkstemp to create... Matthieu Moy Mon, 22 Feb 2010 22:32:16 +0000 (23:32 +0100)

Use git_mkstemp_mode instead of plain mkstemp to create object files

We used to unnecessarily give the read permission to group and others,
regardless of the umask, which isn't serious because the objects are
still protected by their containing directory, but isn't necessary
either.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git_mkstemps_mode: don't set errno to EINVAL on exit.Matthieu Moy Mon, 22 Feb 2010 22:32:15 +0000 (23:32 +0100)

git_mkstemps_mode: don't set errno to EINVAL on exit.

When reaching the end of git_mkstemps_mode, at least one call to open()
has been done, and errno has been set accordingly. Setting errno is
therefore not necessary, and actually harmfull since callers can't
distinguish e.g. permanent failure from ENOENT, which can just mean that
we need to create the containing directory.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp... Matthieu Moy Mon, 22 Feb 2010 22:32:14 +0000 (23:32 +0100)

Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later.

We used to create 0600 files, and then use chmod to set the group and
other permission bits to the umask. This usually has the same effect
as a normal file creation with a umask.

But in the presence of ACLs, the group permission plays the role of
the ACL mask: the "g" bits of newly created files are chosen according
to default ACL mask of the directory, not according to the umask, and
doing a chmod() on these "g" bits affect the ACL's mask instead of
actual group permission.

In other words, creating files with 0600 and then doing a chmod to the
umask creates files which are unreadable by users allowed in the
default ACL. To create the files without breaking ACLs, we let the
umask do it's job at the file's creation time, and get rid of the
later chmod.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemp... Matthieu Moy Mon, 22 Feb 2010 22:32:13 +0000 (23:32 +0100)

git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument.

gitmkstemps emulates the behavior of mkstemps, which is usually used
to create files in a shared directory like /tmp/, hence, it creates
files with permission 0600.

Add git_mkstemps_mode() that allows us to specify the desired mode, and
make git_mkstemps() a wrapper that always uses 0600 to call it. Later we
will use git_mkstemps_mode() when creating pack files.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Move gitmkstemps to path.cMatthieu Moy Mon, 22 Feb 2010 22:32:12 +0000 (23:32 +0100)

Move gitmkstemps to path.c

This function used to be only a compatibility function, but we're
going to extend it and actually use it, so make it part of Git.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add a testcase for ACL with restrictive umask.Matthieu Moy Mon, 22 Feb 2010 22:32:11 +0000 (23:32 +0100)

Add a testcase for ACL with restrictive umask.

Right now, Git creates unreadable pack files on non-shared
repositories when the user has a umask of 077, even when the default
ACLs for the directory would give read/write access to a specific
user.

Loose object files are created world-readable, which doesn't break ACLs,
but isn't necessarily desirable.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Move 'builtin-*' into a 'builtin/' subdirectoryLinus Torvalds Mon, 22 Feb 2010 16:42:18 +0000 (08:42 -0800)

Move 'builtin-*' into a 'builtin/' subdirectory

This shrinks the top-level directory a bit, and makes it much more
pleasant to use auto-completion on the thing. Instead of

[torvalds@nehalem git]$ em buil<tab>
Display all 180 possibilities? (y or n)
[torvalds@nehalem git]$ em builtin-sh
builtin-shortlog.c builtin-show-branch.c builtin-show-ref.c
builtin-shortlog.o builtin-show-branch.o builtin-show-ref.o
[torvalds@nehalem git]$ em builtin-shor<tab>
builtin-shortlog.c builtin-shortlog.o
[torvalds@nehalem git]$ em builtin-shortlog.c

you get

[torvalds@nehalem git]$ em buil<tab> [type]
builtin/ builtin.h
[torvalds@nehalem git]$ em builtin [auto-completes to]
[torvalds@nehalem git]$ em builtin/sh<tab> [type]
shortlog.c shortlog.o show-branch.c show-branch.o show-ref.c show-ref.o
[torvalds@nehalem git]$ em builtin/sho [auto-completes to]
[torvalds@nehalem git]$ em builtin/shor<tab> [type]
shortlog.c shortlog.o
[torvalds@nehalem git]$ em builtin/shortlog.c

which doesn't seem all that different, but not having that annoying
break in "Display all 180 possibilities?" is quite a relief.

NOTE! If you do this in a clean tree (no object files etc), or using an
editor that has auto-completion rules that ignores '*.o' files, you
won't see that annoying 'Display all 180 possibilities?' message - it
will just show the choices instead. I think bash has some cut-off
around 100 choices or something.

So the reason I see this is that I'm using an odd editory, and thus
don't have the rules to cut down on auto-completion. But you can
simulate that by using 'ls' instead, or something similar.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: Fix race condition in t7006-pagerJonathan Nieder Mon, 22 Feb 2010 08:46:33 +0000 (02:46 -0600)

tests: Fix race condition in t7006-pager

Pagers that do not consume their input are dangerous: for example,

$ GIT_PAGER=: git log
$ echo $?
141
$

The only reason these tests were able to work before was that
'git log' would write to the pipe (and not fill it) before the
pager had time to terminate and close the pipe.

Fix it by using a program that consumes its input, namely wc (as
suggested by Johannes).

Reported-by: Johannes Sixt <j.sixt@viscovery.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: be paranoid when creating loose objectsNicolas Pitre Sun, 21 Feb 2010 20:48:06 +0000 (15:48 -0500)

sha1_file: be paranoid when creating loose objects

We don't want the data being deflated and stored into loose objects
to be different from what we expect. While the deflated data is
protected by a CRC which is good enough for safe data retrieval
operations, we still want to be doubly sure that the source data used
at object creation time is still what we expected once that data has
been deflated and its CRC32 computed.

The most plausible data corruption may occur if the source file is
modified while Git is deflating and writing it out in a loose object.
Or Git itself could have a bug causing memory corruption. Or even bad
RAM could cause trouble. So it is best to make sure everything is
coherent and checksum protected from beginning to end.

To do so we compute the SHA1 of the data being deflated _after_ the
deflate operation has consumed that data, and make sure it matches
with the expected SHA1. This way we can rely on the CRC32 checked by
the inflate operation to provide a good indication that the data is still
coherent with its SHA1 hash. One pathological case we ignore is when
the data is modified before (or during) deflate call, but changed back
before it is hashed.

There is some overhead of course. Using 'git add' on a set of large files:

Before:

real 0m25.210s
user 0m23.783s
sys 0m1.408s

After:

real 0m26.537s
user 0m25.175s
sys 0m1.358s

The overhead is around 5% for full data coherency guarantee.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-diff: add a test for git diff --quiet -wLarry D'Anna Mon, 22 Feb 2010 02:58:44 +0000 (21:58 -0500)

git-diff: add a test for git diff --quiet -w

This patch adds two test cases for:

6977c25 git diff --quiet -w: check and report the status

Signed-off-by: Larry D'Anna <larry@elder-gods.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ml/maint-grep-doc'Junio C Hamano Sun, 21 Feb 2010 20:01:06 +0000 (12:01 -0800)

Merge branch 'ml/maint-grep-doc'

* ml/maint-grep-doc:
grep documentation: clarify what files match

Merge branch 'tc/maint-transport-ls-remote-with-void'Junio C Hamano Sun, 21 Feb 2010 20:01:03 +0000 (12:01 -0800)

Merge branch 'tc/maint-transport-ls-remote-with-void'

* tc/maint-transport-ls-remote-with-void:
transport: add got_remote_refs flag

Merge branch 'hm/maint-imap-send-crlf'Junio C Hamano Sun, 21 Feb 2010 20:00:21 +0000 (12:00 -0800)

Merge branch 'hm/maint-imap-send-crlf'

* hm/maint-imap-send-crlf:
git-imap-send: Convert LF to CRLF before storing patch to draft box

Merge branch 'sp/push-sideband'Junio C Hamano Sun, 21 Feb 2010 20:00:07 +0000 (12:00 -0800)

Merge branch 'sp/push-sideband'

* sp/push-sideband:
receive-pack: Send internal errors over side-band #2
t5401: Use a bare repository for the remote peer
receive-pack: Send hook output over side band #2
receive-pack: Wrap status reports inside side-band-64k
receive-pack: Refactor how capabilities are shown to the client
send-pack: demultiplex a sideband stream with status data
run-command: support custom fd-set in async
run-command: Allow stderr to be a caller supplied pipe

Merge branch 'jc/checkout-detached'Junio C Hamano Sun, 21 Feb 2010 19:59:42 +0000 (11:59 -0800)

Merge branch 'jc/checkout-detached'

* jc/checkout-detached:
Reword "detached HEAD" notification

Merge branch 'jc/maint-fix-test-perm'Junio C Hamano Sun, 21 Feb 2010 19:59:35 +0000 (11:59 -0800)

Merge branch 'jc/maint-fix-test-perm'

* jc/maint-fix-test-perm:
lib-patch-mode.sh: Fix permission
t6000lib: Fix permission

Merge branch 'jn/makefile-script-lib'Junio C Hamano Sun, 21 Feb 2010 19:59:22 +0000 (11:59 -0800)

Merge branch 'jn/makefile-script-lib'

* jn/makefile-script-lib:
Do not install shell libraries executable

Merge branch 'mv/request-pull-modernize'Junio C Hamano Sun, 21 Feb 2010 19:59:17 +0000 (11:59 -0800)

Merge branch 'mv/request-pull-modernize'

* mv/request-pull-modernize:
request-pull: avoid mentioning that the start point is a single commit

hash-object: don't use mmap() for small filesDmitry Potapov Sun, 21 Feb 2010 06:32:19 +0000 (09:32 +0300)

hash-object: don't use mmap() for small files

Using read() instead of mmap() can be 39% speed up for 1Kb files and is
1% speed up 1Mb files. For larger files, it is better to use mmap(),
because the difference between is not significant, and when there is not
enough memory, mmap() performs much better, because it avoids swapping.

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

sha1_file: don't malloc the whole compressed result... Nicolas Pitre Sun, 21 Feb 2010 04:27:31 +0000 (23:27 -0500)

sha1_file: don't malloc the whole compressed result when writing out objects

There is no real advantage to malloc the whole output buffer and
deflate the data in a single pass when writing loose objects. That is
like only 1% faster while using more memory, especially with large
files where memory usage is far more. It is best to deflate and write
the data out in small chunks reusing the same memory instead.

For example, using 'git add' on a few large files averaging 40 MB ...

Before:
21.45user 1.10system 0:22.57elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+142640minor)pagefaults 0swaps

After:
21.50user 1.25system 0:22.76elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+104408minor)pagefaults 0swaps

While the runtime stayed relatively the same, the number of minor page
faults went down significantly.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7006-pager: if stdout is not a terminal, make a new oneJonathan Nieder Sat, 20 Feb 2010 08:50:25 +0000 (02:50 -0600)

t7006-pager: if stdout is not a terminal, make a new one

Testing pagination requires (fake or real) access to a terminal so we
can see whether the pagination automatically kicks in, which makes it
hard to get good coverage when running tests without --verbose. There
are a number of ways to work around that:

- Replace all isatty calls with calls to a custom xisatty wrapper
that usually checks for a terminal but can be overridden for tests.
This would be workable, but it would require implementing xisatty
separately in three languages (C, shell, and perl) and making sure
that any code that is to be tested always uses the wrapper.

- Redirect stdout to /dev/tty. This would be problematic because
there might be no terminal available, and even if a terminal is
available, it might not be appropriate to spew output to it.

- Create a new pseudo-terminal on the fly and capture its output.

This patch implements the third approach.

The new test-terminal.perl helper uses IO::Pty from Expect.pm to create
a terminal and executes the program specified by its arguments with
that terminal as stdout. If the IO::Pty module is missing or not
working on a system, the test script will maintain its old behavior
(skipping most of its tests unless GIT_TEST_OPTS includes --verbose).

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

Merge branch 'maint'Junio C Hamano Sat, 20 Feb 2010 18:38:42 +0000 (10:38 -0800)

Merge branch 'maint'

* maint:
git-p4: fix bug in symlink handling
t1450: fix testcases that were wrongly expecting failure
Documentation: Fix indentation problem in git-commit(1)

cherry_pick_list: quit early if one side is emptyThomas Rast Sat, 20 Feb 2010 11:42:04 +0000 (12:42 +0100)

cherry_pick_list: quit early if one side is empty

The --cherry-pick logic starts by counting the commits on each side,
so that it can filter away commits on the bigger one. However, so
far it missed an opportunity for optimization: it doesn't need to do
any work if either side is empty.

This in particular helps the common use-case 'git rebase -i HEAD~$n':
it internally uses --cherry-pick, but since HEAD~$n is a direct
ancestor the left side is always empty.

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

tests: Add tests for automatic use of pagerJonathan Nieder Fri, 19 Feb 2010 07:18:58 +0000 (01:18 -0600)

tests: Add tests for automatic use of pager

Git’s automatic pagination support has some subtleties. Add some
tests to make sure we don’t break:

- when git will use a pager by default;
- the effect of the --paginate and --no-pager options;
- the effect of pagination on use of color;
- how the choice of pager is configured.

This does not yet test:

- use of pager by scripted commands (git svn and git am);
- effect of the pager.* configuration variables;
- setting of the LESS variable.

Some features involve checking whether stdout is a terminal, so many
of these tests are skipped unless output is passed through to the
terminal (i.e., unless $GIT_TEST_OPTS includes --verbose).

The immediate purpose for these tests was to avoid making things worse
after the breakage from my jn/editor-pager series (see commit 376f39,
2009-11-20). Thanks to Sebastian Celis <sebastian@sebastiancelis.com>
for the report.

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

Documentation: pack-objects: Clarify --local's semantics.Nelson Elhage Fri, 19 Feb 2010 03:29:30 +0000 (22:29 -0500)

Documentation: pack-objects: Clarify --local's semantics.

The current documentation suggests that --local also ignores any
objects in local packs, which is incorrect. Change the language to be
clearer and more parallel to the other options that ignore objects.

While we're at it, fix a trivial error in --incremental's
documentation.

Signed-off-by: Nelson Elhage <nelhage@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

utf8.c: speculatively assume utf-8 in strbuf_add_wrappe... René Scharfe Fri, 19 Feb 2010 22:20:44 +0000 (23:20 +0100)

utf8.c: speculatively assume utf-8 in strbuf_add_wrapped_text()

is_utf8() works by calling utf8_width() for each character at the
supplied location. In strbuf_add_wrapped_text(), we do that anyway
while wrapping the lines. So instead of checking the encoding
beforehand, optimistically assume that it's utf-8 and wrap along
until an invalid character is hit, and when that happens start over.

This pays off if the text consists only of valid utf-8 characters.
The following command was run against the Linux kernel repo with
git 1.7.0:

$ time git log --format='%b' v2.6.32 >/dev/null

real 0m2.679s
user 0m2.580s
sys 0m0.100s

$ time git log --format='%w(60,4,8)%b' >/dev/null

real 0m4.342s
user 0m4.230s
sys 0m0.110s

And with this patch series:

$ time git log --format='%w(60,4,8)%b' >/dev/null

real 0m3.741s
user 0m3.630s
sys 0m0.110s

So the cost of wrapping is reduced to 70% in this case.

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

utf8.c: remove strbuf_write()René Scharfe Fri, 19 Feb 2010 22:16:45 +0000 (23:16 +0100)

utf8.c: remove strbuf_write()

The patch before the previous one made sure that all callers of
strbuf_add_wrapped_text() supply a strbuf. Replace all calls of
strbuf_write() with regular strbuf functions and remove it.

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

utf8.c: remove print_spaces()René Scharfe Fri, 19 Feb 2010 22:15:55 +0000 (23:15 +0100)

utf8.c: remove print_spaces()

The previous patch made sure that strbuf_add_wrapped_text() (and thus
strbuf_add_indented_text(), too) always get a strbuf. Make use of
this fact by adding strbuf_addchars(), a small helper that adds a
char the specified number of times to a strbuf, and use it to replace
print_spaces().

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

utf8.c: remove print_wrapped_text()René Scharfe Fri, 19 Feb 2010 22:15:01 +0000 (23:15 +0100)

utf8.c: remove print_wrapped_text()

strbuf_add_wrapped_text() is called only from print_wrapped_text()
without a strbuf (in which case it writes its results to stdout).

At its only callsite, supply a strbuf, call strbuf_add_wrapped_text()
directly and remove the wrapper function.

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

git-p4: fix bug in symlink handlingEvan Powers Tue, 16 Feb 2010 08:44:08 +0000 (00:44 -0800)

git-p4: fix bug in symlink handling

Fix inadvertent breakage from b932705 (git-p4: stream from perforce to
speed up clones, 2009-07-30) in the code that strips the trailing '\n'
from p4 print on a symlink. (In practice, contents is of the form
['target\n', ''].)

Signed-off-by: Evan Powers <evan.powers@gmail.com>
Acked-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1450: fix testcases that were wrongly expecting failureThomas Rast Sat, 20 Feb 2010 00:18:44 +0000 (01:18 +0100)

t1450: fix testcases that were wrongly expecting failure

Almost exactly a year ago in 02a6552 (Test fsck a bit harder), I
introduced two testcases that were expecting failure.

However, the only bug was that the testcases wrote *blobs* because I
forgot to pass -t tag to hash-object. Fix this, and then adjust the
rest of the test to properly check the result.

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

mailinfo: do not strip leading spaces even for a header... Junio C Hamano Sat, 20 Feb 2010 05:55:33 +0000 (21:55 -0800)

mailinfo: do not strip leading spaces even for a header line

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

Documentation: Fix indentation problem in git-commit(1)Jacob Helwig Mon, 15 Feb 2010 12:33:06 +0000 (04:33 -0800)

Documentation: Fix indentation problem in git-commit(1)

Ever since the "See linkgit:git-config[1]..." paragraph was added to the
description for --untracked-files (d6293d1), the paragraphs for the
following options were indented at the same level as the "See
linkgit:git-config[1]" paragraph. This problem showed up in the
manpages, but not in the HTML documentation.

While this does fix the alignment of the options following
--untracked-files in the manpage, the "See linkgit..." portion of the
description does not retain its previous indentation level in the
manpages, or HTML documentation.

Signed-off-by: Jacob Helwig <jacob.helwig@gmail.com>
Acked-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Fri, 19 Feb 2010 09:31:42 +0000 (01:31 -0800)

Merge branch 'maint'

* maint:
rm: fix bug in recursive subdirectory removal
Documentation: describe --thin more accurately

Merge branch 'jk/maint-rmdir-fix' into maintJunio C Hamano Fri, 19 Feb 2010 09:31:37 +0000 (01:31 -0800)

Merge branch 'jk/maint-rmdir-fix' into maint

* jk/maint-rmdir-fix:
rm: fix bug in recursive subdirectory removal

rm: fix bug in recursive subdirectory removalJeff King Fri, 19 Feb 2010 05:57:21 +0000 (00:57 -0500)

rm: fix bug in recursive subdirectory removal

If we remove a path in a/deep/subdirectory, we should try to
remove as many trailing components as possible (i.e.,
subdirectory, then deep, then a). However, the test for the
return value of rmdir was reversed, so we only ever deleted
at most one level.

The fix is in remove_path, so "apply" and "merge-recursive"
also are fixed.

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

Add an optional argument for --color optionsMark Lodato Wed, 17 Feb 2010 04:55:58 +0000 (23:55 -0500)

Add an optional argument for --color options

Make git-branch, git-show-branch, git-grep, and all the diff-based
programs accept an optional argument <when> for --color. The argument
is a colorbool: "always", "never", or "auto". If no argument is given,
"always" is used; --no-color is an alias for --color=never. This makes
the command-line interface consistent with other GNU tools, such as `ls'
and `grep', and with the git-config color options. Note that, without
an argument, --color and --no-color work exactly as before.

To implement this, two internal changes were made:

1. Allow the first argument of git_config_colorbool() to be NULL,
in which case it returns -1 if the argument isn't "always", "never",
or "auto".

2. Add OPT_COLOR_FLAG(), OPT__COLOR(), and parse_opt_color_flag_cb()
to the option parsing library. The callback uses
git_config_colorbool(), so color.h is now a dependency
of parse-options.c.

Signed-off-by: Mark Lodato <lodatom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: describe --thin more accuratelyStephen Boyd Thu, 18 Feb 2010 09:10:28 +0000 (01:10 -0800)

Documentation: describe --thin more accurately

The description for --thin was misleading and downright wrong. Correct
it with some inspiration from the description of index-pack's --fix-thin
and some background information from Nicolas Pitre <nico@fluxnic.net>.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Thu, 18 Feb 2010 07:03:46 +0000 (23:03 -0800)

Merge branch 'maint'

* maint:
docs: don't talk about $GIT_DIR/refs/ everywhere

docs: don't talk about $GIT_DIR/refs/ everywhereJeff King Thu, 18 Feb 2010 01:16:20 +0000 (20:16 -0500)

docs: don't talk about $GIT_DIR/refs/ everywhere

It is misleading to say that we pull refs from $GIT_DIR/refs/*, because we
may also consult the packed refs mechanism. These days we tend to treat
the "refs hierarchy" as more of an abstract namespace that happens to be
represented as $GIT_DIR/refs. At best, this is a minor inaccuracy, but at
worst it can confuse users who then look in $GIT_DIR/refs and find that it
is missing some of the refs they expected to see.

This patch drops most uses of "$GIT_DIR/refs/*", changing them into just
"refs/*", under the assumption that users can handle the concept of an
abstract refs namespace. There are a few things to note:

- most cases just dropped the $GIT_DIR/ portion. But for cases where
that left _just_ the word "refs", I changed it to "refs/" to help
indicate that it was a hierarchy. I didn't do the same for longer
paths (e.g., "refs/heads" remained, instead of becoming
"refs/heads/").

- in some cases, no change was made, as the text was explicitly about
unpacked refs (e.g., the discussion in git-pack-refs).

- In some cases it made sense instead to note the existence of packed
refs (e.g., in check-ref-format and rev-parse).

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

refactor duplicated encode_header in pack-objects and... Michael Lukashov Tue, 16 Feb 2010 23:42:54 +0000 (23:42 +0000)

refactor duplicated encode_header in pack-objects and fast-import

The following function is duplicated:

encode_header

Move this function to sha1_file.c and rename it 'encode_in_pack_object_header',
as suggested by Junio C Hamano

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'np/fast-import-idx-v2'Junio C Hamano Wed, 17 Feb 2010 23:28:25 +0000 (15:28 -0800)

Merge branch 'np/fast-import-idx-v2'

* np/fast-import-idx-v2:
fast-import: use the diff_delta() max_delta_size argument
fast-import: honor pack.indexversion and pack.packsizelimit config vars
fast-import: make default pack size unlimited
fast-import: use write_idx_file() instead of custom code
fast-import: use sha1write() for pack data
fast-import: start using struct pack_idx_entry

Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refactor duplicated fill_mm() in checkout and merge... Michael Lukashov Tue, 16 Feb 2010 23:42:55 +0000 (23:42 +0000)

refactor duplicated fill_mm() in checkout and merge-recursive

The following function is duplicated:

fill_mm

Move it to xdiff-interface.c and rename it 'read_mmblob', as suggested
by Junio C Hamano.

Also, change parameters order for consistency with read_mmfile().

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refactor duplicated code in builtin-send-pack.c and... Michael Lukashov Tue, 16 Feb 2010 23:42:52 +0000 (23:42 +0000)

refactor duplicated code in builtin-send-pack.c and transport.c

The following functions are (almost) identical:

verify_remote_names
update_tracking_ref
refs_pushed
print_push_status

Move common versions of these functions to transport.c and rename
them, as suggested by Jeff King and Junio C Hamano.

These functions have been removed entirely from builtin-send-pack.c,
since they are only used internally by print_push_status():

print_ref_status
status_abbrev
print_ok_ref_status
print_one_push_status

Also, move #define SUMMARY_WIDTH to transport.h and rename it
TRANSPORT_SUMMARY_WIDTH as it is used in builtin-fetch.c and
transport.c

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Acked-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect.c: move duplicated code to a new function ... Michael Lukashov Wed, 17 Feb 2010 20:56:02 +0000 (20:56 +0000)

connect.c: move duplicated code to a new function 'get_host_and_port'

The following functions:

git_tcp_connect_sock (IPV6 version)
git_tcp_connect_sock (no IPV6 version),
git_proxy_connect

have common block of code. Move it to a new function 'get_host_and_port'

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.7.1Junio C Hamano Wed, 17 Feb 2010 23:01:11 +0000 (15:01 -0800)

Update draft release notes to 1.7.1

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

Merge branch 'maint'Junio C Hamano Wed, 17 Feb 2010 23:00:10 +0000 (15:00 -0800)

Merge branch 'maint'

* maint:
Update 1.7.0.1 release notes

Update 1.7.0.1 release notesJunio C Hamano Wed, 17 Feb 2010 23:00:00 +0000 (15:00 -0800)

Update 1.7.0.1 release notes

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

Merge branch 'jk/cherry-pick-reword' into maintJunio C Hamano Wed, 17 Feb 2010 22:55:24 +0000 (14:55 -0800)

Merge branch 'jk/cherry-pick-reword' into maint

* jk/cherry-pick-reword:
cherry-pick: prettify the advice message
cherry-pick: show commit name instead of sha1
cherry-pick: format help message as strbuf
cherry-pick: refactor commit parsing code
cherry-pick: rewrap advice message

Merge branch 'jk/grep-double-dash' into maintJunio C Hamano Wed, 17 Feb 2010 22:55:15 +0000 (14:55 -0800)

Merge branch 'jk/grep-double-dash' into maint

* jk/grep-double-dash:
accept "git grep -- pattern"

Merge branch 'jc/typo' into maintJunio C Hamano Wed, 17 Feb 2010 22:55:09 +0000 (14:55 -0800)

Merge branch 'jc/typo' into maint

* jc/typo:
Typofixes outside documentation area

status: preload index to optimize lstat(2) callsJunio C Hamano Wed, 17 Feb 2010 20:30:41 +0000 (12:30 -0800)

status: preload index to optimize lstat(2) calls

Noticed by James Pickens

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

Add a "TEMPLATE DIRECTORY" section to git-init[1].Steven Drake Tue, 16 Feb 2010 23:44:46 +0000 (12:44 +1300)

Add a "TEMPLATE DIRECTORY" section to git-init[1].

Create a more inoformative section to describe template directory and
refer to it in config.txt and with the '--template' option of git-init
and git-clone commands.

Signed-off-by: Steven Drake <sdrake@xnet.co.nz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add `init.templatedir` configuration variable.Steven Drake Tue, 16 Feb 2010 23:42:31 +0000 (12:42 +1300)

Add `init.templatedir` configuration variable.

Rather than having to pass --template to git init and clone for a custom
setup, `init.templatedir` may be set in '~/.gitconfig'. The environment
variable GIT_TEMPLATE_DIR can already be used for this but this is nicer.

System administrators may prefer using this variable in the system-wide
config file to point at a locally modified copy (e.g. /etc/gittemplate)
rather than editing vanilla template files in '/usr/share'.

Signed-off-by: Steven Drake <sdrake@xnet.co.nz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Protect escaping functions against calling... Jakub Narebski Sun, 7 Feb 2010 20:52:25 +0000 (21:52 +0100)

gitweb: Protect escaping functions against calling on undef

This is a bit of future-proofing esc_html and friends: when called
with undefined value they would now would return undef... which would
probably mean that error would still occur, but closer to the source
of problem.

This means that we can safely use
esc_html(shift) || "Internal Server Error"
in die_error() instead of
esc_html(shift || "Internal Server Error")

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

gitweb: esc_html (short) error message in die_errorJakub Narebski Sun, 7 Feb 2010 20:51:18 +0000 (21:51 +0100)

gitweb: esc_html (short) error message in die_error

The error message (second argument to die_error) is meant to be short,
one-line text description of given error. A few callers call
die_error with error message containing unescaped user supplied data
($hash, $file_name). Instead of forcing callers to escape data,
simply call esc_html on the parameter.

Note that optional third parameter, which contains detailed error
description, is meant to be HTML formatted, and therefore should be
not escaped.

While at it update esc_html synopsis/usage, and bring default error
description to read 'Internal Server Error' (titlecased).

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

submodule summary: Don't barf when invoked in an empty... Johan Herland Tue, 16 Feb 2010 10:21:14 +0000 (11:21 +0100)

submodule summary: Don't barf when invoked in an empty repo

When invoking "git submodule summary" in an empty repo (which can be
indirectly done by setting status.submodulesummary = true), it currently
emits an error message (via "git diff-index") since HEAD points to an
unborn branch.

This patch adds handling of the HEAD-points-to-unborn-branch special case,
so that "git submodule summary" no longer emits this error message.

The patch also adds a test case that verifies the fix.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: use the diff_delta() max_delta_size argumentNicolas Pitre Wed, 17 Feb 2010 19:05:56 +0000 (14:05 -0500)

fast-import: use the diff_delta() max_delta_size argument

This let diff_delta() abort early if it is going to bust the given
size limit. Also, only objects larger than 20 bytes are considered
as objects smaller than that are most certainly going to produce
larger deltas than the original object due to the additional headers.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: honor pack.indexversion and pack.packsizel... Nicolas Pitre Wed, 17 Feb 2010 19:05:55 +0000 (14:05 -0500)

fast-import: honor pack.indexversion and pack.packsizelimit config vars

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: make default pack size unlimitedNicolas Pitre Wed, 17 Feb 2010 19:05:54 +0000 (14:05 -0500)

fast-import: make default pack size unlimited

Now that fast-import is creating packs with index version 2, there is
no point limiting the pack size by default. A pack split will still
happen if off_t is not sufficiently large to hold large offsets.

While updating the doc, let's remove the "packfiles fit on CDs"
suggestion. Pack files created by fast-import are still suboptimal and
a 'git repack -a -f -d' or even 'git gc --aggressive' would be a pretty
good idea before considering storage on CDs.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: use write_idx_file() instead of custom... Nicolas Pitre Wed, 17 Feb 2010 19:05:53 +0000 (14:05 -0500)

fast-import: use write_idx_file() instead of custom code

This allows for the creation of pack index version 2 with its object
CRC and the possibility for a pack to be larger than 4 GB.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: use sha1write() for pack dataNicolas Pitre Wed, 17 Feb 2010 19:05:52 +0000 (14:05 -0500)

fast-import: use sha1write() for pack data

This is in preparation for using write_idx_file(). Also, by using
sha1write() we get some buffering to reduces the number of write
syscalls, and the written data is SHA1 summed which allows for the extra
data integrity validation check performed in fixup_pack_header_footer()
(details on this in commit abeb40e5aa).

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: start using struct pack_idx_entryNicolas Pitre Wed, 17 Feb 2010 19:05:51 +0000 (14:05 -0500)

fast-import: start using struct pack_idx_entry

This is in preparation for using write_idx_file().

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

require_work_tree broken with NONGIT_OKGabriel Filion Wed, 17 Feb 2010 04:18:50 +0000 (23:18 -0500)

require_work_tree broken with NONGIT_OK

With NONGIT_OK set, require_work_tree function outside a git repository
gives a syntax error. This is caused by an incorrect use of "test" that
didn't anticipate $(git rev-parse --is-inside-work-tree) may return an
empty string.

Properly quote the argument to "test", and send the standard error stream
to /dev/null to avoid giving duplicate error messages.

Signed-off-by: Gabriel Filion <lelutin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap-send: support CRAM-MD5 authenticationHitoshi Mitake Tue, 16 Feb 2010 06:34:07 +0000 (22:34 -0800)

imap-send: support CRAM-MD5 authentication

CRAM-MD5 authentication ought to be independent from SSL, but NO_OPENSSL
build will not support this because the base64 and md5 code are used from
the OpenSSL library in this implementation.

Signed-off-by: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

grep documentation: clarify what files matchMark Lodato Tue, 16 Feb 2010 00:25:40 +0000 (19:25 -0500)

grep documentation: clarify what files match

Clarify that git-grep(1) searches only tracked files, and that each
<pathspec> is a pathspec, as in any other ordinary git commands.

Add an example to show a simple use case for searching all .c and .h
files in the current directory and below.

Signed-off-by: Mark Lodato <lodatom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test for add with non-existent pathspecChris Packham Tue, 9 Feb 2010 22:30:48 +0000 (17:30 -0500)

test for add with non-existent pathspec

Add a test for 'git add -u pathspec' and 'git add pathspec' where
pathspec does not exist. The expected result is that git add exits with
an error message and an appropriate exit code.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git add -u: die on unmatched pathspecJunio C Hamano Tue, 9 Feb 2010 22:30:49 +0000 (17:30 -0500)

git add -u: die on unmatched pathspec

If a pathspec is supplied to 'git add -u' and no path matches
the pattern, fail with an approriate error message and exit code.

Tested-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jc/typo'Junio C Hamano Wed, 17 Feb 2010 06:45:14 +0000 (22:45 -0800)

Merge branch 'jc/typo'

* jc/typo:
Typofixes outside documentation area

Merge branch 'maint'Junio C Hamano Wed, 17 Feb 2010 06:40:45 +0000 (22:40 -0800)

Merge branch 'maint'

* maint:
Prepare 1.7.0.1 release notes
Fix use of mutex in threaded grep
dwim_ref: fix dangling symref warning
stash pop: remove 'apply' options during 'drop' invocation
diff: make sure --output=/bad/path is caught
Remove hyphen from "git-command" in two error messages

Prepare 1.7.0.1 release notesJunio C Hamano Wed, 17 Feb 2010 06:25:03 +0000 (22:25 -0800)

Prepare 1.7.0.1 release notes

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

Merge branch 'jc/maint-grep-one-thread-mutex-fix' into... Junio C Hamano Wed, 17 Feb 2010 06:23:25 +0000 (22:23 -0800)

Merge branch 'jc/maint-grep-one-thread-mutex-fix' into maint

* jc/maint-grep-one-thread-mutex-fix:
Fix use of mutex in threaded grep

Fix use of mutex in threaded grepJunio C Hamano Tue, 16 Feb 2010 02:34:28 +0000 (18:34 -0800)

Fix use of mutex in threaded grep

The program can decide at runtime not to use threading even if the support
is compiled in. In such a case, mutexes are not necessary and left
uninitialized. But the code incorrectly tried to take and release the
read_sha1_mutex unconditionally.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Fredrik Kuivinen <frekui@gmail.com>

Merge branch 'maint-1.6.6' into maintJunio C Hamano Tue, 16 Feb 2010 23:05:02 +0000 (15:05 -0800)

Merge branch 'maint-1.6.6' into maint

* maint-1.6.6:
dwim_ref: fix dangling symref warning
stash pop: remove 'apply' options during 'drop' invocation
diff: make sure --output=/bad/path is caught
Remove hyphen from "git-command" in two error messages

Merge branch 'maint-1.6.5' into maint-1.6.6Junio C Hamano Tue, 16 Feb 2010 23:04:55 +0000 (15:04 -0800)

Merge branch 'maint-1.6.5' into maint-1.6.6

* maint-1.6.5:
dwim_ref: fix dangling symref warning
stash pop: remove 'apply' options during 'drop' invocation
diff: make sure --output=/bad/path is caught

transport: add got_remote_refs flagTay Ray Chuan Tue, 16 Feb 2010 07:18:21 +0000 (15:18 +0800)

transport: add got_remote_refs flag

transport_get_remote_refs() in tranport.c checks transport->remote_refs
to determine whether transport->get_refs_list() should be invoked. The
logic is "if it is NULL, we haven't run ls-remote to find out yet".

However, transport->remote_refs could still be NULL while cloning from
an empty repository. This causes get_refs_list() to be run unnecessarily.

Introduce a flag, transport->got_remote_refs, to more explicitly record
if we have run transport->get_refs_list() already.

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

dwim_ref: fix dangling symref warningJeff King Tue, 16 Feb 2010 07:03:16 +0000 (02:03 -0500)

dwim_ref: fix dangling symref warning

If we encounter a symref that is dangling, in most cases we will warn
about it. The one exception is a dangling HEAD, as that indicates a
branch yet to be born.

However, the check in dwim_ref was not quite right. If we were fed
something like "HEAD^0" we would try to resolve "HEAD", see that it is
dangling, and then check whether the _original_ string we got was
"HEAD" (which it wasn't in this case). And that makes no sense; the
dangling thing we found was not "HEAD^0" but rather "HEAD".

Fixing this squelches a scary warning from "submodule summary HEAD" (and
consequently "git status" with status.submodulesummary set) in an empty
repo, as the submodule script calls "git rev-parse -q --verify HEAD^0".

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

Add test for using Git at root of file systemNguyễn Thái Ngọc Duy Sun, 14 Feb 2010 15:44:45 +0000 (22:44 +0700)

Add test for using Git at root of file system

This kind of test requires a throw-away root filesystem so that it can
play on. If you have such a system, go ahead, "chmod 777 /" and run
this test manually. Because this is a dangerous test, you are required
to set an env variable, and not to use root to run it.

Script prepare-root.sh may help you set up a chroot environment with
Git test suite inside. You will need Linux, static linked busybox,
rsync and root permission to use it.

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

Support working directory located at rootNguyễn Thái Ngọc Duy Sun, 14 Feb 2010 15:44:44 +0000 (22:44 +0700)

Support working directory located at root

Git should work regardless where the working directory is located,
even at root. This patch fixes two places where it assumes working
directory always have parent directory.

In setup_git_directory_gently(), when Git goes up to root and finds
.git there, it happily sets worktree to "" instead of "/".

In prefix_path(), loosen the outside repo check a little bit. Usually
when a path XXX is inside worktree /foo, it must be either "/foo", or
"/foo/...". When worktree is simply "/", we can safely ignore the
check: we have a slash at the beginning already.

Not related to worktree, but also set gitdir correctly if a bare repo
is placed (insanely?) at root.

Thanks João Carlos Mendes Luís for pointing out this problem.

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

Move offset_1st_component() to path.cNguyễn Thái Ngọc Duy Tue, 16 Feb 2010 05:22:08 +0000 (12:22 +0700)

Move offset_1st_component() to path.c

The implementation is also lightly modified to use is_dir_sep()
instead of hardcoding '/'.

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

git diff --quiet -w: check and report the statusLarry D'Anna Tue, 16 Feb 2010 06:55:21 +0000 (01:55 -0500)

git diff --quiet -w: check and report the status

The option -w tells the diff machinery to inspect the contents to set the
exit status, instead of checking the blob object level difference alone.
However, --quiet tells the diff machinery not to look at the contents, which
means DIFF_FROM_CONTENTS has no chance to inspect the change.

Work it around by calling diff_flush_patch() with output sent to /dev/null.

Signed-off-by: Larry D'Anna <larry@elder-gods.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

stash pop: remove 'apply' options during 'drop' invocationThomas Rast Mon, 15 Feb 2010 16:05:46 +0000 (17:05 +0100)

stash pop: remove 'apply' options during 'drop' invocation

The 'git stash pop' option parsing used to remove the first argument
in --index mode. At the time this was implemented, this first
argument was always --index. However, since the invention of the -q
option in fcdd0e9 (stash: teach quiet option, 2009-06-17) you can
cause an internal invocation of

git stash drop --index

by running

git stash pop -q --index

which then of course fails because drop doesn't know --index.

To handle this, instead let 'git stash apply' decide what the future
argument to 'drop' should be.

Warning: this means that 'git stash apply' must parse all options that
'drop' can take, and deal with them in the same way. This is
currently true for its only option -q.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Acked-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: make sure --output=/bad/path is caughtLarry D'Anna Tue, 16 Feb 2010 04:10:45 +0000 (23:10 -0500)

diff: make sure --output=/bad/path is caught

The return value from fopen wasn't being checked.

Signed-off-by: Larry D'Anna <larry@elder-gods.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Remove hyphen from "git-command" in two error messagesPete Harlan Mon, 15 Feb 2010 23:33:18 +0000 (15:33 -0800)

Remove hyphen from "git-command" in two error messages

Signed-off-by: Pete Harlan <pgit@pcharlan.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

am: Fix launching of pagerJonathan Nieder Mon, 15 Feb 2010 05:04:13 +0000 (23:04 -0600)

am: Fix launching of pager

The pagination functionality in git am has some problems:

- It does not check if stdout is a tty, so it always paginates.

- If $GIT_PAGER uses any environment variables, they are being
ignored, since it does not run $GIT_PAGER through eval.

- If $GIT_PAGER is set to the empty string, instead of passing
output through to stdout, it tries to run $dotest/patch.

Fix them. While at it, move the definition of git_pager() to
git-sh-setup so authors of other commands are not tempted to
reimplement it with the same mistakes.

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

Merge branch 'maint'Junio C Hamano Mon, 15 Feb 2010 02:59:20 +0000 (18:59 -0800)

Merge branch 'maint'

* maint:
fix minor memory leak in get_tree_entry()

Merge branch 'maint-1.6.6' into maintJunio C Hamano Mon, 15 Feb 2010 02:59:14 +0000 (18:59 -0800)

Merge branch 'maint-1.6.6' into maint

* maint-1.6.6:
fix minor memory leak in get_tree_entry()

gitweb: Die if there are parsing errors in config fileJakub Narebski Sun, 14 Feb 2010 21:46:28 +0000 (22:46 +0100)

gitweb: Die if there are parsing errors in config file

Otherwise the errors can propagate, and show in damnest places, and
you would spend your time chasing ghosts instead of debugging real
problem (yes, it is from personal experience).

This follows (parts of) advice in `perldoc -f do` documentation.

This required restructoring code a bit, so we die only if we are reading
(executing) config file. As a side effect $GITWEB_CONFIG_SYSTEM is always
available, even when we use $GITWEB_CONFIG.

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

git svn: Fix launching of pagerJonathan Nieder Sun, 14 Feb 2010 12:06:10 +0000 (06:06 -0600)

git svn: Fix launching of pager

In commit dec543e (am -i, git-svn: use "git var GIT_PAGER"), I tried
to teach git svn to defer to git var on what pager to use. In the
process, I introduced two bugs:

- The value set for $pager in config_pager has local scope, so
run_pager never sees it;

- git var cannot tell whether git svn’s output is going to a
terminal, so the value chosen for $pager does not reflect that
information.

Fix them.

Reported-by: Sebastian Celis <sebastian@sebastiancelis.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git.1: Clarify the behavior of the --paginate optionJonathan Nieder Sun, 14 Feb 2010 12:02:35 +0000 (06:02 -0600)

git.1: Clarify the behavior of the --paginate option

The --paginate option is meant to negate the effect of an explicit or
implicit pager.<cmd> = false setting. Thus it turns the pager on if
output is going to a terminal rather than unconditionally.

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

Make 'git var GIT_PAGER' always print the configured... Jonathan Nieder Sun, 14 Feb 2010 11:59:59 +0000 (05:59 -0600)

Make 'git var GIT_PAGER' always print the configured pager

Scripted commands that want to use git’s configured pager know better
than ‘git var’ does whether stdout is going to be a tty at the
appropriate time. Checking isatty(1) as git_pager() does now won’t
cut it, since the output of git var itself is almost never a terminal.
The symptom is that when used by humans, ‘git var GIT_PAGER’ behaves
as it should, but when used by scripts, it always returns ‘cat’!

So avoid tricks with isatty() and just always print the configured
pager.

This does not fix the callers to check isatty(1) themselves yet.
Nevertheless, this patch alone is enough to fix 'am --interactive'.

Thanks to Sebastian Celis for the report and Jeff King for the
analysis.

Reported-by: Sebastian Celis <sebastian@sebastiancelis.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>