gitweb.git
add generic terminal prompt functionJeff King Sat, 10 Dec 2011 10:41:01 +0000 (05:41 -0500)

add generic terminal prompt function

When we need to prompt the user for input interactively, we
want to access their terminal directly. We can't rely on
stdio because it may be connected to pipes or files, rather
than the terminal. Instead, we use "getpass()", because it
abstracts the idea of prompting and reading from the
terminal. However, it has some problems:

1. It never echoes the typed characters, which makes it OK
for passwords but annoying for other input (like usernames).

2. Some implementations of getpass() have an extremely
small input buffer (e.g., Solaris 8 is reported to
support only 8 characters).

3. Some implementations of getpass() will fall back to
reading from stdin (e.g., glibc). We explicitly don't
want this, because our stdin may be connected to a pipe
speaking a particular protocol, and reading will
disrupt the protocol flow (e.g., the remote-curl
helper).

4. Some implementations of getpass() turn off signals, so
that hitting "^C" on the terminal does not break out of
the password prompt. This can be a mild annoyance.

Instead, let's provide an abstract "git_terminal_prompt"
function that addresses these concerns. This patch includes
an implementation based on /dev/tty, enabled by setting
HAVE_DEV_TTY. The fallback is to use getpass() as before.

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

refactor git_getpass into generic prompt functionJeff King Sat, 10 Dec 2011 10:40:57 +0000 (05:40 -0500)

refactor git_getpass into generic prompt function

This will allow callers to specify more options (e.g.,
leaving echo on). The original git_getpass becomes a slim
wrapper around the new function.

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

move git_getpass to its own source fileJeff King Sat, 10 Dec 2011 10:40:54 +0000 (05:40 -0500)

move git_getpass to its own source file

This is currently in connect.c, but really has nothing to
do with the git protocol itself. Let's make a new source
file all about prompting the user, which will make it
cleaner to refactor.

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

imap-send: don't check return value of git_getpassJeff King Sat, 10 Dec 2011 10:40:49 +0000 (05:40 -0500)

imap-send: don't check return value of git_getpass

git_getpass will always die() if we weren't able to get
input, so there's no point looking for NULL.

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

imap-send: avoid buffer overflowJeff King Sat, 10 Dec 2011 10:40:45 +0000 (05:40 -0500)

imap-send: avoid buffer overflow

We format the password prompt in an 80-character static
buffer. It contains the remote host and username, so it's
unlikely to overflow (or be exploitable by a remote
attacker), but there's no reason not to be careful and use
a strbuf.

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

t: add test harness for external credential helpersJeff King Sat, 10 Dec 2011 10:35:55 +0000 (05:35 -0500)

t: add test harness for external credential helpers

We already have tests for the internal helpers, but it's
nice to give authors of external tools an easy way to
sanity-check their helpers.

If you have written the "git-credential-foo" helper, you can
do so with:

GIT_TEST_CREDENTIAL_HELPER=foo \
make t0303-credential-external.sh

This assumes that your helper is capable of both storing and
retrieving credentials (some helpers may be read-only, and
they will fail these tests).

If your helper supports time-based expiration with a
configurable timeout, you can test that feature like this:

GIT_TEST_CREDENTIAL_HELPER_TIMEOUT="foo --timeout=1" \
make t0303-credential-external.sh

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

credentials: add "store" helperJeff King Sat, 10 Dec 2011 10:34:44 +0000 (05:34 -0500)

credentials: add "store" helper

This is like "cache", except that we actually put the
credentials on disk. This can be terribly insecure, of
course, but we do what we can to protect them by filesystem
permissions, and we warn the user in the documentation.

This is not unlike using .netrc to store entries, but it's a
little more user-friendly. Instead of putting credentials in
place ahead of time, we transparently store them after
prompting the user for them once.

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

strbuf: add strbuf_add*_urlencodeJeff King Sat, 10 Dec 2011 10:34:20 +0000 (05:34 -0500)

strbuf: add strbuf_add*_urlencode

This just follows the rfc3986 rules for percent-encoding
url data into a strbuf.

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

Makefile: unix sockets may not available on some platformsJohannes Sixt Mon, 12 Dec 2011 21:12:56 +0000 (22:12 +0100)

Makefile: unix sockets may not available on some platforms

Introduce a configuration option NO_UNIX_SOCKETS to exclude code that
depends on Unix sockets and use it in MSVC and MinGW builds.

Notice that unix-socket.h was missing from LIB_H before; fix that, too.

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

credentials: add "cache" helperJeff King Sat, 10 Dec 2011 10:34:14 +0000 (05:34 -0500)

credentials: add "cache" helper

If you access repositories over smart-http using http
authentication, then it can be annoying to have git ask you
for your password repeatedly. We cache credentials in
memory, of course, but git is composed of many small
programs. Having to input your password for each one can be
frustrating.

This patch introduces a credential helper that will cache
passwords in memory for a short period of time.

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

docs: end-user documentation for the credential subsystemJeff King Sat, 10 Dec 2011 10:31:38 +0000 (05:31 -0500)

docs: end-user documentation for the credential subsystem

The credential API and helper format is already defined in
technical/api-credentials.txt. This presents the end-user
view.

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

credential: make relevance of http path configurableJeff King Sat, 10 Dec 2011 10:31:34 +0000 (05:31 -0500)

credential: make relevance of http path configurable

When parsing a URL into a credential struct, we carefully
record each part of the URL, including the path on the
remote host, and use the result as part of the credential
context.

This had two practical implications:

1. Credential helpers which store a credential for later
access are likely to use the "path" portion as part of
the storage key. That means that a request to

https://example.com/foo.git

would not use the same credential that was stored in an
earlier request for:

https://example.com/bar.git

2. The prompt shown to the user includes all relevant
context, including the path.

