gitweb.git
git-p4: additional testing of --changes-block-sizeLuke Diamand Sun, 7 Jun 2015 21:35:03 +0000 (22:35 +0100)

git-p4: additional testing of --changes-block-size

Add additional tests of some corner-cases of the
--changes-block-size git-p4 parameter.

Also reduce the number of p4 changes created during the
tests, so that they complete faster.

Signed-off-by: Luke Diamand <luke@diamand.org>
Acked-by: Lex Spoon <lex@lexspoon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ld/p4-editor-multi-words'Junio C Hamano Fri, 5 Jun 2015 19:17:38 +0000 (12:17 -0700)

Merge branch 'ld/p4-editor-multi-words'

Unlike "$EDITOR" and "$GIT_EDITOR" that can hold the path to the
command and initial options (e.g. "/path/to/emacs -nw"), 'git p4'
did not let the shell interpolate the contents of the environment
variable that name the editor "$P4EDITOR" (and "$EDITOR", too).
Make it in line with the rest of Git, as well as with Perforce.

* ld/p4-editor-multi-words:
git-p4: tests: use test-chmtime in place of touch
git-p4: fix handling of multi-word P4EDITOR
git-p4: add failing test for P4EDITOR handling

Merge branch 'bc/object-id'Junio C Hamano Fri, 5 Jun 2015 19:17:37 +0000 (12:17 -0700)

Merge branch 'bc/object-id'

for_each_ref() callback functions were taught to name the objects
not with "unsigned char sha1[20]" but with "struct object_id".

* bc/object-id: (56 commits)
struct ref_lock: convert old_sha1 member to object_id
warn_if_dangling_symref(): convert local variable "junk" to object_id
each_ref_fn_adapter(): remove adapter
rev_list_insert_ref(): remove unneeded arguments
rev_list_insert_ref_oid(): new function, taking an object_oid
mark_complete(): remove unneeded arguments
mark_complete_oid(): new function, taking an object_oid
clear_marks(): rewrite to take an object_id argument
mark_complete(): rewrite to take an object_id argument
send_ref(): convert local variable "peeled" to object_id
upload-pack: rewrite functions to take object_id arguments
find_symref(): convert local variable "unused" to object_id
find_symref(): rewrite to take an object_id argument
write_one_ref(): rewrite to take an object_id argument
write_refs_to_temp_dir(): convert local variable sha1 to object_id
submodule: rewrite to take an object_id argument
shallow: rewrite functions to take object_id arguments
handle_one_ref(): rewrite to take an object_id argument
add_info_ref(): rewrite to take an object_id argument
handle_one_reflog(): rewrite to take an object_id argument
...

Merge branch 'jk/at-push-sha1'Junio C Hamano Fri, 5 Jun 2015 19:17:36 +0000 (12:17 -0700)

Merge branch 'jk/at-push-sha1'

Introduce <branch>@{push} short-hand to denote the remote-tracking
branch that tracks the branch at the remote the <branch> would be
pushed to.

* jk/at-push-sha1:
for-each-ref: accept "%(push)" format
for-each-ref: use skip_prefix instead of starts_with
sha1_name: implement @{push} shorthand
sha1_name: refactor interpret_upstream_mark
sha1_name: refactor upstream_mark
remote.c: add branch_get_push
remote.c: return upstream name from stat_tracking_info
remote.c: untangle error logic in branch_get_upstream
remote.c: report specific errors from branch_get_upstream
remote.c: introduce branch_get_upstream helper
remote.c: hoist read_config into remote_get_1
remote.c: provide per-branch pushremote name
remote.c: hoist branch.*.remote lookup out of remote_get_1
remote.c: drop "remote" pointer from "struct branch"
remote.c: refactor setup of branch->merge list
remote.c: drop default_remote_name variable

Sixth batch for 2.5 cycleJunio C Hamano Mon, 1 Jun 2015 19:47:56 +0000 (12:47 -0700)

Sixth batch for 2.5 cycle

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

Merge branch 'sb/test-bitmap-free-at-end'Junio C Hamano Mon, 1 Jun 2015 19:45:21 +0000 (12:45 -0700)

Merge branch 'sb/test-bitmap-free-at-end'

An earlier leakfix to bitmap testing code was incomplete.

* sb/test-bitmap-free-at-end:
test_bitmap_walk: free bitmap with bitmap_free

