6 years agoconvert logmsg_reencode to get_commit_buffer
Jeff King [Tue, 10 Jun 2014 21:41:39 +0000 (17:41 -0400)]
convert logmsg_reencode to get_commit_buffer

Like the callsites in the previous commit, logmsg_reencode
already falls back to read_sha1_file when necessary.
However, I split its conversion out into its own commit
because it's a bit more complex.

We return either:

  1. The original commit->buffer

  2. A newly allocated buffer from read_sha1_file

  3. A reencoded buffer (based on either 1 or 2 above).

while trying to do as few extra reads/allocations as
possible. Callers currently free the result with
logmsg_free, but we can simplify this by pointing them
straight to unuse_commit_buffer. This is a slight layering
violation, in that we may be passing a buffer from (3).
However, since the end result is to free() anything except
(1), which is unlikely to change, and because this makes the
interface much simpler, it's a reasonable bending of the

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agouse get_commit_buffer to avoid duplicate code
Jeff King [Tue, 10 Jun 2014 21:41:02 +0000 (17:41 -0400)]
use get_commit_buffer to avoid duplicate code

For both of these sites, we already do the "fallback to
read_sha1_file" trick. But we can shorten the code by just
using get_commit_buffer.

Note that the error cases are slightly different when
read_sha1_file fails. get_commit_buffer will die() if the
object cannot be loaded, or is a non-commit.

For get_sha1_oneline, this will almost certainly never
happen, as we will have just called parse_object (and if it
does, it's probably worth complaining about).

For record_author_date, the new behavior is probably better;
we notify the user of the error instead of silently ignoring
it. And because it's used only for sorting by author-date,
somebody examining a corrupt repo can fallback to the
regular traversal order.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agouse get_cached_commit_buffer where appropriate
Jeff King [Tue, 10 Jun 2014 21:40:46 +0000 (17:40 -0400)]
use get_cached_commit_buffer where appropriate

Some call sites check commit->buffer to see whether we have
a cached buffer, and if so, do some work with it. In the
long run we may want to switch these code paths to make
their decision on a different boolean flag (because checking
the cache may get a little more expensive in the future).
But for now, we can easily support them by converting the
calls to use get_cached_commit_buffer.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agoprovide helpers to access the commit buffer
Jeff King [Tue, 10 Jun 2014 21:40:39 +0000 (17:40 -0400)]
provide helpers to access the commit buffer

Many sites look at commit->buffer to get more detailed
information than what is in the parsed commit struct.
However, we sometimes drop commit->buffer to save memory,
in which case the caller would need to read the object
afresh. Some callers do this (leading to duplicated code),
and others do not (which opens the possibility of a segfault
if somebody else frees the buffer).

Let's provide a pair of helpers, "get" and "unuse", that let
callers easily get the buffer. They will use the cached
buffer when possible, and otherwise load from disk using

Note that we also need to add a "get_cached" variant which
returns NULL when we do not have a cached buffer. At first
glance this seems to defeat the purpose of "get", which is
to always provide a return value. However, some log code
paths actually use the NULL-ness of commit->buffer as a
boolean flag to decide whether to try printing the
commit. At least for now, we want to continue supporting
that use.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agoprovide a helper to set the commit buffer
Jeff King [Tue, 10 Jun 2014 21:40:14 +0000 (17:40 -0400)]
provide a helper to set the commit buffer

Right now this is just a one-liner, but abstracting it will
make it easier to change later.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agoprovide a helper to free commit buffer
Jeff King [Thu, 12 Jun 2014 22:05:37 +0000 (18:05 -0400)]
provide a helper to free commit buffer

This converts two lines into one at each caller. But more
importantly, it abstracts the concept of freeing the buffer,
which will make it easier to change later.

Note that we also need to provide a "detach" mechanism for a
tricky case in index-pack. We are passed a buffer for the
object generated by processing the incoming pack. If we are
not using --strict, we just calculate the sha1 on that
buffer and return, leaving the caller to free it.  But if we
are using --strict, we actually attach that buffer to an
object, pass the object to the fsck functions, and then
detach the buffer from the object again (so that the caller
can free it as usual).  In this case, we don't want to free
the buffer ourselves, but just make sure it is no longer
associated with the commit.

Note that we are making the assumption here that the
attach/detach process does not impact the buffer at all
(e.g., it is never reallocated or modified). That holds true
now, and we have no plans to change that. However, as we
abstract the commit_buffer code, this dependency becomes
less obvious. So when we detach, let's also make sure that
we get back the same buffer that we gave to the
commit_buffer code.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agosequencer: use logmsg_reencode in get_message
Jeff King [Tue, 10 Jun 2014 21:39:35 +0000 (17:39 -0400)]
sequencer: use logmsg_reencode in get_message

This simplifies the code, as logmsg_reencode handles the
reencoding for us in a single call. It also means we learn
logmsg_reencode's trick of pulling the buffer from disk when
commit->buffer is NULL (we currently just silently return!).
It is doubtful this matters in practice, though, as
sequencer operations would not generally turn off

Note that we may be fixing a bug here. The existing code

  if (same_encoding(to, from))
  reencode_string(buf, to, from);

That probably should have been "!same_encoding".

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agologmsg_reencode: return const buffer
Jeff King [Tue, 10 Jun 2014 21:39:30 +0000 (17:39 -0400)]
logmsg_reencode: return const buffer

The return value from logmsg_reencode may be either a newly
allocated buffer or a pointer to the existing commit->buffer.
We would not want the caller to accidentally free() or
modify the latter, so let's mark it as const.  We can cast
away the constness in logmsg_free, but only once we have
determined that it is a free-able buffer.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agodo not create "struct commit" with xcalloc
Jeff King [Tue, 10 Jun 2014 21:39:11 +0000 (17:39 -0400)]
do not create "struct commit" with xcalloc

In both blame and merge-recursive, we sometimes create a
"fake" commit struct for convenience (e.g., to represent the
HEAD state as if we would commit it). By allocating
ourselves rather than using alloc_commit_node, we do not
properly set the "index" field of the commit. This can
produce subtle bugs if we then use commit-slab on the
resulting commit, as we will share the "0" index with
another commit.

We can fix this by using alloc_commit_node() to allocate.
Note that we cannot free the result, as it is part of our
commit allocator. However, both cases were already leaking
the allocated commit anyway, so there's nothing to fix up.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agocommit: push commit_index update into alloc_commit_node
Jeff King [Tue, 10 Jun 2014 21:39:04 +0000 (17:39 -0400)]
commit: push commit_index update into alloc_commit_node

Whenever we create a commit object via lookup_commit, we
give it a unique index to be used with the commit-slab API.
The theory is that any "struct commit" we create would
follow this code path, so any such struct would get an
index. However, callers could use alloc_commit_node()
directly (and get multiple commits with index 0).

Let's push the indexing into alloc_commit_node so that it's
hard for callers to get it wrong.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agoalloc: include any-object allocations in alloc_report
Jeff King [Tue, 10 Jun 2014 21:38:47 +0000 (17:38 -0400)]
alloc: include any-object allocations in alloc_report

When 2c1cbec (Use proper object allocators for unknown
object nodes too, 2007-04-16), added a special "any_object"
allocator, it never taught alloc_report to report on it. To
do so we need to add an extra type argument to the REPORT
macro, as that commit did for DEFINE_ALLOCATOR.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agoreplace dangerous uses of strbuf_attach
Jeff King [Tue, 10 Jun 2014 21:38:38 +0000 (17:38 -0400)]
replace dangerous uses of strbuf_attach

It is not a good idea to strbuf_attach an arbitrary pointer
just because a function you are calling wants a strbuf.
Attaching implies a transfer of memory ownership; if anyone
were to modify or release the resulting strbuf, we would
free() the pointer, leading to possible problems:

  1. Other users of the original pointer might access freed

  2. The pointer might not be the start of a malloc'd
     area, so calling free() on it in the first place would
     be wrong.

In the two cases modified here, we are fortunate that nobody
touches the strbuf once it is attached, but it is an
accident waiting to happen.  Since the previous commit,
commit_tree and friends take a pointer/buf pair, so we can
just do away with the strbufs entirely.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agocommit_tree: take a pointer/len pair rather than a const strbuf
Jeff King [Tue, 10 Jun 2014 21:36:52 +0000 (17:36 -0400)]
commit_tree: take a pointer/len pair rather than a const strbuf

While strbufs are pretty common throughout our code, it is
more flexible for functions to take a pointer/len pair than
a strbuf. It's easy to turn a strbuf into such a pair (by
dereferencing its members), but less easy to go the other
way (you can strbuf_attach, but that has implications about
memory ownership).