In most cases, however, users will have a single password
per host. The behavior in (1) will be inconvenient, and the
prompt in (2) will be overly long.

This patch introduces a config option to toggle the
relevance of http paths. When turned on, we use the path as
before. When turned off, we drop the path component from the
context: helpers don't see it, and it does not appear in the
prompt.

This is nothing you couldn't do with a clever credential
helper at the start of your stack, like:

[credential "http://"]
helper = "!f() { grep -v ^path= ; }; f"
helper = your_real_helper

But doing this:

[credential]
useHttpPath = false

is way easier and more readable. Furthermore, since most
users will want the "off" behavior, that is the new default.
Users who want it "on" can set the variable (either for all
credentials, or just for a subset using
credential.*.useHttpPath).

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

credential: add credential.*.usernameJeff King Sat, 10 Dec 2011 10:31:30 +0000 (05:31 -0500)

credential: add credential.*.username

Credential helpers can help users avoid having to type their
username and password over and over. However, some users may
not want a helper for their password, or they may be running
a helper which caches for a short time. In this case, it is
convenient to provide the non-secret username portion of
their credential via config.

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

credential: apply helper configJeff King Sat, 10 Dec 2011 10:31:24 +0000 (05:31 -0500)

credential: apply helper config

The functionality for credential storage helpers is already
there; we just need to give the users a way to turn it on.
This patch provides a "credential.helper" configuration
variable which allows the user to provide one or more helper
strings.

Rather than simply matching credential.helper, we will also
compare URLs in subsection headings to the current context.
This means you can apply configuration to a subset of
credentials. For example:

[credential "https://example.com"]
helper = foo

would match a request for "https://example.com/foo.git", but
not one for "https://kernel.org/foo.git".

This is overkill for the "helper" variable, since users are
unlikely to want different helpers for different sites (and
since helpers run arbitrary code, they could do the matching
themselves anyway).

However, future patches will add new config variables where
this extra feature will be more useful.

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

http: use credential API to get passwordsJeff King Sat, 10 Dec 2011 10:31:21 +0000 (05:31 -0500)

http: use credential API to get passwords

This patch converts the http code to use the new credential
API, both for http authentication as well as for getting
certificate passwords.

Most of the code change is simply variable naming (the
passwords are now contained inside the credential struct)
or deletion of obsolete code (the credential code handles
URL parsing and prompting for us).

The behavior should be the same, with one exception: the
credential code will prompt with a description based on the
credential components. Therefore, the old prompt of:

Username for 'example.com':
Password for 'example.com':

now looks like:

Username for 'https://example.com/repo.git':
Password for 'https://user@example.com/repo.git':

Note that we include more information in each line,
specifically:

1. We now include the protocol. While more noisy, this is
an important part of knowing what you are accessing
(especially if you care about http vs https).

2. We include the username in the password prompt. This is
not a big deal when you have just been prompted for it,
but the username may also come from the remote's URL
(and after future patches, from configuration or
credential helpers). In that case, it's a nice
reminder of the user for which you're giving the
password.

3. We include the path component of the URL. In many
cases, the user won't care about this and it's simply
noise (i.e., they'll use the same credential for a
whole site). However, that is part of a larger
question, which is whether path components should be
part of credential context, both for prompting and for
lookup by storage helpers. That issue will be addressed
as a whole in a future patch.

Similarly, for unlocking certificates, we used to say:

Certificate Password for 'example.com':

and we now say:

Password for 'cert:///path/to/certificate':

Showing the path to the client certificate makes more sense,
as that is what you are unlocking, not "example.com".

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

credential: add function for parsing url componentsJeff King Sat, 10 Dec 2011 10:31:17 +0000 (05:31 -0500)

credential: add function for parsing url components

All of the components of a credential struct can be found in
a URL. For example, the URL:

http://foo:bar@example.com/repo.git

contains:

protocol=http
host=example.com
path=repo.git
username=foo
password=bar

We want to be able to turn URLs into broken-down credential
structs so that we know two things:

1. Which parts of the username/password we still need

2. What the context of the request is (for prompting or
as a key for storing credentials).

This code is based on http_auth_init in http.c, but needed a
few modifications in order to get all of the components that
the credential object is interested in.

Once the http code is switched over to the credential API,
then http_auth_init can just go away.

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

introduce credentials APIJeff King Sat, 10 Dec 2011 10:31:11 +0000 (05:31 -0500)

introduce credentials API

There are a few places in git that need to get a username
and password credential from the user; the most notable one
is HTTP authentication for smart-http pushing.

Right now the only choices for providing credentials are to
put them plaintext into your ~/.netrc, or to have git prompt
you (either on the terminal or via an askpass program). The
former is not very secure, and the latter is not very
convenient.

Unfortunately, there is no "always best" solution for
password management. The details will depend on the tradeoff
you want between security and convenience, as well as how
git can integrate with other security systems (e.g., many
operating systems provide a keychain or password wallet for
single sign-on).

This patch provides an abstract notion of credentials as a
data item, and provides three basic operations:

- fill (i.e., acquire from external storage or from the
user)

- approve (mark a credential as "working" for further
storage)

- reject (mark a credential as "not working", so it can
be removed from storage)

These operations can be backed by external helper processes
that interact with system- or user-specific secure storage.

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

t5550: fix typoJeff King Sat, 10 Dec 2011 10:30:10 +0000 (05:30 -0500)

t5550: fix typo

This didn't have an impact, because it was just setting up
an "expect" file that happened to be identical to the one in
the test before it.

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

test-lib: add test_config_global variantJeff King Sat, 10 Dec 2011 10:30:06 +0000 (05:30 -0500)

test-lib: add test_config_global variant

The point of test_config is to simultaneously set a config
variable and register its cleanup handler, like:

