gitweb.git
fetch: Future-proof initialization of a refspec on... Andreas Gruenbacher Fri, 12 Mar 2010 22:27:33 +0000 (23:27 +0100)

fetch: Future-proof initialization of a refspec on stack

The open-coded version to initialize each and every member will break
when a new member is added to the structure.

Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch: Check for a "^{}" suffix with suffixcmp()Andreas Gruenbacher Sat, 13 Mar 2010 17:17:04 +0000 (18:17 +0100)

fetch: Check for a "^{}" suffix with suffixcmp()

Otherwise, we will check random bytes for ref names < 3 characters.

Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

daemon: parse_host_and_port SIGSEGV if port is specifiedImre Deak Sat, 20 Mar 2010 02:23:58 +0000 (04:23 +0200)

daemon: parse_host_and_port SIGSEGV if port is specified

This typo will lead to git-daemon dying any time the connect
string includes a port after the host= attribute. This can lead
for example to one of the following error messages on the client
side when someone tries git clone git://...:<port>.

When the daemon is running on localhost:
fatal: The remote end hung up unexpectedly

or when the daemon is connected through an ssh tunnel:
fatal: protocol error: bad line length character: erro

In the latter case 'erro' comes from the daemon's reply:
error: git-daemon died of signal 11

Signed-off-by: Imre Deak <imre.deak@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: Fix CDPATH problemJonathan Nieder Sat, 20 Mar 2010 00:06:15 +0000 (19:06 -0500)

Makefile: Fix CDPATH problem

If CDPATH is set, "cd" prints its destination to stdout, causing
the common (cd a && tar cf - .) | (cd b && tar xf -) idiom to fail.
For example:

