gitweb.git
t9001-send-email: refactor header variable fields repla... Remi Lespinet Tue, 30 Jun 2015 12:16:44 +0000 (14:16 +0200)

t9001-send-email: refactor header variable fields replacement

Create a function which replaces Date, Message-Id and
X-Mailer lines generated by git-send-email by a specific string:

Date:.*$ -> Date: DATE-STRING
Message-Id:.*$ -> Message-Id: MESSAGE-ID-STRING
X-Mailer:.*$ -> X-Mailer: X-MAILER-STRING
Signed-off-by: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

send-email: allow aliases in patch header and command... Remi Lespinet Tue, 30 Jun 2015 12:16:43 +0000 (14:16 +0200)

send-email: allow aliases in patch header and command script outputs

Interpret aliases in:

- Header fields of patches generated by git format-patch
(using --to, --cc, --add-header for example) or
manually modified. Example of fields in header:

To: alias1
Cc: alias2
Cc: alias3
- Outputs of command scripts specified by --cc-cmd and
--to-cmd. Example of script:

#!/bin/sh
echo alias1
echo alias2

Signed-off-by: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9001-send-email: move script creation in a setup testRemi Lespinet Tue, 30 Jun 2015 12:16:42 +0000 (14:16 +0200)

t9001-send-email: move script creation in a setup test

Move the creation of the scripts used in to-cmd and cc-cmd tests
in a setup test to make them available for later tests.

Signed-off-by: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

status: differentiate interactive from non-interactive... Guillaume Pagès Tue, 30 Jun 2015 13:01:13 +0000 (15:01 +0200)

status: differentiate interactive from non-interactive rebases

Signed-off-by: Guillaume Pagès <guillaume.pages@ensimag.grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

status: factor two rebase-related messages togetherGuillaume Pagès Tue, 30 Jun 2015 13:01:12 +0000 (15:01 +0200)

status: factor two rebase-related messages together

Signed-off-by: Guillaume Pagès <guillaume.pages@ensimag.grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config.c: fix writing config files on Windows network... Karsten Blees Tue, 30 Jun 2015 14:34:13 +0000 (16:34 +0200)

config.c: fix writing config files on Windows network shares

Renaming to an existing file doesn't work on Windows network shares if the
target file is open.

munmap() the old config file before commit_lock_file.

Signed-off-by: Karsten Blees <blees@dcon.de>
Acked-by: Jeff King <peff@peff.net>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rebase -i: do not leave a CHERRY_PICK_HEAD file behindJohannes Schindelin Thu, 18 Jun 2015 16:38:53 +0000 (18:38 +0200)

rebase -i: do not leave a CHERRY_PICK_HEAD file behind

When skipping commits whose changes were already applied via `git rebase
--continue`, we need to clean up said file explicitly.

The same is not true for `git rebase --skip` because that will execute
`git reset --hard` as part of the "skip" handling in git-rebase.sh, even
before git-rebase--interactive.sh is called.

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

t3404: demonstrate CHERRY_PICK_HEAD bugJohannes Schindelin Thu, 18 Jun 2015 16:38:44 +0000 (18:38 +0200)

t3404: demonstrate CHERRY_PICK_HEAD bug

When rev-list's --cherry option does not detect that a patch has already
been applied upstream, an interactive rebase would offer to reapply it and
consequently stop at that patch with a failure, mentioning that the diff
is empty.

Traditionally, a `git rebase --continue` simply skips the commit in such a
situation.

However, as pointed out by Gábor Szeder, this leaves a CHERRY_PICK_HEAD
behind, making the Git prompt believe that a cherry pick is still going
on. This commit adds a test case demonstrating this bug.

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

introduce "format" date-modeJeff King Thu, 25 Jun 2015 16:55:45 +0000 (12:55 -0400)

introduce "format" date-mode

This feeds the format directly to strftime. Besides being a
little more flexible, the main advantage is that your system
strftime may know more about your locale's preferred format
(e.g., how to spell the days of the week).

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

convert "enum date_mode" into a structJeff King Thu, 25 Jun 2015 16:55:02 +0000 (12:55 -0400)

convert "enum date_mode" into a struct

In preparation for adding date modes that may carry extra
information beyond the mode itself, this patch converts the
date_mode enum into a struct.

Most of the conversion is fairly straightforward; we pass
the struct as a pointer and dereference the type field where
necessary. Locations that declare a date_mode can use a "{}"
constructor. However, the tricky case is where we use the
enum labels as constants, like:

show_date(t, tz, DATE_NORMAL);

Ideally we could say:

show_date(t, tz, &{ DATE_NORMAL });

but of course C does not allow that. Likewise, we cannot
cast the constant to a struct, because we need to pass an
actual address. Our options are basically:

1. Manually add a "struct date_mode d = { DATE_NORMAL }"
definition to each caller, and pass "&d". This makes
the callers uglier, because they sometimes do not even
have their own scope (e.g., they are inside a switch
statement).

2. Provide a pre-made global "date_normal" struct that can
be passed by address. We'd also need "date_rfc2822",
"date_iso8601", and so forth. But at least the ugliness
is defined in one place.

3. Provide a wrapper that generates the correct struct on
the fly. The big downside is that we end up pointing to
a single global, which makes our wrapper non-reentrant.
But show_date is already not reentrant, so it does not
matter.

This patch implements 3, along with a minor macro to keep
the size of the callers sane.

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

show-branch: use DATE_RELATIVE instead of magic numberJeff King Thu, 25 Jun 2015 16:54:31 +0000 (12:54 -0400)

show-branch: use DATE_RELATIVE instead of magic number

This is more readable, and won't break if we ever change the
order of the date_mode enum.

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

http: always use any proxy auth method availableEnrique Tobis Fri, 26 Jun 2015 18:19:04 +0000 (18:19 +0000)

http: always use any proxy auth method available

We set CURLOPT_PROXYAUTH to use the most secure authentication
method available only when the user has set configuration variables
to specify a proxy. However, libcurl also supports specifying a
proxy through environment variables. In that case libcurl defaults
to only using the Basic proxy authentication method, because we do
not use CURLOPT_PROXYAUTH.