Merge branch 'mm/rebase-i-post-rewrite-exec'Junio C Hamano Mon, 1 Jun 2015 19:45:20 +0000 (12:45 -0700)

Merge branch 'mm/rebase-i-post-rewrite-exec'

"git rebase -i" fired post-rewrite hook when it shouldn't (namely,
when it was told to stop sequencing with 'exec' insn).

* mm/rebase-i-post-rewrite-exec:
t5407: use <<- to align the expected output
rebase -i: fix post-rewrite hook with failed exec command
rebase -i: demonstrate incorrect behavior of post-rewrite

Merge branch 'fm/fetch-raw-sha1'Junio C Hamano Mon, 1 Jun 2015 19:45:19 +0000 (12:45 -0700)

Merge branch 'fm/fetch-raw-sha1'

"git upload-pack" that serves "git fetch" can be told to serve
commits that are not at the tip of any ref, as long as they are
reachable from a ref, with uploadpack.allowReachableSHA1InWant
configuration variable.

* fm/fetch-raw-sha1:
upload-pack: optionally allow fetching reachable sha1
upload-pack: prepare to extend allow-tip-sha1-in-want
config.txt: clarify allowTipSHA1InWant with camelCase

Merge branch 'sg/help-group'Junio C Hamano Mon, 1 Jun 2015 19:45:18 +0000 (12:45 -0700)

Merge branch 'sg/help-group'

Group list of commands shown by "git help" along the workflow
elements to help early learners.

* sg/help-group:
help: respect new common command grouping
command-list.txt: drop the "common" tag
generate-cmdlist: parse common group commands
command-list.txt: add the common groups block
command-list: prepare machinery for upcoming "common groups" section

Merge branch 'mm/log-format-raw-doc'Junio C Hamano Mon, 1 Jun 2015 19:45:17 +0000 (12:45 -0700)

Merge branch 'mm/log-format-raw-doc'

Clarify that "log --raw" and "log --format=raw" are unrelated
concepts.

* mm/log-format-raw-doc:
Documentation/log: clarify sha1 non-abbreviation in log --raw
Documentation/log: clarify what --raw means

Merge branch 'dt/cat-file-follow-symlinks'Junio C Hamano Mon, 1 Jun 2015 19:45:16 +0000 (12:45 -0700)

Merge branch 'dt/cat-file-follow-symlinks'

"git cat-file --batch(-check)" learned the "--follow-symlinks"
option that follows an in-tree symbolic link when asked about an
object via extended SHA-1 syntax, e.g. HEAD:RelNotes that points at
Documentation/RelNotes/2.5.0.txt. With the new option, the command
behaves as if HEAD:Documentation/RelNotes/2.5.0.txt was given as
input instead.

* dt/cat-file-follow-symlinks:
cat-file: add --follow-symlinks to --batch
sha1_name: get_sha1_with_context learns to follow symlinks
tree-walk: learn get_tree_entry_follow_symlinks

Merge branch 'rs/janitorial'Junio C Hamano Mon, 1 Jun 2015 19:45:15 +0000 (12:45 -0700)

Merge branch 'rs/janitorial'

Code clean-up.

* rs/janitorial:
dir: remove unused variable sb
clean: remove unused variable buf
use file_exists() to check if a file exists in the worktree

Merge branch 'jk/stash-options'Junio C Hamano Mon, 1 Jun 2015 19:45:14 +0000 (12:45 -0700)

Merge branch 'jk/stash-options'

Make "git stash something --help" error out, so that users can
safely say "git stash drop --help".

* jk/stash-options:
stash: recognize "--help" for subcommands
stash: complain about unknown flags

Merge branch 'da/mergetool-winmerge'Junio C Hamano Mon, 1 Jun 2015 19:45:14 +0000 (12:45 -0700)

Merge branch 'da/mergetool-winmerge'

"git mergetool" learned to drive WinMerge as a backend.

* da/mergetool-winmerge:
mergetools: add winmerge as a builtin tool
mergetool--lib: set IFS for difftool and mergetool

Merge branch 'mc/commit-doc-grammofix'Junio C Hamano Mon, 1 Jun 2015 19:45:12 +0000 (12:45 -0700)

Merge branch 'mc/commit-doc-grammofix'

Doc grammar fix.

* mc/commit-doc-grammofix:
Documentation/git-commit: grammofix