test_config core.foo bar

However, it stupidly assumes that $1 contained the name of
the variable, which means it won't work for:

test_config --global core.foo bar

We could try to parse the command-line ourselves and figure
out which parts need to be fed to test_unconfig. But since
this is likely the most common variant, it's much simpler
and less error-prone to simply add a new function.

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

Update 1.7.8 draft release notes in preparation for rc4Junio C Hamano Wed, 23 Nov 2011 02:23:36 +0000 (18:23 -0800)

Update 1.7.8 draft release notes in preparation for rc4

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

Merge branch 'jn/revert-quit'Junio C Hamano Wed, 23 Nov 2011 02:22:08 +0000 (18:22 -0800)

Merge branch 'jn/revert-quit'

* jn/revert-quit:
revert: remove --reset compatibility option
revert: introduce --abort to cancel a failed cherry-pick
revert: write REVERT_HEAD pseudoref during conflicted revert
revert: improve error message for cherry-pick during cherry-pick
revert: rearrange pick_revisions() for clarity
revert: rename --reset option to --quit

revert: remove --reset compatibility optionJonathan Nieder Tue, 22 Nov 2011 11:20:46 +0000 (05:20 -0600)

revert: remove --reset compatibility option

Remove the "git cherry-pick --reset" option, which has a different
preferred spelling nowadays ("--quit"). Luckily the old --reset name
was not around long enough for anyone to get used to it.

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

revert: introduce --abort to cancel a failed cherry... Jonathan Nieder Wed, 23 Nov 2011 01:27:21 +0000 (19:27 -0600)

revert: introduce --abort to cancel a failed cherry-pick

After running some ill-advised command like "git cherry-pick
HEAD..linux-next", the bewildered novice may want to return to more
familiar territory. Introduce a "git cherry-pick --abort" command
that rolls back the entire cherry-pick sequence and places the
repository back on solid ground.

Just like "git merge --abort", this internally uses "git reset
--merge", so local changes not involved in the conflict resolution are
preserved.

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

revert: write REVERT_HEAD pseudoref during conflicted... Jonathan Nieder Tue, 22 Nov 2011 11:17:36 +0000 (05:17 -0600)

revert: write REVERT_HEAD pseudoref during conflicted revert

When conflicts are encountered while reverting a commit, it can be
handy to have the name of that commit easily available. For example,
to produce a copy of the patch to refer to while resolving conflicts:

$ git revert 2eceb2a8
error: could not revert 2eceb2a8... awesome, buggy feature
$ git show -R REVERT_HEAD >the-patch
$ edit $(git diff --name-only)

Set a REVERT_HEAD pseudoref when "git revert" does not make a commit,
for cases like this. This also makes it possible for scripts to
distinguish between a revert that encountered conflicts and other
sources of an unmerged index.

After successfully committing, resetting with "git reset", or moving
to another commit with "git checkout" or "git reset", the pseudoref is
no longer useful, so remove it.

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

revert: improve error message for cherry-pick during... Jonathan Nieder Tue, 22 Nov 2011 11:15:47 +0000 (05:15 -0600)

revert: improve error message for cherry-pick during cherry-pick

In the spirit of v1.6.3.3~3^2 (refuse to merge during a merge,
2009-07-01), "git cherry-pick" refuses to start a new cherry-pick when
in the middle of an existing conflicted cherry-pick in the following
sequence:

1. git cherry-pick HEAD..origin
2. resolve conflicts
3. git cherry-pick HEAD..origin (instead of "git cherry-pick
--continue", by mistake)

Good. However, the error message on attempting step 3 is more
convoluted than necessary:

$ git cherry-pick HEAD..origin
error: .git/sequencer already exists.
error: A cherry-pick or revert is in progress.
hint: Use --continue to continue the operation
hint: or --quit to forget about it
fatal: cherry-pick failed

Clarify by removing the redundant first "error:" message, simplifying
the advice, and using lower-case and no full stops to be consistent
with other commands that prefix their messages with "error:", so it
becomes

error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit)"
fatal: cherry-pick failed

The "fatal: cherry-pick failed" line seems unnecessary, too, but
that can be fixed some other day.

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

revert: rearrange pick_revisions() for clarityJonathan Nieder Tue, 22 Nov 2011 11:15:10 +0000 (05:15 -0600)

revert: rearrange pick_revisions() for clarity

Deal completely with "cherry-pick --quit" and --continue at the
beginning of pick_revisions(), leaving the rest of the function for
the more interesting "git cherry-pick <commits>" case.

No functional change intended. The impact is just to unindent the
code a little.

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

revert: rename --reset option to --quitJonathan Nieder Tue, 22 Nov 2011 11:14:29 +0000 (05:14 -0600)

revert: rename --reset option to --quit

The option to "git cherry-pick" and "git revert" to discard the
sequencer state introduced by v1.7.8-rc0~141^2~6 (revert: Introduce
--reset to remove sequencer state, 2011-08-04) has a confusing name.
Change it now, while we still have the time.

The new name for "cherry-pick, please get out of my way, since I've
long forgotten about the sequence of commits I was cherry-picking when
you wrote that old .git/sequencer directory" is --quit. Mnemonic:
this is analagous to quiting a program the user is no longer using ---
we just want to get out of the multiple-command cherry-pick procedure
and not to reset HEAD or rewind any other old state.

The "--reset" option is kept as a synonym to minimize the impact. We
might consider dropping it for simplicity in a separate patch, though.

Adjust documentation and tests to use the newly preferred name (--quit)
instead of --reset. While at it, let's clarify the short descriptions
of these operations in "-h" output.

Before:

--reset forget the current operation
--continue continue the current operation

After:

--quit end revert or cherry-pick sequence
--continue resume revert or cherry-pick sequence

