Code

git.git
12 years agocontrib: add credential helper for OS X Keychain
Jeff King [Sat, 10 Dec 2011 10:53:14 +0000 (05:53 -0500)]
contrib: add credential helper for OS X Keychain

With this installed in your $PATH, you can store
git-over-http passwords in your keychain by doing:

  git config credential.helper osxkeychain

The code is based in large part on the work of Jay Soffian,
who wrote the helper originally for the initial, unpublished
version of the credential helper protocol.

This version will pass t0303 if you do:

  GIT_TEST_CREDENTIAL_HELPER=osxkeychain \
  GIT_TEST_CREDENTIAL_HELPER_SETUP="export HOME=$HOME" \
  ./t0303-credential-external.sh

The "HOME" setup is unfortunately necessary. The test
scripts set HOME to the trash directory, but this causes the
keychain API to complain.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMakefile: OS X has /dev/tty
Jeff King [Sat, 10 Dec 2011 10:41:30 +0000 (05:41 -0500)]
Makefile: OS X has /dev/tty

We can use our enhanced getpass(). Tested by me.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMakefile: linux has /dev/tty
Jeff King [Sat, 10 Dec 2011 10:41:27 +0000 (05:41 -0500)]
Makefile: linux has /dev/tty

Therefore we can turn on our custom prompt function instead
of relying on getpass.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocredential: use git_prompt instead of git_getpass
Jeff King [Sat, 10 Dec 2011 10:41:23 +0000 (05:41 -0500)]
credential: use git_prompt instead of git_getpass

We use git_getpass to retrieve the username and password
from the terminal. However, git_getpass will not echo the
username as the user types. We can fix this by using the
more generic git_prompt, which underlies git_getpass but
lets us specify an "echo" option.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoprompt: use git_terminal_prompt
Jeff King [Sat, 10 Dec 2011 10:41:08 +0000 (05:41 -0500)]
prompt: use git_terminal_prompt

Our custom implementation of git_terminal_prompt has many
advantages over regular getpass(), as described in the prior
commit.

This also lets us implement a PROMPT_ECHO flag for callers
who want it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoadd generic terminal prompt function
Jeff 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>
12 years agorefactor git_getpass into generic prompt function
Jeff 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>
12 years agomove git_getpass to its own source file
Jeff 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>
12 years agoimap-send: don't check return value of git_getpass
Jeff 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>
12 years agoimap-send: avoid buffer overflow
Jeff 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>
12 years agot: add test harness for external credential helpers
Jeff 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>
12 years agocredentials: add "store" helper
Jeff 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>
12 years agostrbuf: add strbuf_add*_urlencode
Jeff 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>
12 years agoMakefile: unix sockets may not available on some platforms
Johannes 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>
12 years agocredentials: add "cache" helper
Jeff 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>
12 years agodocs: end-user documentation for the credential subsystem
Jeff 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>
12 years agocredential: make relevance of http path configurable
Jeff 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>
12 years agocredential: add credential.*.username
Jeff 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>
12 years agocredential: apply helper config
Jeff 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>
12 years agohttp: use credential API to get passwords
Jeff 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>
12 years agocredential: add function for parsing url components
Jeff 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>
12 years agointroduce credentials API
Jeff 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>
12 years agot5550: fix typo
Jeff 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>
12 years agotest-lib: add test_config_global variant
Jeff 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>
13 years agoUpdate 1.7.8 draft release notes in preparation for rc4
Junio 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>
13 years agoMerge 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

13 years agorevert: remove --reset compatibility option
Jonathan 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>
13 years agorevert: introduce --abort to cancel a failed cherry-pick
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>
13 years agorevert: write REVERT_HEAD pseudoref during conflicted revert
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>
13 years agorevert: improve error message for cherry-pick during cherry-pick
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>
13 years agorevert: rearrange pick_revisions() for clarity
Jonathan 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>
13 years agorevert: rename --reset option to --quit
Jonathan 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>
13 years agoMerge 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.

13 years agoMerge 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()