Merge branch 'jh/filter-empty-contents'Junio C Hamano Mon, 1 Jun 2015 19:45:10 +0000 (12:45 -0700)

Merge branch 'jh/filter-empty-contents'

The clean/smudge interface did not work well when filtering an
empty contents (failed and then passed the empty input through).
It can be argued that a filter that produces anything but empty for
an empty input is nonsense, but if the user wants to do strange
things, then why not?

* jh/filter-empty-contents:
sha1_file: pass empty buffer to index empty file

Merge branch 'ah/usage-strings'Junio C Hamano Mon, 1 Jun 2015 19:45:09 +0000 (12:45 -0700)

Merge branch 'ah/usage-strings'

A few usage string updates.

* ah/usage-strings:
blame, log: format usage strings similarly to those in documentation

Merge branch 'jk/http-backend-deadlock'Junio C Hamano Mon, 1 Jun 2015 19:45:09 +0000 (12:45 -0700)

Merge branch 'jk/http-backend-deadlock'

Communication between the HTTP server and http_backend process can
lead to a dead-lock when relaying a large ref negotiation request.
Diagnose the situation better, and mitigate it by reading such a
request first into core (to a reasonable limit).

* jk/http-backend-deadlock:
http-backend: spool ref negotiation requests to buffer
t5551: factor out tag creation
http-backend: fix die recursion with custom handler

Merge branch 'dt/clean-pathspec-filter-then-lstat'Junio C Hamano Mon, 1 Jun 2015 19:45:08 +0000 (12:45 -0700)

Merge branch 'dt/clean-pathspec-filter-then-lstat'

"git clean pathspec..." tried to lstat(2) and complain even for
paths outside the given pathspec.

* dt/clean-pathspec-filter-then-lstat:
clean: only lstat files in pathspec

Merge branch 'nd/untracked-cache'Junio C Hamano Wed, 27 May 2015 20:14:38 +0000 (13:14 -0700)

Merge branch 'nd/untracked-cache'

* nd/untracked-cache:
t7063: hide stderr from setup inside prereq

t7063: hide stderr from setup inside prereqJeff King Wed, 27 May 2015 09:34:58 +0000 (05:34 -0400)

t7063: hide stderr from setup inside prereq

When t7063 starts, it runs "update-index --untracked-cache"
to see if we support the untracked cache. Its output goes
straight to stderr, even if the test is not run with "-v".
Let's wrap it in a prereq that will hide the output by
default, but show it with "-v".

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

Sync with 2.4.2Junio C Hamano Tue, 26 May 2015 20:50:39 +0000 (13:50 -0700)

Sync with 2.4.2

Git 2.4.2 v2.4.2Junio C Hamano Tue, 26 May 2015 20:49:59 +0000 (13:49 -0700)

Git 2.4.2

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

Merge branch 'jk/still-interesting' into maintJunio C Hamano Tue, 26 May 2015 20:49:26 +0000 (13:49 -0700)

Merge branch 'jk/still-interesting' into maint

"git rev-list --objects $old --not --all" to see if everything that
is reachable from $old is already connected to the existing refs
was very inefficient.

* jk/still-interesting:
limit_list: avoid quadratic behavior from still_interesting

Merge branch 'jc/hash-object' into maintJunio C Hamano Tue, 26 May 2015 20:49:24 +0000 (13:49 -0700)

Merge branch 'jc/hash-object' into maint

"hash-object --literally" introduced in v2.2 was not prepared to
take a really long object type name.

* jc/hash-object:
write_sha1_file(): do not use a separate sha1[] array
t1007: add hash-object --literally tests
hash-object --literally: fix buffer overrun with extra-long object type
git-hash-object.txt: document --literally option

Merge branch 'jk/rebase-quiet-noop' into maintJunio C Hamano Tue, 26 May 2015 20:49:23 +0000 (13:49 -0700)

Merge branch 'jk/rebase-quiet-noop' into maint

"git rebase --quiet" was not quite quiet when there is nothing to
do.

* jk/rebase-quiet-noop:
rebase: silence "git checkout" for noop rebase

Merge branch 'sg/complete-decorate-full-not-long' into... Junio C Hamano Tue, 26 May 2015 20:49:22 +0000 (13:49 -0700)

Merge branch 'sg/complete-decorate-full-not-long' into maint

The completion for "log --decorate=" parameter value was incorrect.

