7 years agoremote-http: use argv-array
Junio C Hamano [Tue, 9 Jul 2013 05:16:31 +0000 (22:16 -0700)]
remote-http: use argv-array

Instead of using a hand-managed argument array, use argv-array API
to manage dynamically formulated command line.

Signed-off-by: Junio C Hamano <>
7 years agorange_set: fix coalescing bug when range is a subset of another
Eric Sunshine [Tue, 9 Jul 2013 05:55:05 +0000 (01:55 -0400)]
range_set: fix coalescing bug when range is a subset of another

When coalescing ranges, sort_and_merge_range_set() unconditionally
assumes that the end of a range being folded into a preceding range
should become the end of the coalesced range. This assumption, however,
is invalid when one range is a subset of another.  For example, given
ranges 1-5 and 2-3 added via range_set_append_unsafe(),
sort_and_merge_range_set() incorrectly coalesces them to range 1-3
rather than the correct union range 1-5. Fix this bug.

Signed-off-by: Eric Sunshine <>
Signed-off-by: Junio C Hamano <>
7 years agot4211: fix broken test when one -L range is subset of another
Eric Sunshine [Tue, 9 Jul 2013 05:55:04 +0000 (01:55 -0400)]
t4211: fix broken test when one -L range is subset of another

t4211 attempts to test multiple git-log -L ranges where one range is a
superset of the other, and falsely succeeds because its "expected"
output is incorrect.

Overlapping -L ranges handed to git-log are coalesced by
line-log.c:sort_and_merge_range_set() into a set of non-overlapping,
disjoint ranges. When one range is a subset of another,
sort_and_merge_range_set() should coalesce both ranges to the superset
range, but instead the coalesced range often is incorrectly truncated to
the end of the subset range. For example, ranges 2-8 and 3-4 are
coalesced incorrectly to 2-4.

One can observe this incorrect behavior with git-log -L using the test
repository created by t4211. The superset/subset ranges t4211 employs
are 4-$ and 8-12 (where $ represents end-of-file). The coalesced range
should be 4-$. Manually invoking git-log with the same ranges the test
employs, we see:

  % git log -L 4:a.c simple |
    awk '/^commit [0-9a-f]{40}/ { print substr($2,1,7) }'

  % git log -L 8,12:a.c simple | awk ...

  % git log -L 4:a.c -L 8,12:a.c simple | awk ...

This last output is incorrect. 8-12 is a subset of 4-$, hence the output
of the coalesced range should be the same as the 4-$ output shown first.
In fact, the above incorrect output is the truncated bogus range 4-12:

  % git log -L 4,12:a.c simple | awk ...

Fix the test to correctly fail in the presence of the
sort_and_merge_range_set() coalescing bug. Do so by changing the
"expected" output to the commits mentioned in the 4-$ output above.

Signed-off-by: Eric Sunshine <>
Signed-off-by: Junio C Hamano <>
7 years agocommit: reject non-characters
Peter Krefting [Tue, 9 Jul 2013 11:16:33 +0000 (12:16 +0100)]
commit: reject non-characters

Unicode clause D14 defines all characters U+nFFFE and U+nFFFF (where
0 <= n <= 10h) as well as the range U+FDD0..U+FDEF as non-characters,
reserved for internal use only.  Disallow these characters in commit
messages as they are normally not recommended for interchange.

Signed-off-by: Peter Krefting <>
Signed-off-by: Junio C Hamano <>
7 years agopull: change the description to "integrate" changes
John Keeping [Sun, 7 Jul 2013 19:02:15 +0000 (20:02 +0100)]
pull: change the description to "integrate" changes

Since git-pull learned the --rebase option it has not just been about
merging changes from a remote repository (where "merge" is in the sense
of "git merge").  Change the description to use "integrate" instead of
"merge" in order to reflect this.

Signed-off-by: John Keeping <>
Signed-off-by: Junio C Hamano <>
7 years agotest-lint: detect 'export FOO=bar'
Thomas Rast [Mon, 8 Jul 2013 15:20:32 +0000 (17:20 +0200)]
test-lint: detect 'export FOO=bar'

Some shells do not understand the one-line construct, and instead need

  FOO=bar &&
  export FOO

Detect this in the test-lint target.

Signed-off-by: Thomas Rast <>
Signed-off-by: Junio C Hamano <>
7 years agot9902: fix 'test A == B' to use = operator
Thomas Rast [Mon, 8 Jul 2013 15:20:31 +0000 (17:20 +0200)]
t9902: fix 'test A == B' to use = operator

The == operator as an alias to = is not POSIX.  This doesn't actually
matter for the execution of the script, because it only runs when the
shell is bash.  However, it trips up test-lint, so it's nicer to use
the standard form.

Signed-off-by: Thomas Rast <>
Signed-off-by: Junio C Hamano <>
7 years agoremote.c: avoid O(m*n) behavior in match_push_refs
Brandon Casey [Mon, 8 Jul 2013 08:58:39 +0000 (01:58 -0700)]
remote.c: avoid O(m*n) behavior in match_push_refs

When pushing using a matching refspec or a pattern refspec, each ref
in the local repository must be paired with a ref advertised by the
remote server.  This is accomplished by using the refspec to transform
the name of the local ref into the name it should have in the remote
repository, and then performing a linear search through the list of
remote refs to see if the remote ref was advertised by the remote

Each of these lookups has O(n) complexity and makes match_push_refs()
be an O(m*n) operation, where m is the number of local refs and n is
the number of remote refs.  If there are many refs 100,000+, then this
ref matching can take a significant amount of time.  Let's prepare an
index of the remote refs to allow searching in O(log n) time and
reduce the complexity of match_push_refs() to O(m log n).

We prepare the index lazily so that it is only created when necessary.
So, there should be no impact when _not_ using a matching or pattern
refspec, i.e. when pushing using only explicit refspecs.

Dry-run push of a repository with 121,913 local and remote refs:

        before     after
real    1m40.582s  0m0.804s
user    1m39.914s  0m0.515s
sys     0m0.125s   0m0.106s

The creation of the index has overhead.  So, if there are very few
local refs, then it could take longer to create the index than it
would have taken to just perform n linear lookups into the remote
ref space.  Using the index should provide some improvement when
the number of local refs is roughly greater than the log of the
number of remote refs (i.e. m >= log n).  The pathological case is
when there is a single local ref and very many remote refs.

Dry-run push of a repository with 121,913 remote refs and a single
local ref:

        before    after
real    0m0.525s  0m0.566s
user    0m0.243s  0m0.279s
sys     0m0.075s  0m0.099s

Using an index takes 41 ms longer, or roughly 7.8% longer.

Jeff King measured a no-op push of a single ref into a remote repo
with 370,000 refs:

        before    after
real    0m1.087s  0m1.156s
user    0m1.344s  0m1.412s
sys     0m0.288s  0m0.284s

Using an index takes 69 ms longer, or roughly 6.3% longer.

None of the measurements above required transferring any objects to
the remote repository.  If the push required transferring objects and
updating the refs in the remote repository, the impact of preparing
the search index would be even smaller.

A similar operation is performed in the reverse direction when pruning
using a matching or pattern refspec.  Let's avoid O(m*n) behavior in
the same way by lazily preparing an index on the local refs.