Noticed-by: Phil Hord <phil.hord@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Mon, 21 Nov 2011 22:30:45 +0000 (14:30 -0800)

Merge branch 'maint'

* maint:
documentation fix: git difftool uses diff tools, not merge tools.

Merge branch 'rr/misc-fixes'Junio C Hamano Mon, 21 Nov 2011 19:03:20 +0000 (11:03 -0800)

Merge branch 'rr/misc-fixes'

* rr/misc-fixes:
convert.c: Fix return type of git_path_check_eol()

convert.c: Fix return type of git_path_check_eol()Ramsay Jones Mon, 21 Nov 2011 18:42:09 +0000 (18:42 +0000)

convert.c: Fix return type of git_path_check_eol()

The git_path_check_eol() function converts a string value to the
corresponding 'enum eol' value. However, the function is currently
declared to return an 'enum crlf_action', which causes sparse to
complain thus:

SP convert.c
convert.c:736:50: warning: mixing different enum types
convert.c:736:50: int enum crlf_action versus
convert.c:736:50: int enum eol

In order to suppress the warning, we simply correct the return type
in the function declaration.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

documentation fix: git difftool uses diff tools, not... Thomas Hochstein Mon, 14 Nov 2011 22:55:52 +0000 (23:55 +0100)

documentation fix: git difftool uses diff tools, not merge tools.

Let the documentation for -t list valid *diff* tools,
not valid *merge* tools.

Signed-off-by: Thomas Hochstein <thh@inter.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config.c: Fix a static buffer overwrite bug by avoiding... Ramsay Jones Sat, 19 Nov 2011 19:42:00 +0000 (19:42 +0000)

config.c: Fix a static buffer overwrite bug by avoiding mkpath()

On cygwin, test number 21 of t3200-branch.sh (git branch -m q q2
without config should succeed) fails. The failure involves the
functions from path.c which parcel out internal static buffers
from the git_path() and mkpath() functions.

In particular, the rename_ref() function calls safe_create_leading\
_directories() with a filename returned by git_path("logs/%s", ref).
safe_create_leading_directories(), in turn, calls stat() on each
element of the path it is given. On cygwin, this leads to a call
to git_config() for each component of the path, since this test
explicitly removes the config file. git_config() calls mkpath(), so
on the fourth component of the path, the original buffer passed
into the function is overwritten with the config filename.

Note that this bug is specific to cygwin and it's schizophrenic
stat() functions (see commits adbc0b6, 7faee6b and 7974843). The
lack of a config file and a path with at least four elements is
also important to trigger the bug.

In order to fix the problem, we replace the call to mkpath() with
a call to mksnpath() and provide our own buffer.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5501-*.sh: Fix url passed to clone in setup testRamsay Jones Sat, 19 Nov 2011 19:38:54 +0000 (19:38 +0000)

t5501-*.sh: Fix url passed to clone in setup test

In particular, the url passed to git-clone has an extra '/' given
after the 'file://' schema prefix, thus:

git clone --reference=original "file:///$(pwd)/original one

Once the prefix is removed, the remainder of the url looks something
like "//home/ramsay/git/t/...", which is then interpreted as an
network path. This then results in a "Permission denied" error, like
so:

ramsay $ ls //home
ls: cannot access //home: No such host or network path
ramsay $ ls //home/ramsay
ls: cannot access //home/ramsay: Permission denied
ramsay $

In order to fix the problem, we simply remove the extraneous '/'
character from the url.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Hopefully final update of release notes before 1.7... Junio C Hamano Fri, 18 Nov 2011 22:19:45 +0000 (14:19 -0800)

Hopefully final update of release notes before 1.7.8 final

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

Merge branch 'rr/misc-fixes'Junio C Hamano Fri, 18 Nov 2011 22:13:48 +0000 (14:13 -0800)

Merge branch 'rr/misc-fixes'

* rr/misc-fixes:
git-compat-util: don't assume value for undefined variable
sha1_file: don't mix enum with int
convert: don't mix enum with int
http: remove unused function hex()

Makefile: add option to disable automatic dependency... Jonathan Nieder Fri, 18 Nov 2011 09:58:21 +0000 (03:58 -0600)

Makefile: add option to disable automatic dependency generation

Now that the COMPUTE_HEADER_DEPENDENCIES feature is turned on
automatically for compilers that support it (see v1.7.8-rc0~142^2~1,
2011-08-18), there is no easy way to force it off. For example,
setting COMPUTE_HEADER_DEPENDENCIES to the empty string in config.mak
just tells the makefile to treat it as undefined and run a test
command to see if the -MMD option is supported.

So allow setting COMPUTE_HEADER_DEPENDENCIES=no to explicitly force
the feature off. The new semantics:

- "yes" means to explicitly enable the feature
- "no" means to disable it
- "auto" means to autodetect

The default is still "auto". Any value other than these three will
cause the build to error out with a descriptive message so typos and
stale settings in config.mak don't result in mysterious behavior.

Makefile:1278: *** please set COMPUTE_HEADER_DEPENDENCIES to
yes, no, or auto (not "1"). Stop.

So now when someone using a compiler without -MMD support reports
trouble building git, you can reproduce it by running "make
COMPUTE_HEADER_DEPENDENCIES=no".

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

Sync with 1.7.7.4Junio C Hamano Fri, 18 Nov 2011 19:30:02 +0000 (11:30 -0800)

Sync with 1.7.7.4

Git 1.7.7.4 v1.7.7.4Junio C Hamano Fri, 18 Nov 2011 19:28:05 +0000 (11:28 -0800)

Git 1.7.7.4

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

Merge branch 'jc/maint-name-rev-all' into maintJunio C Hamano Fri, 18 Nov 2011 19:14:16 +0000 (11:14 -0800)