* sg/complete-decorate-full-not-long:
completion: fix and update 'git log --decorate=' options

Merge branch 'jk/filter-branch-use-of-sed-on-incomplete... Junio C Hamano Tue, 26 May 2015 20:49:20 +0000 (13:49 -0700)

Merge branch 'jk/filter-branch-use-of-sed-on-incomplete-line' into maint

"filter-branch" corrupted commit log message that ends with an
incomplete line on platforms with some "sed" implementations that
munge such a line. Work it around by avoiding to use "sed".

* jk/filter-branch-use-of-sed-on-incomplete-line:
filter-branch: avoid passing commit message through sed

Merge branch 'jc/daemon-no-ipv6-for-2.4.1' into maintJunio C Hamano Tue, 26 May 2015 20:49:19 +0000 (13:49 -0700)

Merge branch 'jc/daemon-no-ipv6-for-2.4.1' into maint

"git daemon" fails to build from the source under NO_IPV6
configuration (regression in 2.4).

* jc/daemon-no-ipv6-for-2.4.1:
daemon: unbreak NO_IPV6 build regression

Merge branch 'jk/stash-require-clean-index' into maintJunio C Hamano Tue, 26 May 2015 20:49:19 +0000 (13:49 -0700)

Merge branch 'jk/stash-require-clean-index' into maint

"git stash pop/apply" forgot to make sure that not just the working
tree is clean but also the index is clean. The latter is important
as a stash application can conflict and the index will be used for
conflict resolution.

* jk/stash-require-clean-index:
stash: require a clean index to apply
t3903: avoid applying onto dirty index
t3903: stop hard-coding commit sha1s

Merge branch 'jk/git-no-more-argv0-path-munging' into... Junio C Hamano Tue, 26 May 2015 20:49:18 +0000 (13:49 -0700)

Merge branch 'jk/git-no-more-argv0-path-munging' into maint

We have prepended $GIT_EXEC_PATH and the path "git" is installed in
(typically "/usr/bin") to $PATH when invoking subprograms and hooks
for almost eternity, but the original use case the latter tried to
support was semi-bogus (i.e. install git to /opt/foo/git and run it
without having /opt/foo on $PATH), and more importantly it has
become less and less relevant as Git grew more mainstream (i.e. the
users would _want_ to have it on their $PATH). Stop prepending the
path in which "git" is installed to users' $PATH, as that would
interfere the command search order people depend on (e.g. they may
not like versions of programs that are unrelated to Git in /usr/bin
and want to override them by having different ones in /usr/local/bin
and have the latter directory earlier in their $PATH).

* jk/git-no-more-argv0-path-munging:
stop putting argv[0] dirname at front of PATH

Fifth batch for 2.5 cycleJunio C Hamano Tue, 26 May 2015 20:33:35 +0000 (13:33 -0700)

Fifth batch for 2.5 cycle

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

Merge branch 'nd/untracked-cache'Junio C Hamano Tue, 26 May 2015 20:24:45 +0000 (13:24 -0700)

Merge branch 'nd/untracked-cache'

Teach the index to optionally remember already seen untracked files
to speed up "git status" in a working tree with tons of cruft.

* nd/untracked-cache: (24 commits)
git-status.txt: advertisement for untracked cache
untracked cache: guard and disable on system changes
mingw32: add uname()
t7063: tests for untracked cache
update-index: test the system before enabling untracked cache
update-index: manually enable or disable untracked cache
status: enable untracked cache
untracked-cache: temporarily disable with $GIT_DISABLE_UNTRACKED_CACHE
untracked cache: mark index dirty if untracked cache is updated
untracked cache: print stats with $GIT_TRACE_UNTRACKED_STATS
untracked cache: avoid racy timestamps
read-cache.c: split racy stat test to a separate function
untracked cache: invalidate at index addition or removal
untracked cache: load from UNTR index extension
untracked cache: save to an index extension
ewah: add convenient wrapper ewah_serialize_strbuf()
untracked cache: don't open non-existent .gitignore
untracked cache: mark what dirs should be recursed/saved
untracked cache: record/validate dir mtime and reuse cached output
untracked cache: make a wrapper around {open,read,close}dir()
...

Merge branch 'rs/plug-leak-in-pack-bitmaps'Junio C Hamano Tue, 26 May 2015 20:24:44 +0000 (13:24 -0700)