This patch teaches commit_tree (and its associated callers
and sub-functions) to take such a pair for the commit
message rather than a strbuf.  This makes passing the buffer
around slightly more verbose, but means we can get rid of
some dangerous strbuf_attach calls in the next patch.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agoSync with 1.9.4
Junio C Hamano [Fri, 30 May 2014 17:57:52 +0000 (10:57 -0700)]
Sync with 1.9.4

6 years agoGit 1.9.4 v1.9.4
Junio C Hamano [Wed, 28 May 2014 22:50:22 +0000 (15:50 -0700)]
Git 1.9.4

This is expected to be the final maintenance release for 1.9 series,
merging the remaining fixes that are relevant and are already in 2.0.

Signed-off-by: Junio C Hamano <>
6 years agot5537: re-drop http tests
Jeff King [Fri, 30 May 2014 01:34:19 +0000 (21:34 -0400)]
t5537: re-drop http tests

These were originally removed by 0232852 (t5537: move
http tests out to t5539, 2014-02-13). However, they were
accidentally re-added in 1ddb4d7 (Merge branch
'nd/upload-pack-shallow', 2014-03-21).

This looks like an error in manual conflict resolution.
Here's what happened:

  1. v1.9.0 shipped with the http tests in t5537.

  2. We realized that this caused problems, and built
     0232852 on top to move the tests to their own file.
     This fix made it into v1.9.1.

  3. We later had another fix in nd/upload-pack-shallow that
     also touched t5537. It was built directly on v1.9.0.

When we merged nd/upload-pack-shallow to master, we got a
conflict; it was built on a version with the http tests, but
we had since removed them. The correct resolution was to
drop the http tests and keep the new ones, but instead we
kept everything.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'rh/prompt-pcmode-avoid-eval-on-refname' into maint
Junio C Hamano [Wed, 28 May 2014 22:46:36 +0000 (15:46 -0700)]
Merge branch 'rh/prompt-pcmode-avoid-eval-on-refname' into maint

* rh/prompt-pcmode-avoid-eval-on-refname: don't assume the shell expands the value of PS1

6 years agoMerge branch 'mw/symlinks' into maint
Junio C Hamano [Wed, 28 May 2014 22:45:57 +0000 (15:45 -0700)]
Merge branch 'mw/symlinks' into maint

* mw/symlinks:
  setup: fix windows path buffer over-stepping
  setup: don't dereference in-tree symlinks for absolute paths
  setup: add abspath_part_inside_repo() function
  t0060: add tests for prefix_path when path begins with work tree
  t0060: add test for prefix_path when path == work tree
  t0060: add test for prefix_path on symlinks via absolute paths
  t3004: add test for ls-files on symlinks via absolute paths

6 years agoGit 2.0 v2.0.0
Junio C Hamano [Wed, 28 May 2014 18:04:19 +0000 (11:04 -0700)]
Git 2.0

6 years agoUpdate draft release notes to 2.0
Junio C Hamano [Wed, 21 May 2014 18:50:35 +0000 (11:50 -0700)]
Update draft release notes to 2.0

Hopefully for the last time ;-)

Signed-off-by: Junio C Hamano <>
6 years agoGit 2.0-rc4 v2.0.0-rc4
Junio C Hamano [Tue, 20 May 2014 19:07:35 +0000 (12:07 -0700)]
Git 2.0-rc4