Signed-off-by: Brandon Casey <>
Signed-off-by: Junio C Hamano <>
7 years agogit-remote-mediawiki: add preview subcommand into git mw
Benoit Person [Thu, 4 Jul 2013 20:39:00 +0000 (22:39 +0200)]
git-remote-mediawiki: add preview subcommand into git mw

In the current state, a user of git-remote-mediawiki can edit the markup text
locally, but has to push to the remote wiki to see how the page is rendererd.
Add a new 'git mw preview' command that allows rendering the markup text on
the remote wiki without actually pushing any change on the wiki.

This uses Mediawiki's API to render the markup and inserts it in an actual
HTML page from the wiki so that CSS can be rendered properly. Most links
should work when the page exists on the remote.

Signed-off-by: Benoit Person <>
Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agogit-remote-mediawiki: add git-mw command
Benoit Person [Thu, 4 Jul 2013 20:38:59 +0000 (22:38 +0200)]
git-remote-mediawiki: add git-mw command

For now, git-remote-mediawiki is only a remote-helper. This patch adds a new
toolset script in which we will be able to build new tools for

This toolset uses a subcommand-mechanism to launch the proper action. For now
only the 'help' subcommand is implemented. It also provides some generic code
for the verbose and help command line options.

Signed-off-by: Benoit Person <>
Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agogit-remote-mediawiki: factoring code between git-remote-mediawiki and Git::Mediawiki
Benoit Person [Thu, 4 Jul 2013 20:38:58 +0000 (22:38 +0200)]
git-remote-mediawiki: factoring code between git-remote-mediawiki and Git::Mediawiki

For now, Git::Mediawiki contains nothing.

This first patch moves some of git-remote-mediawiki.perl's factorisable code
into Git::Mediawiki. In the same time, it removes the side effects of that code
and renames the fucntions and constants moved to expose a better API.

Signed-off-by: Benoit Person <>
Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agogit-remote-mediawiki: update tests to run with the new bin-wrapper
Benoit Person [Thu, 4 Jul 2013 20:38:57 +0000 (22:38 +0200)]
git-remote-mediawiki: update tests to run with the new bin-wrapper

Until now, if git-remote-mediawiki was not installed, the test suite
copied it to the toplevel directory. This solution pollutes the
directory with untracked files. Plus, we would need to copy the new
git-mw.perl file to test it too.

Signed-off-by: Benoit Person <>
Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agogit-remote-mediawiki: add a git bin-wrapper for developement
Benoit Person [Thu, 4 Jul 2013 20:38:56 +0000 (22:38 +0200)]
git-remote-mediawiki: add a git bin-wrapper for developement

The introduction of the Git::Mediawiki package makes it impossible to test,
without installation, git-remote-mediawiki and git-mw.

Using a git bin-wrapper enables us to define proper $GITPERLLIB to force the
use of the developement version of the Git::Mediawiki package, bypassing its
installed version if any.

An alternate solution was to 'install' all the files required at each build
but it pollutes the toplevel with untracked files.

Signed-off-by: Benoit Person <>
Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agowrap-for-bin: make bin-wrappers chainable
Benoit Person [Thu, 4 Jul 2013 20:38:55 +0000 (22:38 +0200)]
wrap-for-bin: make bin-wrappers chainable

For now, bin-wrappers overwrites GITPERLLIB. If we want to chain to
those scripts and define GITPERLLIB before, our changes will be

This patch makes the bin-wrappers prepend their modifications to
GITPERLLIB rather than redefining it. It also unset GITPERLLIB in the
test-suite to prevent broken $GITPERLLIB in the user's configuration
from interfering with the testsuite.

The codes using GIT_TEMPLATE_DIR and GIT_TEXTDOMAINDIR handle only one
path in each of this variable so this new behavior would be useless on
those variables.

Signed-off-by: Benoit Person <>
Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agogit-remote-mediawiki: introduction of
Benoit Person [Thu, 4 Jul 2013 20:38:54 +0000 (22:38 +0200)]
git-remote-mediawiki: introduction of