Merge branch 'rs/plug-leak-in-pack-bitmaps'

The code to read pack-bitmap wanted to allocate a few hundred
pointers to a structure, but by mistake allocated and leaked memory
enough to hold that many actual structures. Correct the allocation
size and also have it on stack, as it is small enough.

* rs/plug-leak-in-pack-bitmaps:
pack-bitmaps: plug memory leak, fix allocation size for recent_bitmaps

Merge branch 'pt/pull-ff-vs-merge-ff'Junio C Hamano Tue, 26 May 2015 20:24:43 +0000 (13:24 -0700)

Merge branch 'pt/pull-ff-vs-merge-ff'

The pull.ff configuration was supposed to override the merge.ff
configuration, but it didn't.

* pt/pull-ff-vs-merge-ff:
pull: parse pull.ff as a bool or string
pull: make pull.ff=true override merge.ff

Merge branch 'pt/pull-log-n'Junio C Hamano Tue, 26 May 2015 20:24:43 +0000 (13:24 -0700)

Merge branch 'pt/pull-log-n'

"git pull --log" and "git pull --no-log" worked as expected, but
"git pull --log=20" did not.

* pt/pull-log-n:
pull: handle --log=<n>

Merge branch 'jk/rerere-forget-check-enabled'Junio C Hamano Tue, 26 May 2015 20:24:42 +0000 (13:24 -0700)

Merge branch 'jk/rerere-forget-check-enabled'

"git rerere forget" in a repository without rerere enabled gave a
cryptic error message; it should be a silent no-op instead.

* jk/rerere-forget-check-enabled:
rerere: exit silently on "forget" when rerere is disabled

git-p4: tests: use test-chmtime in place of touchLuke Diamand Tue, 19 May 2015 22:23:18 +0000 (23:23 +0100)

git-p4: tests: use test-chmtime in place of touch

Using "touch" for P4EDITOR means that the tests can be a bit
racy, since git-p4 checks the timestamp has been updated and
fails if the timestamp is not updated.

Use test-chmtime instead, which is designed for this.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jk/http-backend-deadlock-2.3' into jk... Junio C Hamano Tue, 26 May 2015 03:44:42 +0000 (20:44 -0700)

Merge branch 'jk/http-backend-deadlock-2.3' into jk/http-backend-deadlock

* jk/http-backend-deadlock-2.3:
http-backend: spool ref negotiation requests to buffer
t5551: factor out tag creation
http-backend: fix die recursion with custom handler

Merge branch 'jk/http-backend-deadlock-2.2' into jk... Junio C Hamano Tue, 26 May 2015 03:44:04 +0000 (20:44 -0700)

Merge branch 'jk/http-backend-deadlock-2.2' into jk/http-backend-deadlock-2.3

* jk/http-backend-deadlock-2.2:
http-backend: spool ref negotiation requests to buffer
t5551: factor out tag creation
http-backend: fix die recursion with custom handler

http-backend: spool ref negotiation requests to bufferJeff King Wed, 20 May 2015 07:37:09 +0000 (03:37 -0400)

http-backend: spool ref negotiation requests to buffer

When http-backend spawns "upload-pack" to do ref
negotiation, it streams the http request body to
upload-pack, who then streams the http response back to the
client as it reads. In theory, git can go full-duplex; the
client can consume our response while it is still sending
the request. In practice, however, HTTP is a half-duplex
protocol. Even if our client is ready to read and write
simultaneously, we may have other HTTP infrastructure in the
way, including the webserver that spawns our CGI, or any
intermediate proxies.

In at least one documented case[1], this leads to deadlock
when trying a fetch over http. What happens is basically:

1. Apache proxies the request to the CGI, http-backend.

2. http-backend gzip-inflates the data and sends
the result to upload-pack.

3. upload-pack acts on the data and generates output over
the pipe back to Apache. Apache isn't reading because
it's busy writing (step 1).

This works fine most of the time, because the upload-pack
output ends up in a system pipe buffer, and Apache reads
it as soon as it finishes writing. But if both the request
and the response exceed the system pipe buffer size, then we
deadlock (Apache blocks writing to http-backend,
http-backend blocks writing to upload-pack, and upload-pack
blocks writing to Apache).