Signed-off-by: Junio C Hamano <>
6 years agoRelNotes/2.0.0.txt: Fix several grammar issues, notably a lack of hyphens, double...
Jason St. John [Sat, 17 May 2014 03:30:34 +0000 (23:30 -0400)]
RelNotes/2.0.0.txt: Fix several grammar issues, notably a lack of hyphens, double quotes, or articles

Signed-off-by: Jason St. John <>
Signed-off-by: Junio C Hamano <>
6 years agoRevert "Merge branch 'jc/graduate-remote-hg-bzr' (early part)"
Junio C Hamano [Tue, 20 May 2014 21:18:11 +0000 (14:18 -0700)]
Revert "Merge branch 'jc/graduate-remote-hg-bzr' (early part)"

Instead of showing a warning and working as before, fail and show
the message and force immediate upgrade from their upstream
repositories when these tools are run, per request from their
primary author.

Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'jc/graduate-remote-hg-bzr' (early part)
Junio C Hamano [Tue, 20 May 2014 00:12:36 +0000 (17:12 -0700)]
Merge branch 'jc/graduate-remote-hg-bzr' (early part)

* 'jc/graduate-remote-hg-bzr' (early part):
  remote-helpers: point at their upstream repositories
  contrib: remote-helpers: add move warnings (v2.0)
  Revert "Merge branch 'fc/transport-helper-sync-error-fix'"

6 years agoremote-helpers: point at their upstream repositories
Junio C Hamano [Thu, 15 May 2014 21:58:16 +0000 (14:58 -0700)]
remote-helpers: point at their upstream repositories

Signed-off-by: Junio C Hamano <>
6 years agocontrib: remote-helpers: add move warnings (v2.0)
Felipe Contreras [Tue, 13 May 2014 21:29:56 +0000 (16:29 -0500)]
contrib: remote-helpers: add move warnings (v2.0)

The tools are now maintained out-of-tree, and they have a regression
in v2.0. It's better to start warning the users as soon as possible.

Signed-off-by: Felipe Contreras <>
Signed-off-by: Junio C Hamano <>
6 years agoRevert "Merge branch 'fc/transport-helper-sync-error-fix'"
Junio C Hamano [Wed, 14 May 2014 19:06:35 +0000 (12:06 -0700)]
Revert "Merge branch 'fc/transport-helper-sync-error-fix'"

This reverts commit d508e4a8e2391ae2596403b6478d01cf3d5f928f,
reversing changes made to e42552135a2a396f37053a89f44952ea907870b2.

The author of the original topic says he broke the upcoming 2.0
release with something that relates to "synchronization crash
regression" while refusing to give further specifics, so this would
unfortunately be the safest option for the upcoming release.

Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'rh/prompt-pcmode-avoid-eval-on-refname'
Junio C Hamano [Mon, 19 May 2014 23:10:10 +0000 (16:10 -0700)]
Merge branch 'rh/prompt-pcmode-avoid-eval-on-refname'

* rh/prompt-pcmode-avoid-eval-on-refname: don't assume the shell expands the value of PS1

6 years don't assume the shell expands the value of PS1
Richard Hansen [Mon, 19 May 2014 22:55:37 +0000 (18:55 -0400)] don't assume the shell expands the value of PS1

Not all shells subject the prompt string to parameter expansion.  Test
whether the shell will expand the value of PS1, and use the result to
control whether raw ref names are included directly in PS1.