We would want to allow the user to preview what he has edited locally
before pushing it out (and thus creating a non-removable revision in
the mediawiki's history).

This patch introduces a new perl package in which we will be able to
share code between that new tool and the remote helper:

A perl package offers the best way to handle such case: Each script
can select what should be imported in its namespace.  The package
namespacing limits the use of side effects in the shared code.

An alternate solution is to concatenate a "toolset" file with each
*.perl when 'make'-ing the project. In that scheme, everything is
imported in the script's namespace. Plus, files should be renamed in
order to chain to Git's toplevel makefile. Hence, this solution is not

Signed-off-by: Benoit Person <>
Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agot0000: do not use export X=Y
Torsten Bögershausen [Mon, 8 Jul 2013 09:21:22 +0000 (11:21 +0200)]
t0000: do not use export X=Y

The shell syntax "export X=Y A=B" is not understood by all shells.

Signed-off-by: Torsten Bögershausen <>
Acked-by: Thomas Rast <>
Signed-off-by: Junio C Hamano <>
7 years agoclone: drop connectivity check for local clones
Jeff King [Mon, 8 Jul 2013 07:30:41 +0000 (03:30 -0400)]
clone: drop connectivity check for local clones

Commit 0433ad1 (clone: run check_everything_connected,
2013-03-25) added the same connectivity check to clone that
we use for fetching. The intent was to provide enough safety
checks that "git clone git://..." could be counted on to
detect bit errors and other repo corruption, and not
silently propagate them to the clone.

For local clones, this turns out to be a bad idea, for two

  1. Local clones use hard linking (or even shared object
     stores), and so complete far more quickly. The time
     spent on the connectivity check is therefore
     proportionally much more painful.

  2. Local clones do not actually meet our safety guarantee
     anyway. The connectivity check makes sure we have all
     of the objects we claim to, but it does not check for
     bit errors. We will notice bit errors in commits and
     trees, but we do not load blob objects at all. Whereas
     over the pack transport, we actually recompute the sha1
     of each object in the incoming packfile; bit errors
     change the sha1 of the object, which is then caught by
     the connectivity check.

This patch drops the connectivity check in the local case.
Note that we have to revert the changes from 0433ad1 to
t5710, as we no longer notice the corruption during clone.

We could go a step further and provide a "verify even local
clones" option, but it is probably not worthwhile. You can
already spell that as "cd foo.git && git fsck && git clone ."
or as "git clone --no-local foo.git".

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agopush: avoid suggesting "merging" remote changes
John Keeping [Sun, 7 Jul 2013 19:02:14 +0000 (20:02 +0100)]
push: avoid suggesting "merging" remote changes

With some workflows, it is more suitable to rebase on top of remote
changes when a push does not fast-forward.  Change the advice messages
in git-push to suggest that a user "integrate the remote changes"
instead of "merge the remote changes" to make this slightly clearer.

Also change the suggested 'git pull' to 'git pull ...' to hint to users
that they may want to add other parameters.

Suggested-by: Philip Oakley <>
Signed-off-by: John Keeping <>
Signed-off-by: Junio C Hamano <>
7 years agogit-config(1): clarify precedence of multiple values
John Keeping [Sun, 7 Jul 2013 19:49:56 +0000 (20:49 +0100)]
git-config(1): clarify precedence of multiple values

In order to clarify which value is used when there are multiple values
defined for a key, re-order the list of file locations so that it runs
from least specific to most specific.  Then add a paragraph which simply
says that the last value will be used.

Signed-off-by: John Keeping <>
Signed-off-by: Junio C Hamano <>
7 years agoname-rev doc: rewrite --stdin paragraph
Ramkumar Ramachandra [Sun, 7 Jul 2013 12:43:16 +0000 (18:13 +0530)]
name-rev doc: rewrite --stdin paragraph

Signed-off-by: Ramkumar Ramachandra <>
Signed-off-by: Junio C Hamano <>
7 years agoteach sha1_object_info_extended a "disk_size" query
Jeff King [Sun, 7 Jul 2013 10:04:00 +0000 (06:04 -0400)]
teach sha1_object_info_extended a "disk_size" query

Using sha1_object_info_extended, a caller can find out the
type of an object, its size, and information about where it
is stored. In addition to the object's "true" size, it can
also be useful to know the size that the object takes on
disk (e.g., to generate statistics about which refs consume

This patch adds a "disk_sizep" field to "struct object_info",
and fills it in during sha1_object_info_extended if it is

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agozero-initialize object_info structs
Jeff King [Sun, 7 Jul 2013 10:03:29 +0000 (06:03 -0400)]
zero-initialize object_info structs

The sha1_object_info_extended function expects the caller to
provide a "struct object_info" which contains pointers to
"query" items that will be filled in. The purpose of
providing pointers rather than storing the response directly
in the struct is so that callers can choose not to incur the
expense in finding particular fields that they do not care

Right now the only query item is "sizep", and all callers
set it explicitly to choose whether or not to query it; they
can then leave the rest of the struct uninitialized.

However, as we add new query items, each caller will have to
be updated to explicitly turn off the new ones (by setting
them to NULL).  Instead, let's teach each caller to
zero-initialize the struct, so that they do not have to
learn about each new query item added.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agolockfile: fix buffer overflow in path handling
Michael Haggerty [Sat, 6 Jul 2013 19:48:52 +0000 (21:48 +0200)]
lockfile: fix buffer overflow in path handling

The path of the file to be locked is held in lock_file::filename,
which is a fixed-length buffer of length PATH_MAX.  This buffer is
also (temporarily) used to hold the path of the lock file, which is
the path of the file being locked plus ".lock".  Because of this, the
path of the file being locked must be less than (PATH_MAX - 5)
characters long (5 chars are needed for ".lock" and one character for
the NUL terminator).

On entry into lock_file(), the path length was only verified to be
less than PATH_MAX characters, not less than (PATH_MAX - 5)

When and if resolve_symlink() is called, then that function is
correctly told to treat the buffer as (PATH_MAX - 5) characters long.
This part is correct.  However:

* If LOCK_NODEREF was specified, then resolve_symlink() is never

* If resolve_symlink() is called but the path is not a symlink, then
  the length check is never applied.

So it is possible for a path with length (PATH_MAX - 5 <= len <
PATH_MAX) to make it through the checks.  When ".lock" is strcat()ted
to such a path, the lock_file::filename buffer is overflowed.

Fix the problem by adding a check when entering lock_file() that the
original path is less than (PATH_MAX - 5) characters.

[jc: with independent development by Peff]

Signed-off-by: Michael Haggerty <>
Signed-off-by: Junio C Hamano <>
7 years agodiffcore-pickaxe: simplify has_changes and contains
René Scharfe [Sat, 6 Jul 2013 13:53:27 +0000 (15:53 +0200)]
diffcore-pickaxe: simplify has_changes and contains

Halve the number of callsites of contains() to two using temporary
variables, simplifying the code.  While at it, get rid of the
diff_options parameter, which became unused with 8fa4b09f.

Signed-off-by: René Scharfe <>
Acked-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agodiff-options: document default similarity index
Fraser Tweedale [Fri, 5 Jul 2013 08:42:17 +0000 (18:42 +1000)]
diff-options: document default similarity index

The default similarity index of 50% is documented in gitdiffcore(7)
but it is worth also mentioning it in the description of the
-M/--find-renames option.

Signed-off-by: Fraser Tweedale <>
Signed-off-by: Junio C Hamano <>
7 years agot4205 (log-pretty-formats): avoid using `sed`
Alexey Shumkin [Fri, 5 Jul 2013 12:01:50 +0000 (16:01 +0400)]
t4205 (log-pretty-formats): avoid using `sed`

For testing truncated log messages 'commit_msg' function uses `sed` to
cut a message. On various platforms `sed` behaves differently and
results of its work depend on locales installed. So, avoid using `sed`.
Use predefined expected outputs instead of calculated ones.

Signed-off-by: Alexey Shumkin <>
Signed-off-by: Junio C Hamano <>
7 years agot6006 (rev-list-format): add tests for "%b" and "%s" for the case i18n.commitEncoding...
Alexey Shumkin [Fri, 5 Jul 2013 12:01:49 +0000 (16:01 +0400)]
t6006 (rev-list-format): add tests for "%b" and "%s" for the case i18n.commitEncoding is not set

In de6029a (pretty: Add failing tests: --format output should honor
logOutputEncoding, 2013-06-26) 'complex-subject' test was changed.
Revert it back, because that change actually removed tests for "%b"
and "%s" with i18n.commitEncoding set.  Also, add two more tests for
mentioned above "%b" and "%s" to test encoding conversions with no
i18n.commitEncoding set.

Signed-off-by: Alexey Shumkin <>
Suggested-by: Johannes Sixt <>
Signed-off-by: Junio C Hamano <>
7 years agot4205, t6006, t7102: make functions better readable
Alexey Shumkin [Fri, 5 Jul 2013 12:01:48 +0000 (16:01 +0400)]
t4205, t6006, t7102: make functions better readable

Function 'test_format' has become harder to read after its change in
de6029a2 (pretty: Add failing tests: --format output should honor
logOutputEncoding, 2013-06-26). Simplify it by moving its "should we
expect it to fail?" parameter to the end.

Note, current code does not use this last parameter as far as there
are no tests expected to fail. We can keep that for future use.

Also, reformat comments.

Signed-off-by: Alexey Shumkin <>
Improved-by: Johannes Sixt <>
Signed-off-by: Junio C Hamano <>
7 years agot4205 (log-pretty-formats): revert back single quotes
Alexey Shumkin [Fri, 5 Jul 2013 12:01:47 +0000 (16:01 +0400)]
t4205 (log-pretty-formats): revert back single quotes

In previuos commit de6029a (pretty: Add failing tests: --format output
should honor logOutputEncoding, 2013-06-26) single quotes were replaced
with double quotes to make "$(commit_msg)" expression in heredoc to
work. The same effect can be achieved by using "EOF" as a heredoc
delimiter instead of "\EOF".

Signed-off-by: Alexey Shumkin <>
Suggested-by: Johannes Sixt <>
Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'maint'
Junio C Hamano [Fri, 5 Jul 2013 08:16:27 +0000 (01:16 -0700)]
Merge branch 'maint'

* maint:
  fixup-builtins: retire an old transition helper script

7 years agoMerge branch 'tr/test-v-and-v-subtest-only'
Junio C Hamano [Fri, 5 Jul 2013 08:15:48 +0000 (01:15 -0700)]
Merge branch 'tr/test-v-and-v-subtest-only'

Allows N instances of tests run in parallel, each running 1/N parts
of the test suite under Valgrind, to speed things up.

* tr/test-v-and-v-subtest-only:
  perf-lib: fix start/stop of perf tests
  test-lib: support running tests under valgrind in parallel
  test-lib: allow prefixing a custom string before "ok N" etc.
  test-lib: valgrind for only tests matching a pattern
  test-lib: verbose mode for only tests matching a pattern
  test-lib: self-test that --verbose works
  test-lib: rearrange start/end of test_expect_* and test_skip
  test-lib: refactor $GIT_SKIP_TESTS matching
  test-lib: enable MALLOC_* for the actual tests

7 years - cygwin does not have usable FIFOs
Mark Levedahl [Thu, 4 Jul 2013 22:04:30 +0000 (18:04 -0400)] - cygwin does not have usable FIFOs

Do not use FIFOs on cygwin, they do not work. Cygwin includes
coreutils, so has mkfifo, and that command does something. However,
the resultant named pipe is known (on the Cygwin mailing list at
least) to not work correctly.

This disables PIPE for Cygwin, allowing to complete (all other
tests in that file work correctly).

Signed-off-by: Mark Levedahl <>
Signed-off-by: Junio C Hamano <>
7 years agot4041, t4205, t6006, t7102: use iso8859-1 rather than iso-8859-1
Alexey Shumkin [Thu, 4 Jul 2013 12:45:46 +0000 (16:45 +0400)]
t4041, t4205, t6006, t7102: use iso8859-1 rather than iso-8859-1

Both "iso8859-1" and "iso-8859-1" are understood as latin-1 by
modern platforms, but the latter is not understood by older
platforms;update tests to use the former.

This is in line with 3994e8a9 (t4201: use ISO8859-1 rather than
ISO-8859-1, 2009-12-03), which did the same.

Signed-off-by: Alexey Shumkin <>
Reviewed-by: Johannes Sixt <>
Signed-off-by: Junio C Hamano <>
7 years agogitweb: allow extra breadcrumbs to prefix the trail
Tony Finch [Thu, 4 Jul 2013 17:02:12 +0000 (18:02 +0100)]
gitweb: allow extra breadcrumbs to prefix the trail

There are often parent pages logically above the gitweb projects
list, e.g. home pages of the organization and department that host
the gitweb server. This change allows you to include links to those
pages in gitweb's breadcrumb trail.

Signed-off-by: Tony Finch <>
Reviewed-by: Jonathan Nieder <>
Acked-by: Jakub Narebski <>
Signed-off-by: Junio C Hamano <>
7 years agocommit: reject overlong UTF-8 sequences
brian m. carlson [Thu, 4 Jul 2013 17:20:34 +0000 (17:20 +0000)]
commit: reject overlong UTF-8 sequences

The commit code accepts pseudo-UTF-8 sequences that encode a character with more
bytes than necessary.  Reject such sequences, since they are not valid UTF-8.

Signed-off-by: brian m. carlson <>
Signed-off-by: Junio C Hamano <>
7 years agocommit: reject invalid UTF-8 codepoints
brian m. carlson [Thu, 4 Jul 2013 17:19:43 +0000 (17:19 +0000)]
commit: reject invalid UTF-8 codepoints

The commit code already contains code for validating UTF-8, but it does not
check for invalid values, such as guaranteed non-characters and surrogates.  Fix
this by explicitly checking for and rejecting such characters.

Signed-off-by: brian m. carlson <>
Signed-off-by: Junio C Hamano <>
7 years agosend-email: provide port separately from hostname
brian m. carlson [Thu, 4 Jul 2013 22:04:52 +0000 (22:04 +0000)]
send-email: provide port separately from hostname

If the SMTP port is provided as part of the hostname to Net::SMTP, it passes
the combined string to the SASL provider; this causes GSSAPI authentication to
fail since Kerberos does not want the port information.  Instead, pass the port
as a separate argument as is done for SSL connections.

Signed-off-by: brian m. carlson <>
Signed-off-by: Junio C Hamano <>
7 years agofixup-builtins: retire an old transition helper script
Ramkumar Ramachandra [Fri, 28 Jun 2013 15:46:19 +0000 (21:16 +0530)]
fixup-builtins: retire an old transition helper script

This script was added in 36e5e70 (Start deprecating "git-command" in
favor of "git command", 2007-06-30) with the intent of aiding the
transition away from dashed forms.

It has already been used to help the transision and served its
purpose, and is no longer very useful for follow-up work, because
the majority of remaining matches it finds are false positives.

Signed-off-by: Ramkumar Ramachandra <>
Reviewed-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'maint'
Junio C Hamano [Wed, 3 Jul 2013 22:43:49 +0000 (15:43 -0700)]
Merge branch 'maint'

* maint:
  Update draft release notes to
  git-config: update doc for --get with multiple values

7 years agoUpdate draft release notes to
Junio C Hamano [Wed, 3 Jul 2013 22:43:41 +0000 (15:43 -0700)]
Update draft release notes to

Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'rr/diffcore-pickaxe-doc' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:41:17 +0000 (15:41 -0700)]
Merge branch 'rr/diffcore-pickaxe-doc' into maint

* rr/diffcore-pickaxe-doc:
  diffcore-pickaxe doc: document -S and -G properly
  diffcore-pickaxe: make error messages more consistent

7 years agoMerge branch 'cr/git-work-tree-sans-git-dir' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:41:05 +0000 (15:41 -0700)]
Merge branch 'cr/git-work-tree-sans-git-dir' into maint