13 years agoconvert.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>
13 years agodocumentation fix: git difftool uses diff tools, not merge tools.
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>
13 years agoconfig.c: Fix a static buffer overwrite bug by avoiding mkpath()
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 adbc0b67faee6b 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>
13 years agot5501-*.sh: Fix url passed to clone in setup test
Ramsay 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>
13 years agoHopefully final update of release notes before 1.7.8 final
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>
13 years agoMerge 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()

13 years agoMakefile: add option to disable automatic dependency generation
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>
13 years agoSync with 1.7.7.4
Junio C Hamano [Fri, 18 Nov 2011 19:30:02 +0000 (11:30 -0800)]
Sync with 1.7.7.4

13 years agoGit 1.7.7.4 v1.7.7.4
Junio 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>
13 years agoMerge branch 'jc/maint-name-rev-all' into maint
Junio 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

13 years agoMerge branch 'ml/mailmap' into maint
Junio 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

13 years agoMerge branch 'jn/maint-notes-avoid-va-args' into maint
Junio 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

13 years agoMakefile: add missing header file dependencies
Jonathan 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>
13 years agonotes merge: eliminate OUTPUT macro
Jonathan 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>
13 years agodo not let git_path clobber errno when reporting errors
Jonathan 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>
13 years agoGit 1.7.8-rc3 v1.7.8-rc3
Junio 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>
13 years agorefs: loosen over-strict "format" check
Junio 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>
13 years agomailmap: xcalloc mailmap_info
Marc-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>
13 years agorevert: prettify fatal messages
Ramkumar 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>
13 years agogit-compat-util: don't assume value for undefined variable
Ramkumar 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>
13 years agosha1_file: don't mix enum with int
Ramkumar 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>
13 years agoconvert: don't mix enum with int
Ramkumar 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>
13 years agohttp: 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>
13 years agoname-rev --all: do not even attempt to describe non-commit object
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>
13 years agoRevert "upload-archive: use start_command instead of fork"
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.

13 years agoGit 1.7.8-rc2 v1.7.8-rc2
Junio 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>
13 years agoMerge 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()

13 years agoMerge "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"

13 years agoMerge '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
  ...

13 years agomktree: 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>
13 years agoMerge 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

13 years agocompletion: don't leak variable from the prompt into environment
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>
13 years agoUpdate draft release notes to 1.7.8
Junio 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>
13 years agoMerge 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

13 years agoMerge 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

13 years agoSync with 1.7.7.3
Junio 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>
13 years agoGit 1.7.7.3 v1.7.7.3
Junio 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>
13 years agoMerge branch 'jc/maint-remove-renamed-ref' into maint
Junio 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

13 years agoMerge branch 'jm/maint-gitweb-filter-forks-fix' into maint
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

13 years agoMerge branch 'dm/pack-objects-update' into maint
Junio 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

13 years agodocs: Update install-doc-quick
Junio 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>
13 years agodocs: 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>
13 years agoGit 1.7.8-rc1 v1.7.8-rc1
Junio 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>
13 years agoMerge 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

13 years agoblame.c: Properly initialize strbuf after calling textconv_object(), again
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>
13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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

13 years agoremote: fix remote set-url usage
Felipe 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>
13 years agoremote: fix set-branches usage
Junio 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>
13 years agogit-p4: ignore apple filetype
Pete 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>
13 years agot/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>
13 years agot/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>
13 years agohttp: don't always prompt for password
Stefan 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>
13 years agoreceive-pack: do not expect object 0{40} to exist
Junio 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>
13 years agot3200: 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>
13 years agobranch -m: handle no arg properly
Tay 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>
13 years agoUpdate draft release notes to 1.7.8
Junio 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>
13 years agoSync with 1.7.7.2
Junio 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>
13 years agoGit 1.7.7.2 v1.7.7.2
Junio 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>
13 years agoMerge branch 'rs/maint-estimate-cache-size' into maint
Junio 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.

13 years agoMerge branch 'md/smtp-tls-hello-again' into maint
Junio 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

13 years agoMerge branch 'jk/pull-rebase-with-work-tree' into maint
Junio 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

13 years agoMerge branch 'jc/maint-diffstat-numstat-context' into maint
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

13 years agoMerge branch 'js/bisect-no-checkout' into maint
Junio 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()

13 years agoMerge branch 'bc/attr-ignore-case' into maint
Junio 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