Set CURLOPT_PROXYAUTH to always use the most secure authentication
method available, even when there is no git configuration telling us
to use a proxy. This allows the user to use environment variables to
configure a proxy that requires an authentication method different
from Basic.

Signed-off-by: Enrique A. Tobis <etobis@twosigma.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision.c: remove unneeded check for NULLStefan Beller Fri, 26 Jun 2015 19:40:19 +0000 (12:40 -0700)

revision.c: remove unneeded check for NULL

The function is called only from one place, which makes sure to have
`interesting_cache` not NULL. Additionally the variable is a
dereferenced a few lines before unconditionally, which would have
resulted in a segmentation fault before hitting this check.

Signed-off-by: Stefan Beller <sbeller@google.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree: new place for "git prune --worktrees"Nguyễn Thái Ngọc Duy Mon, 29 Jun 2015 12:51:18 +0000 (19:51 +0700)

worktree: new place for "git prune --worktrees"

Commit 23af91d (prune: strategies for linked checkouts - 2014-11-30)
adds "--worktrees" to "git prune" without realizing that "git prune" is
for object database only. This patch moves the same functionality to a
new command "git worktree".

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

Merge branch 'master' of git://github.com/alshopov... Jiang Xin Sun, 28 Jun 2015 22:41:44 +0000 (06:41 +0800)

Merge branch 'master' of git://github.com/alshopov/git-po

* 'master' of git://github.com/alshopov/git-po:
l10n: Updated Bulgarian translation of git (2355t,0f,0u)

Sync with maintJunio C Hamano Sun, 28 Jun 2015 21:51:12 +0000 (14:51 -0700)

Sync with maint

* maint:

fsck: it is OK for a tag and a commit to lack the bodyJunio C Hamano Sun, 28 Jun 2015 18:18:31 +0000 (11:18 -0700)

fsck: it is OK for a tag and a commit to lack the body

When fsck validates a commit or a tag, it scans each line in the
header of the object using helper functions such as "start_with()",
etc. that work on a NUL terminated buffer, but before a1e920a0
(index-pack: terminate object buffers with NUL, 2014-12-08), the
validation functions were fed the object data in a piece of memory
that is not necessarily terminated with a NUL.

We added a helper function require_end_of_header() to be called at
the beginning of these validation functions to insist that the
object data contains an empty line before its end. The theory is
that the validating functions will notice and stop when it hits an
empty line as a normal end of header (or a required header line that
is missing) without scanning past the end of potentially not
NUL-terminated buffer.

But the theory forgot that in the older days, Git itself happily
created objects with only the header lines without a body. This
caused Git 2.2 and later to issue an unnecessary warning in some
existing repositories.

With a1e920a0, we do not need to require an empty line (or the body)
in these objects to safely parse and validate them. Drop the
offending "must have an empty line" check from this helper function,
while keeping the other check to make sure that there is no NUL in
the header part of the object, and adjust the name of the helper to
what it does accordingly.

Noticed-by: Wolfgang Denk <wd@denx.de>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: Updated Bulgarian translation of git (2355t,0f,0u)Alexander Shopov Sun, 28 Jun 2015 07:27:57 +0000 (10:27 +0300)

l10n: Updated Bulgarian translation of git (2355t,0f,0u)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>

l10n: sv.po: Update Swedish translation (2355t0f0u)Peter Krefting Sun, 28 Jun 2015 17:50:20 +0000 (18:50 +0100)