Merge branch 'jc/maint-name-rev-all' into maint

* jc/maint-name-rev-all:
name-rev --all: do not even attempt to describe non-commit object

Merge branch 'ml/mailmap' into maintJunio C Hamano Fri, 18 Nov 2011 19:14:00 +0000 (11:14 -0800)

Merge branch 'ml/mailmap' into maint

* ml/mailmap:
mailmap: xcalloc mailmap_info

Conflicts:
mailmap.c

Merge branch 'jn/maint-notes-avoid-va-args' into maintJunio C Hamano Fri, 18 Nov 2011 19:11:50 +0000 (11:11 -0800)

Merge branch 'jn/maint-notes-avoid-va-args' into maint

* jn/maint-notes-avoid-va-args:
notes merge: eliminate OUTPUT macro

Conflicts:
notes-merge.c

Makefile: add missing header file dependenciesJonathan Nieder Fri, 18 Nov 2011 10:02:02 +0000 (04:02 -0600)

Makefile: add missing header file dependencies

When the streaming filter API was introduced in v1.7.7-rc0~60^2~7
(2011-05-20), we forgot to add its header to LIB_H. Most translation
units depend on streaming.h via cache.h.

v1.7.5-rc0~48 (Fix sparse warnings, 2011-03-22) introduced undeclared
dependencies by url.o on url.h and thread-utils.o on thread-utils.h.

Noticed by make CHECK_HEADER_DEPENDENCIES=1.

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

notes merge: eliminate OUTPUT macroJonathan Nieder Fri, 18 Nov 2011 01:27:46 +0000 (19:27 -0600)

notes merge: eliminate OUTPUT macro

The macro is variadic, which breaks support for pre-C99 compilers,
and it hides an "if", which can make code hard to understand on
first reading if some arguments have side-effects.

The OUTPUT macro seems to have been inspired by the "output" function
from merge-recursive. But that function in merge-recursive exists to
indent output based on the level of recursion and there is no similar
justification for such a function in "notes merge".

Noticed with 'make CC="gcc -std=c89 -pedantic"':

notes-merge.c:24:22: warning: anonymous variadic macros were introduced in C99 [-Wvariadic-macros]

Encouraged-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

do not let git_path clobber errno when reporting errorsJonathan Nieder Wed, 16 Nov 2011 08:03:36 +0000 (02:03 -0600)

do not let git_path clobber errno when reporting errors

Because git_path() calls vsnprintf(), code like

fd = open(git_path("SQUASH_MSG"), O_WRONLY | O_CREAT, 0666);
die_errno(_("Could not write to '%s'"), git_path("SQUASH_MSG"));

can end up printing an error indicator from vsnprintf() instead of
open() by mistake. Store the path we are trying to write to in a
temporary variable and pass _that_ to die_errno(), so the messages
written by git cherry-pick/revert and git merge can avoid this source
of confusion.

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

Git 1.7.8-rc3 v1.7.8-rc3Junio C Hamano Thu, 17 Nov 2011 19:06:15 +0000 (11:06 -0800)

Git 1.7.8-rc3

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

refs: loosen over-strict "format" checkJunio C Hamano Thu, 17 Nov 2011 00:54:32 +0000 (16:54 -0800)

refs: loosen over-strict "format" check

The add_extra_ref() interface is used to add an extra-ref that is _not_
our ref for the purpose of helping auto-following of tags and reducing
object transfer from remote repository, and they are typically formatted
as a tagname followed by ^{} to make sure no valid refs match that
pattern. In other words, these entries are deliberately formatted not to
pass check-refname-format test.

A recent series however added a test unconditionally to the add_ref()
function that is called from add_extra_ref(). The check may be sensible
for other two callsites of the add_ref() interface, but definitely is
a wrong thing to do in add_extra_ref(). Disable it.

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

mailmap: xcalloc mailmap_infoMarc-André Lureau Thu, 17 Nov 2011 01:25:06 +0000 (02:25 +0100)

mailmap: xcalloc mailmap_info

This is to avoid reaching free of uninitialized members.

With an invalid .mailmap (and perhaps in other cases), it can reach
free(mi->name) with garbage for example.

Signed-off-by: Marc-André Lureau <marcandre.lureau@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

revert: prettify fatal messagesRamkumar Ramachandra Tue, 15 Nov 2011 09:31:32 +0000 (15:01 +0530)

revert: prettify fatal messages

Some of the fatal messages printed by revert and cherry-pick look ugly
like the following:

fatal: Could not open .git/sequencer/todo.: No such file or directory

The culprit here is that these callers of the die_errno() function did not
take it into account that the message string they give to it is followed
by ": <strerror>", hence the message typically should not end with the
full-stop.

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

git-compat-util: don't assume value for undefined variableRamkumar Ramachandra Tue, 15 Nov 2011 17:31:09 +0000 (23:01 +0530)

git-compat-util: don't assume value for undefined variable

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

sha1_file: don't mix enum with intRamkumar Ramachandra Tue, 15 Nov 2011 16:59:39 +0000 (22:29 +0530)

sha1_file: don't mix enum with int

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

convert: don't mix enum with intRamkumar Ramachandra Tue, 15 Nov 2011 16:59:37 +0000 (22:29 +0530)

convert: don't mix enum with int

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

http: remove unused function hex()Ramkumar Ramachandra Tue, 15 Nov 2011 16:59:36 +0000 (22:29 +0530)

http: remove unused function hex()

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

name-rev --all: do not even attempt to describe non... Junio C Hamano Tue, 15 Nov 2011 23:51:05 +0000 (15:51 -0800)

name-rev --all: do not even attempt to describe non-commit object

This even dates back to the very beginning of "git name-rev";
it does not make much sense to dump all objects in the repository
and label non-commits as "undefined".

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