We need to break the deadlock by spooling either the input
or the output. In this case, it's ideal to spool the input,
because Apache does not start reading either stdout _or_
stderr until we have consumed all of the input. So until we
do so, we cannot even get an error message out to the
client.

The solution is fairly straight-forward: we read the request
body into an in-memory buffer in http-backend, freeing up
Apache, and then feed the data ourselves to upload-pack. But
there are a few important things to note:

1. We limit the in-memory buffer to prevent an obvious
denial-of-service attack. This is a new hard limit on
requests, but it's unlikely to come into play. The
default value is 10MB, which covers even the ridiculous
100,000-ref negotation in the included test (that
actually caps out just over 5MB). But it's configurable
on the off chance that you don't mind spending some
extra memory to make even ridiculous requests work.

2. We must take care only to buffer when we have to. For
pushes, the incoming packfile may be of arbitrary
size, and we should connect the input directly to
receive-pack. There's no deadlock problem here, though,
because we do not produce any output until the whole
packfile has been read.

For upload-pack's initial ref advertisement, we
similarly do not need to buffer. Even though we may
generate a lot of output, there is no request body at
all (i.e., it is a GET, not a POST).

[1] http://article.gmane.org/gmane.comp.version-control.git/269020

Test-adapted-from: Dennis Kaarsemaker <dennis@kaarsemaker.net>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

struct ref_lock: convert old_sha1 member to object_idMichael Haggerty Mon, 25 May 2015 18:39:22 +0000 (18:39 +0000)

struct ref_lock: convert old_sha1 member to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

warn_if_dangling_symref(): convert local variable ... Michael Haggerty Mon, 25 May 2015 18:39:21 +0000 (18:39 +0000)

warn_if_dangling_symref(): convert local variable "junk" to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

each_ref_fn_adapter(): remove adapterMichael Haggerty Mon, 25 May 2015 18:39:20 +0000 (18:39 +0000)

each_ref_fn_adapter(): remove adapter

All of the callers of the for_each_ref family of functions have now
been rewritten to work with object_ids, so this adapter is no longer
needed.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev_list_insert_ref(): remove unneeded argumentsMichael Haggerty Mon, 25 May 2015 18:39:19 +0000 (18:39 +0000)

rev_list_insert_ref(): remove unneeded arguments

Now that the function is not being used as an each_ref_sha1_fn, we can
delete the unused arguments in its signature.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev_list_insert_ref_oid(): new function, taking an... Michael Haggerty Mon, 25 May 2015 18:39:18 +0000 (18:39 +0000)

rev_list_insert_ref_oid(): new function, taking an object_oid

This function can be used with for_each_ref() without having to be
wrapped.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mark_complete(): remove unneeded argumentsMichael Haggerty Mon, 25 May 2015 18:39:17 +0000 (18:39 +0000)

mark_complete(): remove unneeded arguments

Now that the function is not being used as an each_ref_sha1_fn, we can
delete the unused arguments in its signature.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mark_complete_oid(): new function, taking an object_oidMichael Haggerty Mon, 25 May 2015 18:39:16 +0000 (18:39 +0000)

mark_complete_oid(): new function, taking an object_oid

This function can be used with for_each_ref() without having to be
wrapped.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