make -C templates DESTDIR='' install
make[1]: Entering directory `/users/e477610/exptool/src/git-1.7.0.2/templates'
install -d -m 755 '/home/e477610/exptool/share/git-core/templates'
(cd blt && gtar cf - .) | \
(cd '/home/e477610/exptool/share/git-core/templates' && umask 022 && gtar xof -)
gtar: This does not look like a tar archive

Most git scripts already protect against use of CDPATH through
git-sh-setup, but the Makefile doesn’t.

Reported-by: Michael Cox <mhcox@bluezoosoftware.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pull: replace unnecessary sed invocationStephen Boyd Thu, 18 Mar 2010 05:10:45 +0000 (22:10 -0700)

pull: replace unnecessary sed invocation

Getting the shortened branch name is as easy as using the shell's
parameter expansion.

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

Documentation: receive.denyCurrentBranch defaults to... Thomas Rast Wed, 17 Mar 2010 11:14:57 +0000 (12:14 +0100)

Documentation: receive.denyCurrentBranch defaults to 'refuse'

acd2a45 (Refuse updating the current branch in a non-bare repository
via push, 2009-02-11) changed the default to refuse such a push, but
it forgot to update the docs.

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

bash: complete *_HEAD refs if presentIan Ward Comfort Wed, 17 Mar 2010 09:20:35 +0000 (02:20 -0700)

bash: complete *_HEAD refs if present

We already complete HEAD, of course, and might as well complete the other
common refs mentioned in the rev-parse man page: FETCH_HEAD, ORIG_HEAD, and
MERGE_HEAD.

Signed-off-by: Ian Ward Comfort <icomfort@stanford.edu>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Improve error messages from 'git stash show'Gustaf Hendeby Tue, 16 Mar 2010 17:52:37 +0000 (18:52 +0100)

Improve error messages from 'git stash show'

The previous error message "fatal: Needed a single revision" is not
very informative.

Signed-off-by: Gustaf Hendeby <hendeby@isy.liu.se>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

daemon.c: avoid accessing ss_family member of struct... Brandon Casey Mon, 15 Mar 2010 22:10:06 +0000 (17:10 -0500)

daemon.c: avoid accessing ss_family member of struct sockaddr_storage

When NO_SOCKADDR_STORAGE is set for a platform, either sockaddr_in or
sockaddr_in6 is used intead. Neither of which has an ss_family member.
They have an sin_family and sin6_family member respectively. Since the
addrcmp() function accesses the ss_family member of a sockaddr_storage
struct, compilation fails on platforms which define NO_SOCKADDR_STORAGE.

Since any sockaddr_* structure can be cast to a struct sockaddr and
have its sa_family member read, do so here to workaround this issue.

Thanks to Martin Storsjö for pointing out the fix, and Gary Vaughan
for drawing attention to the issue.

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

refs: ref entry with NULL sha1 is can be a dangling... Junio C Hamano Tue, 16 Mar 2010 05:12:55 +0000 (22:12 -0700)

refs: ref entry with NULL sha1 is can be a dangling symref

Brandon Casey noticed that t5505 had accidentally broken its && chain,
hiding inconsistency between the code that writes the warning to the
standard output and the test that expects to see the warning on the
standard error, which was introduced by f8948e2 (remote prune: warn
dangling symrefs, 2009-02-08).

It turns out that the issue is deeper than that. After f8948e2, a symref
that is dangling is marked with a NULL sha1, and the idea of using NULL
sha1 to mean a deleted ref was scrapped, but somehow a follow-up eafb452
(do_one_ref(): null_sha1 check is not about broken ref, 2009-07-22)
incorrectly reorganized do_one_ref(), still thinking NULL sha1 is never
used in the code.

Fix this by:

- adopt Brandon's fix to t5505 test;

- introduce REF_BROKEN flag to mark a ref that fails to resolve (dangling
symref);

- move the check for broken ref back inside the "if we are skipping
dangling refs" code block.

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

Documentation/git-read-tree: clarify 2-tree mergeMichael J Gruber Mon, 15 Mar 2010 10:54:46 +0000 (11:54 +0100)

Documentation/git-read-tree: clarify 2-tree merge

Clarify the description of the 2-tree merge by defining the terms
which are used in the table, and by applying some small linguistic
changes.

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

Documentation/git-read-tree: fix table layoutMichael J Gruber Mon, 15 Mar 2010 10:54:45 +0000 (11:54 +0100)

Documentation/git-read-tree: fix table layout

Asciidoc takes the first non-space character in the first line of the
paragraph as a reference point for preformatted layout, so adjust to
that to make the table align.

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

tests for "git add ignored-dir/file" without -fJunio C Hamano Mon, 1 Mar 2010 03:12:31 +0000 (19:12 -0800)

tests for "git add ignored-dir/file" without -f

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

dir: fix COLLECT_IGNORED on excluded prefixesJeff King Thu, 11 Mar 2010 07:15:43 +0000 (02:15 -0500)

dir: fix COLLECT_IGNORED on excluded prefixes

As we walk the directory tree, if we see an ignored path, we
want to add it to the ignored list only if it matches any
pathspec that we were given. We used to check for the
pathspec to appear explicitly. E.g., if we see "subdir/file"
and it is excluded, we check to see if we have "subdir/file"
in our pathspec.

However, this interacts badly with the optimization to avoid
recursing into ignored subdirectories. If "subdir" as a
whole is ignored, then we never recurse, and consider only
whether "subdir" itself is in our pathspec. It would not
match a pathspec of "subdir/file" explicitly, even though it
is the reason that subdir/file would be excluded.

This manifests itself to the user as "git add subdir/file"
failing to correctly note that the pathspec was ignored.

This patch extends the in_pathspec logic to include prefix
directory case.

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

t0050: mark non-working test as suchJunio C Hamano Mon, 1 Mar 2010 07:31:21 +0000 (23:31 -0800)

t0050: mark non-working test as such

The test is to prepare an empty file "camelcase" in the index, remove
and replace it with another file "CamelCase" with "1" as its contents
in the working tree, and add it to the index, in a repository configured
to be case insensitive.

However, the test actually checked ls-files knows about a pathname that
matches "camelcase" case insensitively. It didn't check if the added
contents actually was the updated one.

Mark the test as non-working.

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

don't use default revision if a rev was specifiedDave Olszewski Sat, 13 Mar 2010 22:47:05 +0000 (14:47 -0800)

don't use default revision if a rev was specified

If a revision is specified, it happens not to have any commits, don't
use the default revision. By doing so, surprising and undesired
behavior can happen, such as showing the reflog for HEAD when a branch
was specified.

[jc: squashed a test from René]

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

for_each_recent_reflog_ent(): use strbuf, fix offset... René Scharfe Sat, 13 Mar 2010 17:37:50 +0000 (18:37 +0100)

for_each_recent_reflog_ent(): use strbuf, fix offset handling

As Vladimir reported, "git log -g refs/stash" surprisingly showed the reflog
of HEAD if the message in the reflog file was too long. To fix this, convert
for_each_recent_reflog_ent() to use strbuf_getwholeline() instead of fgets(),
for safety and to avoid any size limits for reflog entries.

Also reverse the logic of the part of the function that only looks at file
tails. It used to close the file if fgets() succeeded. The following
fgets() call in the while loop was likely to fail in this case, too, so
passing an offset to for_each_recent_reflog_ent() never worked. Change it to
error out if strbuf_getwholeline() fails instead.

Reported-by: Vladimir Panteleev <vladimir@thecybershadow.net>
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/Makefile: remove test artifacts upon "make clean"Junio C Hamano Sat, 13 Mar 2010 20:41:20 +0000 (12:41 -0800)

t/Makefile: remove test artifacts upon "make clean"

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

blame: fix indent of line numbersRené Scharfe Sat, 13 Mar 2010 10:25:12 +0000 (11:25 +0100)

blame: fix indent of line numbers

Correct the calculation of the number of digits for line counts of the
form 10^n-1 (9, 99, ...) in lineno_width(). This makes blame stop
printing an extra space before the line numbers of files with that many
total lines.

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

t9400: Use test_cmp when appropriateJunio C Hamano Fri, 12 Mar 2010 05:40:33 +0000 (21:40 -0800)

t9400: Use test_cmp when appropriate

Consistently using test_cmp would make debugging test scripts far easier,
as output from them run under "-v" option becomes readable.

Besides, some platforms' "diff" implementations lack "-q" option.

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

Merge accumulated fixes to prepare for 1.7.0.3Junio C Hamano Mon, 8 Mar 2010 08:50:24 +0000 (00:50 -0800)

Merge accumulated fixes to prepare for 1.7.0.3

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

Merge branch 'mw/maint-gcc-warns-unused-write' into... Junio C Hamano Mon, 8 Mar 2010 08:36:02 +0000 (00:36 -0800)

Merge branch 'mw/maint-gcc-warns-unused-write' into maint

* mw/maint-gcc-warns-unused-write:
run-command.c: fix build warnings on Ubuntu

Merge branch 'fn/maint-mkdtemp-compat' into maintJunio C Hamano Mon, 8 Mar 2010 08:36:02 +0000 (00:36 -0800)

Merge branch 'fn/maint-mkdtemp-compat' into maint

* fn/maint-mkdtemp-compat:
Fix gitmkdtemp: correct test for mktemp() return value

Merge branch 'gb/maint-submodule-env' into maintJunio C Hamano Mon, 8 Mar 2010 08:36:02 +0000 (00:36 -0800)

Merge branch 'gb/maint-submodule-env' into maint

* gb/maint-submodule-env:
is_submodule_modified(): clear environment properly
submodules: ensure clean environment when operating in a submodule
shell setup: clear_local_git_env() function
rev-parse: --local-env-vars option
Refactor list of of repo-local env vars

Merge branch 'as/maint-expire' into maintJunio C Hamano Mon, 8 Mar 2010 08:36:01 +0000 (00:36 -0800)

Merge branch 'as/maint-expire' into maint

* as/maint-expire:
reflog: honor gc.reflogexpire=never
prune: honor --expire=never

Merge branch 'ml/maint-grep-doc' into maintJunio C Hamano Mon, 8 Mar 2010 08:36:01 +0000 (00:36 -0800)

Merge branch 'ml/maint-grep-doc' into maint

* ml/maint-grep-doc:
grep docs: document --no-index option
grep docs: --cached and <tree>... are incompatible
grep docs: use AsciiDoc literals consistently
grep docs: pluralize "Example" section

Merge branch 'jk/maint-push-tracking-wo-remote' into... Junio C Hamano Mon, 8 Mar 2010 08:36:01 +0000 (00:36 -0800)

Merge branch 'jk/maint-push-tracking-wo-remote' into maint

* jk/maint-push-tracking-wo-remote:
push: fix segfault for odd config

Merge branch 'jc/fetch-param' into maintJunio C Hamano Mon, 8 Mar 2010 08:36:00 +0000 (00:36 -0800)

Merge branch 'jc/fetch-param' into maint

* jc/fetch-param:
fetch --all/--multiple: keep all the fetched branch information
builtin-fetch --all/--multi: propagate options correctly
t5521: fix and modernize

Merge branch 'ne/pack-local-doc' into maintJunio C Hamano Mon, 8 Mar 2010 08:36:00 +0000 (00:36 -0800)

Merge branch 'ne/pack-local-doc' into maint

* ne/pack-local-doc:
pack-objects documentation: Fix --honor-pack-keep as well.
pack-objects documentation: reword "objects that appear in the standard input"
Documentation: pack-objects: Clarify --local's semantics.

Merge branch 'jk/maint-add--interactive-delete' into... Junio C Hamano Mon, 8 Mar 2010 08:36:00 +0000 (00:36 -0800)

Merge branch 'jk/maint-add--interactive-delete' into maint

* jk/maint-add--interactive-delete:
add-interactive: fix bogus diff header line ordering

Merge branch 'mm/mkstemps-mode-for-packfiles' into... Junio C Hamano Mon, 8 Mar 2010 08:36:00 +0000 (00:36 -0800)

Merge branch 'mm/mkstemps-mode-for-packfiles' into maint

* mm/mkstemps-mode-for-packfiles:
Use git_mkstemp_mode instead of plain mkstemp to create object files
git_mkstemps_mode: don't set errno to EINVAL on exit.
Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later.
git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument.
Move gitmkstemps to path.c
Add a testcase for ACL with restrictive umask.

Merge branch 'jc/maint-fix-mailinfo-strip' into maintJunio C Hamano Mon, 8 Mar 2010 08:35:59 +0000 (00:35 -0800)

Merge branch 'jc/maint-fix-mailinfo-strip' into maint

* jc/maint-fix-mailinfo-strip:
mailinfo: do not strip leading spaces even for a header line

Merge branch 'jc/grep-author-all-match-implicit' into... Junio C Hamano Mon, 8 Mar 2010 08:35:59 +0000 (00:35 -0800)

Merge branch 'jc/grep-author-all-match-implicit' into maint

* jc/grep-author-all-match-implicit:
"log --author=me --grep=it" should find intersection, not union

Merge branch 'jc/checkout-detached' into maintJunio C Hamano Mon, 8 Mar 2010 08:35:59 +0000 (00:35 -0800)

Merge branch 'jc/checkout-detached' into maint

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

Merge branch 'maint-1.6.6' into maintJunio C Hamano Mon, 8 Mar 2010 08:35:58 +0000 (00:35 -0800)

Merge branch 'maint-1.6.6' into maint

* maint-1.6.6:

Merge branch 'jc/maint-fix-test-perm' into maint-1.6.6Junio C Hamano Sun, 7 Mar 2010 22:54:05 +0000 (14:54 -0800)

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

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

Merge branch 'sp/maint-push-sideband' into maint-1.6.6Junio C Hamano Sun, 7 Mar 2010 22:54:01 +0000 (14:54 -0800)

Merge branch 'sp/maint-push-sideband' into maint-1.6.6

* sp/maint-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 'hm/maint-imap-send-crlf' into maint-1.6.6Junio C Hamano Sun, 7 Mar 2010 22:53:57 +0000 (14:53 -0800)

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

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

Merge branch 'gf/maint-sh-setup-nongit-ok' into maint... Junio C Hamano Sun, 7 Mar 2010 22:53:53 +0000 (14:53 -0800)

Merge branch 'gf/maint-sh-setup-nongit-ok' into maint-1.6.6

* gf/maint-sh-setup-nongit-ok:
require_work_tree broken with NONGIT_OK

Merge branch 'jk/maint-rmdir-fix' into maint-1.6.6Junio C Hamano Sun, 7 Mar 2010 22:53:50 +0000 (14:53 -0800)

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

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

Merge branch 'rs/optim-text-wrap' into maint-1.6.6Junio C Hamano Sun, 7 Mar 2010 22:53:45 +0000 (14:53 -0800)

Merge branch 'rs/optim-text-wrap' into maint-1.6.6

* rs/optim-text-wrap:
utf8.c: speculatively assume utf-8 in strbuf_add_wrapped_text()
utf8.c: remove strbuf_write()
utf8.c: remove print_spaces()
utf8.c: remove print_wrapped_text()

Merge branch 'tr/maint-cherry-pick-list' into maint... Junio C Hamano Sun, 7 Mar 2010 22:53:40 +0000 (14:53 -0800)

Merge branch 'tr/maint-cherry-pick-list' into maint-1.6.6

* tr/maint-cherry-pick-list:
cherry_pick_list: quit early if one side is empty

Merge branch 'cc/maint-bisect-paths' into maint-1.6.6Junio C Hamano Sun, 7 Mar 2010 22:53:35 +0000 (14:53 -0800)

Merge branch 'cc/maint-bisect-paths' into maint-1.6.6

* cc/maint-bisect-paths:
bisect: error out when passing bad path parameters

color: allow multiple attributesJunio C Hamano Sun, 28 Feb 2010 02:56:38 +0000 (18:56 -0800)

color: allow multiple attributes

In configuration files (and "git config --color" command line), we
supported one and only one attribute after foreground and background
color. Accept combinations of attributes, e.g.

[diff.color]
old = red reverse bold

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

Git 1.7.0.2 v1.7.0.2Junio C Hamano Sun, 7 Mar 2010 19:07:51 +0000 (11:07 -0800)

Git 1.7.0.2

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

unset GREP_OPTIONS in test-lib.shBert Wesarg Wed, 18 Nov 2009 16:15:19 +0000 (17:15 +0100)

unset GREP_OPTIONS in test-lib.sh

I used to set GREP_OPTIONS to exclude *.orig and *.rej files. But with this
the test t4252-am-options.sh fails because it calls grep with a .rej file:

grep "@@ -1,3 +1,3 @@" file-2.rej

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

t3417: Add test cases for "rebase --whitespace=fix"Björn Gustavsson Sat, 6 Mar 2010 14:31:17 +0000 (15:31 +0100)

t3417: Add test cases for "rebase --whitespace=fix"

The command "git rebase --whitespace=fix HEAD~<N>" is supposed to
only clean up trailing whitespace, and the expectation is that it
cannot fail.

Unfortunately, if one commit adds a blank line at the end of a file
and a subsequent commit adds more non-blank lines after the blank
line, "git apply" (used indirectly by "git rebase") will fail to apply
the patch of the second commit.

Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4124: Add additional tests of --whitespace=fixBjörn Gustavsson Sat, 6 Mar 2010 14:31:04 +0000 (15:31 +0100)

t4124: Add additional tests of --whitespace=fix

Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: Allow blank context lines to match beyond EOFBjörn Gustavsson Sat, 6 Mar 2010 14:30:42 +0000 (15:30 +0100)

apply: Allow blank context lines to match beyond EOF

"git apply --whitespace=fix" will not always succeed when used
on a series of patches in the following circumstances:

* One patch adds a blank line at the end of a file. (Since
--whitespace=fix is used, the blank line will *not* be added.)

* The next patch adds non-blank lines after the blank line
introduced in the first patch. That patch will not apply
because the blank line that is expected to be found at end
of the file is no longer there.

A patch series that starts by deleting lines at the end
will fail in a similar way.

Fix this problem by allowing a blank context line at the beginning
of a hunk to match if parts of it falls beyond end of the file.
We still require that at least one non-blank context line match
before the end of the file.

If the --ignore-space-change option is given (as well as the
--whitespace=fix option), blank context lines falling beyond the end
of the file will be copied unchanged to the target file (i.e. they
will have the same line terminators and extra spaces will not be
removed).

Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: Remove the quick rejection testBjörn Gustavsson Sat, 6 Mar 2010 14:30:29 +0000 (15:30 +0100)

apply: Remove the quick rejection test

In the next commit, we will make it possible for blank context
lines to match beyond the end of the file. That means that a hunk
with a preimage that has more lines than present in the file may
be possible to successfully apply. Therefore, we must remove
the quick rejection test in find_pos().

find_pos() will already work correctly without the quick
rejection test, but that might not be obvious. Therefore,
comment the test for handling out-of-range line numbers in
find_pos() and cast the "line" variable to the same (unsigned)
type as img->nr.

What are performance implications of removing the quick
rejection test?

It can only help "git apply" to reject a patch faster. For example,
if I have a file with one million lines and a patch that removes
slightly more than 50 percent of the lines and try to apply that
patch twice, the second attempt will fail slightly faster
with the test than without (based on actual measurements).

However, there is the pathological case of a patch with many
more context lines than the default three, and applying that patch
using "git apply -C1". Without the rejection test, the running
time will be roughly proportional to the number of context lines
times the size of the file. That could be handled by writing
a more complicated rejection test (it would have to count the
number of blanks at the end of the preimage), but I don't find
that worth doing until there is a real-world use case that
would benfit from it.

It would be possible to keep the quick rejection test if
--whitespace=fix is not given, but I don't like that from
a testing point of view.

Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: Don't unnecessarily update line lengths in the... Björn Gustavsson Sat, 6 Mar 2010 14:30:21 +0000 (15:30 +0100)

apply: Don't unnecessarily update line lengths in the preimage

In match_fragment(), the line lengths in the preimage are updated
just before calling update_pre_post_images(). That is not
necessary, since update_pre_post_images() itself will
update the line lengths based on the buffer passed to it.

Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

stash: suggest the correct command line for unknown... Matthieu Moy Fri, 5 Mar 2010 18:43:23 +0000 (19:43 +0100)

stash: suggest the correct command line for unknown options.

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

t7406: Fix submodule init config testsStephen Boyd Fri, 5 Mar 2010 08:20:38 +0000 (00:20 -0800)

t7406: Fix submodule init config tests

These tests have been broken since they were introduced in commits
ca2cedb (git-submodule: add support for --rebase., 2009-04-24) and
42b4917 (git-submodule: add support for --merge., 2009-06-03).
'git submodule init' expects the submodules to exist in the index.
In this case, the submodules don't exist and therefore looking for
the submodules will always fail. To make matters worse, git submodule
fails visibly to the user by saying:

error: pathspec 'rebasing' did not match any file(s) known to git.
Did you forget to 'git add'?

but doesn't return an error code. This allows the test to fail silently.
Fix it by adding the submodules first.

Cc: Johan Herland <johan@herland.net>
Cc: Peter Hutterer <peter.hutterer@who-t.net>
Cc: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.7.0.2Junio C Hamano Fri, 5 Mar 2010 06:39:38 +0000 (22:39 -0800)

Update draft release notes to 1.7.0.2

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

Merge branch 'jn/gitweb-config-error-die' into maintJunio C Hamano Fri, 5 Mar 2010 06:27:12 +0000 (22:27 -0800)

Merge branch 'jn/gitweb-config-error-die' into maint

* jn/gitweb-config-error-die:
gitweb: Die if there are parsing errors in config file

Merge branch 'jn/maint-fix-pager' into maintJunio C Hamano Fri, 5 Mar 2010 06:27:04 +0000 (22:27 -0800)

Merge branch 'jn/maint-fix-pager' into maint

* jn/maint-fix-pager:
tests: Fix race condition in t7006-pager
t7006-pager: if stdout is not a terminal, make a new one
tests: Add tests for automatic use of pager
am: Fix launching of pager
git svn: Fix launching of pager
git.1: Clarify the behavior of the --paginate option
Make 'git var GIT_PAGER' always print the configured pager
Fix 'git var' usage synopsis

Merge branch 'tr/maint-cherry-pick-list' into maintJunio C Hamano Fri, 5 Mar 2010 06:26:44 +0000 (22:26 -0800)

Merge branch 'tr/maint-cherry-pick-list' into maint

* tr/maint-cherry-pick-list:
cherry_pick_list: quit early if one side is empty

Merge branch 'ld/maint-diff-quiet-w' into maintJunio C Hamano Fri, 5 Mar 2010 06:26:39 +0000 (22:26 -0800)

Merge branch 'ld/maint-diff-quiet-w' into maint

* ld/maint-diff-quiet-w:
git-diff: add a test for git diff --quiet -w
git diff --quiet -w: check and report the status

Merge branch 'rs/optim-text-wrap' into maintJunio C Hamano Fri, 5 Mar 2010 06:26:33 +0000 (22:26 -0800)

Merge branch 'rs/optim-text-wrap' into maint

* rs/optim-text-wrap:
utf8.c: speculatively assume utf-8 in strbuf_add_wrapped_text()
utf8.c: remove strbuf_write()
utf8.c: remove print_spaces()
utf8.c: remove print_wrapped_text()

Merge branch 'dp/read-not-mmap-small-loose-object'... Junio C Hamano Fri, 5 Mar 2010 06:26:17 +0000 (22:26 -0800)

Merge branch 'dp/read-not-mmap-small-loose-object' into maint

* dp/read-not-mmap-small-loose-object:
hash-object: don't use mmap() for small files

Merge branch 'np/compress-loose-object-memsave' into... Junio C Hamano Fri, 5 Mar 2010 06:26:05 +0000 (22:26 -0800)

Merge branch 'np/compress-loose-object-memsave' into maint

* np/compress-loose-object-memsave:
sha1_file: be paranoid when creating loose objects
sha1_file: don't malloc the whole compressed result when writing out objects

Merge branch 'jc/maint-status-preload' into maintJunio C Hamano Fri, 5 Mar 2010 06:25:45 +0000 (22:25 -0800)

Merge branch 'jc/maint-status-preload' into maint

* jc/maint-status-preload:
status: preload index to optimize lstat(2) calls

Merge branch 'gf/maint-sh-setup-nongit-ok' into maintJunio C Hamano Fri, 5 Mar 2010 06:25:37 +0000 (22:25 -0800)

Merge branch 'gf/maint-sh-setup-nongit-ok' into maint

* gf/maint-sh-setup-nongit-ok:
require_work_tree broken with NONGIT_OK

Merge branch 'cc/maint-bisect-paths' into maintJunio C Hamano Fri, 5 Mar 2010 06:25:23 +0000 (22:25 -0800)

Merge branch 'cc/maint-bisect-paths' into maint

* cc/maint-bisect-paths:
bisect: error out when passing bad path parameters

Merge branch 'maint-1.6.6' into maintJunio C Hamano Fri, 5 Mar 2010 06:24:25 +0000 (22:24 -0800)

Merge branch 'maint-1.6.6' into maint

* maint-1.6.6:
Remove extra '-' from git-am(1)

Merge branch 'maint-1.6.5' into maint-1.6.6Junio C Hamano Fri, 5 Mar 2010 06:24:19 +0000 (22:24 -0800)

Merge branch 'maint-1.6.5' into maint-1.6.6

* maint-1.6.5:
Remove extra '-' from git-am(1)

Remove extra '-' from git-am(1)Michal Sojka Thu, 4 Mar 2010 12:08:28 +0000 (13:08 +0100)

Remove extra '-' from git-am(1)

Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

run-command.c: fix build warnings on UbuntuMichael Wookey Fri, 29 Jan 2010 22:38:19 +0000 (09:38 +1100)

run-command.c: fix build warnings on Ubuntu

Building git on Ubuntu 9.10 warns that the return value of write(2)
isn't checked. These warnings were introduced in commits:

2b541bf8 ("start_command: detect execvp failures early")
a5487ddf ("start_command: report child process setup errors to the
parent's stderr")

GCC details:

$ gcc --version
gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1

Silence the warnings by reading (but not making use of) the return value
of write(2).

Signed-off-by: Michael Wookey <michaelwookey@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Start preparing for 1.7.0.2Junio C Hamano Wed, 3 Mar 2010 07:11:36 +0000 (23:11 -0800)

Start preparing for 1.7.0.2

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

Merge branch 'tc/maint-transport-ls-remote-with-void... Junio C Hamano Wed, 3 Mar 2010 06:55:22 +0000 (22:55 -0800)

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

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

Merge branch 'hm/maint-imap-send-crlf' into maintJunio C Hamano Wed, 3 Mar 2010 06:55:03 +0000 (22:55 -0800)

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

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

Merge branch 'sp/maint-push-sideband' into maintJunio C Hamano Wed, 3 Mar 2010 06:54:50 +0000 (22:54 -0800)

Merge branch 'sp/maint-push-sideband' into maint

* sp/maint-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

Conflicts:
builtin-receive-pack.c
run-command.c
t/t5401-update-hooks.sh

Merge branch 'jc/maint-fix-test-perm' into maintJunio C Hamano Wed, 3 Mar 2010 06:38:02 +0000 (22:38 -0800)

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

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

Merge branch 'np/fast-import-idx-v2' into maintJunio C Hamano Wed, 3 Mar 2010 06:28:49 +0000 (22:28 -0800)

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

* 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

gitweb: Fix project-specific feature override behaviorJakub Narebski Mon, 1 Mar 2010 21:51:34 +0000 (22:51 +0100)

gitweb: Fix project-specific feature override behavior

This commit fixes a bug in processing project-specific override in
a situation when there is no project, e.g. for the projects list page.

When 'snapshot' feature had project specific config override enabled
by putting
$feature{'snapshot'}{'override'} = 1;

(or equivalent) in $GITWEB_CONFIG, and when viewing toplevel gitweb
page, which means the projects list page (to be more exact this
happens for any project-less action), gitweb would put the following
Perl warnings in error log:

gitweb.cgi: Use of uninitialized value $git_dir in concatenation (.) or string at gitweb.cgi line 2065.
fatal: error processing config file(s)
gitweb.cgi: Use of uninitialized value $git_dir in concatenation (.) or string at gitweb.cgi line 2221.
gitweb.cgi: Use of uninitialized value $git_dir in concatenation (.) or string at gitweb.cgi line 2218.

The problem is in the following fragment of code:

# path to the current git repository
our $git_dir;
$git_dir = "$projectroot/$project" if $project;

# list of supported snapshot formats
our @snapshot_fmts = gitweb_get_feature('snapshot');
@snapshot_fmts = filter_snapshot_fmts(@snapshot_fmts);

For the toplevel gitweb page, which is the list of projects, $project is not
defined, therefore neither is $git_dir. gitweb_get_feature() subroutine
calls git_get_project_config() if project specific override is turned
on... but we don't have project here.

Those errors mentioned above occur in the following fragment of code in
git_get_project_config():

# get config
if (!defined $config_file ||
$config_file ne "$git_dir/config") {
%config = git_parse_project_config('gitweb');
$config_file = "$git_dir/config";
}

git_parse_project_config() calls git_cmd() which has '--git-dir='.$git_dir

There are (at least) three possible solutions:
1. Harden gitweb_get_feature() so that it doesn't call
git_get_project_config() if $project (and therefore $git_dir) is not
defined; there is no project for project specific config.
2. Harden git_get_project_config() like you did in your fix, returning early
if $git_dir is not defined.
3. Harden git_cmd() so that it doesn't add "--git-dir=$git_dir" if $git_dir
is not defined, and change git_get_project_config() so that it doesn't
even try to access $git_dir if it is not defined.

This commit implements both 1.) and 2.), i.e. gitweb_get_feature() doesn't
call project-specific override if $git_dir is not defined (if there is no
project), and git_get_project_config() returns early if $git_dir is not
defined.

Add a test for this bug to t/t9500-gitweb-standalone-no-errors.sh test.

Reported-by: Eli Barzilay <eli@barzilay.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb multiple project roots documentationSylvain Rabot Tue, 2 Mar 2010 00:04:57 +0000 (01:04 +0100)

gitweb multiple project roots documentation

This commit adds in the gitweb/README file a description of how to use gitweb
with several project roots using apache virtualhost rewrite rules.

Signed-off-by: Sylvain Rabot <sylvain@abstraction.fr>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bisect: error out when passing bad path parametersChristian Couder Sun, 28 Feb 2010 22:19:09 +0000 (23:19 +0100)

bisect: error out when passing bad path parameters

As reported by Mark Lodato, "git bisect", when it was started with
path parameters that match no commit was kind of working without
taking account of path parameters and was reporting something like:

Bisecting: -1 revisions left to test after this (roughly 0 steps)

It is more correct and safer to just error out in this case, before
displaying the revisions left, so this patch does just that.

Note that this bug is very old, it exists at least since v1.5.5.
And it is possible to detect that case earlier in the bisect
algorithm, but it is not clear that it would be an improvement to
error out earlier, on the contrary it may change the behavior of
"git rev-list --bisect-all" for example, which is currently correct.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 1.7.0.1 v1.7.0.1Junio C Hamano Sun, 28 Feb 2010 19:41:24 +0000 (11:41 -0800)

Git 1.7.0.1

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

Remove reference to GREP_COLORS from documentationMark Lodato Sat, 27 Feb 2010 04:57:48 +0000 (23:57 -0500)

Remove reference to GREP_COLORS from documentation

There is no longer support for external grep, as per bbc09c2 (grep: rip
out support for external grep, 2010-01-12), so remove the reference to it
from the documentation.

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

sha1_name: fix segfault caused by invalid index accessMarkus Heidelberg Sun, 28 Feb 2010 15:49:15 +0000 (16:49 +0100)

sha1_name: fix segfault caused by invalid index access

The code to see if user input "git show :path" makes sense tried to access
the index without properly checking the array bound.

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

reflog: honor gc.reflogexpire=neverAdam Simpkins Sat, 27 Feb 2010 03:50:03 +0000 (19:50 -0800)

reflog: honor gc.reflogexpire=never

Previously, if gc.reflogexpire or gc.reflogexpire were set to "never"
or "false", the builtin default values were used instead.

Signed-off-by: Adam Simpkins <simpkins@facebook.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

prune: honor --expire=neverAdam Simpkins Sat, 27 Feb 2010 03:50:02 +0000 (19:50 -0800)

prune: honor --expire=never

Previously, prune treated an expiration time of 0 to mean that no
expire argument was supplied, and everything should be pruned. As a
result, "prune --expire=never" would prune all unreachable objects,
regardless of their timestamp.

prune can be called with --expire=never automatically by gc, when the
gc.pruneExpire configuration is set to "never".

Signed-off-by: Adam Simpkins <simpkins@facebook.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint-1.6.6' into maintJunio C Hamano Fri, 26 Feb 2010 07:21:42 +0000 (23:21 -0800)

Merge branch 'maint-1.6.6' into maint

* maint-1.6.6:
t3301-notes: insert a shbang line in ./fake_editor.sh

grep docs: document --no-index optionMark Lodato Fri, 26 Feb 2010 03:40:13 +0000 (22:40 -0500)

grep docs: document --no-index option

Also clarify --cached and <tree>.

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

grep docs: --cached and <tree>... are incompatibleMark Lodato Fri, 26 Feb 2010 03:40:12 +0000 (22:40 -0500)

grep docs: --cached and <tree>... are incompatible

In the synopsis for git-grep(1), show that --cached and <tree>... cannot
be used together.

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

grep docs: use AsciiDoc literals consistentlyMark Lodato Fri, 26 Feb 2010 03:40:11 +0000 (22:40 -0500)

grep docs: use AsciiDoc literals consistently

The convention for this particular page is to use AsciiDoc literal
strings only for options (`-x` or `--long`), but not for definition list
terms and not for <meta-vars>.

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

grep docs: pluralize "Example" sectionMark Lodato Fri, 26 Feb 2010 03:40:10 +0000 (22:40 -0500)

grep docs: pluralize "Example" section

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

t3301-notes: insert a shbang line in ./fake_editor.shJohannes Sixt Thu, 25 Feb 2010 10:39:50 +0000 (11:39 +0100)

t3301-notes: insert a shbang line in ./fake_editor.sh

This is required on Windows because git-notes is now a built-in
rather than a shell script.

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

Fix gitmkdtemp: correct test for mktemp() return valueFilippo Negroni Thu, 25 Feb 2010 10:01:31 +0000 (10:01 +0000)

Fix gitmkdtemp: correct test for mktemp() return value

In gitmkdtemp, the return value of mktemp is not tested correctly.
mktemp() always returns its 'template' argument, even upon failure.
An error is signalled by making the template an empty string.

Signed-off-by: Filippo Negroni <fnegroni@flexerasoftware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pack-objects documentation: Fix --honor-pack-keep as... Nelson Elhage Thu, 25 Feb 2010 00:11:23 +0000 (19:11 -0500)

pack-objects documentation: Fix --honor-pack-keep as well.

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

is_submodule_modified(): clear environment properlyGiuseppe Bilotta Wed, 24 Feb 2010 23:34:18 +0000 (00:34 +0100)

is_submodule_modified(): clear environment properly

Rather than only clearing GIT_INDEX_FILE, take the list of environment
variables to clear from local_repo_env, appending the settings for
GIT_DIR and GIT_WORK_TREE.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodules: ensure clean environment when operating... Giuseppe Bilotta Wed, 24 Feb 2010 23:34:17 +0000 (00:34 +0100)

submodules: ensure clean environment when operating in a submodule

git-submodule used to take care of clearing GIT_DIR whenever it operated
on a submodule index or configuration, but forgot to unset GIT_WORK_TREE
or other repo-local variables. This would lead to failures e.g. when
GIT_WORK_TREE was set.

This only happened in very unusual contexts such as operating on the
main worktree from outside of it, but since "git-gui: set GIT_DIR and
GIT_WORK_TREE after setup" (a9fa11fe5bd5978bb) such failures could also
be provoked by invoking an external tool such as "git submodule update"
from the Git Gui in a standard setup.

Solve by using the newly introduced clear_local_git_env() shell function
to ensure that all repo-local environment variables are unset.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shell setup: clear_local_git_env() functionGiuseppe Bilotta Wed, 24 Feb 2010 23:34:16 +0000 (00:34 +0100)

shell setup: clear_local_git_env() function

Introduce an auxiliary function to clear all repo-local environment
variables. This should be invoked by any shell script that switches
repository during execution, to ensure that the environment is clean
and that things such as the git dir and worktree are set up correctly.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-parse: --local-env-vars optionGiuseppe Bilotta Wed, 24 Feb 2010 23:34:15 +0000 (00:34 +0100)

rev-parse: --local-env-vars option

This prints the list of repo-local environment variables.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Refactor list of of repo-local env varsGiuseppe Bilotta Wed, 24 Feb 2010 23:34:14 +0000 (00:34 +0100)

Refactor list of of repo-local env vars

Move the list of GIT_* environment variables that are local to a
repository into a static list in environment.c, as it is also
useful elsewhere. Also add the missing GIT_CONFIG variable to the
list.

Make it easy to use the list both by NULL-termination and by size;
the latter (excluding the terminating NULL) is stored in the
local_repo_env_size define.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pack-objects documentation: reword "objects that appear... Junio C Hamano Wed, 24 Feb 2010 23:41:27 +0000 (15:41 -0800)

pack-objects documentation: reword "objects that appear in the standard input"

These were written back when we always read objects from the standard
input. These days --revs and its friends can feed only the start and
end points and have the command internally enumerate the objects.

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

commit: quote the user name in the exampleMatt Kraai Wed, 24 Feb 2010 14:18:25 +0000 (06:18 -0800)

commit: quote the user name in the example

If the user runs

git config --global user.name Your Name

as suggested, user.name will be set to "Your". With this patch, the
suggested command will be

git config --global user.name "Your Name"

which will set user.name to "Your Name" and hopefully help users avoid
the former mistake.

Signed-off-by: Matt Kraai <kraai@ftbfs.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ml/maint-grep-doc' into maintJunio C Hamano Wed, 24 Feb 2010 23:33:23 +0000 (15:33 -0800)

Merge branch 'ml/maint-grep-doc' into maint

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

fetch --all/--multiple: keep all the fetched branch... Junio C Hamano Wed, 24 Feb 2010 19:02:05 +0000 (11:02 -0800)

fetch --all/--multiple: keep all the fetched branch information

Since "git fetch" learned "--all" and "--multiple" options, it has become
tempting for users to say "git pull --all". Even though it may fetch from
remotes that do not need to be fetched from for merging with the current
branch, it is handy.

"git fetch" however clears the list of fetched branches every time it
contacts a different remote. Unless the current branch is configured to
merge with a branch from a remote that happens to be the last in the list
of remotes that are contacted, "git pull" that fetches from multiple
remotes will not be able to find the branch it should be merging with.

Make "fetch" clear FETCH_HEAD (unless --append is given) and then append
the list of branches fetched to it (even when --append is not given). That
way, "pull" will be able to find the data for the branch being merged in
FETCH_HEAD no matter where the remote appears in the list of remotes to be
contacted by "git fetch".

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

push: fix segfault for odd configJeff King Wed, 24 Feb 2010 17:08:53 +0000 (12:08 -0500)

push: fix segfault for odd config

If you have a branch.$X.merge config option, but no branch.$X.remote, and
your configuration tries to push tracking branches, git will segfault.

The problem is that even though branch->merge_nr is 1, you don't actually
have an upstream since there is no remote. Other callsites generally
check explicitly that branch->merge is not NULL, so let's do that here,
too.

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