Revert "upload-archive: use start_command instead of... Junio C Hamano Tue, 15 Nov 2011 23:39:33 +0000 (15:39 -0800)

Revert "upload-archive: use start_command instead of fork"

This reverts commit c09cd77ea2fe3580b33918a99fe138d239ac2aaf, expecting a
better version to be rerolled soon.

Git 1.7.8-rc2 v1.7.8-rc2Junio C Hamano Sun, 13 Nov 2011 06:14:53 +0000 (22:14 -0800)

Git 1.7.8-rc2

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

Merge branch 'ly/mktree-using-strbuf'Junio C Hamano Sat, 12 Nov 2011 05:34:06 +0000 (21:34 -0800)

Merge branch 'ly/mktree-using-strbuf'

* ly/mktree-using-strbuf:
mktree: fix a memory leak in write_tree()

Merge "Move 'builtin-*' into a 'builtin/' subdirectory"Junio C Hamano Thu, 10 Nov 2011 17:10:51 +0000 (09:10 -0800)

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

Merge 'build-in git-mktree'Junio C Hamano Thu, 10 Nov 2011 17:05:31 +0000 (09:05 -0800)

Merge 'build-in git-mktree'

* commit '633e3556ccbc': (5835 commits)
build-in git-mktree
allow -t abbreviation for --track in git branch
gitweb: Remove function prototypes (cleanup)
Documentation: cloning to empty directory is allowed
Clarify kind of conflict in merge-one-file helper
git config: clarify --add and --get-color
archive-tar.c: squelch a type mismatch warning
Start 1.6.4 development
Start 1.6.3.1 maintenance series.
GIT 1.6.3
t4029: use sh instead of bash
t4200: convert sed expression which operates on non-text file to perl
t4200: remove two unnecessary lines
t/annotate-tests.sh: avoid passing a non-newline terminated file to sed
t4118: avoid sed invocation on file without terminating newline
t4118: add missing '&&'
t8005: use egrep when extended regular expressions are required
git-clean doc: the command only affects paths under $(cwd)
improve error message in config.c
t4018-diff-funcname: add cpp xfuncname pattern to syntax test
...

mktree: fix a memory leak in write_tree()Liu Yuan Thu, 10 Nov 2011 08:39:22 +0000 (16:39 +0800)

mktree: fix a memory leak in write_tree()

We forget to call strbuf_release to release the buf memory.

Signed-off-by: Liu Yuan <tailai.ly@taobao.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'sn/complete-bash-wo-process-subst'Junio C Hamano Wed, 9 Nov 2011 13:46:39 +0000 (05:46 -0800)

Merge branch 'sn/complete-bash-wo-process-subst'

* sn/complete-bash-wo-process-subst:
completion: don't leak variable from the prompt into environment

completion: don't leak variable from the prompt into... SZEDER Gábor Wed, 9 Nov 2011 10:02:50 +0000 (11:02 +0100)

completion: don't leak variable from the prompt into environment

Commit e5b8eebc (completion: fix issue with process substitution not
working on Git for Windows, 2011-10-26) introduced a new variable in
__git_ps1_show_upstream(), but didn't declare it as local to prevent it
from leaking into the environment.

We may want to rewrite it like the following, but that can wait until the
next cycle.

while read key value
do
...
done <<-EOF
$(git config -z --get-regexp ...)
EOF

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.7.8Junio C Hamano Wed, 9 Nov 2011 00:42:33 +0000 (16:42 -0800)

Update draft release notes to 1.7.8

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

Merge branch 'jc/remote-setbranches-usage-fix'Junio C Hamano Wed, 9 Nov 2011 00:40:31 +0000 (16:40 -0800)

Merge branch 'jc/remote-setbranches-usage-fix'

* jc/remote-setbranches-usage-fix:
remote: fix set-branches usage

Merge branch 'fc/remote-seturl-usage-fix'Junio C Hamano Wed, 9 Nov 2011 00:40:27 +0000 (16:40 -0800)

Merge branch 'fc/remote-seturl-usage-fix'

* fc/remote-seturl-usage-fix:
remote: fix remote set-url usage

Sync with 1.7.7.3Junio C Hamano Wed, 9 Nov 2011 00:38:14 +0000 (16:38 -0800)

Sync with 1.7.7.3

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

Git 1.7.7.3 v1.7.7.3Junio C Hamano Wed, 9 Nov 2011 00:37:00 +0000 (16:37 -0800)

Git 1.7.7.3

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

Merge branch 'jc/maint-remove-renamed-ref' into maintJunio C Hamano Wed, 9 Nov 2011 00:35:53 +0000 (16:35 -0800)

Merge branch 'jc/maint-remove-renamed-ref' into maint

* jc/maint-remove-renamed-ref:
branch -m/-M: remove undocumented RENAMED-REF

Conflicts:
refs.c

Merge branch 'jm/maint-gitweb-filter-forks-fix' into... Junio C Hamano Wed, 9 Nov 2011 00:26:50 +0000 (16:26 -0800)

Merge branch 'jm/maint-gitweb-filter-forks-fix' into maint

* jm/maint-gitweb-filter-forks-fix:
gitweb: fix regression when filtering out forks

Merge branch 'dm/pack-objects-update' into maintJunio C Hamano Wed, 9 Nov 2011 00:26:45 +0000 (16:26 -0800)

Merge branch 'dm/pack-objects-update' into maint

* dm/pack-objects-update:
pack-objects: don't traverse objects unnecessarily
pack-objects: rewrite add_descendants_to_write_order() iteratively
pack-objects: use unsigned int for counter and offset values
pack-objects: mark add_to_write_order() as inline

docs: Update install-doc-quickJunio C Hamano Tue, 8 Nov 2011 18:17:40 +0000 (10:17 -0800)