l10n: sv.po: Update Swedish translation (2355t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>

l10n: Updated Vietnamese translation (2355t)Tran Ngoc Quan Sun, 28 Jun 2015 07:46:18 +0000 (14:46 +0700)

l10n: Updated Vietnamese translation (2355t)

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>

l10n: git.pot: v2.5.0 round 1 (65 new, 15 removed)Jiang Xin Sat, 27 Jun 2015 11:18:04 +0000 (19:18 +0800)

l10n: git.pot: v2.5.0 round 1 (65 new, 15 removed)

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

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

p5310: Fix broken && chain in performance testStefan Beller Fri, 26 Jun 2015 21:27:00 +0000 (14:27 -0700)

p5310: Fix broken && chain in performance test

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

setup: set env $GIT_WORK_TREE when work tree is set... Nguyễn Thái Ngọc Duy Fri, 26 Jun 2015 10:37:35 +0000 (17:37 +0700)

setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR

In the test case, we run setup_git_dir_gently() the first time to read
$GIT_DIR/config so that we can resolve aliases. We'll enter
setup_discovered_git_dir() and may or may not call set_git_dir() near
the end of the function, depending on whether the detected git dir is
".git" or not. This set_git_dir() will set env var $GIT_DIR.

For normal repo, git dir detected via setup_discovered_git_dir() will be
".git", and set_git_dir() is not called. If .git file is used however,
the git dir can't be ".git" and set_git_dir() is called and $GIT_DIR
set. This is the key of this problem.

If we expand an alias (or autocorrect command names), then
setup_git_dir_gently() is run the second time. If $GIT_DIR is not set in
the first run, we run the same setup_discovered_git_dir() as before.
Nothing to see. If it is, however, we'll enter setup_explicit_git_dir()
this time.

This is where the "fun" is. If $GIT_WORK_TREE is not set but
$GIT_DIR is, you are supposed to be at the root level of the
worktree. But if you are in a subdir "foo/bar" (real worktree's top
is "foo"), this rule bites you: your detected worktree is now
"foo/bar", even though the first run correctly detected worktree as
"foo". You get "internal error: work tree has already been set" as a
result.

Bottom line is, when $GIT_DIR is set, $GIT_WORK_TREE should be set too
unless there's no work tree. But setting $GIT_WORK_TREE inside
set_git_dir() may backfire. We don't know at that point if work tree is
already configured by the caller. So set it when work tree is
detected. It does not harm if $GIT_WORK_TREE is set while $GIT_DIR is
not.

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

cat-file: sort and de-dup output of --batch-all-objectsJeff King Mon, 22 Jun 2015 11:06:32 +0000 (07:06 -0400)

cat-file: sort and de-dup output of --batch-all-objects

The sorting we could probably live without, but printing
duplicates is just a hassle for the user, who must then
de-dup themselves (or risk a wrong answer if they are doing
something like counting objects with a particular property).

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

read_gitfile_gently: fix use-after-freeJeff King Fri, 26 Jun 2015 09:03:31 +0000 (05:03 -0400)

read_gitfile_gently: fix use-after-free

The "dir" variable is a pointer into the "buf" array. When
we hit the cleanup_return path, the first thing we do is
free(buf); but one of the error messages prints "dir", which
will access the memory after the free.

We can fix this by reorganizing the error path a little. We
act on the fatal, error-printing conditions first, as they
want to access memory and do not care about freeing. Then we
free any memory, and finally return.

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

Merge branch 'jk/stash-require-clean-index' into maintJunio C Hamano Fri, 26 Jun 2015 06:03:26 +0000 (23:03 -0700)

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

A hotfix for the topic already in 'master'.

* jk/stash-require-clean-index:
Revert "stash: require a clean index to apply"

Merge branch 'cb/array-size' into maintJunio C Hamano Fri, 26 Jun 2015 06:03:25 +0000 (23:03 -0700)

Merge branch 'cb/array-size' into maint

* cb/array-size:
Fix definition of ARRAY_SIZE for non-gcc builds

Git 2.5.0-rc0 v2.5.0-rc0Junio C Hamano Thu, 25 Jun 2015 18:08:39 +0000 (11:08 -0700)

Git 2.5.0-rc0

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

Merge branch 'cn/cvsimport-perl-update'Junio C Hamano Thu, 25 Jun 2015 18:08:08 +0000 (11:08 -0700)

Merge branch 'cn/cvsimport-perl-update'

* cn/cvsimport-perl-update:
cvsimport: silence regex warning appearing in Perl 5.22.

Merge branch 'cb/array-size'Junio C Hamano Thu, 25 Jun 2015 18:07:42 +0000 (11:07 -0700)

Merge branch 'cb/array-size'

* cb/array-size:
Fix definition of ARRAY_SIZE for non-gcc builds

Sync with 2.4.5Junio C Hamano Thu, 25 Jun 2015 18:04:30 +0000 (11:04 -0700)

Sync with 2.4.5

Git 2.4.5 v2.4.5Junio C Hamano Thu, 25 Jun 2015 18:03:05 +0000 (11:03 -0700)

Git 2.4.5

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

Merge branch 'sg/merge-summary-config' into maintJunio C Hamano Thu, 25 Jun 2015 18:02:16 +0000 (11:02 -0700)

Merge branch 'sg/merge-summary-config' into maint

Doc updates.

* sg/merge-summary-config:
Documentation: include 'merge.branchdesc' for merge and config as well

Merge branch 'jk/make-fix-dependencies' into maintJunio C Hamano Thu, 25 Jun 2015 18:02:15 +0000 (11:02 -0700)

Merge branch 'jk/make-fix-dependencies' into maint

Build clean-up.

* jk/make-fix-dependencies:
Makefile: silence perl/PM.stamp recipe
Makefile: avoid timestamp updates to GIT-BUILD-OPTIONS
Makefile: drop dependency between git-instaweb and gitweb

Merge branch 'sb/pack-protocol-mention-smart-http'... Junio C Hamano Thu, 25 Jun 2015 18:02:14 +0000 (11:02 -0700)

Merge branch 'sb/pack-protocol-mention-smart-http' into maint

Doc updates.

* sb/pack-protocol-mention-smart-http:
Documentation/technical/pack-protocol: mention http as possible protocol

Merge branch 'jk/die-on-bogus-worktree-late' into maintJunio C Hamano Thu, 25 Jun 2015 18:02:13 +0000 (11:02 -0700)

Merge branch 'jk/die-on-bogus-worktree-late' into maint

The setup code used to die when core.bare and core.worktree are set
inconsistently, even for commands that do not need working tree.

* jk/die-on-bogus-worktree-late:
setup_git_directory: delay core.bare/core.worktree errors

Merge branch 'pt/pull-tags-error-diag' into maintJunio C Hamano Thu, 25 Jun 2015 18:02:12 +0000 (11:02 -0700)

Merge branch 'pt/pull-tags-error-diag' into maint

There was a dead code that used to handle "git pull --tags" and
show special-cased error message, which was made irrelevant when
the semantics of the option changed back in Git 1.9 days.

* pt/pull-tags-error-diag:
pull: remove --tags error in no merge candidates case

Merge branch 'jk/color-diff-plain-is-context' into... Junio C Hamano Thu, 25 Jun 2015 18:02:11 +0000 (11:02 -0700)

Merge branch 'jk/color-diff-plain-is-context' into maint

"color.diff.plain" was a misnomer; give it 'color.diff.context' as
a more logical synonym.

* jk/color-diff-plain-is-context:
diff.h: rename DIFF_PLAIN color slot to DIFF_CONTEXT
diff: accept color.diff.context as a synonym for "plain"

Merge branch 'jk/diagnose-config-mmap-failure' into... Junio C Hamano Thu, 25 Jun 2015 18:02:10 +0000 (11:02 -0700)

Merge branch 'jk/diagnose-config-mmap-failure' into maint

The configuration reader/writer uses mmap(2) interface to access
the files; when we find a directory, it barfed with "Out of memory?".

* jk/diagnose-config-mmap-failure:
xmmap(): drop "Out of memory?"
config.c: rewrite ENODEV into EISDIR when mmap fails
config.c: avoid xmmap error messages
config.c: fix mmap leak when writing config
read-cache.c: drop PROT_WRITE from mmap of index

Merge branch 'jk/squelch-missing-link-warning-for-unrea... Junio C Hamano Thu, 25 Jun 2015 18:02:09 +0000 (11:02 -0700)

Merge branch 'jk/squelch-missing-link-warning-for-unreachable' into maint

Recent "git prune" traverses young unreachable objects to safekeep
old objects in the reachability chain from them, which sometimes
caused error messages that are unnecessarily alarming.

* jk/squelch-missing-link-warning-for-unreachable:
suppress errors on missing UNINTERESTING links
silence broken link warnings with revs->ignore_missing_links
add quieter versions of parse_{tree,commit}

Merge branch 'mm/rebase-i-post-rewrite-exec' into maintJunio C Hamano Thu, 25 Jun 2015 18:02:09 +0000 (11:02 -0700)

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

"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 'nd/diff-i-t-a'Junio C Hamano Thu, 25 Jun 2015 17:47:46 +0000 (10:47 -0700)

Merge branch 'nd/diff-i-t-a'

* nd/diff-i-t-a:
Revert "diff-lib.c: adjust position of i-t-a entries in diff"

cvsimport: silence regex warning appearing in Perl... Christian Neukirchen Wed, 24 Jun 2015 14:04:20 +0000 (16:04 +0200)

cvsimport: silence regex warning appearing in Perl 5.22.

Since Perl 5.22, "A literal '{' should now be escaped in a pattern".
Silence the recently added warning by using \{ instead.

Signed-off-by: Christian Neukirchen <chneukirchen@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fix definition of ARRAY_SIZE for non-gcc buildsCharles Bailey Wed, 24 Jun 2015 22:12:07 +0000 (23:12 +0100)

Fix definition of ARRAY_SIZE for non-gcc builds

The improved ARRAY_SIZE macro uses BARF_UNLESS_AN_ARRAY which expands
to a valid check for recent gcc versions and to 0 for older gcc
versions but is not defined on non-gcc builds.

Non-gcc builds need this macro to expand to 0 as well. The current outer
test (defined(__GNUC__) && (__GNUC__ >= 3)) is a strictly weaker
condition than the inner test (GIT_GNUC_PREREQ(3, 1)) so we can omit the
outer test and cause the BARF_UNLESS_AN_ARRAY macro to be defined
correctly on non-gcc builds as well as gcc builds with older versions.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ninth batch for 2.5Junio C Hamano Wed, 24 Jun 2015 19:27:20 +0000 (12:27 -0700)

Ninth batch for 2.5

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

Merge branch 'jk/stash-require-clean-index'Junio C Hamano Wed, 24 Jun 2015 19:21:59 +0000 (12:21 -0700)

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

A hotfix for the topic already in 'master'.

* jk/stash-require-clean-index:
Revert "stash: require a clean index to apply"

Merge branch 'pa/auto-gc-mac-osx'Junio C Hamano Wed, 24 Jun 2015 19:21:58 +0000 (12:21 -0700)

Merge branch 'pa/auto-gc-mac-osx'

Recent Mac OS X updates breaks the logic to detect that the machine
is on the AC power in the sample pre-auto-gc script.

* pa/auto-gc-mac-osx:
hooks/pre-auto-gc: adjust power checking for newer OS X

Merge branch 'pt/t0302-needs-sanity'Junio C Hamano Wed, 24 Jun 2015 19:21:57 +0000 (12:21 -0700)

Merge branch 'pt/t0302-needs-sanity'

* pt/t0302-needs-sanity:
t0302: "unreadable" test needs SANITY prereq

Merge branch 'ld/p4-changes-block-size'Junio C Hamano Wed, 24 Jun 2015 19:21:56 +0000 (12:21 -0700)

Merge branch 'ld/p4-changes-block-size'

More Perforce row number limit workaround for "git p4".

* ld/p4-changes-block-size:
git-p4: fixing --changes-block-size handling
git-p4: add tests for non-numeric revision range
git-p4: test with limited p4 server results
git-p4: additional testing of --changes-block-size

Merge branch 'fk/doc-format-patch-vn'Junio C Hamano Wed, 24 Jun 2015 19:21:56 +0000 (12:21 -0700)

Merge branch 'fk/doc-format-patch-vn'

Docfix.

* fk/doc-format-patch-vn:
doc: format-patch: fix typo

Merge branch 'sg/commit-cleanup-scissors'Junio C Hamano Wed, 24 Jun 2015 19:21:55 +0000 (12:21 -0700)

Merge branch 'sg/commit-cleanup-scissors'

"git commit --cleanup=scissors" was not careful enough to protect
against getting fooled by a line that looked like scissors.

* sg/commit-cleanup-scissors:
commit: cope with scissors lines in commit message

Merge branch 'jk/index-pack-reduce-recheck'Junio C Hamano Wed, 24 Jun 2015 19:21:54 +0000 (12:21 -0700)

Merge branch 'jk/index-pack-reduce-recheck'

Disable "have we lost a race with competing repack?" check while
receiving a huge object transfer that runs index-pack.

* jk/index-pack-reduce-recheck:
index-pack: avoid excessive re-reading of pack directory

Merge branch 'af/tcsh-completion-noclobber'Junio C Hamano Wed, 24 Jun 2015 19:21:53 +0000 (12:21 -0700)

Merge branch 'af/tcsh-completion-noclobber'

The tcsh completion writes a bash scriptlet but that would have
failed for users with noclobber set.

* af/tcsh-completion-noclobber:
git-completion.tcsh: fix redirect with noclobber

Merge branch 'mh/reporting-broken-refs-from-for-each... Junio C Hamano Wed, 24 Jun 2015 19:21:51 +0000 (12:21 -0700)

Merge branch 'mh/reporting-broken-refs-from-for-each-ref'

"git for-each-ref" reported "missing object" for 0{40} when it
encounters a broken ref. The lack of object whose name is 0{40} is
not the problem; the ref being broken is.

* mh/reporting-broken-refs-from-for-each-ref:
read_loose_refs(): treat NULL_SHA1 loose references as broken
read_loose_refs(): simplify function logic
for-each-ref: report broken references correctly
t6301: new tests of for-each-ref error handling

Merge branch 'sg/completion-commit-cleanup'Junio C Hamano Wed, 24 Jun 2015 19:21:51 +0000 (12:21 -0700)

Merge branch 'sg/completion-commit-cleanup'

* sg/completion-commit-cleanup:
completion: teach 'scissors' mode to 'git commit --cleanup='

Merge branch 'pt/am-abort-fix'Junio C Hamano Wed, 24 Jun 2015 19:21:49 +0000 (12:21 -0700)

Merge branch 'pt/am-abort-fix'

Various fixes around "git am" that applies a patch to a history
that is not there yet.

* pt/am-abort-fix:
am --abort: keep unrelated commits on unborn branch
am --abort: support aborting to unborn branch
am --abort: revert changes introduced by failed 3way merge
am --skip: support skipping while on unborn branch
am -3: support 3way merge on unborn branch
am --skip: revert changes introduced by failed 3way merge

Merge branch 'nd/untracked-cache'Junio C Hamano Wed, 24 Jun 2015 19:21:49 +0000 (12:21 -0700)

Merge branch 'nd/untracked-cache'

Hotfix for the 'untracked-cache' topic that is already in 'master'.

* nd/untracked-cache:
read-cache: fix untracked cache invalidation when split-index is used

Merge branch 'mh/fsck-reflog-entries'Junio C Hamano Wed, 24 Jun 2015 19:21:48 +0000 (12:21 -0700)

Merge branch 'mh/fsck-reflog-entries'

"git fsck" used to ignore missing or invalid objects recorded in reflog.

* mh/fsck-reflog-entries:
fsck: report errors if reflog entries point at invalid objects
fsck_handle_reflog_sha1(): new function

Merge branch 'js/sleep-without-select'Junio C Hamano Wed, 24 Jun 2015 19:21:47 +0000 (12:21 -0700)

Merge branch 'js/sleep-without-select'

Portability fix.

* js/sleep-without-select:
lockfile: wait using sleep_millisec() instead of select()
lockfile: convert retry timeout computations to millisecond
help.c: wrap wait-only poll() invocation in sleep_millisec()
lockfile: replace random() by rand()

Merge branch 'es/utf8-stupid-compiler-workaround'Junio C Hamano Wed, 24 Jun 2015 19:21:46 +0000 (12:21 -0700)

Merge branch 'es/utf8-stupid-compiler-workaround'

A compilation workaround.

* es/utf8-stupid-compiler-workaround:
utf8: NO_ICONV: silence uninitialized variable warning

Merge branch 'rl/am-3way-config'Junio C Hamano Wed, 24 Jun 2015 19:21:45 +0000 (12:21 -0700)

Merge branch 'rl/am-3way-config'

"git am" learned am.threeWay configuration variable.

* rl/am-3way-config:
git-am: add am.threeWay config variable
t4150-am: refactor am -3 tests
git-am.sh: fix initialization of the threeway variable

Merge branch 'jc/ll-merge-expose-path'Junio C Hamano Wed, 24 Jun 2015 19:21:45 +0000 (12:21 -0700)

Merge branch 'jc/ll-merge-expose-path'

Traditionally, external low-level 3-way merge drivers are expected
to produce their results based solely on the contents of the three
variants given in temporary files named by %O, %A and %B on their
command line. Additionally allow them to look at the final path
(given by %P).

* jc/ll-merge-expose-path:
ll-merge: pass the original path to external drivers

Merge branch 'es/osx-header-pollutes-mask-macro'Junio C Hamano Wed, 24 Jun 2015 19:21:44 +0000 (12:21 -0700)

Merge branch 'es/osx-header-pollutes-mask-macro'

* es/osx-header-pollutes-mask-macro:
ewah: use less generic macro name
ewah/bitmap: silence warning about MASK macro redefinition

Merge branch 'es/configure-getdelim'Junio C Hamano Wed, 24 Jun 2015 19:21:43 +0000 (12:21 -0700)

Merge branch 'es/configure-getdelim'

Auto-detect availability of getdelim() that helps optimized version
of strbuf_getwholeline().

* es/configure-getdelim:
configure: add getdelim() check
config.mak.uname: Darwin: define HAVE_GETDELIM for modern OS X releases

Merge branch 'pt/pull-optparse'Junio C Hamano Wed, 24 Jun 2015 19:21:42 +0000 (12:21 -0700)

Merge branch 'pt/pull-optparse'

"git pull" has become more aware of the options meant for
underlying "git fetch" and then learned to use parse-options
parser.

* pt/pull-optparse:
pull: use git-rev-parse --parseopt for option parsing
pull: handle git-fetch's options as well

Merge branch 'qn/blame-show-email'Junio C Hamano Wed, 24 Jun 2015 19:21:41 +0000 (12:21 -0700)

Merge branch 'qn/blame-show-email'

"git blame" learned blame.showEmail configuration variable.

* qn/blame-show-email:
blame: add blame.showEmail configuration

Merge branch 'jc/do-not-feed-tags-to-clear-commit-marks'Junio C Hamano Wed, 24 Jun 2015 19:21:40 +0000 (12:21 -0700)

Merge branch 'jc/do-not-feed-tags-to-clear-commit-marks'

"git format-patch --ignore-if-upstream A..B" did not like to be fed
tags as boundary commits.

* jc/do-not-feed-tags-to-clear-commit-marks:
format-patch: do not feed tags to clear_commit_marks()

Merge branch 'es/send-email-sendmail-alias'Junio C Hamano Wed, 24 Jun 2015 19:21:39 +0000 (12:21 -0700)

Merge branch 'es/send-email-sendmail-alias'

"git send-email" learned to handle more forms of sendmail style
aliases file.

* es/send-email-sendmail-alias:
send-email: further warn about unsupported sendmail aliases features
t9001: add sendmail aliases line continuation tests
t9001: refactor sendmail aliases test infrastructure
send-email: implement sendmail aliases line continuation support
send-email: simplify sendmail aliases comment and blank line recognizer
send-email: refactor sendmail aliases parser
send-email: fix style: cuddle 'elsif' and 'else' with closing brace
send-email: drop noise comments which merely repeat what code says
send-email: visually distinguish sendmail aliases parser warnings
send-email: further document missing sendmail aliases functionality

Merge branch 'jc/apply-reject-noop-hunk'Junio C Hamano Wed, 24 Jun 2015 19:21:39 +0000 (12:21 -0700)

Merge branch 'jc/apply-reject-noop-hunk'

"git apply" cannot diagnose a patch corruption when the breakage is
to mark the length of the hunk shorter than it really is on the
hunk header line "@@ -l,k +m,n @@"; one special case it could is
when the hunk becomes no-op (e.g. k == n == 2 for two-line context
patch output), and it learned how to do so.

* jc/apply-reject-noop-hunk:
apply: reject a hunk that does not do anything

fsck: support ignoring objects in `git fsck` via fsck... Johannes Schindelin Mon, 22 Jun 2015 15:27:23 +0000 (17:27 +0200)

fsck: support ignoring objects in `git fsck` via fsck.skiplist

Identical to support in `git receive-pack for the config option
`receive.fsck.skiplist`, we now support ignoring given objects in
`git fsck` via `fsck.skiplist` altogether.

This is extremely handy in case of legacy repositories where it would
cause more pain to change incorrect objects than to live with them
(e.g. a duplicate 'author' line in an early commit object).

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

fsck: git receive-pack: support excluding objects from... Johannes Schindelin Mon, 22 Jun 2015 15:27:18 +0000 (17:27 +0200)

fsck: git receive-pack: support excluding objects from fsck'ing

The optional new config option `receive.fsck.skipList` specifies the path
to a file listing the names, i.e. SHA-1s, one per line, of objects that
are to be ignored by `git receive-pack` when `receive.fsckObjects = true`.

This is extremely handy in case of legacy repositories where it would
cause more pain to change incorrect objects than to live with them
(e.g. a duplicate 'author' line in an early commit object).

The intended use case is for server administrators to inspect objects
that are reported by `git push` as being too problematic to enter the
repository, and to add the objects' SHA-1 to a (preferably sorted) file
when the objects are legitimate, i.e. when it is determined that those
problematic objects should be allowed to enter the server.

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

fsck: introduce `git fsck --connectivity-only`Johannes Schindelin Mon, 22 Jun 2015 15:27:12 +0000 (17:27 +0200)

fsck: introduce `git fsck --connectivity-only`

This option avoids unpacking each and all blob objects, and just
verifies the connectivity. In particular with large repositories, this
speeds up the operation, at the expense of missing corrupt blobs,
ignoring unreachable objects and other fsck issues, if any.

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

fsck: support demoting errors to warningsJohannes Schindelin Mon, 22 Jun 2015 15:27:06 +0000 (17:27 +0200)

fsck: support demoting errors to warnings

We already have support in `git receive-pack` to deal with some legacy
repositories which have non-fatal issues.

Let's make `git fsck` itself useful with such repositories, too, by
allowing users to ignore known issues, or at least demote those issues
to mere warnings.

Example: `git -c fsck.missingEmail=ignore fsck` would hide
problems with missing emails in author, committer and tagger lines.

In the same spirit that `git receive-pack`'s usage of the fsck machinery
differs from `git fsck`'s – some of the non-fatal warnings in `git fsck`
are fatal with `git receive-pack` when receive.fsckObjects = true, for
example – we strictly separate the fsck.<msg-id> from the
receive.fsck.<msg-id> settings.

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

fsck: document the new receive.fsck.<msg-id> optionsJohannes Schindelin Mon, 22 Jun 2015 15:27:00 +0000 (17:27 +0200)

fsck: document the new receive.fsck.<msg-id> options

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

fsck: allow upgrading fsck warnings to errorsJohannes Schindelin Mon, 22 Jun 2015 15:26:54 +0000 (17:26 +0200)

fsck: allow upgrading fsck warnings to errors

The 'invalid tag name' and 'missing tagger entry' warnings can now be
upgraded to errors by specifying `invalidTagName` and
`missingTaggerEntry` in the receive.fsck.<msg-id> config setting.

Incidentally, the missing tagger warning is now really shown as a warning
(as opposed to being reported with the "error:" prefix, as it used to be
the case before this commit).

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

fsck: optionally ignore specific fsck issues completelyJohannes Schindelin Mon, 22 Jun 2015 15:26:48 +0000 (17:26 +0200)

fsck: optionally ignore specific fsck issues completely

An fsck issue in a legacy repository might be so common that one would
like not to bother the user with mentioning it at all. With this change,
that is possible by setting the respective message type to "ignore".

This change "abuses" the missingEmail=warn test to verify that "ignore"
is also accepted and works correctly. And while at it, it makes sure
that multiple options work, too (they are passed to unpack-objects or
index-pack as a comma-separated list via the --strict=... command-line
option).

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

fsck: disallow demoting grave fsck errors to warningsJohannes Schindelin Mon, 22 Jun 2015 15:26:42 +0000 (17:26 +0200)

fsck: disallow demoting grave fsck errors to warnings

Some kinds of errors are intrinsically unrecoverable (e.g. errors while
uncompressing objects). It does not make sense to allow demoting them to
mere warnings.

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

fsck: add a simple test for receive.fsck.<msg-id>Johannes Schindelin Mon, 22 Jun 2015 15:26:36 +0000 (17:26 +0200)

fsck: add a simple test for receive.fsck.<msg-id>

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

fsck: make fsck_tag() warn-friendlyJohannes Schindelin Mon, 22 Jun 2015 15:26:30 +0000 (17:26 +0200)

fsck: make fsck_tag() warn-friendly

When fsck_tag() identifies a problem with the commit, it should try
to make it possible to continue checking the commit object, in case the
user wants to demote the detected errors to mere warnings.

Just like fsck_commit(), there are certain problems that could hide other
issues with the same tag object. For example, if the 'type' line is not
encountered in the correct position, the 'tag' line – if there is any –
would not be handled at all.

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

fsck: handle multiple authors in commits speciallyJohannes Schindelin Mon, 22 Jun 2015 15:26:23 +0000 (17:26 +0200)

fsck: handle multiple authors in commits specially

This problem has been detected in the wild, and is the primary reason
to introduce an option to demote certain fsck errors to warnings. Let's
offer to ignore this particular problem specifically.

Technically, we could handle such repositories by setting
receive.fsck.<msg-id> to missingCommitter=warn, but that could hide
missing tree objects in the same commit because we cannot continue
verifying any commit object after encountering a missing committer line,
while we can continue in the case of multiple author lines.

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

fsck: make fsck_commit() warn-friendlyJohannes Schindelin Mon, 22 Jun 2015 15:26:11 +0000 (17:26 +0200)

fsck: make fsck_commit() warn-friendly

When fsck_commit() identifies a problem with the commit, it should try
to make it possible to continue checking the commit object, in case the
user wants to demote the detected errors to mere warnings.

Note that some problems are too problematic to simply ignore. For
example, when the header lines are mixed up, we punt after encountering
an incorrect line. Therefore, demoting certain warnings to errors can
hide other problems. Example: demoting the missingauthor error to
a warning would hide a problematic committer line.

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

fsck: make fsck_ident() warn-friendlyJohannes Schindelin Mon, 22 Jun 2015 15:26:03 +0000 (17:26 +0200)

fsck: make fsck_ident() warn-friendly

When fsck_ident() identifies a problem with the ident, it should still
advance the pointer to the next line so that fsck can continue in the
case of a mere warning.

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

fsck: report the ID of the error/warningJohannes Schindelin Mon, 22 Jun 2015 15:25:52 +0000 (17:25 +0200)

fsck: report the ID of the error/warning

Some repositories written by legacy code have objects with non-fatal
fsck issues. To allow the user to ignore those issues, let's print
out the ID (e.g. when encountering "missingEmail", the user might
want to call `git config --add receive.fsck.missingEmail=warn`).

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

fsck (receive-pack): allow demoting errors to warningsJohannes Schindelin Mon, 22 Jun 2015 15:25:31 +0000 (17:25 +0200)

fsck (receive-pack): allow demoting errors to warnings

For example, missing emails in commit and tag objects can be demoted to
mere warnings with

git config receive.fsck.missingemail=warn

The value is actually a comma-separated list.

In case that the same key is listed in multiple receive.fsck.<msg-id>
lines in the config, the latter configuration wins (this can happen for
example when both $HOME/.gitconfig and .git/config contain message type
settings).

As git receive-pack does not actually perform the checks, it hands off
the setting to index-pack or unpack-objects in the form of an optional
argument to the --strict option.

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

fsck: offer a function to demote fsck errors to warningsJohannes Schindelin Mon, 22 Jun 2015 15:25:25 +0000 (17:25 +0200)

fsck: offer a function to demote fsck errors to warnings

There are legacy repositories out there whose older commits and tags
have issues that prevent pushing them when 'receive.fsckObjects' is set.
One real-life example is a commit object that has been hand-crafted to
list two authors.

Often, it is not possible to fix those issues without disrupting the
work with said repositories, yet it is still desirable to perform checks
by setting `receive.fsckObjects = true`. This commit is the first step
to allow demoting specific fsck issues to mere warnings.

The `fsck_set_msg_types()` function added by this commit parses a list
of settings in the form:

missingemail=warn,badname=warn,...

Unfortunately, the FSCK_WARN/FSCK_ERROR flag is only really heeded by
git fsck so far, but other call paths (e.g. git index-pack --strict)
error out *always* no matter what type was specified. Therefore, we need
to take extra care to set all message types to FSCK_ERROR by default in
those cases.

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

Revert "diff-lib.c: adjust position of i-t-a entries... Junio C Hamano Tue, 23 Jun 2015 17:27:47 +0000 (10:27 -0700)

Revert "diff-lib.c: adjust position of i-t-a entries in diff"

This reverts commit d95d728aba06a34394d15466045cbdabdada58a2.

It turns out that many other commands that need to interact with the
result of running diff-files and diff-index, e.g. "git apply", "git
rm", etc., need to be adjusted to the new world order it brings in.
For example, it would break this sequence to correct a whitespace
breakage in the parts you changed:

git add -N file
git diff --cached file | git apply --cached --whitespace=fix
git checkout file

In the old world order, "diff" showed a patch to modify an existing
empty file by adding its full contents, and "apply" updated the
index by modifying the existing empty blob (which is what an
Intent-to-Add entry records in the index) with that patch.

In the new world order, "diff" shows a patch to create a new file
with its full contents, but because "apply" thinks that the i-t-a
entry already exists in the index, it refused to accept a creation.

Adjusting "apply" to this new world order is easy, but we need to
assess the extent of the damage to the rest of the system the new
world order brought in before going forward and adjust them all,
after which we can resurrect the commit being reverted here.

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

contrib/subtree: small tidy-up to testCharles Bailey Mon, 22 Jun 2015 13:53:30 +0000 (14:53 +0100)

contrib/subtree: small tidy-up to test

There's no need to switch branches to parse another branch's ancestry.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/subtree: fix broken &&-chains and revealed... Charles Bailey Mon, 22 Jun 2015 13:53:29 +0000 (14:53 +0100)

contrib/subtree: fix broken &&-chains and revealed test error

This fixes two instances where a &&-chain was broken in the subtree
tests and fixes a test error that was revealed because of this.

Many tests in t7900-subtree.sh make a commit and then use 'undo' to
reset the state for the next test. In the 'check hash of split' test,
an 'undo' was being invoked after a 'subtree split' even though the
particular invocation of 'subtree split' did not actually make a commit.
The subsequent check_equal was failing, but this failure was masked by
that broken &&-chain.

Removing this undo causes the failing check_equal to succeed but breaks
the a check_equal later on in the same test.

It turns out that an earlier test ('check if --message for merge works
with squash too') makes a commit but doesn't 'undo' to the state
expected by the remaining tests. None of the intervening tests cared
enough about the state of the test repo to fail and the spurious 'undo'
in 'check hash of split' restored the expected state for any remaining
test that might care.

Adding the missing 'undo' to 'check if --message for merge works
with squash too' and removing the spurious one from 'check hash of
split' fixes all tests once the &&-chains are completed.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/subtree: use tabs consitently for indentation... Charles Bailey Mon, 22 Jun 2015 13:53:28 +0000 (14:53 +0100)

contrib/subtree: use tabs consitently for indentation in tests

Although subtrees tests uses more spaces for indentation than tabs,
there are still quite a lot of lines indented with tabs. As tabs conform
with Git coding guidelines resolve the inconsistency in favour of tabs.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse-options: move unsigned long option parsing out... Charles Bailey Sun, 21 Jun 2015 18:25:44 +0000 (19:25 +0100)

parse-options: move unsigned long option parsing out of pack-objects.c

The unsigned long option parsing (including 'k'/'m'/'g' suffix
parsing) is more widely applicable. Add support for OPT_MAGNITUDE
to parse-options.h and change pack-objects.c use this support.

The error behavior on parse errors follows that of OPT_INTEGER. The
name of the option that failed to parse is reported with a brief
message describing the expect format for the option argument and
then the full usage message for the command invoked.

This differs from the previous behavior for OPT_ULONG used in
pack-objects for --max-pack-size and --window-memory which used to
display the value supplied in the error message and did not display
the full usage message.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-parse-options: update to handle negative intsCharles Bailey Sun, 21 Jun 2015 18:25:43 +0000 (19:25 +0100)

test-parse-options: update to handle negative ints

Fix the printf specification to treat 'integer' as the signed type
that it is and add a test that checks that we parse negative option
arguments.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file: add --batch-all-objects optionJeff King Mon, 22 Jun 2015 10:45:59 +0000 (06:45 -0400)

cat-file: add --batch-all-objects option

It can sometimes be useful to examine all objects in the
repository. Normally this is done with "git rev-list --all
--objects", but:

1. That shows only reachable objects. You may want to look
at all available objects.

2. It's slow. We actually open each object to walk the
graph. If your operation is OK with seeing unreachable
objects, it's an order of magnitude faster to just
enumerate the loose directories and pack indices.

You can do this yourself using "ls" and "git show-index",
but it's non-obvious. This patch adds an option to
"cat-file --batch-check" to operate on all available
objects (rather than reading names from stdin).

This is based on a proposal by Charles Bailey to provide a
separate "git list-all-objects" command. That is more
orthogonal, as it splits enumerating the objects from
getting information about them. However, in practice you
will either:

a. Feed the list of objects directly into cat-file anyway,
so you can find out information about them. Keeping it
in a single process is more efficient.

b. Ask the listing process to start telling you more
information about the objects, in which case you will
reinvent cat-file's batch-check formatter.

Adding a cat-file option is simple and efficient. And if you
really do want just the object names, you can always do:

git cat-file --batch-check='%(objectname)' --batch-all-objects

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

cat-file: split batch_one_object into two stagesJeff King Mon, 22 Jun 2015 10:45:41 +0000 (06:45 -0400)

cat-file: split batch_one_object into two stages

There are really two things going on in this function:

1. We convert the name we got on stdin to a sha1.

2. We look up and print information on the sha1.

Let's split out the second half so that we can call it
separately.

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

cat-file: stop returning value from batch_one_objectJeff King Mon, 22 Jun 2015 10:45:33 +0000 (06:45 -0400)

cat-file: stop returning value from batch_one_object

If batch_one_object returns an error code, we stop reading
input. However, it will only do so if we feed it NULL,
which cannot happen; we give it the "buf" member of a
strbuf, which is always non-NULL.

We did originally stop on other errors (like a missing
object), but this was changed in 3c076db (cat-file --batch /
--batch-check: do not exit if hashes are missing,
2008-06-09). These days we keep going for any per-object
error (and print "missing" when necessary).

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

cat-file: add --buffer optionJeff King Mon, 22 Jun 2015 10:45:17 +0000 (06:45 -0400)

cat-file: add --buffer option

We use a direct write() to output the results of --batch and
--batch-check. This is good for processes feeding the input
and reading the output interactively, but it introduces
measurable overhead if you do not want this feature. For
example, on linux.git:

$ git rev-list --objects --all | cut -d' ' -f1 >objects
$ time git cat-file --batch-check='%(objectsize)' \
<objects >/dev/null
real 0m5.440s
user 0m5.060s
sys 0m0.384s

This patch adds an option to use regular stdio buffering:

$ time git cat-file --batch-check='%(objectsize)' \
--buffer <objects >/dev/null
real 0m4.975s
user 0m4.888s
sys 0m0.092s

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

cat-file: move batch_options definition to top of fileJeff King Mon, 22 Jun 2015 10:41:03 +0000 (06:41 -0400)

cat-file: move batch_options definition to top of file

That way all of the functions can make use of it.

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

cat-file: minor style fix in options listJeff King Mon, 22 Jun 2015 10:40:56 +0000 (06:40 -0400)

cat-file: minor style fix in options list

We do not put extra whitespace before the first macro
argument.

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

Merge branch 'jk/maint-for-each-packed-object' into... Junio C Hamano Mon, 22 Jun 2015 21:54:15 +0000 (14:54 -0700)

Merge branch 'jk/maint-for-each-packed-object' into jk/cat-file-batch-all

* jk/maint-for-each-packed-object:
for_each_packed_object: automatically open pack index

for_each_packed_object: automatically open pack indexJeff King Mon, 22 Jun 2015 10:40:50 +0000 (06:40 -0400)

for_each_packed_object: automatically open pack index

When for_each_packed_object is called, we call
prepare_packed_git() to make sure we have the actual list of
packs. But the latter does not actually open the pack
indices, meaning that pack->nr_objects may simply be 0 if
the pack has not otherwise been used since the program
started.

In practice, this didn't come up for the current callers,
because they iterate the packed objects only after iterating
all reachable objects (so for it to matter you would have to
have a pack consisting only of unreachable objects). But it
is a dangerous and confusing interface that should be fixed
for future callers.

Note that we do not end the iteration when a pack cannot be
opened, but we do return an error. That lets you complete
the iteration even in actively-repacked repository where an
.idx file may racily go away, but it also lets callers know
that they may not have gotten the complete list (which the
current reachability-check caller does care about).

We have to tweak one of the prune tests due to the changed
return value; an earlier test creates bogus .idx files and
does not clean them up. Having to make this tweak is a good
thing; it means we will not prune in a broken repository,
and the test confirms that we do not negatively impact a
more lenient caller, count-objects.

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

verify-tag: add option to print raw gpg status informationbrian m. carlson Sun, 21 Jun 2015 23:14:43 +0000 (23:14 +0000)

verify-tag: add option to print raw gpg status information

verify-tag by default displays human-readable output on standard error.
However, it can also be useful to get access to the raw gpg status
information, which is machine-readable, allowing automated
implementation of signing policy. Add a --raw option to make verify-tag
produce the gpg status information on standard error instead of the
human-readable format.

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