gitweb.git
Add MirBSD support to the build system.Benny Siegert Tue, 31 Dec 2013 14:36:45 +0000 (14:36 +0000)

Add MirBSD support to the build system.

Add an entry into the table of supported OSes. Do not set _XOPEN_SOURCE
(contrary to OpenBSD) because that disables the u_short and u_long
typedefs, which are used unconditionally in various other header files.

Signed-off-by: Benny Siegert <bsiegert@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

replace info: rename 'full' to 'long' and clarify in... Christian Couder Sat, 28 Dec 2013 11:00:05 +0000 (12:00 +0100)

replace info: rename 'full' to 'long' and clarify in-code symbols

Enum names SHORT/MEDIUM/FULL were too broad to be descriptive. And
they clashed with built-in symbols on platforms like Windows.
Clarify by giving them REPLACE_FORMAT_ prefix.

Rename 'full' format in "git replace --format=<name>" to 'long', to
match others (i.e. 'short' and 'medium').

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Mon, 30 Dec 2013 20:27:01 +0000 (12:27 -0800)

Merge branch 'maint'

* maint:
for-each-ref: remove unused variable

for-each-ref: remove unused variableRamkumar Ramachandra Mon, 30 Dec 2013 16:28:55 +0000 (21:58 +0530)

for-each-ref: remove unused variable

No code ever used this symbol since the command was introduced at
9f613ddd (Add git-for-each-ref: helper for language bindings,
2006-09-15).

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

merge-base --octopus: reduce the result from get_octopu... Junio C Hamano Mon, 30 Dec 2013 19:58:54 +0000 (11:58 -0800)

merge-base --octopus: reduce the result from get_octopus_merge_bases()

Scripts that use "merge-base --octopus" could do the reducing
themselves, but most of them are expected to want to get the reduced
results without having to do any work themselves.

Tests are taken from a message by Василий Макаров
<einmalfel@gmail.com>

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

We might want to vet the existing callers of the underlying
get_octopus_merge_bases() and find out if _all_ of them are doing
anything extra (like deduping) because the machinery can return
duplicate results. And if that is the case, then we may want to
move the dedupling down the callchain instead of having it here.

merge-base: separate "--independent" codepath into... Junio C Hamano Mon, 30 Dec 2013 19:37:49 +0000 (11:37 -0800)

merge-base: separate "--independent" codepath into its own helper

It piggybacks on an unrelated handle_octopus() function only because
there are some similarities between the way they need to preprocess
their input and output their result. There is nothing similar in
the true logic between these two operations.

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

Remove the line length limit for graft filesJohannes Schindelin Fri, 27 Dec 2013 20:49:57 +0000 (21:49 +0100)

Remove the line length limit for graft files

Support for grafts predates Git's strbuf, and hence it is understandable
that there was a hard-coded line length limit of 1023 characters (which
was chosen a bit awkwardly, given that it is *exactly* one byte short of
aligning with the 41 bytes occupied by a commit name and the following
space or new-line character).

While regular commit histories hardly win comprehensibility in general
if they merge more than twenty-two branches in one go, it is not Git's
business to limit grafts in such a way.

In this particular developer's case, the use case that requires
substantially longer graft lines to be supported is the visualization of
the commits' order implied by their changes: commits are considered to
have an implicit relationship iff exchanging them in an interactive
rebase would result in merge conflicts.

Thusly implied branches tend to be very shallow in general, and the
resulting thicket of implied branches is usually very wide; It is
actually quite common that *most* of the commits in a topic branch have
not even one implied parent, so that a final merge commit has about as
many implied parents as there are commits in said branch.

[jc: squashed in tests by Jonathan]

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge git://git.bogomips.org/git-svnJunio C Hamano Fri, 27 Dec 2013 22:58:35 +0000 (14:58 -0800)

Merge git://git.bogomips.org/git-svn

* git://git.bogomips.org/git-svn:
git-svn: workaround for a bug in svn serf backend

Merge branch 'fc/remote-helper-fixes'Junio C Hamano Fri, 27 Dec 2013 22:58:25 +0000 (14:58 -0800)

Merge branch 'fc/remote-helper-fixes'

* fc/remote-helper-fixes:
remote-hg: test 'shared_path' in a moved clone
remote-hg: add tests for special filenames
remote-hg: fix 'shared path' path
remote-helpers: add extra safety checks
remote-hg: avoid buggy strftime()

Merge branch 'js/gnome-keyring'Junio C Hamano Fri, 27 Dec 2013 22:58:23 +0000 (14:58 -0800)

Merge branch 'js/gnome-keyring'

Style fix.

* js/gnome-keyring:
contrib/git-credential-gnome-keyring.c: small stylistic cleanups

Merge branch 'jk/name-pack-after-byte-representation'Junio C Hamano Fri, 27 Dec 2013 22:58:19 +0000 (14:58 -0800)

Merge branch 'jk/name-pack-after-byte-representation'

Two packfiles that contain the same set of objects have
traditionally been named identically, but that made repacking a
repository that is already fully packed without any cruft with a
different packing parameter cumbersome. Update the convention to
name the packfile after the bytestream representation of the data,
not after the set of objects in it.

* jk/name-pack-after-byte-representation:
pack-objects doc: treat output filename as opaque
pack-objects: name pack files after trailer hash
sha1write: make buffer const-correct

Merge branch 'tg/diff-no-index-refactor'Junio C Hamano Fri, 27 Dec 2013 22:58:17 +0000 (14:58 -0800)

Merge branch 'tg/diff-no-index-refactor'

"git diff ../else/where/A ../else/where/B" when ../else/where is
clearly outside the repository, and "git diff --no-index A B", do
not have to look at the index at all, but we used to read the index
unconditionally.

* tg/diff-no-index-refactor:
diff: avoid some nesting
diff: add test for --no-index executed outside repo
diff: don't read index when --no-index is given
diff: move no-index detection to builtin/diff.c

Merge branch 'zk/difftool-counts'Junio C Hamano Fri, 27 Dec 2013 22:58:13 +0000 (14:58 -0800)