docs: Update install-doc-quick

The preformatted documentation pages live in their own repositories
these days. Adjust the installation procedure to the updated layout.

Tested-by: Stefan Naewe <stefan.naewe@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

docs: don't mention --quiet or --exit-code in git-log(1)Jeff King Tue, 8 Nov 2011 21:29:30 +0000 (16:29 -0500)

docs: don't mention --quiet or --exit-code in git-log(1)

These are diff-options, but they don't actually make sense
in the context of log.

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

Git 1.7.8-rc1 v1.7.8-rc1Junio C Hamano Tue, 8 Nov 2011 00:48:34 +0000 (16:48 -0800)

Git 1.7.8-rc1

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

Merge branch 'ss/blame-textconv-fake-working-tree'Junio C Hamano Tue, 8 Nov 2011 00:43:19 +0000 (16:43 -0800)

Merge branch 'ss/blame-textconv-fake-working-tree'

* ss/blame-textconv-fake-working-tree:
blame.c: Properly initialize strbuf after calling textconv_object(), again

blame.c: Properly initialize strbuf after calling textc... Sebastian Schuberth Mon, 7 Nov 2011 17:33:34 +0000 (18:33 +0100)

blame.c: Properly initialize strbuf after calling textconv_object(), again

2564aa4 started to initialize buf.alloc, but that should actually be one
more byte than the string length due to the trailing \0. Also, do not
modify buf.alloc out of the strbuf code. Use the existing strbuf_attach
instead.

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ab/i18n-test-fix'Junio C Hamano Mon, 7 Nov 2011 05:22:22 +0000 (21:22 -0800)

Merge branch 'ab/i18n-test-fix'

* ab/i18n-test-fix:
t/t7508-status.sh: use test_i18ncmp
t/t6030-bisect-porcelain.sh: use test_i18ngrep

Merge branch 'sn/http-auth-with-netrc-fix'Junio C Hamano Mon, 7 Nov 2011 05:22:19 +0000 (21:22 -0800)

Merge branch 'sn/http-auth-with-netrc-fix'

* sn/http-auth-with-netrc-fix:
http: don't always prompt for password

Merge branch 'pw/p4-appledouble-fix'Junio C Hamano Mon, 7 Nov 2011 05:21:57 +0000 (21:21 -0800)

Merge branch 'pw/p4-appledouble-fix'

* pw/p4-appledouble-fix:
git-p4: ignore apple filetype

remote: fix remote set-url usageFelipe Contreras Mon, 7 Nov 2011 03:36:57 +0000 (05:36 +0200)

remote: fix remote set-url usage

Bad copy-paste.

Otherwise the help text for "git remote set-url --help" would show help
for "git remote update" subcommand.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote: fix set-branches usageJunio C Hamano Mon, 7 Nov 2011 05:12:59 +0000 (21:12 -0800)

remote: fix set-branches usage

Bad copy-paste.

Otherwise "git remote set-branches" without necessary argument
will result in an error message and help for set-url subcommand.

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

git-p4: ignore apple filetypePete Wyckoff Sat, 5 Nov 2011 17:36:07 +0000 (13:36 -0400)

git-p4: ignore apple filetype

Revert 97a21ca (git-p4: stop ignoring apple filetype, 2011-10-16)
and add a test case.

Reported-by: Michael Wookey <michaelwookey@gmail.com>
Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/t7508-status.sh: use test_i18ncmpÆvar Arnfjörð Bjarmason Sat, 5 Nov 2011 17:28:43 +0000 (17:28 +0000)

t/t7508-status.sh: use test_i18ncmp

Change a i18n-specific comparison in t/t7508-status.sh to use
test_i18ncmp instead. This was introduced in v1.7.6.3~11^2 and has
been broken under GETTEXT_POISON=YesPlease since.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/t6030-bisect-porcelain.sh: use test_i18ngrepÆvar Arnfjörð Bjarmason Sat, 5 Nov 2011 17:28:42 +0000 (17:28 +0000)

t/t6030-bisect-porcelain.sh: use test_i18ngrep

Change a i18n-specific grep in t/t6030-bisect-porcelain.sh to use
test_i18ngrep instead. This was introduced in v1.7.7.2~5^2~11 and has
been broken under GETTEXT_POISON=YesPlease since.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http: don't always prompt for passwordStefan Naewe Fri, 4 Nov 2011 07:03:08 +0000 (08:03 +0100)

http: don't always prompt for password

When a username is already specified at the beginning of any HTTP
transaction (e.g. "git push https://user@hosting.example.com/project.git"
or "git ls-remote https://user@hosting.example.com/project.git"), the code
interactively asks for a password before calling into the libcurl library.
It is very likely that the reason why user included the username in the
URL is because the user knows that it would require authentication to
access the resource. Asking for the password upfront would save one
roundtrip to get a 401 response, getting the password and then retrying
the request. This is a reasonable optimization.

HOWEVER.

This is done even when $HOME/.netrc might have a corresponding entry to
access the site, or the site does not require authentication to access the
resource after all. But neither condition can be determined until we call
into libcurl library (we do not read and parse $HOME/.netrc ourselves). In
these cases, the user is forced to respond to the password prompt, only to
give a password that is not used in the HTTP transaction. If the password
is in $HOME/.netrc, an empty input would later let the libcurl layer to
pick up the password from there, and if the resource does not require
authentication, any input would be taken and then discarded without
getting used. It is wasteful to ask this unused information to the end
user.

Reduce the confusion by not trying to optimize for this case and always
incur roundtrip penalty. An alternative might be to document this and keep
this round-trip optimization as-is.

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

receive-pack: do not expect object 0{40} to existJunio C Hamano Thu, 3 Nov 2011 19:15:08 +0000 (12:15 -0700)