clear_marks(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:15 +0000 (18:39 +0000)

clear_marks(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mark_complete(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:14 +0000 (18:39 +0000)

mark_complete(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

send_ref(): convert local variable "peeled" to object_idMichael Haggerty Mon, 25 May 2015 18:39:13 +0000 (18:39 +0000)

send_ref(): convert local variable "peeled" to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

upload-pack: rewrite functions to take object_id argumentsMichael Haggerty Mon, 25 May 2015 18:39:12 +0000 (18:39 +0000)

upload-pack: rewrite functions to take object_id arguments

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

find_symref(): convert local variable "unused" to object_idMichael Haggerty Mon, 25 May 2015 18:39:11 +0000 (18:39 +0000)

find_symref(): convert local variable "unused" to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

find_symref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:10 +0000 (18:39 +0000)

find_symref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

write_one_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:09 +0000 (18:39 +0000)

write_one_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

write_refs_to_temp_dir(): convert local variable sha1... Michael Haggerty Mon, 25 May 2015 18:39:08 +0000 (18:39 +0000)

write_refs_to_temp_dir(): convert local variable sha1 to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule: rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:07 +0000 (18:39 +0000)

submodule: rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shallow: rewrite functions to take object_id argumentsMichael Haggerty Mon, 25 May 2015 18:39:06 +0000 (18:39 +0000)

shallow: rewrite functions to take object_id arguments

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

handle_one_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:05 +0000 (18:39 +0000)

handle_one_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_info_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:04 +0000 (18:39 +0000)

add_info_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

handle_one_reflog(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:03 +0000 (18:39 +0000)

handle_one_reflog(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

register_replace_ref(): rewrite to take an object_id... Michael Haggerty Mon, 25 May 2015 18:39:02 +0000 (18:39 +0000)

register_replace_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote: rewrite functions to take object_id argumentsMichael Haggerty Mon, 25 May 2015 18:39:01 +0000 (18:39 +0000)

remote: rewrite functions to take object_id arguments

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_one_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:39:00 +0000 (18:39 +0000)

add_one_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

string_list_add_one_ref(): rewrite to take an object_id... Michael Haggerty Mon, 25 May 2015 18:38:59 +0000 (18:38 +0000)

string_list_add_one_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_ref_decoration(): convert local variable original_s... Michael Haggerty Mon, 25 May 2015 18:38:58 +0000 (18:38 +0000)

add_ref_decoration(): convert local variable original_sha1 to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_ref_decoration(): rewrite to take an object_id... Michael Haggerty Mon, 25 May 2015 18:38:57 +0000 (18:38 +0000)

add_ref_decoration(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

show_head_ref(): convert local variable "unused" to... Michael Haggerty Mon, 25 May 2015 18:38:56 +0000 (18:38 +0000)

show_head_ref(): convert local variable "unused" to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

http-backend: rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:55 +0000 (18:38 +0000)

http-backend: rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

append_similar_ref(): rewrite to take an object_id... Michael Haggerty Mon, 25 May 2015 18:38:54 +0000 (18:38 +0000)

append_similar_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/show-ref: rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:53 +0000 (18:38 +0000)

builtin/show-ref: rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

show_ref(): convert local variable peeled to object_idMichael Haggerty Mon, 25 May 2015 18:38:52 +0000 (18:38 +0000)

show_ref(): convert local variable peeled to object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/show-ref: rewrite to use object_idMichael Haggerty Mon, 25 May 2015 18:38:51 +0000 (18:38 +0000)

builtin/show-ref: rewrite to use object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fsck: change functions to use object_idMichael Haggerty Mon, 25 May 2015 18:38:50 +0000 (18:38 +0000)

fsck: change functions to use object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cmd_show_branch(): fix error messageMichael Haggerty Mon, 25 May 2015 18:38:49 +0000 (18:38 +0000)

cmd_show_branch(): fix error message

We need to convert the SHA-1 to hexadecimal before printing it.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/show-branch: rewrite functions to work with... Michael Haggerty Mon, 25 May 2015 18:38:48 +0000 (18:38 +0000)

builtin/show-branch: rewrite functions to work with object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

append_one_rev(): rewrite to work with object_idMichael Haggerty Mon, 25 May 2015 18:38:47 +0000 (18:38 +0000)

append_one_rev(): rewrite to work with object_id

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/show-branch: rewrite functions to take object_i... Michael Haggerty Mon, 25 May 2015 18:38:46 +0000 (18:38 +0000)

builtin/show-branch: rewrite functions to take object_id arguments

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

append_matching_ref(): rewrite to take an object_id... Michael Haggerty Mon, 25 May 2015 18:38:45 +0000 (18:38 +0000)

append_matching_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

show_reference(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:44 +0000 (18:38 +0000)

show_reference(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/remote: rewrite functions to take object_id... Michael Haggerty Mon, 25 May 2015 18:38:43 +0000 (18:38 +0000)

builtin/remote: rewrite functions to take object_id arguments

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_branch_for_removal(): don't set "util" field of... Michael Haggerty Mon, 25 May 2015 18:38:42 +0000 (18:38 +0000)

add_branch_for_removal(): don't set "util" field of string_list entries

They were never used.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_branch_for_removal(): rewrite to take an object_id... Michael Haggerty Mon, 25 May 2015 18:38:41 +0000 (18:38 +0000)

add_branch_for_removal(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/reflog: rewrite ref functions to take an object... Michael Haggerty Mon, 25 May 2015 18:38:40 +0000 (18:38 +0000)

builtin/reflog: rewrite ref functions to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

show_ref_cb(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:39 +0000 (18:38 +0000)

show_ref_cb(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/pack-objects: rewrite to take an object_id... Michael Haggerty Mon, 25 May 2015 18:38:38 +0000 (18:38 +0000)

builtin/pack-objects: rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

name_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:37 +0000 (18:38 +0000)

name_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

grab_single_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:36 +0000 (18:38 +0000)

grab_single_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/fetch: rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:35 +0000 (18:38 +0000)

builtin/fetch: rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

get_name(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:34 +0000 (18:38 +0000)

get_name(): rewrite to take an object_id argument

Rewrite to take an object_id argument and convert the local variable
"peeled" object_id.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_pending_uninteresting_ref(): rewrite to take an... Michael Haggerty Mon, 25 May 2015 18:38:33 +0000 (18:38 +0000)

add_pending_uninteresting_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

append_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:32 +0000 (18:38 +0000)

append_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

register_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:31 +0000 (18:38 +0000)

register_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

handle_one_ref(): rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:30 +0000 (18:38 +0000)

handle_one_ref(): rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/rev-parse: rewrite to take an object_id argumentMichael Haggerty Mon, 25 May 2015 18:38:29 +0000 (18:38 +0000)

builtin/rev-parse: rewrite to take an object_id argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

each_ref_fn: change to take an object_id parameterMichael Haggerty Mon, 25 May 2015 18:38:28 +0000 (18:38 +0000)

each_ref_fn: change to take an object_id parameter

Change typedef each_ref_fn to take a "const struct object_id *oid"
parameter instead of "const unsigned char *sha1".

To aid this transition, implement an adapter that can be used to wrap
old-style functions matching the old typedef, which is now called
"each_ref_sha1_fn"), and make such functions callable via the new
interface. This requires the old function and its cb_data to be
wrapped in a "struct each_ref_fn_sha1_adapter", and that object to be
used as the cb_data for an adapter function, each_ref_fn_adapter().

This is an enormous diff, but most of it consists of simple,
mechanical changes to the sites that call any of the "for_each_ref"
family of functions. Subsequent to this change, the call sites can be
rewritten one by one to use the new interface.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refs: convert struct ref_entry to use struct object_idbrian m. carlson Mon, 25 May 2015 18:38:27 +0000 (18:38 +0000)

refs: convert struct ref_entry to use struct object_id

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: fix handling of multi-word P4EDITORLuke Diamand Tue, 19 May 2015 22:23:17 +0000 (23:23 +0100)

git-p4: fix handling of multi-word P4EDITOR

This teaches git-p4 to pass the P4EDITOR variable to the
shell for expansion, so that any command-line arguments are
correctly handled. Without this, git-p4 can only launch the
editor if P4EDITOR is solely the path to the binary, without
any arguments.

This also adjusts t9805, which relied on the previous behaviour.

Suggested-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: add failing test for P4EDITOR handlingLuke Diamand Tue, 19 May 2015 22:23:16 +0000 (23:23 +0100)

git-p4: add failing test for P4EDITOR handling

Add test case that git-p4 handles a setting of P4EDITOR
that takes arguments, e.g. "gvim -f". This currently fails.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

upload-pack: optionally allow fetching reachable sha1Fredrik Medley Thu, 21 May 2015 20:23:39 +0000 (22:23 +0200)

upload-pack: optionally allow fetching reachable sha1

With uploadpack.allowReachableSHA1InWant configuration option set on the
server side, "git fetch" can make a request with a "want" line that names
an object that has not been advertised (likely to have been obtained out
of band or from a submodule pointer). Only objects reachable from the
branch tips, i.e. the union of advertised branches and branches hidden by
transfer.hideRefs, will be processed. Note that there is an associated
cost of having to walk back the history to check the reachability.

This feature can be used when obtaining the content of a certain commit,
for which the sha1 is known, without the need of cloning the whole
repository, especially if a shallow fetch is used. Useful cases are e.g.
repositories containing large files in the history, fetching only the
needed data for a submodule checkout, when sharing a sha1 without telling
which exact branch it belongs to and in Gerrit, if you think in terms of
commits instead of change numbers. (The Gerrit case has already been
solved through allowTipSHA1InWant as every Gerrit change has a ref.)

Signed-off-by: Fredrik Medley <fredrik.medley@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>