Merge branch 'zk/difftool-counts'

Show the total number of paths and the number of paths shown so far
when "git difftool" prompts to launch an external diff tool, which
would give users some sense of progress.

* zk/difftool-counts:
diff.c: fix some recent whitespace style violations
difftool: display the number of files in the diff queue in the prompt

Merge branch 'jk/cat-file-regression-fix'Junio C Hamano Fri, 27 Dec 2013 22:58:11 +0000 (14:58 -0800)

Merge branch 'jk/cat-file-regression-fix'

"git cat-file --batch=", an admittedly useless command, did not
behave very well.

* jk/cat-file-regression-fix:
cat-file: handle --batch format with missing type/size
cat-file: pass expand_data to print_object_or_die

Merge branch 'jk/pull-rebase-using-fork-point'Junio C Hamano Fri, 27 Dec 2013 22:58:08 +0000 (14:58 -0800)

Merge branch 'jk/pull-rebase-using-fork-point'

* jk/pull-rebase-using-fork-point:
rebase: use reflog to find common base with upstream
pull: use merge-base --fork-point when appropriate

Merge branch 'jk/rev-parse-double-dashes'Junio C Hamano Fri, 27 Dec 2013 22:58:01 +0000 (14:58 -0800)

Merge branch 'jk/rev-parse-double-dashes'

"git rev-parse <revs> -- <paths>" did not implement the usual
disambiguation rules the commands in the "git log" family used in
the same way.

* jk/rev-parse-double-dashes:
rev-parse: be more careful with munging arguments
rev-parse: correctly diagnose revision errors before "--"

Merge branch 'jc/push-refmap'Junio C Hamano Fri, 27 Dec 2013 22:57:50 +0000 (14:57 -0800)

Merge branch 'jc/push-refmap'

Make "git push origin master" update the same ref that would be
updated by our 'master' when "git push origin" (no refspecs) is run
while the 'master' branch is checked out, which makes "git push"
more symmetric to "git fetch" and more usable for the triangular
workflow.

* jc/push-refmap:
push: also use "upstream" mapping when pushing a single ref
push: use remote.$name.push as a refmap
builtin/push.c: use strbuf instead of manual allocation

git-svn: workaround for a bug in svn serf backendRoman Kagan Fri, 27 Dec 2013 08:05:15 +0000 (12:05 +0400)

git-svn: workaround for a bug in svn serf backend

Subversion serf backend in versions 1.8.5 and below has a bug(*) that the
function creating the descriptor of a file change -- add_file() --
doesn't make a copy of its third argument when storing it on the
returned descriptor. As a result, by the time this field is used (in
transactions of file copying or renaming) it may well be released, and
the memory reused.

One of its possible manifestations is the svn assertion triggering on an
invalid path, with a message