receive-pack: do not expect object 0{40} to exist

When pushing to delete a ref, it uses 0{40} as an object name to signal
that the request is a deletion. We shouldn't trigger "deletion of a
corrupt ref" warning in such a case, which was designed to notice that a
ref points at an object that is truly missing from the repository.

Reported-by: Stefan Näwe
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3200: add test case for 'branch -m'Stefan Naewe Wed, 2 Nov 2011 15:07:05 +0000 (16:07 +0100)

t3200: add test case for 'branch -m'

Signed-off-by: Stefan Naewe <stefan.naewe@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch -m: handle no arg properlyTay Ray Chuan Wed, 2 Nov 2011 16:17:12 +0000 (00:17 +0800)

branch -m: handle no arg properly

Modify the option parsing heuristic to handle all -m (rename) cases,
including the no-arg case.

Previously, this "fell through" to the (argc <= 2) case and caused
segfault.

Reported-by: Stefan Näwe <stefan.naewe@atlas-elektronik.com>
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.7.8Junio C Hamano Tue, 1 Nov 2011 23:37:33 +0000 (16:37 -0700)

Update draft release notes to 1.7.8

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

Sync with 1.7.7.2Junio C Hamano Tue, 1 Nov 2011 23:20:42 +0000 (16:20 -0700)

Sync with 1.7.7.2

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

Git 1.7.7.2 v1.7.7.2Junio C Hamano Tue, 1 Nov 2011 23:16:36 +0000 (16:16 -0700)

Git 1.7.7.2

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

Merge branch 'rs/maint-estimate-cache-size' into maintJunio C Hamano Tue, 1 Nov 2011 23:41:41 +0000 (16:41 -0700)

Merge branch 'rs/maint-estimate-cache-size' into maint

* rs/maint-estimate-cache-size:
t7511: avoid use of reserved filename on Windows.

Merge branch 'md/smtp-tls-hello-again' into maintJunio C Hamano Tue, 1 Nov 2011 23:12:19 +0000 (16:12 -0700)

Merge branch 'md/smtp-tls-hello-again' into maint

* md/smtp-tls-hello-again:
send-email: Honour SMTP domain when using TLS

Merge branch 'jk/pull-rebase-with-work-tree' into maintJunio C Hamano Tue, 1 Nov 2011 23:11:00 +0000 (16:11 -0700)

Merge branch 'jk/pull-rebase-with-work-tree' into maint

* jk/pull-rebase-with-work-tree:
pull,rebase: handle GIT_WORK_TREE better

Conflicts:
git-pull.sh

Merge branch 'jc/maint-diffstat-numstat-context' into... Junio C Hamano Tue, 1 Nov 2011 23:10:56 +0000 (16:10 -0700)

Merge branch 'jc/maint-diffstat-numstat-context' into maint

* jc/maint-diffstat-numstat-context:
diff: teach --stat/--numstat to honor -U$num

Merge branch 'js/bisect-no-checkout' into maintJunio C Hamano Tue, 1 Nov 2011 23:03:35 +0000 (16:03 -0700)

Merge branch 'js/bisect-no-checkout' into maint

* js/bisect-no-checkout:
bisect: fix exiting when checkout failed in bisect_start()

Merge branch 'bc/attr-ignore-case' into maintJunio C Hamano Tue, 1 Nov 2011 22:54:45 +0000 (15:54 -0700)

Merge branch 'bc/attr-ignore-case' into maint

* bc/attr-ignore-case:
attr.c: respect core.ignorecase when matching attribute patterns
attr: read core.attributesfile from git_default_core_config
builtin/mv.c: plug miniscule memory leak
cleanup: use internal memory allocation wrapper functions everywhere
attr.c: avoid inappropriate access to strbuf "buf" member

Conflicts:
remote.c

Merge branch 'cn/fetch-prune' into maintJunio C Hamano Tue, 1 Nov 2011 22:51:01 +0000 (15:51 -0700)

Merge branch 'cn/fetch-prune' into maint

* cn/fetch-prune:
fetch: treat --tags like refs/tags/*:refs/tags/* when pruning
fetch: honor the user-provided refspecs when pruning refs
remote: separate out the remote_find_tracking logic into query_refspecs
t5510: add tests for fetch --prune
fetch: free all the additional refspecs

Merge branch 'sp/smart-http-failure' into maintJunio C Hamano Tue, 1 Nov 2011 22:45:16 +0000 (15:45 -0700)

Merge branch 'sp/smart-http-failure' into maint

* sp/smart-http-failure:
remote-curl: Fix warning after HTTP failure

Merge jn/maint-http-error-messageJunio C Hamano Tue, 1 Nov 2011 22:42:25 +0000 (15:42 -0700)

Merge jn/maint-http-error-message

* commit 'be22d92eac809ad2bfa2b7c83ad7cad5a15f1c43':
http: avoid empty error messages for some curl errors
http: remove extra newline in error message

Merge branch 'jk/name-hash-dirent'Junio C Hamano Tue, 1 Nov 2011 22:31:12 +0000 (15:31 -0700)

Merge branch 'jk/name-hash-dirent'

* jk/name-hash-dirent:
name-hash.c: always initialize dir_next pointer

name-hash.c: always initialize dir_next pointerJohannes Sixt Tue, 1 Nov 2011 22:21:06 +0000 (23:21 +0100)

name-hash.c: always initialize dir_next pointer

Test t2021-checkout-overwrite.sh reveals a segfault in 'git add' on a
case-insensitive file system when git is compiled with XMALLOC_POISON
defined. The reason is that 2548183b (fix phantom untracked files when
core.ignorecase is set) added a new member dir_next to struct cache_entry,
but forgot to initialize it in all cases.

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