* cr/git-work-tree-sans-git-dir:
  git.txt: remove stale comment regarding GIT_WORK_TREE

7 years agoMerge branch 'fc/do-not-use-the-index-in-add-to-index' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:40:38 +0000 (15:40 -0700)]
Merge branch 'fc/do-not-use-the-index-in-add-to-index' into maint

* fc/do-not-use-the-index-in-add-to-index:
  read-cache: trivial style cleanups
  read-cache: fix wrong 'the_index' usage

7 years agoMerge branch 'dm/unbash-subtree' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:39:37 +0000 (15:39 -0700)]
Merge branch 'dm/unbash-subtree' into maint

* dm/unbash-subtree:
  contrib/git-subtree: Use /bin/sh interpreter instead of /bin/bash

7 years agoMerge branch 'jc/core-checkstat' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:39:15 +0000 (15:39 -0700)]
Merge branch 'jc/core-checkstat' into maint

* jc/core-checkstat:
  deprecate core.statinfo at Git 2.0 boundary

7 years agoMerge branch 'jc/t5551-posix-sed-bre' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:37:58 +0000 (15:37 -0700)]
Merge branch 'jc/t5551-posix-sed-bre' into maint

* jc/t5551-posix-sed-bre:
  t5551: do not use unportable sed '\+'

7 years agoMerge branch 'vv/help-unknown-ref' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:37:50 +0000 (15:37 -0700)]
Merge branch 'vv/help-unknown-ref' into maint

* vv/help-unknown-ref:
  merge: use help_unknown_ref()
  help: add help_unknown_ref()

7 years agoMerge branch 'rs/empty-archive' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:36:54 +0000 (15:36 -0700)]
Merge branch 'rs/empty-archive' into maint

* rs/empty-archive:
  t5004: resurrect original empty tar archive test
  t5004: avoid using tar for checking emptiness of archive


7 years agoMerge branch 'rh/merge-options-doc-fix' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:36:30 +0000 (15:36 -0700)]
Merge branch 'rh/merge-options-doc-fix' into maint