This fixes a regression introduced in commit 8976500 ("
don't put unsanitized branch names in $PS1"):  zsh does not expand PS1
by default, but that commit assumed it did.  The bug resulted in
prompts containing the literal string '${__git_ps1_branch_name}'
instead of the actual branch name.

Reported-by: Caleb Thompson <>
Signed-off-by: Richard Hansen <>
Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'lt/request-pull'
Junio C Hamano [Mon, 19 May 2014 17:35:36 +0000 (10:35 -0700)]
Merge branch 'lt/request-pull'

* lt/request-pull:
  request-pull: resurrect for-linus -> tags/for-linus DWIM

6 years agoMerge branch 'jl/use-vsatisfy-correctly-for-2.0'
Junio C Hamano [Mon, 19 May 2014 17:35:24 +0000 (10:35 -0700)]
Merge branch 'jl/use-vsatisfy-correctly-for-2.0'

* jl/use-vsatisfy-correctly-for-2.0:
  git-gui: tolerate major version changes when comparing the git version

6 years agoMerge git://
Junio C Hamano [Mon, 19 May 2014 17:32:56 +0000 (10:32 -0700)]
Merge git://

* git://
  fr: a lot of good fixups

6 years agoMerge branch 'kb/fast-hashmap'
Junio C Hamano [Mon, 19 May 2014 17:32:25 +0000 (10:32 -0700)]
Merge branch 'kb/fast-hashmap'

* kb/fast-hashmap:
  Documentation/technical/api-hashmap: remove source highlighting

6 years agoDocumentation/technical/api-hashmap: remove source highlighting
Anders Kaseorg [Sat, 17 May 2014 11:08:55 +0000 (07:08 -0400)]
Documentation/technical/api-hashmap: remove source highlighting

The highlighting was pretty, but unfortunately, the failure mode
when source-highlight is not installed was that the entire code
block disappears.


Signed-off-by: Anders Kaseorg <>
Signed-off-by: Junio C Hamano <>
6 years agogit-gui: tolerate major version changes when comparing the git version
Jens Lehmann [Sat, 17 May 2014 19:49:05 +0000 (21:49 +0200)]
git-gui: tolerate major version changes when comparing the git version

Since git 2.0.0 starting git gui in a submodule using a gitfile fails with
the following error:

   No working directory ../../../<path>

   couldn't change working directory
   to "../../../<path>": no such file or

This is because "git rev-parse --show-toplevel" is only run when git gui
sees a git version of at least 1.7.0 (which is the version in which the
--show-toplevel option was introduced). But "package vsatisfies" returns
false when the major version changes, which is not what we want here.

Fix that for both places where the git version is checked using vsatisfies
by appending a '-' to the version number. This tells vsatisfies that a
change of the major version is not considered to be a problem, as long as
the new major version is larger. This is done for both the place that
caused the reported bug and another spot where the git version is tested
for another feature.

Reported-by: Chris Packham <>
Reported-by: Yann Dirson <>
Helped-by: Pat Thoyts <>
Signed-off-by: Jens Lehmann <>
Tested-by: Chris Packham <>
Signed-off-by: Junio C Hamano <>
6 years agofr: a lot of good fixups
Grégoire Paris [Tue, 6 May 2014 21:29:57 +0000 (23:29 +0200)]
fr: a lot of good fixups

Signed-off-by: Grégoire Paris <>
Acked-by: Jean-Noel Avila <>
6 years agorequest-pull: resurrect for-linus -> tags/for-linus DWIM
Junio C Hamano [Fri, 16 May 2014 17:18:25 +0000 (10:18 -0700)]
request-pull: resurrect for-linus -> tags/for-linus DWIM

Older versions of Git before v1.7.10 did not DWIM

    $ git pull $URL for-linus

to the tag "tags/for-linus" and the users were required to say

    $ git pull $URL tags/for-linus

instead.  Because newer versions of Git works either way,
request-pull used to show tags/for-linus when asked

    $ git request-pull origin/master $URL for-linus

The recent updates broke this and in the output we see "for-linus"
without the "tags/" prefix.

As v1.7.10 is more than 2 years old, this should matter very little
in practice, but resurrecting it is very simple.

Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'fc/prompt-zsh-read-from-file'
Junio C Hamano [Tue, 13 May 2014 18:53:14 +0000 (11:53 -0700)]
Merge branch 'fc/prompt-zsh-read-from-file'

* fc/prompt-zsh-read-from-file:
  contrib: completion: fix 'eread()' namespace

6 years agocontrib: completion: fix 'eread()' namespace
Felipe Contreras [Tue, 13 May 2014 13:21:19 +0000 (08:21 -0500)]
contrib: completion: fix 'eread()' namespace

Otherwise it might collide with a function of the same name in the
user's environment.

Suggested-by: SZEDER Gábor <>
Signed-off-by: Felipe Contreras <>
Signed-off-by: Junio C Hamano <>
6 years agoMerge git://
Junio C Hamano [Mon, 12 May 2014 17:12:05 +0000 (10:12 -0700)]
Merge git://

* git://
  l10n: Updated Bulgarian translation of git (1307t0f921u)

6 years agol10n: Updated Bulgarian translation of git (1307t0f921u)
Alexander Shopov [Wed, 29 Jan 2014 13:08:40 +0000 (15:08 +0200)]
l10n: Updated Bulgarian translation of git (1307t0f921u)

Signed-off-by: Alexander Shopov <>
6 years agoGit 2.0-rc3 v2.0.0-rc3
Junio C Hamano [Fri, 9 May 2014 18:23:25 +0000 (11:23 -0700)]
Git 2.0-rc3

6 years agoSync with 1.9.3
Junio C Hamano [Fri, 9 May 2014 18:00:48 +0000 (11:00 -0700)]
Sync with 1.9.3

6 years agoGit 1.9.3 v1.9.3
Junio C Hamano [Fri, 9 May 2014 17:59:07 +0000 (10:59 -0700)]
Git 1.9.3

The third maintenance release for Git 1.9; contains all the fixes
that are scheduled to appear in Git 2.0 since 1.9.2.

Signed-off-by: Junio C Hamano <>
6 years agoSync with maint
Junio C Hamano [Thu, 8 May 2014 18:59:51 +0000 (11:59 -0700)]
Sync with maint

* maint:
  shell doc: remove stray "+" in example
  Start preparing for 1.9.3

6 years agoshell doc: remove stray "+" in example
Jonathan Nieder [Wed, 7 May 2014 23:44:01 +0000 (16:44 -0700)]
shell doc: remove stray "+" in example

The git-shell(1) manpage says

       To disable interactive logins, displaying a greeting


   $ chsh -s /usr/bin/git-shell
   $ mkdir $HOME/git-shell-commands

The stray "+" has been there ever since the example was added in
v1.8.3-rc0~210^2 (shell: new no-interactive-login command to print a
custom message, 2013-03-09).  The "+" sign between paragraphs is
needed in asciidoc to attach extra paragraphs to a list item but here
it is not needed and ends up rendered as a literal "+".  Remove it.

A quick search with "grep -e '<p>+' /usr/share/doc/git/html/*.html"
doesn't find any other instances of this problem.

Signed-off-by: Jonathan Nieder <>
Signed-off-by: Junio C Hamano <>
6 years agoMerge git://
Junio C Hamano [Thu, 8 May 2014 17:25:37 +0000 (10:25 -0700)]
Merge git://

* 'master' of git://
  l10n: Fix a couple of typos in the Swedish translation

6 years agoStart preparing for 1.9.3
Junio C Hamano [Thu, 8 May 2014 17:05:22 +0000 (10:05 -0700)]
Start preparing for 1.9.3

Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'cl/p4-use-diff-tree' into maint
Junio C Hamano [Thu, 8 May 2014 17:01:32 +0000 (10:01 -0700)]
Merge branch 'cl/p4-use-diff-tree' into maint

"git p4" dealing with changes in binary files were broken by a
change in 1.9 release.

* cl/p4-use-diff-tree:
  git-p4: format-patch to diff-tree change breaks binary patches

6 years agoMerge branch 'rh/prompt-pcmode-avoid-eval-on-refname' into maint
Junio C Hamano [Thu, 8 May 2014 17:01:18 +0000 (10:01 -0700)]
Merge branch 'rh/prompt-pcmode-avoid-eval-on-refname' into maint

The shell prompt script (in contrib/), when using the PROMPT_COMMAND
interface, used an unsafe construct when showing the branch name in

* rh/prompt-pcmode-avoid-eval-on-refname: don't put unsanitized branch names in $PS1

6 years agoMerge branch 'km/avoid-non-function-return-in-rebase' into maint
Junio C Hamano [Thu, 8 May 2014 17:01:06 +0000 (10:01 -0700)]
Merge branch 'km/avoid-non-function-return-in-rebase' into maint

"git rebase" used a POSIX shell construct FreeBSD /bin/sh does not
work well with.

* km/avoid-non-function-return-in-rebase:
  Revert "rebase: fix run_specific_rebase's use of "return" on FreeBSD"
  rebase: avoid non-function use of "return" on FreeBSD

6 years agoMerge branch 'tb/unicode-6.3-zero-width' into maint
Junio C Hamano [Thu, 8 May 2014 17:00:45 +0000 (10:00 -0700)]
Merge branch 'tb/unicode-6.3-zero-width' into maint

Some more Unicode codepoints defined in Unicode 6.3 as having zero
width have been taught to our display column counting logic.

* tb/unicode-6.3-zero-width:
  utf8.c: partially update to version 6.3

6 years agoMerge branch 'km/avoid-bs-in-shell-glob' into maint
Junio C Hamano [Thu, 8 May 2014 17:00:36 +0000 (10:00 -0700)]
Merge branch 'km/avoid-bs-in-shell-glob' into maint

Some tests used shell constructs that did not work well on FreeBSD

* km/avoid-bs-in-shell-glob:
  test: fix t5560 on FreeBSD

6 years agoMerge branch 'km/avoid-cp-a' into maint
Junio C Hamano [Thu, 8 May 2014 16:59:41 +0000 (09:59 -0700)]
Merge branch 'km/avoid-cp-a' into maint

Some tests used shell constructs that did not work well on FreeBSD

* km/avoid-cp-a:
  test: fix t7001 cp to use POSIX options

6 years agoUpdate draft release notes for 2.0
Junio C Hamano [Wed, 7 May 2014 22:50:15 +0000 (15:50 -0700)]
Update draft release notes for 2.0

Describe one last minute one-liner fix for regression introduced in
1.9, and fix a grave mischaracterization on a recent remote-hg/bzr
change, pointed out by Felipe.

Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'cl/p4-use-diff-tree'
Junio C Hamano [Wed, 7 May 2014 21:39:29 +0000 (14:39 -0700)]
Merge branch 'cl/p4-use-diff-tree'

Fixes a regression in 1.9.0 with an obviously correct single-liner.

* cl/p4-use-diff-tree:
  git-p4: format-patch to diff-tree change breaks binary patches

6 years agogit-p4: format-patch to diff-tree change breaks binary patches
Tolga Ceylan [Wed, 7 May 2014 05:48:54 +0000 (22:48 -0700)]
git-p4: format-patch to diff-tree change breaks binary patches

When applying binary patches a full index is required. format-patch
already handles this, but diff-tree needs '--full-index' argument
to always output full index. When git-p4 runs git-apply to test
the patch, git-apply rejects the patch due to abbreviated blob
object names. This is the error message git-apply emits in this

    error: cannot apply binary patch to '<filename>' without full index line
    error: <filename>: patch does not apply

Signed-off-by: Tolga Ceylan <>
Acked-by: Pete Wyckoff <>
Signed-off-by: Junio C Hamano <>
6 years agol10n: Fix a couple of typos in the Swedish translation
Peter Krefting [Wed, 7 May 2014 06:06:37 +0000 (07:06 +0100)]
l10n: Fix a couple of typos in the Swedish translation

Thanks-to: Anders Jonsson <>
Signed-off-by: Peter Krefting <>
6 years agoRelNotes/2.0.0: Grammar and typo fixes
Øyvind A. Holm [Sat, 3 May 2014 19:08:50 +0000 (21:08 +0200)]
RelNotes/2.0.0: Grammar and typo fixes

Signed-off-by: Øyvind A. Holm <>
Signed-off-by: Junio C Hamano <>
6 years agoGit 2.0-rc2 v2.0.0-rc2
Junio C Hamano [Fri, 2 May 2014 20:15:52 +0000 (13:15 -0700)]
Git 2.0-rc2

6 years agoMerge branch 'mw/symlinks'
Junio C Hamano [Fri, 2 May 2014 20:11:02 +0000 (13:11 -0700)]
Merge branch 'mw/symlinks'

A finishing touch fix to a new change already in 'master'.

* mw/symlinks:
  setup: fix windows path buffer over-stepping

6 years agoMerge branch 'km/git-svn-workaround-older-getopt-long'
Junio C Hamano [Fri, 2 May 2014 20:10:58 +0000 (13:10 -0700)]
Merge branch 'km/git-svn-workaround-older-getopt-long'

* km/git-svn-workaround-older-getopt-long:
  t9117: use --prefix "" instead of --prefix=""

6 years agoMerge branch 'rh/prompt-pcmode-avoid-eval-on-refname'
Junio C Hamano [Fri, 2 May 2014 20:10:53 +0000 (13:10 -0700)]
Merge branch 'rh/prompt-pcmode-avoid-eval-on-refname'

* rh/prompt-pcmode-avoid-eval-on-refname: don't put unsanitized branch names in $PS1

6 years agoMerge branch 'mk/doc-git-gui-display-untracked'
Junio C Hamano [Fri, 2 May 2014 20:10:47 +0000 (13:10 -0700)]
Merge branch 'mk/doc-git-gui-display-untracked'

* mk/doc-git-gui-display-untracked:
  Documentation: git-gui: describe gui.displayuntracked

6 years agoMerge git://
Junio C Hamano [Wed, 30 Apr 2014 18:01:42 +0000 (11:01 -0700)]
Merge git://

* git://
  l10n: de.po: improve hint for autocorrected command execution
  l10n: de.po: translate 45 new messages
  l10n: de.po: correct translation of "completed" after resolving deltas
  l10n: zh_CN.po: translate 46 new messages (2229t0f0u)
  l10n: fr translation for v2.0.0rc0 (2228t)
  l10n: Update Swedish translation (2228t0f0u)
  l10n: vi.po (2228t): Update and minor fix
  l10n: git.pot: v2.0.0 round 1 (45 new, 28 removed)

6 years agoRevert the whole "ask curl-config" topic for now
Junio C Hamano [Wed, 30 Apr 2014 17:58:10 +0000 (10:58 -0700)]
Revert the whole "ask curl-config" topic for now

Postpone this a bit during the feature freeze and retry the effort
in the next cycle.

6 years agol10n: de.po: improve hint for autocorrected command execution
Ralf Thielow [Fri, 25 Apr 2014 20:16:43 +0000 (22:16 +0200)]
l10n: de.po: improve hint for autocorrected command execution

Signed-off-by: Ralf Thielow <>
6 years agol10n: de.po: translate 45 new messages
Ralf Thielow [Tue, 1 Apr 2014 18:25:20 +0000 (20:25 +0200)]
l10n: de.po: translate 45 new messages

Translate 45 new messages came from git.pot update in 5e078fc
(l10n: git.pot: v2.0.0 round 1 (45 new, 28 removed)).

Signed-off-by: Ralf Thielow <>
Acked-by: Thomas Rast <>
6 years agol10n: de.po: correct translation of "completed" after resolving deltas
Ralf Thielow [Sat, 12 Apr 2014 19:39:10 +0000 (21:39 +0200)]
l10n: de.po: correct translation of "completed" after resolving deltas

Signed-off-by: Ralf Thielow <>
6 years agoMerge branch 'db/make-with-curl'
Junio C Hamano [Mon, 28 Apr 2014 22:48:12 +0000 (15:48 -0700)]
Merge branch 'db/make-with-curl'

It turns out that some platforms do ship without curl-config even
though they build with the hardcoded default -lcurl and rely on it
to work.

* db/make-with-curl:
  Makefile: default to -lcurl when no CURL_CONFIG or CURLDIR

6 years agoMerge branch 'jk/external-diff-use-argv-array' (early part)
Junio C Hamano [Mon, 28 Apr 2014 22:47:35 +0000 (15:47 -0700)]
Merge branch 'jk/external-diff-use-argv-array' (early part)

Crash fix for codepath that miscounted the necessary size for an
array when spawning an external diff program.

* 'jk/external-diff-use-argv-array' (early part):
  run_external_diff: use an argv_array for the command line

6 years agoMakefile: default to -lcurl when no CURL_CONFIG or CURLDIR
Dave Borowitz [Mon, 28 Apr 2014 21:01:23 +0000 (14:01 -0700)]
Makefile: default to -lcurl when no CURL_CONFIG or CURLDIR

The original implementation of CURL_CONFIG support did not match the
original behavior of using -lcurl when CURLDIR was not set. This broke
implementations that were lacking curl-config but did have libcurl
installed along system libraries, such as MSysGit. In other words, the
assumption that curl-config is always installed was incorrect.

Instead, if CURL_CONFIG is empty or returns an empty result (e.g. due
to curl-config being missing), use the old behavior of falling back to

Signed-off-by: Dave Borowitz <>
Signed-off-by: Junio C Hamano <>
6 years agoGit 2.0-rc1 v2.0.0-rc1
Junio C Hamano [Fri, 25 Apr 2014 17:03:41 +0000 (10:03 -0700)]
Git 2.0-rc1

Signed-off-by: Junio C Hamano <>
6 years agosetup: fix windows path buffer over-stepping
Martin Erik Werner [Thu, 24 Apr 2014 13:06:09 +0000 (15:06 +0200)]
setup: fix windows path buffer over-stepping

Fix a buffer over-stepping issue triggered by providing an absolute path
that is similar to the work tree path.

abspath_part_inside_repo() may currently increment the path pointer by
offset_1st_component() + wtlen, which is too much, since
offset_1st_component() is a subset of wtlen.

For the *nix-style prefix '/', this does (by luck) not cause any issues,
since offset_1st_component() is 1 and there will always be a '/' or '\0'
that can "absorb" this.

In the case of DOS-style prefixes though, the offset_1st_component() is
3 and this can potentially over-step the string buffer. For example if

    work_tree = "c:/r"
    path      = "c:/rl"

Then wtlen is 4, and incrementing the path pointer by (3 + 4) would
end up 2 bytes outside a string buffer of length 6.

Similarly if

    work_tree = "c:/r"
    path      = "c:/rl/d/a"

Then (since the loop starts by also incrementing the pointer one step),
this would mean that the function would miss checking if "c:/rl/d" could
be the work_tree, arguably this is unlikely though, since it would only
be possible with symlinks on windows.

Fix this by simply avoiding to increment by offset_1st_component() and
wtlen at the same time.

Signed-off-by: Martin Erik Werner <>
Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'jk/pack-bitmap'
Junio C Hamano [Thu, 24 Apr 2014 19:31:50 +0000 (12:31 -0700)]
Merge branch 'jk/pack-bitmap'

A last minute (and hopefully the last) fix to avoid coredumps due
to an incorrect pointer arithmetic.

* jk/pack-bitmap:
  ewah_bitmap.c: do not assume size_t and eword_t are the same size

6 years agoMerge branch 'fc/transport-helper-sync-error-fix'
Junio C Hamano [Thu, 24 Apr 2014 19:31:34 +0000 (12:31 -0700)]
Merge branch 'fc/transport-helper-sync-error-fix'

Make sure the marks are not written out when the transport helper
did not finish happily, to avoid leaving a marks file that is out of
sync with the reality.

* fc/transport-helper-sync-error-fix:
  t5801 (remote-helpers): cleanup environment sets
  transport-helper: fix sync issue on crashes
  transport-helper: trivial cleanup
  transport-helper: propagate recvline() error pushing
  remote-helpers: make recvline return an error
  transport-helper: remove barely used xchgline()

6 years agoMerge branch 'db/make-with-curl'
Junio C Hamano [Thu, 24 Apr 2014 19:31:27 +0000 (12:31 -0700)]
Merge branch 'db/make-with-curl'

Ask curl-config how to link with the curl library, instead of
having only a limited configurability knobs in the Makefile.

* db/make-with-curl:
  Makefile: allow static linking against libcurl
  Makefile: use curl-config to determine curl flags

6 years agot9117: use --prefix "" instead of --prefix=""
Kyle J. McKay [Tue, 22 Apr 2014 11:16:22 +0000 (04:16 -0700)]
t9117: use --prefix "" instead of --prefix=""

Versions of Perl's Getopt::Long module before 2.37 do not contain
this fix that first appeared in Getopt::Long version 2.37:

* Bugfix: With gnu_compat, --foo= will no longer trigger "Option
  requires an argument" but return the empty string.

Instead of using --prefix="" use --prefix "" when testing an
explictly empty prefix string in order to work with older versions
of Perl's Getopt::Long module.

Also add a paragraph on this workaround to the documentation of
git-svn itself.

Signed-off-by: Kyle J. McKay <>
Acked-by: Johan Herland <>
Signed-off-by: Junio C Hamano <>
6 years agol10n: zh_CN.po: translate 46 new messages (2229t0f0u)
Jiang Xin [Thu, 13 Mar 2014 04:41:34 +0000 (12:41 +0800)]
l10n: zh_CN.po: translate 46 new messages (2229t0f0u)

Translations for git v2.0.0-rc0.  Also correct translatioins on relative
date in date.c with help from Brian Gesiak ($gmane/246390).

Signed-off-by: Jiang Xin <>
6 years agoMerge branch 'fr-po' of git://
Jiang Xin [Wed, 23 Apr 2014 04:33:47 +0000 (12:33 +0800)]
Merge branch 'fr-po' of git://

* 'fr-po' of git://
  l10n: fr translation for v2.0.0rc0 (2228t)

6 years agoewah_bitmap.c: do not assume size_t and eword_t are the same size
Kyle J. McKay [Tue, 22 Apr 2014 22:53:02 +0000 (15:53 -0700)]
ewah_bitmap.c: do not assume size_t and eword_t are the same size

When buffer_grow changes the size of the buffer using realloc,
it first computes and saves the rlw pointer's offset into the
buffer using (uint8_t *) math before the realloc but then
restores it using (eword_t *) math.

In order to do this it's necessary to convert the (uint8_t *)
offset into an (eword_t *) offset.  It was doing this by
dividing by the sizeof(size_t).  Unfortunately sizeof(size_t)
is not same as sizeof(eword_t) on all platforms.

This causes illegal memory accesses and other bad things to
happen when attempting to use bitmaps on those platforms.

Fix this by dividing by the sizeof(eword_t) instead which
will always be correct for all platforms.

Signed-off-by: Kyle J. McKay <>
Acked-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agol10n: fr translation for v2.0.0rc0 (2228t)
Jean-Noel Avila [Wed, 26 Feb 2014 20:27:14 +0000 (21:27 +0100)]
l10n: fr translation for v2.0.0rc0 (2228t)

Signed-off-by: Jean-Noel Avila <>
Signed-off-by: Matthieu Baerts <>
Signed-off-by: Xavier Mehrenberger <>
6 years don't put unsanitized branch names in $PS1
Richard Hansen [Mon, 21 Apr 2014 23:53:09 +0000 (19:53 -0400)] don't put unsanitized branch names in $PS1

Both bash and zsh subject the value of PS1 to parameter expansion,
command substitution, and arithmetic expansion.  Rather than include
the raw, unescaped branch name in PS1 when running in two- or
three-argument mode, construct PS1 to reference a variable that holds
the branch name.  Because the shells do not recursively expand, this
avoids arbitrary code execution by specially-crafted branch names such
as '$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.

Signed-off-by: Richard Hansen <>
Signed-off-by: Junio C Hamano <>
6 years agol10n: Update Swedish translation (2228t0f0u)
Peter Krefting [Tue, 22 Apr 2014 09:26:02 +0000 (10:26 +0100)]
l10n: Update Swedish translation (2228t0f0u)

Signed-off-by: Peter Krefting <>
6 years agoUpdate draft release notes to 2.0
Junio C Hamano [Mon, 21 Apr 2014 18:54:29 +0000 (11:54 -0700)]
Update draft release notes to 2.0

Signed-off-by: Junio C Hamano <>
6 years agoMerge git://
Junio C Hamano [Mon, 21 Apr 2014 17:53:09 +0000 (10:53 -0700)]
Merge git://

* git://
  Git 2.0: git svn: Set default --prefix='origin/' if --prefix is not given

6 years agoMerge branch 'jx/i18n'
Junio C Hamano [Mon, 21 Apr 2014 17:42:52 +0000 (10:42 -0700)]
Merge branch 'jx/i18n'

* jx/i18n:
  i18n: mention "TRANSLATORS:" marker in Documentation/CodingGuidelines
  i18n: only extract comments marked with "TRANSLATORS:"
  i18n: remove obsolete comments for translators in diffstat generation
  i18n: fix uncatchable comments for translators in date.c

6 years agoMerge branch 'km/avoid-non-function-return-in-rebase'
Junio C Hamano [Mon, 21 Apr 2014 17:42:45 +0000 (10:42 -0700)]
Merge branch 'km/avoid-non-function-return-in-rebase'

Work around /bin/sh that does not like "return" at the top-level
of a file that is dot-sourced from inside a function definition.

* km/avoid-non-function-return-in-rebase:
  Revert "rebase: fix run_specific_rebase's use of "return" on FreeBSD"
  rebase: avoid non-function use of "return" on FreeBSD

6 years agoMerge branch 'ep/shell-command-substitution'
Junio C Hamano [Mon, 21 Apr 2014 17:42:41 +0000 (10:42 -0700)]
Merge branch 'ep/shell-command-substitution'

* ep/shell-command-substitution: use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution use the $( ... ) construct for command substitution

6 years agot5801 (remote-helpers): cleanup environment sets
Felipe Contreras [Sun, 20 Apr 2014 18:43:37 +0000 (13:43 -0500)]
t5801 (remote-helpers): cleanup environment sets

Commit 512477b (tests: use "env" to run commands with temporary env-var
settings) missed some variables in the remote-helpers test. Also
standardize these.

Signed-off-by: Felipe Contreras <>
Signed-off-by: Junio C Hamano <>
6 years agoDocumentation: git-gui: describe gui.displayuntracked
Max Kirillov [Sat, 19 Apr 2014 21:47:14 +0000 (00:47 +0300)]
Documentation: git-gui: describe gui.displayuntracked

Signed-off-by: Max Kirillov <>
Signed-off-by: Junio C Hamano <>
6 years agorun_external_diff: use an argv_array for the command line
Jeff King [Sat, 19 Apr 2014 19:17:06 +0000 (15:17 -0400)]
run_external_diff: use an argv_array for the command line

We currently generate the command-line for the external
command using a fixed-length array of size 10. But if there
is a rename, we actually need 11 elements (10 items, plus a
NULL), and end up writing a random NULL onto the stack.

Rather than bump the limit, let's just use an argv_array, which
makes this sort of error impossible.

Noticed-by: Max L <>
Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
6 years agol10n: vi.po (2228t): Update and minor fix
Tran Ngoc Quan [Sun, 20 Apr 2014 08:22:26 +0000 (15:22 +0700)]
l10n: vi.po (2228t): Update and minor fix

Signed-off-by: Tran Ngoc Quan <>
6 years agoGit 2.0: git svn: Set default --prefix='origin/' if --prefix is not given
Johan Herland [Fri, 11 Oct 2013 12:57:07 +0000 (14:57 +0200)]
Git 2.0: git svn: Set default --prefix='origin/' if --prefix is not given

git-svn by default puts its Subversion-tracking refs directly in
refs/remotes/*. This runs counter to Git's convention of using
refs/remotes/$remote/* for storing remote-tracking branches.

Furthermore, combining git-svn with regular git remotes run the risk of
clobbering refs under refs/remotes (e.g. if you have a git remote
called "tags" with a "v1" branch, it will overlap with the git-svn's
tracking branch for the "v1" tag from Subversion.

Even though the git-svn refs stored in refs/remotes/* are not "proper"
remote-tracking branches (since they are not covered by a proper git
remote's refspec), they clearly represent a similar concept, and would
benefit from following the same convention.

For example, if git-svn tracks Subversion branch "foo" at
refs/remotes/foo, and you create a local branch refs/heads/foo to add
some commits to be pushed back to Subversion (using "git svn dcommit),
then it is clearly unhelpful of Git to throw

  warning: refname 'foo' is ambiguous.

every time you checkout, rebase, or otherwise interact with the branch.

The existing workaround for this is to supply the --prefix=quux/ to
git svn init/clone, so that git-svn's tracking branches end up in
refs/remotes/quux/* instead of refs/remotes/*. However, encouraging
users to specify --prefix to work around a design flaw in git-svn is
suboptimal, and not a long term solution to the problem. Instead,
git-svn should default to use a non-empty prefix that saves
unsuspecting users from the inconveniences described above.

This patch will only affect newly created git-svn setups, as the
--prefix option only applies to git svn init (and git svn clone).
Existing git-svn setups will continue with their existing (lack of)
prefix. Also, if anyone somehow prefers git-svn's old layout, they
can recreate that by explicitly passing an empty prefix (--prefix "")
on the git svn init/clone command line.

The patch changes the default value for --prefix from "" to "origin/",
updates the git-svn manual page, and fixes the fallout in the git-svn

(Note that this patch might be easier to review using the --word-diff
and --word-diff-regex=. diff options.)

[ew: squashed description of <= 1.9 behavior into manpage]

Suggested-by: Thomas Ferris Nicolaisen <>
Signed-off-by: Johan Herland <>
Signed-off-by: Eric Wong <>
6 years agol10n: git.pot: v2.0.0 round 1 (45 new, 28 removed)
Jiang Xin [Sat, 19 Apr 2014 04:53:28 +0000 (12:53 +0800)]
l10n: git.pot: v2.0.0 round 1 (45 new, 28 removed)

Generate po/git.pot from v2.0.0-rc0 for git v2.0.0 l10n round 1.

Signed-off-by: Jiang Xin <>
6 years agoGit 2.0-rc0 v2.0.0-rc0
Junio C Hamano [Fri, 18 Apr 2014 18:21:43 +0000 (11:21 -0700)]
Git 2.0-rc0

An early-preview for the upcoming Git 2.0.

Signed-off-by: Junio C Hamano <>
6 years agoMerge branch 'jk/config-die-bad-number-noreturn'
Junio C Hamano [Fri, 18 Apr 2014 18:17:44 +0000 (11:17 -0700)]
Merge branch 'jk/config-die-bad-number-noreturn'

Squelch a false compiler warning from older gcc.

* jk/config-die-bad-number-noreturn:
  config.c: mark die_bad_number as NORETURN

6 years agoMerge branch 'fc/remote-helper-fixes'
Junio C Hamano [Fri, 18 Apr 2014 18:17:40 +0000 (11:17 -0700)]
Merge branch 'fc/remote-helper-fixes'

* fc/remote-helper-fixes:
  remote-bzr: trivial test fix
  remote-bzr: include authors field in pushed commits
  remote-bzr: add support for older versions
  remote-hg: always normalize paths
  remote-helpers: allow all tests running from any dir

6 years agoMerge branch 'fc/complete-aliased-push'
Junio C Hamano [Fri, 18 Apr 2014 18:17:36 +0000 (11:17 -0700)]
Merge branch 'fc/complete-aliased-push'

* fc/complete-aliased-push:
  completion: fix completing args of aliased "push", "fetch", etc.

6 years agoMerge branch 'fc/prompt-zsh-read-from-file'
Junio C Hamano [Fri, 18 Apr 2014 18:17:22 +0000 (11:17 -0700)]
Merge branch 'fc/prompt-zsh-read-from-file'

* fc/prompt-zsh-read-from-file:
  prompt: fix missing file errors in zsh