svn_fspath__skip_ancestor: Assertion
`svn_fspath__is_canonical(child_fspath)' failed.

This patch works around this bug, by storing the value to be passed as
the third argument to add_file() in a local variable with the same scope
as the file change descriptor, making sure their lifetime is the same.

* [ew: fixed in Subversion r1553376 as noted by Jonathan Nieder]

Cc: Benjamin Pabst <benjamin.pabst85@gmail.com>
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Roman Kagan <rkagan@mail.ru>

commit.c: make "tree" a const pointer in commit_tree*()Nguyễn Thái Ngọc Duy Sun, 22 Dec 2013 02:56:41 +0000 (09:56 +0700)

commit.c: make "tree" a const pointer in commit_tree*()

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

cat-file: provide %(deltabase) batch formatJeff King Sat, 21 Dec 2013 14:25:22 +0000 (09:25 -0500)

cat-file: provide %(deltabase) batch format

It can be useful for debugging or analysis to see which
objects are stored as delta bases on top of others. This
information is available by running `git verify-pack`, but
that is extremely expensive (and is harder than necessary to
parse).

Instead, let's make it available as a cat-file query format,
which makes it fast and simple to get the bases for a subset
of the objects.

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

sha1_object_info_extended: provide delta base sha1sJeff King Sat, 21 Dec 2013 14:24:20 +0000 (09:24 -0500)

sha1_object_info_extended: provide delta base sha1s

A caller of sha1_object_info_extended technically has enough
information to determine the base sha1 from the results of
the call. It knows the pack, offset, and delta type of the
object, which is sufficient to find the base.

However, the functions to do so are not publicly available,
and the code itself is intimate enough with the pack details
that it should be abstracted away. We could add a public
helper to allow callers to query the delta base separately,
but it is simpler and slightly more efficient to optionally
grab it along with the rest of the object_info data.

For cases where the object is not stored as a delta, we
write the null sha1 into the query field. A careful caller
could check "oi.whence == OI_PACKED && oi.u.packed.is_delta"
before looking at the base sha1, but using the null sha1
provides a simple alternative (and gives a better sanity
check for a non-careful caller than simply returning random
bytes).

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

do not pretend sha1write returns errorsJeff King Sat, 21 Dec 2013 14:13:25 +0000 (09:13 -0500)

do not pretend sha1write returns errors

The sha1write function returns an int, but it will always be
"0". The failure-prone parts of the function happen in the
"flush" callback, which cannot pass an error back to us. So
we just end up calling die() during the flush.

Let's just drop the return value altogether, as it only
confuses callers into thinking that it might be useful.

Only one call site actually checked the return value. We can
drop that check, since it just led to a die() anyway.

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

add: don't complain when adding empty project rootNguyễn Thái Ngọc Duy Mon, 23 Dec 2013 09:02:41 +0000 (16:02 +0700)

add: don't complain when adding empty project root

This behavior was added in 07d7bed (add: don't complain when adding
empty project root - 2009-04-28) then broken by 84b8b5d (remove
match_pathspec() in favor of match_pathspec_depth() -
2013-07-14). Reinstate it.

Noticed-by: Thomas Ferris Nicolaisen <tfnico@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: test 'shared_path' in a moved cloneAntoine Pelisse Mon, 23 Dec 2013 20:23:43 +0000 (21:23 +0100)

remote-hg: test 'shared_path' in a moved clone

Since e71d1378 (remote-hg: fix 'shared path' path, 2013-12-07),
Mercurial 'shared_path' file is correctly updated whenever a clone is
moved. Make sure it keeps working, especially as this is depending on a
private Mercurial file.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log: properly handle decorations with chained tagsbrian m. carlson Tue, 17 Dec 2013 04:28:21 +0000 (04:28 +0000)

log: properly handle decorations with chained tags

git log did not correctly handle decorations when a tag object referenced
another tag object that was no longer a ref, such as when the second tag was
deleted. The commit would not be decorated correctly because parse_object had
not been called on the second tag and therefore its tagged field had not been
filled in, resulting in none of the tags being associated with the relevant
commit.

Call parse_object to fill in this field if it is absent so that the chain of
tags can be dereferenced and the commit can be properly decorated. Include
tests as well to prevent future regressions.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

daemon: be strict at parsing parameters --[no-]informat... Nguyễn Thái Ngọc Duy Fri, 20 Dec 2013 10:53:52 +0000 (17:53 +0700)

daemon: be strict at parsing parameters --[no-]informative-errors

Use strcmp() instead of starts_with()/!prefixcmp() to stop accepting
--informative-errors-just-a-little

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

diff: add diff.orderfile configuration variableSamuel Bronson Thu, 19 Dec 2013 00:08:12 +0000 (19:08 -0500)

diff: add diff.orderfile configuration variable

diff.orderfile acts as a default for the -O command line option.

[sb: split up aw's original patch; rework tests and docs, treat option
as pathname]

Signed-off-by: Anders Waldenborg <anders@0x63.nu>
Signed-off-by: Samuel Bronson <naesten@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: let "git diff -O" read orderfile from any file... Samuel Bronson Thu, 19 Dec 2013 00:08:11 +0000 (19:08 -0500)

diff: let "git diff -O" read orderfile from any file and fail properly

The -O flag really shouldn't silently fail to do anything when given
a path that it can't read from.

However, it should be able to read from un-mmappable files, such as:

* pipes/fifos

* /dev/null: It's a character device (at least on Linux)

* ANY empty file:

Quoting Linux mmap(2), "SUSv3 specifies that mmap() should fail if
length is 0. However, in kernels before 2.6.12, mmap() succeeded in
this case: no mapping was created and the call returned addr. Since
kernel 2.6.12, mmap() fails with the error EINVAL for this case."

We especially want "-O/dev/null" to work, since we will be documenting
it as the way to cancel "diff.orderfile" when we add that.

(Note: "-O/dev/null" did have the right effect, since the existing error
handling essentially worked out to "silently ignore the orderfile". But
this was probably more coincidence than anything else.)

So, lets toss all of that logic to get the file mmapped and just use
strbuf_read_file() instead, which gives us decent error handling
practically for free.

Signed-off-by: Samuel Bronson <naesten@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4056: add new tests for "git diff -O"Samuel Bronson Thu, 19 Dec 2013 00:08:10 +0000 (19:08 -0500)

t4056: add new tests for "git diff -O"

Adapted from $gmane/236427 by Anders Waldenborg, "diff: Add
diff.orderfile configuration variable".

Signed-off-by: Anders Waldenborg <anders@0x63.nu>
Signed-off-by: Samuel Bronson <naesten@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/prune.c: use strbuf to avoid having to worry... Jeff King Tue, 17 Dec 2013 23:22:31 +0000 (18:22 -0500)

builtin/prune.c: use strbuf to avoid having to worry about PATH_MAX

While at it, rename prune_tmp_object(), which used to be a helper to
remove temporary files that were created to become loose object
files, to prune_tmp_file(), as the function is also used to remove
any random cruft whose name begins with tmp_ directly in .git/object
or .git/object/pack directories these days.

Noticed-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

get_max_fd_limit(): fall back to OPEN_MAX upon getrlimi... Junio C Hamano Wed, 18 Dec 2013 22:59:12 +0000 (14:59 -0800)

get_max_fd_limit(): fall back to OPEN_MAX upon getrlimit/sysconf failure

On broken systems where RLIMIT_NOFILE is visible by the compliers
but underlying getrlimit() system call does not behave, we used to
simply die() when we are trying to decide how many file descriptors
to allocate for keeping packfiles open. Instead, allow the fallback
codepath to take over when we get such a failure from getrlimit().

The same issue exists with _SC_OPEN_MAX and sysconf(); restructure
the code in a similar way to prepare for a broken sysconf() as well.

Noticed-by: Joey Hess <joey@kitenet.net>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

docs: add filter-branch notes on The BFGRoberto Tyley Wed, 18 Dec 2013 14:25:16 +0000 (14:25 +0000)

docs: add filter-branch notes on The BFG

The BFG is a tool specifically designed for the task of removing
unwanted data from Git repository history - a common use-case for which
git-filter-branch has been the traditional workhorse.

It's beneficial to let users know that filter-branch has an alternative
here:

* speed : The BFG is 10-50x faster
http://rtyley.github.io/bfg-repo-cleaner/#speed
* complexity of configuration : filter-branch is a very flexible tool,
but demands very careful usage in order to get the desired results
http://rtyley.github.io/bfg-repo-cleaner/#examples

Obviously, filter-branch has it's advantages too - it permits very
complex rewrites, and doesn't require a JVM - but for the common
use-case of deleting unwanted data, it's helpful to users to be aware
that an alternative exists.

The BFG was released under the GPL in February 2013, and has since seen
widespread production use (The Guardian, RedHat, Google, UK Government
Digital Service), been tested against large repos (~300K commits, ~5GB
packfiles) and received significant positive feedback from users:

http://rtyley.github.io/bfg-repo-cleaner/#feedback

Signed-off-by: Roberto Tyley <roberto.tyley@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with 1.8.5.2Junio C Hamano Tue, 17 Dec 2013 22:12:17 +0000 (14:12 -0800)

Sync with 1.8.5.2

* maint:
Git 1.8.5.2
cmd_repack(): remove redundant local variable "nr_packs"

Update draft release notes to 1.9Junio C Hamano Tue, 17 Dec 2013 22:05:50 +0000 (14:05 -0800)

Update draft release notes to 1.9

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

Merge branch 'kn/gitweb-extra-branch-refs'Junio C Hamano Tue, 17 Dec 2013 20:03:33 +0000 (12:03 -0800)

Merge branch 'kn/gitweb-extra-branch-refs'

Allow gitweb to be configured to show refs out of refs/heads/ as if
they were branches.

* kn/gitweb-extra-branch-refs:
gitweb: Denote non-heads, non-remotes branches
gitweb: Add a feature for adding more branch refs
gitweb: Return 1 on validation success instead of passed input
gitweb: Move check-ref-format code into separate function

Merge branch 'tb/clone-ssh-with-colon-for-port'Junio C Hamano Tue, 17 Dec 2013 20:03:31 +0000 (12:03 -0800)

Merge branch 'tb/clone-ssh-with-colon-for-port'

Be more careful when parsing remote repository URL given in the
scp-style host:path notation.

* tb/clone-ssh-with-colon-for-port:
git_connect(): use common return point
connect.c: refactor url parsing
git_connect(): refactor the port handling for ssh
git fetch: support host:/~repo
t5500: add test cases for diag-url
git fetch-pack: add --diag-url
git_connect: factor out discovery of the protocol and its parts
git_connect: remove artificial limit of a remote command
t5601: add tests for ssh
t5601: remove clear_ssh, refactor setup_ssh_wrapper

Merge branch 'nd/transport-positive-depth-only'Junio C Hamano Tue, 17 Dec 2013 20:03:29 +0000 (12:03 -0800)

Merge branch 'nd/transport-positive-depth-only'

"git fetch --depth=0" was a no-op, and was silently
ignored. Diagnose it as an error.

* nd/transport-positive-depth-only:
clone,fetch: catch non positive --depth option value

Merge branch 'cc/starts-n-ends-with'Junio C Hamano Tue, 17 Dec 2013 19:47:35 +0000 (11:47 -0800)

Merge branch 'cc/starts-n-ends-with'

Remove a few duplicate implementations of prefix/suffix comparison
functions, and rename them to starts_with and ends_with.

* cc/starts-n-ends-with:
replace {pre,suf}fixcmp() with {starts,ends}_with()
strbuf: introduce starts_with() and ends_with()
builtin/remote: remove postfixcmp() and use suffixcmp() instead
environment: normalize use of prefixcmp() by removing " != 0"

Merge branch 'jl/commit-v-strip-marker'Junio C Hamano Tue, 17 Dec 2013 19:47:18 +0000 (11:47 -0800)

Merge branch 'jl/commit-v-strip-marker'

"git commit -v" appends the patch to the log message before
editing, and then removes the patch when the editor returned
control. However, the patch was not stripped correctly when the
first modified path was a submodule.

* jl/commit-v-strip-marker:
commit -v: strip diffs and submodule shortlogs from the commit message

Merge branch 'tr/send-email-ssl'Junio C Hamano Tue, 17 Dec 2013 19:47:12 +0000 (11:47 -0800)

Merge branch 'tr/send-email-ssl'

SSL-related options were not passed correctly to underlying socket
layer in "git send-email".

* tr/send-email-ssl:
send-email: set SSL options through IO::Socket::SSL::set_client_defaults
send-email: --smtp-ssl-cert-path takes an argument
send-email: pass Debug to Net::SMTP::SSL::new

Merge branch 'nd/gettext-vsnprintf'Junio C Hamano Tue, 17 Dec 2013 19:47:10 +0000 (11:47 -0800)

Merge branch 'nd/gettext-vsnprintf'

* nd/gettext-vsnprintf:
gettext.c: detect the vsnprintf bug at runtime

Merge branch 'mm/mv-file-to-no-such-dir-with-slash'Junio C Hamano Tue, 17 Dec 2013 19:47:08 +0000 (11:47 -0800)

Merge branch 'mm/mv-file-to-no-such-dir-with-slash'

* mm/mv-file-to-no-such-dir-with-slash:
mv: let 'git mv file no-such-dir/' error out

Merge branch 'nd/remove-opt-boolean'Junio C Hamano Tue, 17 Dec 2013 19:47:05 +0000 (11:47 -0800)

Merge branch 'nd/remove-opt-boolean'

* nd/remove-opt-boolean:
parse-options: remove OPT_BOOLEAN

Merge branch 'bc/doc-merge-no-op-revert'Junio C Hamano Tue, 17 Dec 2013 19:47:00 +0000 (11:47 -0800)

Merge branch 'bc/doc-merge-no-op-revert'

* bc/doc-merge-no-op-revert:
Documentation: document pitfalls with 3-way merge

Merge branch 'fc/trivial'Junio C Hamano Tue, 17 Dec 2013 19:46:32 +0000 (11:46 -0800)

Merge branch 'fc/trivial'

* fc/trivial:
remote: fix status with branch...rebase=preserve
fetch: add missing documentation
t: trivial whitespace cleanups
abspath: trivial style fix

Merge branch 'jk/t5000-gzip-simplify'Junio C Hamano Tue, 17 Dec 2013 19:46:29 +0000 (11:46 -0800)

Merge branch 'jk/t5000-gzip-simplify'

Test fix.

* jk/t5000-gzip-simplify:
t5000: simplify gzip prerequisite checks

Merge branch 'kb/doc-exclude-directory-semantics'Junio C Hamano Tue, 17 Dec 2013 19:44:18 +0000 (11:44 -0800)

Merge branch 'kb/doc-exclude-directory-semantics'

* kb/doc-exclude-directory-semantics:
gitignore.txt: clarify recursive nature of excluded directories

Git 1.8.5.2 v1.8.5.2Junio C Hamano Tue, 17 Dec 2013 19:42:12 +0000 (11:42 -0800)

Git 1.8.5.2

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

Merge branch 'rs/doc-submitting-patches' into maintJunio C Hamano Tue, 17 Dec 2013 19:38:23 +0000 (11:38 -0800)

Merge branch 'rs/doc-submitting-patches' into maint

* rs/doc-submitting-patches:
SubmittingPatches: document how to handle multiple patches

Merge branch 'tr/doc-git-cherry' into maintJunio C Hamano Tue, 17 Dec 2013 19:37:55 +0000 (11:37 -0800)

Merge branch 'tr/doc-git-cherry' into maint

* tr/doc-git-cherry:
Documentation: revamp git-cherry(1)

Merge branch 'nd/glossary-content-pathspec-markup'... Junio C Hamano Tue, 17 Dec 2013 19:36:54 +0000 (11:36 -0800)

Merge branch 'nd/glossary-content-pathspec-markup' into maint

* nd/glossary-content-pathspec-markup:
glossary-content.txt: fix documentation of "**" patterns

Merge branch 'jj/doc-markup-gitcli' into maintJunio C Hamano Tue, 17 Dec 2013 19:36:38 +0000 (11:36 -0800)

Merge branch 'jj/doc-markup-gitcli' into maint

* jj/doc-markup-gitcli:
Documentation/gitcli.txt: fix double quotes

Merge branch 'jj/doc-markup-hints-in-coding-guidelines... Junio C Hamano Tue, 17 Dec 2013 19:36:10 +0000 (11:36 -0800)

Merge branch 'jj/doc-markup-hints-in-coding-guidelines' into maint

* jj/doc-markup-hints-in-coding-guidelines:
State correct usage of literal examples in man pages in the coding standards

Merge branch 'jj/log-doc' into maintJunio C Hamano Tue, 17 Dec 2013 19:35:41 +0000 (11:35 -0800)

Merge branch 'jj/log-doc' into maint

* jj/log-doc:
Documentation/git-log.txt: mark-up fix and minor rephasing
Documentation/git-log: update "--log-size" description

Merge branch 'jj/rev-list-options-doc' into maintJunio C Hamano Tue, 17 Dec 2013 19:34:41 +0000 (11:34 -0800)

Merge branch 'jj/rev-list-options-doc' into maint

* jj/rev-list-options-doc:
Documentation/rev-list-options.txt: fix some grammatical issues and typos
Documentation/rev-list-options.txt: fix mark-up

Merge branch 'tb/doc-fetch-pack-url' into maintJunio C Hamano Tue, 17 Dec 2013 19:34:24 +0000 (11:34 -0800)

Merge branch 'tb/doc-fetch-pack-url' into maint

* tb/doc-fetch-pack-url:
git-fetch-pack uses URLs like git-fetch

Merge branch 'mi/typofixes' into maintJunio C Hamano Tue, 17 Dec 2013 19:34:01 +0000 (11:34 -0800)

Merge branch 'mi/typofixes' into maint

* mi/typofixes:
contrib: typofixes
Documentation/technical/http-protocol.txt: typofixes
typofixes: fix misspelt comments

Merge branch 'jh/loose-object-dirs-creation-race' into... Junio C Hamano Tue, 17 Dec 2013 19:32:50 +0000 (11:32 -0800)

Merge branch 'jh/loose-object-dirs-creation-race' into maint

Two processes creating loose objects at the same time could have
failed unnecessarily when the name of their new objects started
with the same byte value, due to a race condition.

* jh/loose-object-dirs-creation-race:
sha1_file.c:create_tmpfile(): Fix race when creating loose object dirs

Merge branch 'jk/two-way-merge-corner-case-fix' into... Junio C Hamano Tue, 17 Dec 2013 19:32:04 +0000 (11:32 -0800)

Merge branch 'jk/two-way-merge-corner-case-fix' into maint

"git am --abort" sometimes complained about not being able to write
a tree with an 0{40} object in it.

* jk/two-way-merge-corner-case-fix:
t1005: add test for "read-tree --reset -u A B"
t1005: reindent
unpack-trees: fix "read-tree -u --reset A B" with conflicted index

Merge branch 'sb/sha1-loose-object-info-check-existence... Junio C Hamano Tue, 17 Dec 2013 19:31:18 +0000 (11:31 -0800)

Merge branch 'sb/sha1-loose-object-info-check-existence' into maint

"git cat-file --batch-check=ok" did not check the existence of the
named object.

* sb/sha1-loose-object-info-check-existence:
sha1_loose_object_info(): do not return success on missing object

Merge branch 'nd/magic-pathspec' into maintJunio C Hamano Tue, 17 Dec 2013 19:21:34 +0000 (11:21 -0800)

Merge branch 'nd/magic-pathspec' into maint

"git diff -- ':(icase)makefile'" was unnecessarily rejected at the
command line parser.

* nd/magic-pathspec:
diff: restrict pathspec limitations to diff b/f case only

cmd_repack(): remove redundant local variable "nr_packs"Michael Haggerty Tue, 17 Dec 2013 13:43:58 +0000 (14:43 +0100)

cmd_repack(): remove redundant local variable "nr_packs"

Its value is the same as the number of entries in the "names"
string_list, so just use "names.nr" in its place.

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

prune-packed: use strbuf to avoid having to worry about... Junio C Hamano Tue, 17 Dec 2013 18:43:30 +0000 (10:43 -0800)

prune-packed: use strbuf to avoid having to worry about PATH_MAX

A/very/long/path/to/.git that becomes exactly PATH_MAX bytes long
after suffixed with /objects/??/??38-hex??, would have overflown
the on-stack pathname[] buffer.

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

Prevent buffer overflows when path is too longAntoine Pelisse Sat, 14 Dec 2013 11:31:16 +0000 (12:31 +0100)

Prevent buffer overflows when path is too long

Some buffers created with PATH_MAX length are not checked when being
written, and can overflow if PATH_MAX is not big enough to hold the
path.

Replace those buffers by strbufs so that their size is automatically
grown if necessary. They are created as static local variables to avoid
reallocating memory on each call. Note that prefix_filename() returns
this static buffer so each callers should copy or use the string
immediately (this is currently true).

Reported-by: Wataru Noguchi <wnoguchi.0727@gmail.com>
Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: avoid some nestingThomas Gummerer Mon, 16 Dec 2013 20:19:24 +0000 (21:19 +0100)

diff: avoid some nesting

Avoid some nesting in builtin/diff.c, to make the code easier to read.
There are no functional changes.

Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: add test for --no-index executed outside repoThomas Gummerer Mon, 16 Dec 2013 20:19:23 +0000 (21:19 +0100)

diff: add test for --no-index executed outside repo

470faf9 diff: move no-index detection to builtin/diff.c breaks the error
message for "git diff --no-index", when the command is executed outside
of a git repository and the wrong number of arguments are given. 6df5762
diff: don't read index when --no-index is given fixes the problem.

Add a test to guard against similar breakages in the future.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff.c: fix some recent whitespace style violationsJeff King Mon, 16 Dec 2013 20:02:21 +0000 (15:02 -0500)

diff.c: fix some recent whitespace style violations

These were introduced by ee7fb0b.

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

pack-objects doc: treat output filename as opaqueJeff King Mon, 16 Dec 2013 19:19:33 +0000 (11:19 -0800)

pack-objects doc: treat output filename as opaque

After 1190a1a (pack-objects: name pack files after trailer hash,
2013-12-05), the SHA-1 used to determine the filename is calculated
differently. Update the documentation to not guarantee anything more
than that the SHA-1 depends on the pack content somehow.

Hopefully this will discourage readers from depending on the old or
the new calculation.

Reported-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/git-credential-gnome-keyring.c: small stylistic... John Szakmeister Sat, 14 Dec 2013 11:21:26 +0000 (06:21 -0500)

contrib/git-credential-gnome-keyring.c: small stylistic cleanups

Signed-off-by: John Szakmeister <john@szakmeister.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Felipe Contreras <felipe.contreras@gmail.com>

Update draft release notes to 1.9Junio C Hamano Thu, 12 Dec 2013 22:24:39 +0000 (14:24 -0800)

Update draft release notes to 1.9

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

Merge branch 'jn/scripts-updates'Junio C Hamano Thu, 12 Dec 2013 22:22:59 +0000 (14:22 -0800)

Merge branch 'jn/scripts-updates'

* jn/scripts-updates:
remove #!interpreter line from shell libraries
test: replace shebangs with descriptions in shell libraries
test: make FILEMODE a lazy prereq
contrib: remove git-p4import
mark contributed hooks executable
mark perl test scripts executable
mark Windows build scripts executable

Merge branch 'cn/thin-push-capability'Junio C Hamano Thu, 12 Dec 2013 22:20:32 +0000 (14:20 -0800)

Merge branch 'cn/thin-push-capability'

Allow receive-pack to insist on receiving a fat pack from "git
push" clients.

* cn/thin-push-capability:
send-pack: don't send a thin pack to a server which doesn't support it

Merge branch 'jk/remove-deprecated'Junio C Hamano Thu, 12 Dec 2013 22:18:33 +0000 (14:18 -0800)

Merge branch 'jk/remove-deprecated'

* jk/remove-deprecated:
stop installing git-tar-tree link
peek-remote: remove deprecated alias of ls-remote
lost-found: remove deprecated command
tar-tree: remove deprecated command
repo-config: remove deprecated alias for "git config"

Merge branch 'tr/commit-slab-cleanup'Junio C Hamano Thu, 12 Dec 2013 22:18:31 +0000 (14:18 -0800)

Merge branch 'tr/commit-slab-cleanup'

* tr/commit-slab-cleanup:
commit-slab: sizeof() the right type in xrealloc
commit-slab: declare functions "static inline"
commit-slab: document clear_$slabname()

Merge branch 'rs/doc-submitting-patches'Junio C Hamano Thu, 12 Dec 2013 22:18:29 +0000 (14:18 -0800)

Merge branch 'rs/doc-submitting-patches'

* rs/doc-submitting-patches:
SubmittingPatches: document how to handle multiple patches

Merge branch 'tr/doc-git-cherry'Junio C Hamano Thu, 12 Dec 2013 22:18:23 +0000 (14:18 -0800)

Merge branch 'tr/doc-git-cherry'

* tr/doc-git-cherry:
Documentation: revamp git-cherry(1)

Merge branch 'cl/p4-use-diff-tree'Junio C Hamano Thu, 12 Dec 2013 22:18:20 +0000 (14:18 -0800)

Merge branch 'cl/p4-use-diff-tree'

* cl/p4-use-diff-tree:
git p4: Use git diff-tree instead of format-patch

Merge branch 'tr/config-multivalue-lift-max'Junio C Hamano Thu, 12 Dec 2013 22:18:09 +0000 (14:18 -0800)

Merge branch 'tr/config-multivalue-lift-max'

* tr/config-multivalue-lift-max:
config: arbitrary number of matches for --unset and --replace-all

Merge branch 'mh/fetch-tags-in-addition-to-normal-refs'Junio C Hamano Thu, 12 Dec 2013 22:14:10 +0000 (14:14 -0800)

Merge branch 'mh/fetch-tags-in-addition-to-normal-refs'

The "--tags" option to "git fetch" used to be literally a synonym to
a "refs/tags/*:refs/tags/*" refspec, which meant that (1) as an
explicit refspec given from the command line, it silenced the lazy
"git fetch" default that is configured, and (2) also as an explicit
refspec given from the command line, it interacted with "--prune"
to remove any tag that the remote we are fetching from does not
have.

This demotes it to an option; with it, we fetch all tags in
addition to what would be fetched without the option, and it does
not interact with the decision "--prune" makes to see what
remote-tracking refs the local has are missing the remote
counterpart.

* mh/fetch-tags-in-addition-to-normal-refs: (23 commits)
fetch: improve the error messages emitted for conflicting refspecs
handle_duplicate(): mark error message for translation
ref_remote_duplicates(): extract a function handle_duplicate()
ref_remove_duplicates(): simplify loop logic
t5536: new test of refspec conflicts when fetching
ref_remove_duplicates(): avoid redundant bisection
git-fetch.txt: improve description of tag auto-following
fetch-options.txt: simplify ifdef/ifndef/endif usage
fetch, remote: properly convey --no-prune options to subprocesses
builtin/remote.c:update(): use struct argv_array
builtin/remote.c: reorder function definitions
query_refspecs(): move some constants out of the loop
fetch --prune: prune only based on explicit refspecs
fetch --tags: fetch tags *in addition to* other stuff
fetch: only opportunistically update references based on command line
get_expanded_map(): avoid memory leak
get_expanded_map(): add docstring
builtin/fetch.c: reorder function definitions
get_ref_map(): rename local variables
api-remote.txt: correct section "struct refspec"
...

gitweb: Denote non-heads, non-remotes branchesKrzesimir Nowak Wed, 11 Dec 2013 11:54:44 +0000 (12:54 +0100)

gitweb: Denote non-heads, non-remotes branches

Given two branches residing in refs/heads/master and refs/wip/feature
the list-of-branches view will present them in following way:
master
feature (wip)

When getting a snapshot of a 'feature' branch, the tarball is going to
have name like 'project-wip-feature-<short hash>.tgz'.

Signed-off-by: Krzesimir Nowak <krzesimir@endocode.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Add a feature for adding more branch refsKrzesimir Nowak Wed, 11 Dec 2013 11:54:43 +0000 (12:54 +0100)

gitweb: Add a feature for adding more branch refs

Allow extra-branch-refs feature to tell gitweb to show refs from
additional hierarchies in addition to branches in the list-of-branches
view.

Signed-off-by: Krzesimir Nowak <krzesimir@endocode.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Return 1 on validation success instead of passe... Krzesimir Nowak Wed, 11 Dec 2013 11:54:42 +0000 (12:54 +0100)

gitweb: Return 1 on validation success instead of passed input

Users of validate_* passing "0" might get failures on correct name
because of coercion of "0" to false in code like:
die_error(500, "invalid ref") unless (check_ref_format ("0"));

Also, the validate_foo subs are renamed to is_valid_foo.

Signed-off-by: Krzesimir Nowak <krzesimir@endocode.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Move check-ref-format code into separate functionKrzesimir Nowak Wed, 11 Dec 2013 11:54:41 +0000 (12:54 +0100)

gitweb: Move check-ref-format code into separate function

This check will be used in more than one place later.

Signed-off-by: Krzesimir Nowak <krzesimir@endocode.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: don't read index when --no-index is givenThomas Gummerer Wed, 11 Dec 2013 09:58:43 +0000 (10:58 +0100)

diff: don't read index when --no-index is given

git diff --no-index ... currently reads the index, during setup, when
calling gitmodules_config(). This results in worse performance when the
index is not actually needed. This patch avoids calling
gitmodules_config() when the --no-index option is given. The times for
executing "git diff --no-index" in the WebKit repository are improved as
follows:

Test HEAD~3 HEAD
------------------------------------------------------------------
4001.1: diff --no-index 0.24(0.15+0.09) 0.01(0.00+0.00) -95.8%

An additional improvement of this patch is that "git diff --no-index" no
longer breaks when the index file is corrupt, which makes it possible to
use it for investigating the broken repository.

To improve the possible usage as investigation tool for broken
repositories, setup_git_directory_gently() is also not called when the
--no-index option is given.

Also add a test to guard against future breakages, and a performance
test to show the improvements.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: move no-index detection to builtin/diff.cThomas Gummerer Wed, 11 Dec 2013 09:58:42 +0000 (10:58 +0100)

diff: move no-index detection to builtin/diff.c

Currently the --no-index option is parsed in diff_no_index(). Move the
detection if a no-index diff should be executed to builtin/diff.c, where
we can use it for executing diff_no_index() conditionally. This will
also allow us to execute other operations conditionally, which will be
done in the next patch.

There are no functional changes.

Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/git-replace: describe --format optionChristian Couder Wed, 11 Dec 2013 07:46:13 +0000 (08:46 +0100)

Documentation/git-replace: describe --format option

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/replace: unset read_replace_refsChristian Couder Wed, 11 Dec 2013 07:46:12 +0000 (08:46 +0100)

builtin/replace: unset read_replace_refs

When checking to see if some objects are of the same type
and when displaying the type of objects, git replace uses
the sha1_object_info() function.

Unfortunately this function by default respects replace
refs, so instead of the type of a replaced object, it
gives the type of the replacement object which might
be different.

To fix this bug, and because git replace should work at a
level before replacement takes place, let's unset the
read_replace_refs global variable at the beginning of
cmd_replace().

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6050: add tests for listing with --formatChristian Couder Wed, 11 Dec 2013 07:46:11 +0000 (08:46 +0100)

t6050: add tests for listing with --format

This patch adds tests for "git replace -l --format=<fmt>".

'short', 'medium' and 'full' are the only allowed values
for <fmt>.

'short' is the same as with no --format option.
Tests for 'medium' and 'full' are the most needed.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/replace: teach listing using short, medium... Christian Couder Wed, 11 Dec 2013 07:46:10 +0000 (08:46 +0100)

builtin/replace: teach listing using short, medium or full formats

By default when listing replace refs, only the sha1 of the
replaced objects are shown.

In many cases, it is much nicer to be able to list all the
sha1 of the replaced objects along with the sha1 of the
replacment objects.

And in other cases it might be interesting to also show the
types of the replaced and replacement objects.

This patch introduce a new --format=<fmt> option where
<fmt> can be any of the following:

'short': this is the same as when no --format
option is used, that is only the sha1 of
the replaced objects are shown
'medium': this also lists the sha1 of the
replacement objects
'full': this shows the sha1 and the type of both
the replaced and the replacement objects

Some documentation and some tests will follow.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: perform object replacement in sha1_object_in... Christian Couder Wed, 11 Dec 2013 07:46:09 +0000 (08:46 +0100)

sha1_file: perform object replacement in sha1_object_info_extended()

sha1_object_info_extended() should perform object replacement
if it is needed.

The simplest way to do that is to make it call
lookup_replace_object_extended().

And now its "unsigned flags" parameter is used as it is passed
to lookup_replace_object_extended().

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6050: show that git cat-file --batch fails with replac... Christian Couder Wed, 11 Dec 2013 07:46:08 +0000 (08:46 +0100)

t6050: show that git cat-file --batch fails with replace objects

When --batch is passed to git cat-file, the sha1_object_info_extended()
function is used to get information about the objects passed to
git cat-file.

Unfortunately sha1_object_info_extended() doesn't take care of
object replacement properly, so it will often fail with a
message like this:

$ echo a3fb2e1845a1aaf129b7975048973414dc172173 | git cat-file --batch
a3fb2e1845a1aaf129b7975048973414dc172173 commit 231
fatal: object a3fb2e1845a1aaf129b7975048973414dc172173 change size!?

The goal of this patch is to show this breakage.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_object_info_extended(): add an "unsigned flags... Christian Couder Wed, 11 Dec 2013 07:46:07 +0000 (08:46 +0100)

sha1_object_info_extended(): add an "unsigned flags" parameter

This parameter is not used yet, but it will be used to tell
sha1_object_info_extended() if it should perform object
replacement or not.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file.c: add lookup_replace_object_extended() to... Christian Couder Wed, 11 Dec 2013 07:46:06 +0000 (08:46 +0100)

sha1_file.c: add lookup_replace_object_extended() to pass flags

Currently, there is only one caller to lookup_replace_object()
that can benefit from passing it some flags, but we expect
that there could be more.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

replace_object: don't check read_replace_refs twiceChristian Couder Wed, 11 Dec 2013 07:46:05 +0000 (08:46 +0100)

replace_object: don't check read_replace_refs twice

Since e1111cef (inline lookup_replace_object() calls,
May 15 2011) the read_replace_refs global variable is
checked twice, once in lookup_replace_object() and
once again in do_lookup_replace_object().

As do_lookup_replace_object() is called only from
lookup_replace_object(), we can remove the check in
do_lookup_replace_object().

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rename READ_SHA1_FILE_REPLACE flag to LOOKUP_REPLACE_OBJECTChristian Couder Wed, 11 Dec 2013 07:46:04 +0000 (08:46 +0100)

rename READ_SHA1_FILE_REPLACE flag to LOOKUP_REPLACE_OBJECT

The READ_SHA1_FILE_REPLACE flag is more related to using the
lookup_replace_object() function rather than the
read_sha1_file() function.

We also need such a flag to be used with sha1_object_info()
instead of read_sha1_file().

The name LOOKUP_REPLACE_OBJECT is therefore better for this
flag.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file: handle --batch format with missing type/sizeJeff King Wed, 11 Dec 2013 23:15:50 +0000 (07:15 +0800)

cat-file: handle --batch format with missing type/size

Commit 98e2092 taught cat-file to stream blobs with --batch,
which requires that we look up the object type before
loading it into memory. As a result, we now print the
object header from information in sha1_object_info, and the
actual contents from the read_sha1_file. We double-check
that the information we printed in the header matches the
content we are about to show.

Later, commit 93d2a60 allowed custom header lines for
--batch, and commit 5b08640 made type lookups optional. As a
result, specifying a header line without the type or size
means that we will not look up those items at all.

This causes our double-checking to erroneously die with an
error; we think the type or size has changed, when in fact
it was simply left at "0".

For the size, we can fix this by only doing the consistency
double-check when we have retrieved the size via
sha1_object_info. In the case that we have not retrieved the
value, that means we also did not print it, so there is
nothing for us to check that we are consistent with.

We could do the same for the type. However, besides our
consistency check, we also care about the type in deciding
whether to stream or not. So instead of handling the case
where we do not know the type, this patch instead makes sure
that we always trigger a type lookup when we are printing,
so that even a format without the type will stream as we
would in the normal case.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file: pass expand_data to print_object_or_dieJeff King Wed, 11 Dec 2013 23:01:42 +0000 (07:01 +0800)

cat-file: pass expand_data to print_object_or_die

We currently individually pass the sha1, type, and size
fields calculated by sha1_object_info. However, if we pass
the whole struct, the called function can make more
intelligent decisions about which fields were actually
filled by sha1_object_info.

This patch takes that first refactoring step, passing the
whole struct, so further patches can make those decisions
with less noise in their diffs. There should be no
functional change to this patch (aside from a minor typo fix
in the error message).

As a side effect, we can rename the local variables in the
function to "type" and "size", since the names are no longer
taken.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clone.txt: remove shallow clone limitationsNguyễn Thái Ngọc Duy Thu, 5 Dec 2013 13:02:55 +0000 (20:02 +0700)

git-clone.txt: remove shallow clone limitations

Now that git supports data transfer from or to a shallow clone, these
limitations are not true anymore.

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

prune: clean .git/shallow after pruning objectsNguyễn Thái Ngọc Duy Thu, 5 Dec 2013 13:02:54 +0000 (20:02 +0700)

prune: clean .git/shallow after pruning objects

This patch teaches "prune" to remove shallow roots that are no longer
reachable from any refs (e.g. when the relevant refs are removed).

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

clone: use git protocol for cloning shallow repo locallyNguyễn Thái Ngọc Duy Thu, 5 Dec 2013 13:02:53 +0000 (20:02 +0700)

clone: use git protocol for cloning shallow repo locally

clone_local() does not handle $SRC/shallow. It could be made so, but
it's simpler to use fetch-pack/upload-pack instead.

This used to be caught by the check in upload-pack, which is triggered
by transport_get_remote_refs(), even in local clone case. The check is
now gone and check_everything_connected() should catch the result
incomplete repo. But check_everything_connected() will soon be skipped
in local clone case, opening a door to corrupt repo. This patch should
close that door.

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