* rh/merge-options-doc-fix:
  Documentation/merge-options.txt: restore `-e` option

7 years agoMerge branch 'an/diff-index-doc' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:35:55 +0000 (15:35 -0700)]
Merge branch 'an/diff-index-doc' into maint

* an/diff-index-doc:
  Documentation/diff-index: mention two modes of operation

7 years agoMerge branch 'cm/gitweb-project-list-persistent-cgi-fix' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:31:36 +0000 (15:31 -0700)]
Merge branch 'cm/gitweb-project-list-persistent-cgi-fix' into maint

"gitweb" forgot to clear a global variable $search_regexp upon each
request, mistakenly carrying over the previous search to a new one
when used as a persistent CGI.

* cm/gitweb-project-list-persistent-cgi-fix:
  gitweb: fix problem causing erroneous project list

7 years agoMerge branch 'ar/wildmatch-foldcase' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:31:27 +0000 (15:31 -0700)]
Merge branch 'ar/wildmatch-foldcase' into maint

The wildmatch engine did not honor WM_CASEFOLD option correctly.

* ar/wildmatch-foldcase:
  wildmatch: properly fold case everywhere

7 years agoMerge branch 'cb/log-follow-with-combined' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:30:59 +0000 (15:30 -0700)]
Merge branch 'cb/log-follow-with-combined' into maint

"git log -c --follow $path" segfaulted upon hitting the commit that
renamed the $path being followed.

* cb/log-follow-with-combined:
  fix segfault with git log -c --follow

7 years agoMerge branch 'rr/die-on-missing-upstream' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:30:24 +0000 (15:30 -0700)]
Merge branch 'rr/die-on-missing-upstream' into maint

When a reflog notation is used for implicit "current branch", we did
not say which branch, and worse said "branch ''".

* rr/die-on-missing-upstream:
  sha1_name: fix error message for @{<N>}, @{<date>}
  sha1_name: fix error message for @{u}

7 years agoMerge branch 'maint-1.8.2' into maint
Junio C Hamano [Wed, 3 Jul 2013 22:27:19 +0000 (15:27 -0700)]
Merge branch 'maint-1.8.2' into maint

* maint-1.8.2:
  git-config: update doc for --get with multiple values

7 years agoMerge branch 'maint-1.8.1' into maint-1.8.2
Junio C Hamano [Wed, 3 Jul 2013 22:26:53 +0000 (15:26 -0700)]
Merge branch 'maint-1.8.1' into maint-1.8.2

* maint-1.8.1:
  git-config: update doc for --get with multiple values

7 years agoChange "remote tracking" to "remote-tracking"
Michael Schubert [Wed, 3 Jul 2013 09:12:34 +0000 (11:12 +0200)]
Change "remote tracking" to "remote-tracking"

Fix a typo ("remote remote-tracking") going back to the big cleanup
in 2010 (8b3f3f84 etc). Also, remove some more occurrences of
"tracking" and "remote tracking" in favor of "remote-tracking".

Signed-off-by: Michael Schubert <>
Reviewed-by: Johan Herland <>
Signed-off-by: Junio C Hamano <>
7 years agoteach format-patch to place other authors into in-body "From"
Jeff King [Wed, 3 Jul 2013 07:08:22 +0000 (03:08 -0400)]
teach format-patch to place other authors into in-body "From"

Format-patch generates emails with the "From" address set to the
author of each patch. If you are going to send the emails, however,
you would want to replace the author identity with yours (if they
are not the same), and bump the author identity to an in-body

Normally this is handled by git-send-email, which does the
transformation before sending out the emails. However, some
workflows may not use send-email (e.g., imap-send, or a custom
script which feeds the mbox to a non-git MUA). They could each
implement this feature themselves, but getting it right is
non-trivial (one must canonicalize the identities by reversing any
RFC2047 encoding or RFC822 quoting of the headers, which has caused
many bugs in send-email over the years).

This patch takes a different approach: it teaches format-patch a
"--from" option which handles the ident check and in-body header
while it is writing out the email.  It's much simpler to do at this
level (because we haven't done any quoting yet), and any workflow
based on format-patch can easily turn it on.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agopretty.c: drop const-ness from pretty_print_context
Jeff King [Wed, 3 Jul 2013 07:07:48 +0000 (03:07 -0400)]
pretty.c: drop const-ness from pretty_print_context

In the current code, callers are expected to fill in the
pretty_print_context, and then the pretty.c functions simply
read from it. This leaves no room for the pretty.c functions
to communicate with each other by manipulating the context
(e.g., data seen while printing the header may impact how we
print the body).

Rather than introduce a new struct to hold modifiable data,
let's just drop the const-ness of the existing context

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agogit-remote-mediawiki: un-brace file handles in binmode calls
Matthieu Moy [Wed, 3 Jul 2013 09:14:19 +0000 (11:14 +0200)]
git-remote-mediawiki: un-brace file handles in binmode calls

Commit e83d36b66fc turned "print STDOUT" into "print {*STDOUT}", as
suggested by perlcritic. Unfortunately, it also changed two "binmode
STDOUT" calls the same way, which does not work and yield a "Not a GLOB
reference" error.

Signed-off-by: Matthieu Moy <>
Signed-off-by: Junio C Hamano <>
7 years agogit-config: update doc for --get with multiple values
John Keeping [Wed, 3 Jul 2013 18:27:39 +0000 (19:27 +0100)]
git-config: update doc for --get with multiple values

Since commit 00b347d (git-config: do not complain about duplicate
entries, 2012-10-23), "git config --get" does not exit with an error if
there are multiple values for the specified key but instead returns the
last value.  Update the documentation to reflect this.

Signed-off-by: John Keeping <>
Signed-off-by: Junio C Hamano <>
7 years agoAdd --depth to submodule update/add
Fredrik Gustafsson [Tue, 2 Jul 2013 21:42:56 +0000 (23:42 +0200)]
Add --depth to submodule update/add

Add the --depth option to the add and update commands of "git submodule",
which is then passed on to the clone command. This is useful when the
submodule(s) are huge and you're not really interested in anything but
the latest commit.

Tests are added and some indention adjustments were made to conform to the
rest of the testfile on "submodule update can handle symbolic links in pwd".

Signed-off-by: Fredrik Gustafsson <>
Acked-by: Jens Lehmann <>
Signed-off-by: Junio C Hamano <>
7 years agosubmodule update: allow custom command to update submodule working tree
Chris Packham [Wed, 3 Jul 2013 09:02:02 +0000 (21:02 +1200)]
submodule update: allow custom command to update submodule working tree

Users can set submodule.$name.update to '!command' which will cause
'command' to be run instead of checkout/merge/rebase. This allows
the user finer-grained control over how the update is done.

The primary motivation for this was interoperability with stgit;
however being able to intercept the submodule update process may
prove useful for integrating with or extending other tools.

Signed-off-by: Chris Packham <>
Signed-off-by: Junio C Hamano <>
7 years agomerge: handle --ff/--no-ff/--ff-only as a tri-state option
Miklos Vajna [Tue, 2 Jul 2013 14:47:57 +0000 (16:47 +0200)]
merge: handle --ff/--no-ff/--ff-only as a tri-state option

These three options mean "favor fast-forwarding when possible,
without creating an unnecessary merge", "never fast-forward and
always create a merge commit even when the commit being merged is a
strict descendant", and "we do not want to create any merge commit;
update only when the merged commit is a strict descendant".

They are "pick one out of these three possibilities" options, and
correspond to "merge.ff" configuration that is tri-state (yes, no
and only).

However, the implementation did not follow the usual convention for
the command line options (later one wins, and command line overrides
what is in the configuration).

Fix this by consolidating two variables (fast_forward_only and
allow_fast_forward) used in the implementation into one enum that
can take one of the three possible values.

Signed-off-by: Miklos Vajna <>
Signed-off-by: Junio C Hamano <>
7 years agoDo not ignore merge options in interactive rebase
Arnaud Fontaine [Tue, 2 Jul 2013 08:05:48 +0000 (17:05 +0900)]
Do not ignore merge options in interactive rebase

Merge strategy and its options can be specified in `git rebase`,
but with `--interactive`, they were completely ignored.

Signed-off-by: Arnaud Fontaine <>
Signed-off-by: Junio C Hamano <>
7 years agofetch-pack: avoid quadratic behavior in rev_list_push
Jeff King [Tue, 2 Jul 2013 06:24:21 +0000 (02:24 -0400)]
fetch-pack: avoid quadratic behavior in rev_list_push

When we call find_common to start finding common ancestors
with the remote side of a fetch, the first thing we do is
insert the tip of each ref into our rev_list linked list. We
keep the list sorted the whole time with
commit_list_insert_by_date, which means our insertion ends
up doing O(n^2) timestamp comparisons.

We could teach rev_list_push to use an unsorted list, and
then sort it once after we have added each ref. However, in
get_rev, we process the list by popping commits off the
front and adding parents back in timestamp-sorted order. So
that procedure would still operate on the large list.

Instead, we can replace the linked list with a heap-based
priority queue, which can do O(log n) insertion, making the
whole insertion procedure O(n log n).

As a result of switching to the prio_queue struct, we fix
two minor bugs:

  1. When we "pop" a commit in get_rev, and when we clear
     the rev_list in find_common, we do not take care to
     free the "struct commit_list", and just leak its
     memory. With the prio_queue implementation, the memory
     management is handled for us.

  2. In get_rev, we look at the head commit of the list,
     possibly push its parents onto the list, and then "pop"
     the front of the list off, assuming it is the same
     element that we just peeked at. This is typically going
     to be the case, but would not be in the face of clock
     skew: the parents are inserted by date, and could
     potentially be inserted at the head of the list if they
     have a timestamp newer than their descendent. In this
     case, we would accidentally pop the parent, and never
     process it at all.

     The new implementation pulls the commit off of the
     queue as we examine it, and so does not suffer from
     this problem.

With this patch, a fetch of a single commit into a
repository with 50,000 refs went from:

  real    0m7.984s
  user    0m7.852s
  sys     0m0.120s


  real    0m2.017s
  user    0m1.884s
  sys     0m0.124s

Before this patch, a larger case with 370K refs still had
not completed after tens of minutes; with this patch, it
completes in about 12 seconds.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agocommit.c: make compare_commits_by_commit_date global
Jeff King [Tue, 2 Jul 2013 06:21:48 +0000 (02:21 -0400)]
commit.c: make compare_commits_by_commit_date global

This helper function was introduced as a prio_queue
comparator to help topological sorting. However, other users
of prio_queue who want to replace commit_list_insert_by_date
will want to use it, too. So let's make it public.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agofetch-pack: avoid quadratic list insertion in mark_complete
Jeff King [Tue, 2 Jul 2013 06:16:23 +0000 (02:16 -0400)]
fetch-pack: avoid quadratic list insertion in mark_complete

We insert the commit pointed to by each ref one-by-one into
the "complete" commit_list using insert_by_date. Because
each insertion is O(n), we end up with O(n^2) behavior.

This typically doesn't matter, because the number of refs is
reasonably small. And even if there are a lot of refs, they
often point to a smaller set of objects (in which case the
optimization in commit ea5f220 keeps our "n" small).

However, in pathological repositories (hundreds of thousands
of refs, each pointing to a unique commit), this quadratic
behavior can make a difference. Since we do not care about
the list order until we have finished building it, we can
simply keep it unsorted during the insertion phase, then
sort it afterwards.

On a repository like the one described above, this dropped
the time to do a no-op fetch from 2.0s to 1.7s. On normal
repositories, it probably does not matter at all, but it
does not hurt to protect ourselves from pathological cases.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
7 years agoget_short_sha1(): correctly disambiguate type-limited abbreviation
Junio C Hamano [Tue, 2 Jul 2013 04:54:45 +0000 (21:54 -0700)]
get_short_sha1(): correctly disambiguate type-limited abbreviation

One test in t1512 that expects a failure incorrectly passed.  The
test prepares a commit whose object name begins with ten "0"s, and
also prepares a tag that points at the commit.  The object name of
the tag also begins with ten "0"s.  There is no other commit-ish
object in the repository whose name begins with such a prefix.

Ideally, in such a repository:

    $ git rev-parse --verify 0000000000^{commit}

should yield that commit.  If 0000000000 is taken as the commit
0000000000e4f, peeling it to a commmit yields that commit itself,
and if 0000000000 is taken as the tag 0000000000f8f, peeling it to a
commit also yields the same commit, so in that twisted sense, the
extended SHA-1 expression 0000000000^{commit} is unambigous.  The
test that expects a failure is to check the above command.

The reason the test expects a failure is that we did not implement
such a "unification" of two candidate objects.  What we did (or at
least, meant to) implement was to recognise that a commit-ish is
required to expand 0000000000, and notice that there are two succh
commit-ish, and diagnose the request as ambiguous.

However, there was a bug in the logic to check the candidate
objects.  When the code saw 0000000000f8f (a tag) that shared the
shortened prefix (ten "0"s), it tried to make sure that the tag is a
commit-ish by looking at the tag object.  Because it incorrectly
used lookup_object() when the tag has not been parsed, however, we
incorrectly declared that the tag is _not_ a commit-ish, leaving the
sole commit in the repository, 0000000000e4f, that has the required
prefix as "unique match", causing the test to pass when it shouldn't.

This fixes the logic to inspect the type of the object a tag refers
to, to make the test that is expected to fail correctly fail.

Signed-off-by: Junio C Hamano <>
7 years agot1512: correct leftover constants from earlier edition
Junio C Hamano [Tue, 2 Jul 2013 04:49:09 +0000 (21:49 -0700)]
t1512: correct leftover constants from earlier edition

The earliest iteration of this test script used a magic string
110282 as the common prefix for ambiguous object names, but the
final edition switched the common prefix to 0000000000 (10 "0"s).

Unfortunately, instances of the original prefix were left in the
comments and a few tests.  Replace them with the correct constants.

Signed-off-by: Junio C Hamano <>
7 years agogit stash: avoid data loss when "git stash save" kills a directory
Petr Baudis [Fri, 28 Jun 2013 15:05:32 +0000 (17:05 +0200)]
git stash: avoid data loss when "git stash save" kills a directory

"stash save" is about saving the local change to the working tree,
but also about restoring the state of the last commit to the working
tree.  When a local change is to turn a non-directory to a directory,
in order to restore the non-directory, everything in the directory
needs to be removed.

Which is fine when running "git stash save --include-untracked",
but without that option, untracked, newly created files in the
directory will have to be discarded, if the state you are restoring
to has a non-directory at the same path as the directory.

Introduce a safety valve to fail the operation in such case, using
the "ls-files --killed" which was designed for this exact purpose.

The "stash save" is stopped when untracked files need to be
discarded because their leading path ceased to be a directory, and
the user is required to pass --force to really have the data

Signed-off-by: Petr Baudis <>
Signed-off-by: Junio C Hamano <>
7 years agotreat_directory(): do not declare submodules to be untracked
Junio C Hamano [Mon, 1 Jul 2013 21:00:32 +0000 (14:00 -0700)]
treat_directory(): do not declare submodules to be untracked

When the working tree walker encounters a directory, it asks the
function treat_directory() if it should descend into it, show it as
an untracked directory, or do something else.  When the directory is
the top of the submodule working tree, we used to say "That is an
untracked directory", which was bogus.

It is an entity that is tracked in the index of the repository we
are looking at, and that is not to be descended into it.  Return
path_none, not path_untracked, to report that.

The existing case that path_untracked is returned for a newly
discovered submodule that is not tracked in the index (this only
happens when DIR_NO_GITLINKS option is not used) is unchanged, but
that is exactly because the submodule is not tracked in the index.

Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'maint'
Junio C Hamano [Mon, 1 Jul 2013 19:46:54 +0000 (12:46 -0700)]
Merge branch 'maint'

* maint:
  t7500: fix flipped actual/expect
  lib-rebase: document exec_ in FAKE_LINES

7 years agoUpdate draft release notes to 1.8.4
Junio C Hamano [Mon, 1 Jul 2013 19:46:41 +0000 (12:46 -0700)]
Update draft release notes to 1.8.4

Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'rr/remote-branch-config-refresh'
Junio C Hamano [Mon, 1 Jul 2013 19:41:58 +0000 (12:41 -0700)]
Merge branch 'rr/remote-branch-config-refresh'

The original way to specify remote repository using .git/branches/
used to have a nifty feature.  The code to support the feature was
still in a function but the caller was changed not to call it 5
years ago, breaking that feature and leaving the supporting code

* rr/remote-branch-config-refresh:
  t/t5505-remote: test multiple push/pull in remotes-file
  ls-remote doc: don't encourage use of branches-file
  ls-remote doc: rewrite <repository> paragraph
  ls-remote doc: fix example invocation on git.git
  t/t5505-remote: test url-with-# in branches-file
  remote: remove dead code in read_branches_file()
  t/t5505-remote: use test_path_is_missing
  t/t5505-remote: test push-refspec in branches-file
  t/t5505-remote: modernize style

7 years agoMerge branch 'ed/color-prompt'
Junio C Hamano [Mon, 1 Jul 2013 19:41:55 +0000 (12:41 -0700)]
Merge branch 'ed/color-prompt'

Code clean-up for in-prompt status script (in contrib/).

* ed/color-prompt: add missing information in comments do not print duplicate clean color code
  t9903: remove redundant tests refactor colored prompt code
  t9903: add tests for git-prompt pcmode

7 years agoMerge branch 'ap/rebase-multiple-fixups'
Junio C Hamano [Mon, 1 Jul 2013 19:41:52 +0000 (12:41 -0700)]
Merge branch 'ap/rebase-multiple-fixups'

Having multiple "fixup!" on a line in the rebase instruction sheet
did not work very well with "git rebase -i --autosquash".

* ap/rebase-multiple-fixups:
  lib-rebase: style: use write_script, <<-\EOF
  rebase -i: handle fixup! fixup! in --autosquash

7 years agoMerge branch 'kb/am-deprecate-resolved'
Junio C Hamano [Mon, 1 Jul 2013 19:41:48 +0000 (12:41 -0700)]
Merge branch 'kb/am-deprecate-resolved'

Promote "git am --continue" over "git am --resolved" for UI

* kb/am-deprecate-resolved:
  am: replace uses of --resolved with --continue

7 years agoMerge branch 'rr/column-doc'
Junio C Hamano [Mon, 1 Jul 2013 19:41:46 +0000 (12:41 -0700)]
Merge branch 'rr/column-doc'

* rr/column-doc:
  column doc: rewrite documentation for column.ui

7 years agoMerge branch 'ft/doc-git-transport'
Junio C Hamano [Mon, 1 Jul 2013 19:41:43 +0000 (12:41 -0700)]
Merge branch 'ft/doc-git-transport'

* ft/doc-git-transport:
  documentation: add git:// transport security notice

7 years agoMerge branch 'sb/mailmap-merijn-brand'
Junio C Hamano [Mon, 1 Jul 2013 19:41:41 +0000 (12:41 -0700)]
Merge branch 'sb/mailmap-merijn-brand'

* sb/mailmap-merijn-brand:
  .mailmap: Map "H.Merijn Brand" to "H. Merijn Brand"

7 years agoMerge branch 'sg/bash-prompt'
Junio C Hamano [Mon, 1 Jul 2013 19:41:37 +0000 (12:41 -0700)]
Merge branch 'sg/bash-prompt'

* sg/bash-prompt:
  bash prompt: mention that PROMPT_COMMAND mode is faster
  bash prompt: avoid command substitution when finalizing gitstring
  bash prompt: avoid command substitution when checking for untracked files
  bash prompt: use bash builtins to check stash state
  bash prompt: use bash builtins to check for unborn branch for dirty state
  bash prompt: combine 'git rev-parse' for detached head
  bash prompt: combine 'git rev-parse' executions in the main code path
  bash prompt: use bash builtins to find out current branch
  bash prompt: use bash builtins to find out rebase state
  bash prompt: run 'git rev-parse --git-dir' directly instead of __gitdir()
  bash prompt: return early from __git_ps1() when not in a git repository
  bash prompt: print unique detached HEAD abbreviated object name
  bash prompt: add a test for symbolic link symbolic refs
  completion, bash prompt: move __gitdir() tests to completion test suite
  bash prompt: use 'write_script' helper in interactive rebase test
  bash prompt: fix redirection coding style in tests

7 years agoMerge branch 'wk/doc-in-linux-3.x-era'
Junio C Hamano [Mon, 1 Jul 2013 19:41:34 +0000 (12:41 -0700)]
Merge branch 'wk/doc-in-linux-3.x-era'

Update documentation to match more recent realities.

* wk/doc-in-linux-3.x-era:
  Documentation: Update 'linux-2.6.git' -> 'linux.git'
  Documentation: Update the NFS remote examples to use the staging repo
  doc/clone: Pick more compelling paths for the --reference example
  doc/clone: Remove the '--bare -l -s' example

7 years agoMerge branch 'jc/topo-author-date-sort'
Junio C Hamano [Mon, 1 Jul 2013 19:41:22 +0000 (12:41 -0700)]
Merge branch 'jc/topo-author-date-sort'

"git log" learned the "--author-date-order" option, with which the
output is topologically sorted and commits in parallel histories
are shown intermixed together based on the author timestamp.

* jc/topo-author-date-sort:
  t6003: add --author-date-order test
  topology tests: teach a helper to set author dates as well
  t6003: add --date-order test
  topology tests: teach a helper to take abbreviated timestamps
  t/lib-t6000: style fixes
  log: --author-date-order
  sort-in-topological-order: use prio-queue
  prio-queue: priority queue of pointers to structs
  toposort: rename "lifo" field

7 years agoMerge branch 'jk/commit-info-slab'
Junio C Hamano [Mon, 1 Jul 2013 19:41:19 +0000 (12:41 -0700)]
Merge branch 'jk/commit-info-slab'

Allow adding custom information to commit objects in order to
represent unbound number of flag bits etc.

* jk/commit-info-slab:
  commit-slab: introduce a macro to define a slab for new type
  commit-slab: avoid large realloc
  commit: allow associating auxiliary info on-demand

7 years agot4205: replace .\+ with ..* in sed commands
Brian Gernhardt [Mon, 1 Jul 2013 18:59:59 +0000 (14:59 -0400)]
t4205: replace .\+ with ..* in sed commands

OS X's sed only accepts basic regular expressions, which does not
allow the + quantifier.  However '..*' (anything, followed by zero or
more anything) is the same as '.\+' (one or more anything) and valid
in any regular expression language.

Signed-off-by: Brian Gernhardt <>
Signed-off-by: Junio C Hamano <>
7 years agolib-rebase: style: use write_script, <<-\EOF
Andrew Pimlott [Mon, 1 Jul 2013 16:23:38 +0000 (09:23 -0700)]
lib-rebase: style: use write_script, <<-\EOF

Signed-off-by: Andrew Pimlott <>
Signed-off-by: Junio C Hamano <>
7 years agot7500: fix flipped actual/expect
Andrew Pimlott [Mon, 1 Jul 2013 16:20:36 +0000 (09:20 -0700)]
t7500: fix flipped actual/expect

Signed-off-by: Andrew Pimlott <>
Signed-off-by: Junio C Hamano <>
7 years agolib-rebase: document exec_ in FAKE_LINES
Andrew Pimlott [Mon, 1 Jul 2013 16:20:35 +0000 (09:20 -0700)]
lib-rebase: document exec_ in FAKE_LINES

Signed-off-by: Andrew Pimlott <>
Signed-off-by: Junio C Hamano <>
7 years agocompletion: learn about --man-path
John Keeping [Sat, 22 Jun 2013 11:25:18 +0000 (12:25 +0100)]
completion: learn about --man-path

Signed-off-by: John Keeping <>
Acked-by: SZEDER Gábor <>
Signed-off-by: Junio C Hamano <>
7 years agocompletion: handle unstuck form of base git options
John Keeping [Sat, 22 Jun 2013 11:25:17 +0000 (12:25 +0100)]
completion: handle unstuck form of base git options

git-completion.bash's parsing of the command name relies on everything
preceding it starting with '-' unless it is the "-c" option.  This
allows users to use the stuck form of "--work-tree=<path>" and
"--namespace=<path>" but not the unstuck forms "--work-tree <path>" and
"--namespace <path>".  Fix this.

Similarly, the completion only handles the stuck form "--git-dir=<path>"
and not "--git-dir <path>", so fix this as well.

Signed-off-by: John Keeping <>
Acked-by: SZEDER Gábor <>
Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'maint'
Junio C Hamano [Sun, 30 Jun 2013 22:45:43 +0000 (15:45 -0700)]
Merge branch 'maint'

* maint:
  Start preparing for
  check-ignore doc: fix broken link to ls-files page
  test: spell 'ls-files --delete' option correctly in test descriptions

7 years agoUpdate draft release notes to 1.8.4
Junio C Hamano [Sun, 30 Jun 2013 22:45:26 +0000 (15:45 -0700)]
Update draft release notes to 1.8.4

Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'mh/ref-races'
Junio C Hamano [Sun, 30 Jun 2013 22:40:01 +0000 (15:40 -0700)]
Merge branch 'mh/ref-races'

"git pack-refs" that races with new ref creation or deletion have
been susceptible to lossage of refs under right conditions, which
has been tightened up.

* mh/ref-races:
  for_each_ref: load all loose refs before packed refs
  get_packed_ref_cache: reload packed-refs file when it changes
  add a stat_validity struct
  Extract a struct stat_data from cache_entry
  packed_ref_cache: increment refcount when locked
  do_for_each_entry(): increment the packed refs cache refcount
  refs: manage lifetime of packed refs cache via reference counting
  refs: implement simple transactions for the packed-refs file
  refs: wrap the packed refs cache in a level of indirection
  pack_refs(): split creation of packed refs and entry writing
  repack_without_ref(): split list curation and entry writing

7 years agoMerge branch 'ap/diff-ignore-blank-lines'
Junio C Hamano [Sun, 30 Jun 2013 22:39:53 +0000 (15:39 -0700)]
Merge branch 'ap/diff-ignore-blank-lines'

"git diff" learned a mode that ignores hunks whose change consists
only of additions and removals of blank lines, which is the same as
"diff -B" (ignore blank lines) of GNU diff.

* ap/diff-ignore-blank-lines:
  diff: add --ignore-blank-lines option

7 years agoMerge branch 'mh/loose-refs-race-with-pack-ref'
Junio C Hamano [Sun, 30 Jun 2013 22:39:47 +0000 (15:39 -0700)]
Merge branch 'mh/loose-refs-race-with-pack-ref'

We read loose and packed rerferences in two steps, but after
deciding to read a loose ref but before actually opening it to read
it, another process racing with us can unlink it, which would cause
us to barf. Update the codepath to retry when such a race is

* mh/loose-refs-race-with-pack-ref:
  resolve_ref_unsafe(): close race condition reading loose refs
  resolve_ref_unsafe(): handle the case of an SHA-1 within loop
  resolve_ref_unsafe(): extract function handle_missing_loose_ref()

7 years agoMerge branch 'nk/name-rev-abbreviated-refs'
Junio C Hamano [Sun, 30 Jun 2013 22:39:41 +0000 (15:39 -0700)]
Merge branch 'nk/name-rev-abbreviated-refs'

"git name-rev --refs=tags/v*" were forbidden, which was a bit
inconvenient (you had to give a pattern to match refs fully, like

* nk/name-rev-abbreviated-refs:
  name-rev: allow to specify a subpath for --refs option

7 years agoMerge branch 'jk/submodule-subdirectory-ok'
Junio C Hamano [Sun, 30 Jun 2013 22:39:35 +0000 (15:39 -0700)]
Merge branch 'jk/submodule-subdirectory-ok'

Allow various subcommands of "git submodule" to be run not from the
top of the working tree of the superproject.

* jk/submodule-subdirectory-ok:
  submodule: drop the top-level requirement
  rev-parse: add --prefix option
  submodule: show full path in error message
  t7403: add missing && chaining
  t7403: modernize style
  t7401: make indentation consistent

7 years agoStart preparing for
Junio C Hamano [Sun, 30 Jun 2013 22:36:03 +0000 (15:36 -0700)]
Start preparing for

Signed-off-by: Junio C Hamano <>
7 years agoMerge branch 'fc/macos-x-clipped-write' into maint
Junio C Hamano [Sun, 30 Jun 2013 22:33:40 +0000 (15:33 -0700)]
Merge branch 'fc/macos-x-clipped-write' into maint

Mac OS X does not like to write(2) more than INT_MAX number of
bytes; work it around by chopping write(2) into smaller pieces.

* fc/macos-x-clipped-write:
  compate/clipped-write.c: large write(2) fails on Mac OS X/XNU