gitweb.git
Merge branch 'jk/strbuf-vaddf'Junio C Hamano Tue, 15 Mar 2011 21:23:04 +0000 (14:23 -0700)

Merge branch 'jk/strbuf-vaddf'

* jk/strbuf-vaddf:
compat: fall back on __va_copy if available
strbuf: add strbuf_vaddf
compat: provide a fallback va_copy definition

Merge branch 'mm/push-default-advice'Junio C Hamano Tue, 15 Mar 2011 21:22:55 +0000 (14:22 -0700)

Merge branch 'mm/push-default-advice'

* mm/push-default-advice:
push: better error message when no remote configured
push: better error messages when push.default = tracking

Merge branch 'jn/maint-instaweb-plack-fix'Junio C Hamano Tue, 15 Mar 2011 21:22:37 +0000 (14:22 -0700)

Merge branch 'jn/maint-instaweb-plack-fix'

* jn/maint-instaweb-plack-fix:
git-instaweb: Change how gitweb.psgi is made runnable as standalone app

Merge branch 'sp/maint-fd-limit'Junio C Hamano Tue, 15 Mar 2011 21:22:23 +0000 (14:22 -0700)

Merge branch 'sp/maint-fd-limit'

* sp/maint-fd-limit:
sha1_file.c: Don't retain open fds on small packs
mingw: add minimum getrlimit() compatibility stub
Limit file descriptors used by packs

Merge branch 'jc/checkout-orphan-warning'Junio C Hamano Tue, 15 Mar 2011 21:22:16 +0000 (14:22 -0700)

Merge branch 'jc/checkout-orphan-warning'

* jc/checkout-orphan-warning:
commit: give final warning when reattaching HEAD to leave commits behind

Merge branch 'jh/maint-do-not-track-non-branches'Junio C Hamano Tue, 15 Mar 2011 21:22:13 +0000 (14:22 -0700)

Merge branch 'jh/maint-do-not-track-non-branches'

* jh/maint-do-not-track-non-branches:
branch/checkout --track: Ensure that upstream branch is indeed a branch

Merge branch 'fk/maint-cvsimport-early-failure'Junio C Hamano Tue, 15 Mar 2011 21:22:09 +0000 (14:22 -0700)

Merge branch 'fk/maint-cvsimport-early-failure'

* fk/maint-cvsimport-early-failure:
git-cvsimport.perl: Bail out right away when reading from the server fails

Merge branch 'jc/maint-apply-report-offset'Junio C Hamano Tue, 15 Mar 2011 21:22:02 +0000 (14:22 -0700)

Merge branch 'jc/maint-apply-report-offset'

* jc/maint-apply-report-offset:
apply -v: show offset count when patch did not apply exactly

Merge branch 'jc/maint-apply-no-double-patch'Junio C Hamano Tue, 15 Mar 2011 21:22:00 +0000 (14:22 -0700)

Merge branch 'jc/maint-apply-no-double-patch'

* jc/maint-apply-no-double-patch:
apply: do not patch lines that were already patched

Merge branch 'mr/hpux'Junio C Hamano Tue, 15 Mar 2011 21:21:47 +0000 (14:21 -0700)

Merge branch 'mr/hpux'

* mr/hpux:
git-compat-util.h: Honor HP C's noreturn attribute
Makefile: add NO_FNMATCH_CASEFOLD to HP-UX section

Documentation: running test with --debug keeps "trash... Piotr Krukowiecki Tue, 15 Mar 2011 19:58:14 +0000 (20:58 +0100)

Documentation: running test with --debug keeps "trash" directory

Signed-off-by: Piotr Krukowiecki <piotr.krukowiecki@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jk/doc-credits' of git://github.com/peff/gitJunio C Hamano Tue, 15 Mar 2011 20:32:09 +0000 (13:32 -0700)

Merge branch 'jk/doc-credits' of git://github.com/peff/git

* 'jk/doc-credits' of git://github.com/peff/git:
docs: point git.txt author credits to git-scm.com
doc: add missing git footers
doc: drop author/documentation sections from most pages

tests: scrub environment of GIT_* variablesJonathan Nieder Tue, 15 Mar 2011 10:10:45 +0000 (05:10 -0500)

tests: scrub environment of GIT_* variables

Variables from the inherited environment that are meaningful to git
can break tests in undesirable ways. For example,

GIT_PAGER=more sh t5400-send-pack.sh -v -i

hangs. So unset all environment variables in the GIT_ namespace in
test-lib, with a few exceptions:

- GIT_TRACE* are useful for tracking down bugs exhibited by a failing
test;

- GIT_DEBUG* are GIT_TRACE variables by another name, practically
speaking. They should probably be tweaked to follow the
GIT_TRACE_foo scheme and use trace_printf machinery some time.

- GIT_USE_LOOKUP from v1.5.6-rc0~134^2~1 (sha1-lookup: more memory
efficient search in sorted list of SHA-1, 2007-12-29) is about
trying an alternate implementation strategy rather than changing
semantics and it can be useful to compare performance with and
without it set.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config: drop support for GIT_CONFIG_NOGLOBALJonathan Nieder Tue, 15 Mar 2011 09:04:49 +0000 (04:04 -0500)

config: drop support for GIT_CONFIG_NOGLOBAL

Now that test-lib sets $HOME to protect against pollution from user
settings, GIT_CONFIG_NOGLOBAL is not needed for use by the test
suite any more. And as luck would have it, a quick code search
reveals no other users in the wild.

This patch does not affect GIT_CONFIG_NOSYSTEM, which is still
needed.

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

gitattributes: drop support for GIT_ATTR_NOGLOBALJonathan Nieder Tue, 15 Mar 2011 09:04:15 +0000 (04:04 -0500)

gitattributes: drop support for GIT_ATTR_NOGLOBAL

test-lib sets $HOME to protect against pollution from user settings,
so setting GIT_ATTR_NOGLOBAL would be redundant. Simplify by
eliminating support for that environment variable altogether.

GIT_ATTR_NOGLOBAL was introduced in v1.7.4-rc0~208^2 (Add global and
system-wide gitattributes, 2010-09-01) as an undocumented feature for
use by the test suite. It never ended up being used (neither within
git.git nor in other projects).

This patch does not affect GIT_ATTR_NOSYSTEM, which should still be
useful.

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

tests: suppress system gitattributesJonathan Nieder Tue, 15 Mar 2011 09:05:10 +0000 (04:05 -0500)

tests: suppress system gitattributes

Set GIT_ATTR_NOSYSTEM in test-lib to make tests more reliable in two
ways:

- an invalid GIT_ATTR_NOSYSTEM setting should not cause tests to fail
with "fatal: bad config value for 'GIT_ATTR_NOSYSTEM'".

- /etc/gitattributes should not change the outcome of tests.

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

tests: stop worrying about obsolete environment variablesJonathan Nieder Tue, 15 Mar 2011 10:09:24 +0000 (05:09 -0500)

tests: stop worrying about obsolete environment variables

After v0.99.7~99 (Retire support for old environment variables,
2005-09-09), there is no more need to unset a stray AUTHOR_NAME
variable that might have entered the test environment.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

upload-pack: Implement no-done capabilityShawn O. Pearce Tue, 15 Mar 2011 00:59:40 +0000 (17:59 -0700)

upload-pack: Implement no-done capability

If the client requests both multi_ack_detailed and no-done then
upload-pack is free to immediately send a PACK following its first
'ACK %s ready' message. The upload-pack response actually winds
up being:

ACK %s common
... (maybe more) ...
ACK %s ready
NAK
ACK %s
PACK.... the pack stream ....

For smart HTTP connections this saves one HTTP RPC, reducing
the overall latency for a trivial fetch. For git:// and ssh://
a no-done option slightly reduces latency by removing one
server->client->server round-trip at the end of the common
ancestor negotiation.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch-pack: Implement no-done capabilityShawn O. Pearce Tue, 15 Mar 2011 00:59:39 +0000 (17:59 -0700)

fetch-pack: Implement no-done capability

If enabled on the connection "multi_ack_detailed no-done" as a
pair allows the remote upload-pack process to send a PACK down
to the client as soon as a "ACK %s ready" message was also sent.

Over git:// and ssh:// where a bi-directional stream is in place
this has very little difference over the classical version that
waits for the client to send a "done\n" line by itself. It does
slightly reduce the latency involved to start the pack stream as
there is one less round-trip from client->server required.

Over smart HTTP this avoids needing to send a final RPC that has
all of the prior common objects. Instead the server is able to
return a pack as soon as its ready to. For many common users the
smart HTTP fetch is now just 2 requests: GET .../info/refs, and
a POST .../git-upload-pack to not only negotiate but also receive
the pack stream. Only users who have more than 32 local unshared
commits with the remote will need additional requests to negotiate
a common merge base.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

upload-pack: More aggressively send 'ACK %s ready'Shawn O. Pearce Mon, 14 Mar 2011 23:48:39 +0000 (16:48 -0700)

upload-pack: More aggressively send 'ACK %s ready'

If a client is merely following the remote (and has not made any
new commits itself), all "have %s" lines sent by the client will be
common to the server. As all lines are common upload-pack never
calls ok_to_give_up() and does not compute if it has a good cut
point in the commit graph.

Without this computation the following client is going to send all
tagged commits, as these were determined to be COMMON_REF during the
initial advertisement, but the client does not parse their history
to transitively pass the COMMON flag and empty its queue of commits.

For git.git with 339 commit tags, it takes clients 11 rounds of
negotation to fully send all tagged commits and exhaust its queue
of things to send as common. This is pretty slow for a client that
has not done any local development activity.

Force computing ok_to_give_up() and send "ACK %s ready" at the end
of the current round if this round only contained common objects
and ok_to_give_up() was therefore not called. This may allow the
client to break early, avoiding transmission of the COMMON_REFs.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch-pack: Finish negotation if remote replies "ACK... Shawn O. Pearce Mon, 14 Mar 2011 23:48:38 +0000 (16:48 -0700)

fetch-pack: Finish negotation if remote replies "ACK %s ready"

If multi_ack_detailed was selected in the protocol capabilities
(both client and server are >= Git 1.6.6) the upload-pack side will
send "ACK %s ready" when it knows how to safely cut the graph and
produce a reasonable pack for the want list that was already sent
on the connection.

Upon receiving "ACK %s ready" there is no point in looking at
the remaining commits inside of rev_list. Sending additional
"have %s" lines to the remote will not construct a smaller pack.
It is unlikely a commit older than the current cut point will have
a better delta base than the cut point itself has.

The original design of this code had fetch-pack empty rev_list by
marking a commit and its transitive ancestors COMMON whenever the
remote side said "ACK %s {continue,common}" and skipping over any
already COMMON commits during get_rev(). This approach does not
work when most of rev_list is actually COMMON_REF, commits that
are pointed to by a reference on the remote, which exist locally,
and which have not yet been sent to the remote as a "have %s" line.

Most of the common references are tags in the ref/tags namespace,
using points in the commit graph that are more than 1 commit apart.
In git.git itself, this is currently 340 tags, 339 of which point to
commits in the commit graph. fetch-pack pushes all of these into
rev_list, but is unable to mark them COMMON and discard during a
remote's "ACK %s {continue,common}" because it does not parse through
the entire parent chain. Not parsing the entire parent chain is
an optimization to avoid walking back to the roots of the repository.

Assuming the client is only following the remote (and does not make
its own local commits), the client needs 11 rounds to spin through
the entire list of tags (32 commits per round, ceil(339/32) == 11).
Unfortunately the server knows on the first "have %s" line that
it can produce a good pack, and does not need to see the remaining
320 tags in the other 10 rounds.

Over git:// and ssh:// this isn't as bad as it sounds, the client is
only transmitting an extra 16,000 bytes that it doesn't need to send.

Over smart HTTP, the client must do an additional 10 HTTP POST
requests, each of which incurs round-trip latency, and must upload
the entire state vector of all known common objects. On the final
POST request, this is 16 KiB worth of data.

Fix all of this by clearing rev_list as soon as the remote side
says it can construct a pack.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

list-objects.c: don't add an unparsed NULL as a pending... Junio C Hamano Mon, 14 Mar 2011 19:29:50 +0000 (12:29 -0700)

list-objects.c: don't add an unparsed NULL as a pending tree

"git rev-list --first-parent --boundary $commit^..$commit" segfaults on a
merge commit since 8d2dfc4 (process_{tree,blob}: show objects without
buffering, 2009-04-10), as it tried to dereference a commit that was
discarded as UNINTERESTING without being parsed (hence lacking "tree").

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

Merge branch 'sp/maint-smart-http-sans-100-continue'Junio C Hamano Mon, 14 Mar 2011 18:59:10 +0000 (11:59 -0700)

Merge branch 'sp/maint-smart-http-sans-100-continue'

* sp/maint-smart-http-sans-100-continue:
smart-http: Really never use Expect: 100-continue

smart-http: Really never use Expect: 100-continueShawn O. Pearce Mon, 14 Mar 2011 18:28:17 +0000 (11:28 -0700)

smart-http: Really never use Expect: 100-continue

libcurl may choose to try and use Expect: 100-continue for
any type of POST, not just a Transfer: chunked-encoding type.
Force it to disable this feature, as not all proxy servers support
100-continue and leaving it enabled can cause 1 second stalls during
the negotiation phase of fetch-pack/upload-pack.

In ("206b099d26 smart-http: Don't use Expect: 100-Continue") we
tried to disable this for only large POST bodies, but it should be
disabled for every POST body.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: "rebase <onto> <that>" stays on <that... Drew Northup Mon, 14 Mar 2011 15:47:37 +0000 (11:47 -0400)

Documentation: "rebase <onto> <that>" stays on <that> branch upon exit

This change makes it clearer that the change to the history effected by
executing 'git rebase master' while on 'topic' branch, and by executing
'git rebase master topic' on any branch, will be the same; the implicit
checkout of the second form will remain after the rebase exits.

Signed-off-by: Drew Northup <drew.northup@maine.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

object.h: Remove obsolete struct object_refsJakob Pfender Mon, 14 Mar 2011 16:23:52 +0000 (17:23 +0100)

object.h: Remove obsolete struct object_refs

7914053 (Remove unused object-ref code, 2008-02-25) removed all uses of
the structure from the code, but forgot to remove the type definition
itself.

Signed-off-by: Jakob Pfender <jpfender@elegosoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git stash: show status relative to current directoryPiotr Krukowiecki Sat, 12 Mar 2011 08:57:46 +0000 (09:57 +0100)

git stash: show status relative to current directory

git status shows modified paths relative to current directory, so it's
possible to copy&paste them directly, even if you're in a subdirectory.

But "git stash apply" always shows status from root of git repository.
This is misleading because you can't use the paths without modifications.

This is caused by changing directory to root of repository at the
beginning of git stash.

This patch makes git stash show status relative to current directory.
Instead of removing the "cd to toplevel", which would affect whole
script and might have other side-effects, the fix is to change directory
temporarily back to original dir just before displaying status.

Signed-off-by: Piotr Krukowiecki <piotr.krukowiecki@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'pw/p4'Junio C Hamano Sun, 13 Mar 2011 08:10:06 +0000 (00:10 -0800)

Merge branch 'pw/p4'

* pw/p4:
git-p4: test clone @all
git-p4: fix clone @all regression

git-p4: test clone @allPete Wyckoff Sat, 12 Mar 2011 16:24:49 +0000 (11:24 -0500)

git-p4: test clone @all

Cloning a p4 depot by default generates a single commit. The use
of the "@all" revision specifier instead tells git-p4 to import
all commits. Check to make sure both these invocations work as
expected.

Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: fix clone @all regressionPete Wyckoff Sat, 12 Mar 2011 16:23:23 +0000 (11:23 -0500)

git-p4: fix clone @all regression

e32e00d (git-p4: better message for "git-p4 sync" when not cloned,
2011-02-19) broke the use of the "@all" revision specifier, e.g.,

git-p4 clone //depot/xxx@all

Fix it as per Tor Arvid's quick patch.

Signed-off-by: Pete Wyckoff <pw@padd.com>
Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Based-on-patch-by: Tor Arvid Lund <torarvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

docs: point git.txt author credits to git-scm.comJeff King Sun, 13 Mar 2011 03:00:38 +0000 (22:00 -0500)

docs: point git.txt author credits to git-scm.com

There is a nice shortlog-ish output of the authors there. We
also point people directly to shortlog, but of course they
might be reading the documentation online or from a binary
package of git.

Make the default abbrev length configurableLinus Torvalds Thu, 28 Oct 2010 18:28:04 +0000 (11:28 -0700)

Make the default abbrev length configurable

The default of 7 comes from fairly early in git development, when
seven hex digits was a lot (it covers about 250+ million hash
values). Back then I thought that 65k revisions was a lot (it was what
we were about to hit in BK), and each revision tends to be about 5-10
new objects or so, so a million objects was a big number.

These days, the kernel isn't even the largest git project, and even
the kernel has about 220k revisions (_much_ bigger than the BK tree
ever was) and we are approaching two million objects. At that point,
seven hex digits is still unique for a lot of them, but when we're
talking about just two orders of magnitude difference between number
of objects and the hash size, there _will_ be collisions in truncated
hash values. It's no longer even close to unrealistic - it happens all
the time.

We should both increase the default abbrev that was unrealistically
small, _and_ add a way for people to set their own default per-project
in the git config file.

This is the first step to first make it configurable; the default of 7
is not raised yet.

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

doc: add missing git footersJeff King Fri, 11 Mar 2011 06:08:48 +0000 (01:08 -0500)

doc: add missing git footers

Almost every page has a footer that links back to the main
git(1) page. Let's add it on the few that are missing it.

doc: drop author/documentation sections from most pagesJeff King Fri, 11 Mar 2011 05:52:08 +0000 (00:52 -0500)

doc: drop author/documentation sections from most pages

The point of these sections is generally to:

1. Give credit where it is due.

2. Give the reader an idea of where to ask questions or
file bug reports.

But they don't do a good job of either case. For (1), they
are out of date and incomplete. A much more accurate answer
can be gotten through shortlog or blame. For (2), the
correct contact point is generally git@vger, and even if you
wanted to cc the contact point, the out-of-date and
incomplete fields mean you're likely sending to somebody
useless.

So let's drop the fields entirely from all manpages except
git(1) itself. We already point people to the mailing list
for bug reports there, and we can update the Authors section
to give credit to the major contributors and point to
shortlog and blame for more information.

Each page has a "This is part of git" footer, so people can
follow that to the main git manpage.

Merge branch 'maint'Junio C Hamano Fri, 11 Mar 2011 06:45:49 +0000 (22:45 -0800)

Merge branch 'maint'

* maint:
Revert "core.abbrevguard: Ensure short object names stay unique a bit longer"

Revert "core.abbrevguard: Ensure short object names... Junio C Hamano Fri, 11 Mar 2011 06:41:14 +0000 (22:41 -0800)

Revert "core.abbrevguard: Ensure short object names stay unique a bit longer"

This reverts commit 72a5b561fc1c4286bc7c5b0693afc076af261e1f, as adding
fixed number of hexdigits more than necessary to make one object name
locally unique does not help in futureproofing the uniqueness of names
we generate today.

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

bash: complete 'git diff ...branc<TAB>'SZEDER Gábor Thu, 10 Mar 2011 18:12:29 +0000 (19:12 +0100)

bash: complete 'git diff ...branc<TAB>'

While doing a final sanity check before merging a topic Bsomething, it
is a good idea to review what damage Bsomething branch would make, by
running:

$ git diff ...Bsomething

Unfortunately, our completion script for 'git diff' doesn't offer
anything after '...'. This is because 'git diff's completion function
invokes __git_complete_file() for non-option arguments to complete the
'<tree>:<path>' extended SHA-1 notation, but this helper function
doesn't support refs after '...' or '..'. Completion of refs after
'...' or '..' is supported by the __git_complete_revlist() helper
function, but that doesn't support '<tree>:<path>'.

To support both '...<ref>' and '<tree>:<path>' notations for 'git
diff', this patch, instead of adding yet another helper function,
joins __git_complete_file() and __git_complete_revlist() into the new
common function __git_complete_revlist_file(). The old helper
functions __git_complete_file() and __git_complete_revlist() are
changed to be a direct wrapper around the new
__git_complete_revlist_file(), because they might be used in
user-supplied completion scripts and we don't want to break them.

This change will cause some wrong suggestions for other commands which
use __git_complete_file() ('git diff' and friends) or
__git_complete_revlist() ('git log' and friends), e.g. 'git diff
...master:Doc<TAB>' and 'git log master:Doc<TAB>' will complete the
path to 'Documentation/', although neither commands make any sense.
However, both of these were actively wrong to begin with as soon as
the user entered the ':', so there is no real harm done.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bash: fix misindented esac statement in __git_complete_... SZEDER Gábor Thu, 10 Mar 2011 18:12:28 +0000 (19:12 +0100)

bash: fix misindented esac statement in __git_complete_file()

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-log: put space after commit markMichael J Gruber Thu, 10 Mar 2011 14:45:03 +0000 (15:45 +0100)

git-log: put space after commit mark

Currently, commit marks (left, right, boundary, cherry) are output right
before the commit sha1, which makes it difficult to copy sha1s. Sample
output for "git log --oneline --cherry":

=049c269 t6007: test rev-list --cherry

Change this to

= 049c269 t6007: test rev-list --cherry

which matches exactly the current output of "git log --graph".

Leave "git rev-list" output as is (no space) so that they do not break.

Adjust "git-svn" which uses "git log --pretty=raw --boundary".

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: "make distclean" should clean up after "make... Jonathan Nieder Fri, 25 Feb 2011 07:22:12 +0000 (01:22 -0600)

i18n: "make distclean" should clean up after "make pot"

This is in "make distclean" and not "make clean" to avoid needlessly
changing the POT-Creation-Date in the following scenario:

make clean; # cleaning up after an old build
git pull
make pot; # regenerate po template if necessary
msgmerge po/my_language.po po/git.pot

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: Makefile: "pot" target to extract messages marked... Ævar Arnfjörð Bjarmason Tue, 22 Feb 2011 23:41:23 +0000 (23:41 +0000)

i18n: Makefile: "pot" target to extract messages marked for translation

Add rules to generate a template (po/git.pot) listing messages marked
for translation in the C portion of git.

To get started translating, just run "make pot".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: add stub Q_() wrapper for ngettextJonathan Nieder Thu, 10 Mar 2011 03:17:58 +0000 (21:17 -0600)

i18n: add stub Q_() wrapper for ngettext

The Q_ function translates a string representing some pharse with an
alternative plural form and uses the 'count' argument to choose which
form to return. Use of Q_ solves the "%d noun(s)" problem in a way
that is portable to languages outside the Germanic and Romance
families.

In English, the semantics of Q_(sing, plur, count) are roughly
equivalent to

count == 1 ? _(sing) : _(plur)

while in other languages there can be more variants (count == 0; more
random-looking rules based on the historical pronunciation of the
number). Behind the scenes, the singular form is used to look up a
family of translations and the plural form is ignored unless no
translation is available.

Define such a Q_ in gettext.h with the English semantics so C code can
start using it to mark phrases with a count for translation.

The name "Q_" is taken from subversion and stands for "quantity".
Many projects just use ngettext directly without a wrapper analogous
to _; we should not do so because git's gettext.h is meant not to
conflict with system headers that might include libintl.h.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update Release Notes to 1.7.5Junio C Hamano Thu, 10 Mar 2011 00:21:16 +0000 (16:21 -0800)

Update Release Notes to 1.7.5

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

Merge branch 'js/cherry-pick-usability'Junio C Hamano Wed, 9 Mar 2011 23:56:17 +0000 (15:56 -0800)

Merge branch 'js/cherry-pick-usability'

* js/cherry-pick-usability:
Teach commit about CHERRY_PICK_HEAD
bash: teach __git_ps1 about CHERRY_PICK_HEAD
Introduce CHERRY_PICK_HEAD
t3507: introduce pristine-detach helper

Merge branch 'js/checkout-untracked-symlink'Junio C Hamano Wed, 9 Mar 2011 23:54:04 +0000 (15:54 -0800)

Merge branch 'js/checkout-untracked-symlink'

* js/checkout-untracked-symlink:
do not overwrite untracked symlinks
Demonstrate breakage: checkout overwrites untracked symlink with directory

Merge branch 'so/submodule-no-update-first-time'Junio C Hamano Wed, 9 Mar 2011 23:53:32 +0000 (15:53 -0800)

Merge branch 'so/submodule-no-update-first-time'

* so/submodule-no-update-first-time:
t7406: "git submodule update {--merge|--rebase]" with new submodules
submodule: no [--merge|--rebase] when newly cloned

git-log.txt,rev-list-options.txt: put option blocks... Michael J Gruber Tue, 8 Mar 2011 08:31:26 +0000 (09:31 +0100)

git-log.txt,rev-list-options.txt: put option blocks in proper order

Match the order of the description to the one in which they get applied:

commit limiting
commit ordering
commit formatting
diff options

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log: fix --max-count when used together with -S or -GMatthieu Moy Wed, 9 Mar 2011 20:52:15 +0000 (21:52 +0100)

log: fix --max-count when used together with -S or -G

The --max-count limit is implemented by counting revisions in
get_revision(), but the -S and -G take effect later when running diff.
Hence "--max-count=10 -Sfoo" meant "examine the 10 first revisions, and
out of them, show only those changing the occurences of foo", not "show 10
revisions changing the occurences of foo".

In case the commit isn't actually shown, cancel the decrement of
max_count.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Wed, 9 Mar 2011 22:20:39 +0000 (14:20 -0800)

Merge branch 'maint'

* maint:
Fix typo in t/README
ls-remote documentation: <refs> argument is optional
Add Author and Documentation sections to git-for-each-ref.txt
Documentation: remove redundant colons in git-for-each-ref.txt

t6007: test rev-list --cherryMichael J Gruber Mon, 7 Mar 2011 12:31:43 +0000 (13:31 +0100)

t6007: test rev-list --cherry

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log --cherry: a synonymMichael J Gruber Mon, 7 Mar 2011 12:31:42 +0000 (13:31 +0100)

log --cherry: a synonym

At the porcelain level, because by definition there are many more contributors
than integrators, it makes sense to give a handy short-hand for --right-only
used with --cherry-mark and --no-merges. Make it so.

In other words, this provides "git cherry with rev-list interface".

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-list: documentation and test for --cherry-markMichael J Gruber Mon, 7 Mar 2011 12:31:41 +0000 (13:31 +0100)

rev-list: documentation and test for --cherry-mark

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision.c: introduce --cherry-markMichael J Gruber Mon, 7 Mar 2011 12:31:40 +0000 (13:31 +0100)

revision.c: introduce --cherry-mark

for marking those commits which "--cherry-pick" would drop.
The marker for those commits is '=' because '-' denotes a boundary
commit already, even though 'git cherry' uses it.

Nonequivalent commits are denoted '+' unless '--left-right' is used.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-list/log: factor out revision mark generationMichael J Gruber Mon, 7 Mar 2011 12:31:39 +0000 (13:31 +0100)

rev-list/log: factor out revision mark generation

Currently, we have identical code for generating revision marks ('<',
'>', '-') in 5 places.

Factor out the code to a single function get_revision_mark() for easier
maintenance and extensibility.

Note that the check for !!revs in graph.c (which gets removed
effectively by this patch) is superfluous.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fix typo in t/READMEMathias Lafeldt Wed, 9 Mar 2011 20:25:09 +0000 (21:25 +0100)

Fix typo in t/README

Signed-off-by: Mathias Lafeldt <misfire@debugon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ls-remote documentation: <refs> argument is optionalPiotr Krukowiecki Wed, 9 Mar 2011 20:03:48 +0000 (21:03 +0100)

ls-remote documentation: <refs> argument is optional

Correct SYNOPSIS section.

Signed-off-by: Piotr Krukowiecki <piotr.krukowiecki@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add Author and Documentation sections to git-for-each... Alexei Sholik Tue, 8 Mar 2011 13:16:10 +0000 (15:16 +0200)

Add Author and Documentation sections to git-for-each-ref.txt

Signed-off-by: Alexei Sholik <alcosholik@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: remove redundant colons in git-for-each... Alexei Sholik Tue, 8 Mar 2011 13:16:09 +0000 (15:16 +0200)

Documentation: remove redundant colons in git-for-each-ref.txt

Signed-off-by: Alexei Sholik <alcosholik@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Wed, 9 Mar 2011 05:37:23 +0000 (21:37 -0800)

Merge branch 'maint'

* maint:
SubmittingPatches: clarify the expected commit log description
diff format documentation: clarify --cc and -c
rev-list-options.txt: typo fix

transport-helper.c: fix check for (size_t < 0)Nicolas Kaiser Fri, 4 Mar 2011 23:16:26 +0000 (00:16 +0100)

transport-helper.c: fix check for (size_t < 0)

'bytes' is of type size_t which is unsigned thus can't be negative. But
the assigned write() returns ssize_t, and -1 on error.

For testing < 0, 'bytes' needs to be of a signed type.

Signed-off-by: Nicolas Kaiser <nikai@nikai.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

SubmittingPatches: clarify the expected commit log... Junio C Hamano Wed, 9 Mar 2011 00:58:19 +0000 (16:58 -0800)

SubmittingPatches: clarify the expected commit log description

Earlier, 47afed5 (SubmittingPatches: itemize and reflect upon well written
changes, 2009-04-28) added a discussion on the contents of the commit log
message, but the last part of the new paragraph didn't make much sense.
Reword it slightly to make it more readable.

Update the "quicklist" to clarify what we mean by "motivation" and
"contrast". Also mildly discourage external references.

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

diff format documentation: clarify --cc and -cAdam Monsen Tue, 8 Mar 2011 20:51:37 +0000 (12:51 -0800)

diff format documentation: clarify --cc and -c

The description was unclear if -c or --cc was the default (--cc is for
some commands), and incorrectly implied that the default applies to
all the diff generating commands.

Most importantly, "log" does not default to "--cc" (it defaults to
"--no-merges") and "log -p" obeys the user's wish to see non-combined
format. Only "diff" (during merge and three-blob comparison) and
"show" use --cc as the default.

Signed-off-by: Adam Monsen <haircut@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit, status: use status_printf{,_ln,_more} helpersJonathan Nieder Sat, 26 Feb 2011 05:11:37 +0000 (23:11 -0600)

commit, status: use status_printf{,_ln,_more} helpers

wt-status code is used to provide a reminder of changes included and
not included for the commit message template opened in the operator's
text editor by "git commit". Therefore each line of its output begins
with the comment character "#":

# Please enter the commit message for your changes. Lines starting

Use the new status_printf{,_ln,_more} functions to take care of adding
"#" to the beginning of such status lines automatically. Using these
will have two advantages over the current code:

- The obvious one is to force separation of the "#" from the
translatable part of the message when git learns to translate its
output.

- Another advantage is that this makes it easier for us to drop "#"
prefix in "git status" output in later versions of git if we want
to.

Explained-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit: refer to commit template as s->fpJonathan Nieder Sat, 26 Feb 2011 05:10:49 +0000 (23:10 -0600)

commit: refer to commit template as s->fp

Instead of maintaining a local variable for it, use s->fp to keep
track of where the commit message template should be written.

This prepares us to take advantage of the status_printf functions,
which use a struct wt_status instead of a FILE pointer to determine
where to send their output.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wt-status: add helpers for printing wt-status linesJonathan Nieder Sat, 26 Feb 2011 05:09:41 +0000 (23:09 -0600)

wt-status: add helpers for printing wt-status lines

Introduce status_printf{,_ln,_more} wrapper functions around
color_vfprintf() which take care of adding "#" to the beginning of
status lines automatically. The semantics:

- status_printf() is just like color_fprintf() but it adds a "# "
at the beginning of each line of output;

- status_printf_ln() is a convenience function that additionally
adds "\n" at the end;

- status_printf_more() is a variant of status_printf() used to
continue lines that have already started. It suppresses the "#" at
the beginning of the first line.

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

trace: give repo_setup trace its own keyJeff King Thu, 24 Feb 2011 14:30:30 +0000 (09:30 -0500)

trace: give repo_setup trace its own key

You no longer get this output with GIT_TRACE=1; instead, you
can do GIT_TRACE_SETUP=1.

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

add packet tracing debug codeJeff King Thu, 24 Feb 2011 14:30:19 +0000 (09:30 -0500)

add packet tracing debug code

This shows a trace of all packets coming in or out of a given
program. This can help with debugging object negotiation or
other protocol issues.

To keep the code changes simple, we operate at the lowest
level, meaning we don't necessarily understand what's in the
packets. The one exception is a packet starting with "PACK",
which causes us to skip that packet and turn off tracing
(since the gigantic pack data will not be interesting to
read, at least not in the trace format).

We show both written and read packets. In the local case,
this may mean you will see packets twice (written by the
sender and read by the receiver). However, for cases where
the other end is remote, this allows you to see the full
conversation.

Packet tracing can be enabled with GIT_TRACE_PACKET=<foo>,
where <foo> takes the same arguments as GIT_TRACE.

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

trace: add trace_strbufJeff King Thu, 24 Feb 2011 14:29:50 +0000 (09:29 -0500)

trace: add trace_strbuf

If you happen to have a strbuf, it is a little more readable
and a little more efficient to be able to print it directly
instead of jamming it through the trace_printf interface.

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

trace: factor out "do we want to trace" logicJeff King Thu, 24 Feb 2011 14:28:59 +0000 (09:28 -0500)

trace: factor out "do we want to trace" logic

As we add more tracing areas, this will avoid repeated code.

Technically, trace_printf already checks this and will avoid
printing if the trace key is not set. However, callers may
want to find out early whether or not tracing is enabled so
they can avoid doing work in the common non-trace case.

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

trace: refactor to support multiple env variablesJeff King Thu, 24 Feb 2011 14:28:41 +0000 (09:28 -0500)

trace: refactor to support multiple env variables

Right now you turn all tracing off and on with GIT_TRACE. To
support new types of tracing without forcing the user to see
all of them, we will soon support turning each tracing area
on with GIT_TRACE_*.

This patch lays the groundwork by providing an interface
which does not assume GIT_TRACE. However, we still maintain
the trace_printf interface so that existing callers do not
need to be refactored.

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

trace: add trace_vprintfJeff King Thu, 24 Feb 2011 14:28:15 +0000 (09:28 -0500)

trace: add trace_vprintf

This is a necessary cleanup to adding new types of trace
functions.

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

i18n: do not poison translations unless GIT_GETTEXT_POI... Jonathan Nieder Tue, 22 Feb 2011 23:41:22 +0000 (23:41 +0000)

i18n: do not poison translations unless GIT_GETTEXT_POISON envvar is set

Tweak the GETTEXT_POISON facility so it is activated at run time
instead of compile time. If the GIT_GETTEXT_POISON environment
variable is set, _(msg) will result in gibberish as before; but if the
GIT_GETTEXT_POISON variable is not set, it will return the message for
human-readable output. So the behavior of mistranslated and
untranslated git can be compared without rebuilding git in between.

For simplicity we always set the GIT_GETTEXT_POISON variable in tests.

This does not affect builds without the GETTEXT_POISON compile-time
option set, so non-i18n git will not be slowed down.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: add GETTEXT_POISON to simulate unfriendly translatorÆvar Arnfjörð Bjarmason Tue, 22 Feb 2011 23:41:21 +0000 (23:41 +0000)

i18n: add GETTEXT_POISON to simulate unfriendly translator

Add a new GETTEXT_POISON compile-time parameter to make _(msg) always
return gibberish. So now you can run

make GETTEXT_POISON=YesPlease

to get a copy of git that functions correctly (one hopes) but produces
output that is in nobody's native language at all.

This is a debugging aid for people who are working on the i18n part of
the system, to make sure that they are not marking plumbing messages
that should never be translated with _().

As new strings get marked for translation, naturally a number of tests
will be broken in this mode. Tests that depend on output from
Porcelain will need to be marked with the new C_LOCALE_OUTPUT test
prerequisite. Newly failing tests that do not depend on output from
Porcelain would be bugs due to messages that should not have been
marked for translation.

Note that the string we're using ("# GETTEXT POISON #") intentionally
starts the pound sign. Some of Git's tests such as
t3404-rebase-interactive.sh rely on interactive editing with a fake
editor, and will needlessly break if the message doesn't start with
something the interactive editor considers a comment.

A future patch will fix fix the underlying cause of that issue by
adding "#" characters to the commit advice automatically.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: add no-op _() and N_() wrappersÆvar Arnfjörð Bjarmason Tue, 22 Feb 2011 23:41:20 +0000 (23:41 +0000)

i18n: add no-op _() and N_() wrappers

The _ function is for translating strings into the user's chosen
language. The N_ macro just marks translatable strings for the
xgettext(1) tool without translating them; it is intended for use in
contexts where a function call cannot be used. So, for example:

fprintf(stderr, _("Expansion of alias '%s' failed; "
"'%s' is not a git command\n"),
cmd, argv[0]);

and

const char *unpack_plumbing_errors[NB_UNPACK_TREES_ERROR_TYPES] = {
/* ERROR_WOULD_OVERWRITE */
N_("Entry '%s' would be overwritten by merge. Cannot merge."),
[...]

Define such _ and N_ in a new gettext.h and include it in cache.h, so
they can be used everywhere. Each just returns its argument for now.
_ is a function rather than a macro like N_ to avoid the temptation to
use _("foo") as a string literal (which would be a compile-time error
once _(s) expands to an expression for the translation of s).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit, status: use status_printf{,_ln,_more} helpersJonathan Nieder Sat, 26 Feb 2011 05:11:37 +0000 (23:11 -0600)

commit, status: use status_printf{,_ln,_more} helpers

wt-status code is used to provide a reminder of changes included and
not included for the commit message template opened in the operator's
text editor by "git commit". Therefore each line of its output begins
with the comment character "#":

# Please enter the commit message for your changes. Lines starting

Use the new status_printf{,_ln,_more} functions to take care of adding
"#" to the beginning of such status lines automatically. Using these
will have two advantages over the current code:

- The obvious one is to force separation of the "#" from the
translatable part of the message when git learns to translate its
output.

- Another advantage is that this makes it easier for us to drop "#"
prefix in "git status" output in later versions of git if we want
to.

Explained-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit: refer to commit template as s->fpJonathan Nieder Sat, 26 Feb 2011 05:10:49 +0000 (23:10 -0600)

commit: refer to commit template as s->fp

Instead of maintaining a local variable for it, use s->fp to keep
track of where the commit message template should be written.

This prepares us to take advantage of the status_printf functions,
which use a struct wt_status instead of a FILE pointer to determine
where to send their output.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wt-status: add helpers for printing wt-status linesJonathan Nieder Sat, 26 Feb 2011 05:09:41 +0000 (23:09 -0600)

wt-status: add helpers for printing wt-status lines

Introduce status_printf{,_ln,_more} wrapper functions around
color_vfprintf() which take care of adding "#" to the beginning of
status lines automatically. The semantics:

- status_printf() is just like color_fprintf() but it adds a "# "
at the beginning of each line of output;

- status_printf_ln() is a convenience function that additionally
adds "\n" at the end;

- status_printf_more() is a variant of status_printf() used to
continue lines that have already started. It suppresses the "#" at
the beginning of the first line.

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

compat: fall back on __va_copy if availableJonathan Nieder Tue, 8 Mar 2011 08:33:44 +0000 (02:33 -0600)

compat: fall back on __va_copy if available

Since an obvious implementation of va_list is to make it a pointer
into the stack frame, implementing va_copy as "dst = src" will work on
many systems. Platforms that use something different (e.g., a size-1
array of structs, to be assigned with *(dst) = *(src)) will need some
other compatibility macro, though.

Luckily, as the glibc manual hints, such systems tend to provide the
__va_copy macro (introduced in GCC in March, 1997). By using that if
it is available, we can cover our bases pretty well.

Discovered by building with CC="gcc -std=c89" on an amd64 machine:

$ make CC=c89 strbuf.o
[...]
strbuf.c: In function 'strbuf_vaddf':
strbuf.c:211:2: error: incompatible types when assigning to type 'va_list'
from type 'struct __va_list_tag *'
make: *** [strbuf.o] Error 1

Explained-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-log.txt,rev-list-options.txt: -n/--max-count is... Michael J Gruber Tue, 8 Mar 2011 08:31:25 +0000 (09:31 +0100)

git-log.txt,rev-list-options.txt: -n/--max-count is commit limiting

They are applied after commit ordering and formatting options, in
particular --reverse.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-list-options.txt: typo fixMichael J Gruber Tue, 8 Mar 2011 08:31:24 +0000 (09:31 +0100)

rev-list-options.txt: typo fix

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-compat-util.h: Honor HP C's noreturn attributeMichal Rokos Mon, 7 Mar 2011 12:13:15 +0000 (13:13 +0100)

git-compat-util.h: Honor HP C's noreturn attribute

HP C for Integrity servers (Itanium) gained support for noreturn
attribute sometime in 2006. It was released in Compiler Version
A.06.10 and made available in July 2006.

The __HP_cc define detects the HP C compiler version. Precede the
__GNUC__ check so it works well when compiling with HP C using -Agcc
option that enables partial support for the GNU C dialect. The -Agcc
defines the __GNUC__ too.

Signed-off-by: Michal Rokos <michal.rokos@nextsoft.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: add NO_FNMATCH_CASEFOLD to HP-UX sectionMichal Rokos Mon, 7 Mar 2011 11:43:11 +0000 (12:43 +0100)

Makefile: add NO_FNMATCH_CASEFOLD to HP-UX section

fnmatch() on HP-UX does not support the GNU FNM_CASEFOLD extension,
so set NO_FNMATCH_CASEFOLD to use the internal fnmatch implementation.

Signed-off-by: Michal Rokos <michal.rokos@nextsoft.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

vcs-svn: allow input errors to be detected promptlyJonathan Nieder Mon, 11 Oct 2010 02:51:21 +0000 (21:51 -0500)

vcs-svn: allow input errors to be detected promptly

The line_buffer library silently flags input errors until
buffer_deinit time; unfortunately, by that point usually errno is
invalid. Expose the error flag so callers can check for and
report errors early for easy debugging.

some_error_prone_operation(...);
if (buffer_ferror(buf))
return error("input error: %s", strerror(errno));

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>

vcs-svn: simplify repo_modify_path and repo_copyJonathan Nieder Fri, 10 Dec 2010 06:53:54 +0000 (00:53 -0600)

vcs-svn: simplify repo_modify_path and repo_copy

Restrict the repo_tree API to functions that are actually needed.

- decouple reading the mode and content of dirents from other
operations.
- remove repo_modify_path. It is only used to read the mode from
dirents.
- remove the ability to use repo_read_mode on a missing path. The
existing code only errors out in that case, anyway.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>

vcs-svn: handle_node: use repo_read_pathJonathan Nieder Fri, 10 Dec 2010 10:28:06 +0000 (04:28 -0600)

vcs-svn: handle_node: use repo_read_path

svn-fe processes each commit in two stages: first decide on the
correct content for all paths and export the relevant blobs, then
export a commit with the result.

But we can keep less state and simplify svn-fe a great deal by
exporting the commit in one step: use 'inline' blobs for each path and
remember nothing. This way, the repo_tree structure could be
eliminated, and we would get support for incremental imports 'for
free'.

Reorganize handle_node along these lines. This is just a code
cleanup; the changes in repo_tree and handle_revision will come later.

[db: backported to apply without text delta support]

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>

vcs-svn: introduce repo_read_path to check the content... Jonathan Nieder Sat, 20 Nov 2010 19:25:28 +0000 (13:25 -0600)

vcs-svn: introduce repo_read_path to check the content at a path

The repo_tree structure remembers, for each path in each revision, a
mode (regular file, executable, symlink, or directory) and content
(blob mark or directory structure). Maintaining a second copy of all
this information when it's already in the target repository is
wasteful, it does not persist between svn-fe invocations, and most
importantly, there is no convenient way to transfer it from one
machine to another. So it would be nice to get rid of it.

As a first step, let's change the repo_tree API to match fast-import's
read commands more closely. Currently to read the mode for a path,
one uses

repo_modify_path(path, new_mode, new_content);

which changes the mode and content as a side effect. There is no
function to read the content at a path; add one.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>

apply -v: show offset count when patch did not apply... Junio C Hamano Fri, 4 Mar 2011 22:43:45 +0000 (14:43 -0800)

apply -v: show offset count when patch did not apply exactly

When the line number the patch intended to touch does not match
the line in the version being patched, GNU patch reports that
it applied the hunk at a different line number, with how big an
offset.

Teach "git apply" to do the same under --verbose option.

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

Merge branch 'maint'Junio C Hamano Fri, 4 Mar 2011 23:02:45 +0000 (15:02 -0800)

Merge branch 'maint'

* maint:
Documentation: fix a typo in git-apply.txt
init: remove unnecessary check

Merge branch 'mh/p4'Junio C Hamano Fri, 4 Mar 2011 23:02:28 +0000 (15:02 -0800)

Merge branch 'mh/p4'

* mh/p4:
git-p4 submit: prevent 'Jobs' section from being removed from p4 change log

Merge branch 'mg/maint-difftool-vim-readonly'Junio C Hamano Fri, 4 Mar 2011 23:02:27 +0000 (15:02 -0800)

Merge branch 'mg/maint-difftool-vim-readonly'

* mg/maint-difftool-vim-readonly:
mergetool-lib: call vim in readonly mode for diffs

Merge branch 'jn/maint-commit-missing-template'Junio C Hamano Fri, 4 Mar 2011 23:02:27 +0000 (15:02 -0800)

Merge branch 'jn/maint-commit-missing-template'

* jn/maint-commit-missing-template:
commit: error out for missing commit message template

Merge branch 'jk/diffstat-binary'Junio C Hamano Fri, 4 Mar 2011 23:02:27 +0000 (15:02 -0800)

Merge branch 'jk/diffstat-binary'

* jk/diffstat-binary:
diff: don't retrieve binary blobs for diffstat
diff: handle diffstat of rewritten binary files

Merge branch 'lt/rename-no-extra-copy-detection'Junio C Hamano Fri, 4 Mar 2011 23:02:27 +0000 (15:02 -0800)

Merge branch 'lt/rename-no-extra-copy-detection'

* lt/rename-no-extra-copy-detection:
diffcore-rename: improve estimate_similarity() heuristics
diffcore-rename: properly honor the difference between -M and -C
for_each_hash: allow passing a 'void *data' pointer to callback

Merge branch 'jn/test-terminal-punt-on-osx-breakage'Junio C Hamano Fri, 4 Mar 2011 23:02:26 +0000 (15:02 -0800)

Merge branch 'jn/test-terminal-punt-on-osx-breakage'

* jn/test-terminal-punt-on-osx-breakage:
tests: skip terminal output tests on OS X

Merge branch 'jk/fail-null-clone'Junio C Hamano Fri, 4 Mar 2011 23:02:26 +0000 (15:02 -0800)

Merge branch 'jk/fail-null-clone'

* jk/fail-null-clone:
clone: die when trying to clone missing local path

Merge branch 'jc/grep--no-index-pathspec-fix'Junio C Hamano Fri, 4 Mar 2011 23:02:26 +0000 (15:02 -0800)

Merge branch 'jc/grep--no-index-pathspec-fix'

* jc/grep--no-index-pathspec-fix:
grep --no-index: honor pathspecs correctly

apply: do not patch lines that were already patchedJunio C Hamano Fri, 4 Mar 2011 20:25:34 +0000 (12:25 -0800)

apply: do not patch lines that were already patched

When looking for a place to apply a hunk, we used to check lines that
match the preimage of it, starting from the line that the patch wants to
apply the hunk at, looking forward and backward with increasing offsets
until we find a match.

Colin Guthrie found an interesting case where this misapplied a patch that
wanted to touch a preimage that consists of

}
}

return 0;
}

which is a rather unfortunately common pattern.

The target version of the file originally had only one such location, but
the hunk immediately before that created another instance of such block of
lines, and find_pos() happily reported that the preimage of the hunk
matched what it wanted to modify.

Oops.

By marking the lines application of earlier hunks touched and preventing
match_fragment() from considering them as a match with preimage of other
hunks, we can reduce such an accident.

I also considered to teach apply_one_fragment() to take the offset we have
found while applying the previous hunk into account when looking for a
match with find_pos(), but dismissed that approach, because it would
sometimes work better but sometimes worse, depending on the difference
between the version the patch was created against and the version the
patch is being applied.

This does _not_ prevent misapplication of patches to a file that has many
similar looking blocks of lines and a preimage cannot identify which one
of them should be applied. For that, we would need to scan beyond the
first match in find_pos(), and issue a warning (or error out). That will
be a separate topic.

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

Documentation: fix a typo in git-apply.txtMichał Kiedrowicz Thu, 3 Mar 2011 09:28:30 +0000 (10:28 +0100)

Documentation: fix a typo in git-apply.txt

git-apply accepts the --cached option, not --cache.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

init: remove unnecessary checkNguyễn Thái Ngọc Duy Thu, 3 Mar 2011 12:34:51 +0000 (19:34 +0700)

init: remove unnecessary check

git_dir must always be non-NULL so "if (git_dir)" is unnecessary.
Before this code, if git_dir == NULL, it will default to
DEFAULT_GIT_DIR_ENVIRONMENT.

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

push: better error message when no remote configuredMatthieu Moy Wed, 2 Mar 2011 20:12:11 +0000 (21:12 +0100)

push: better error message when no remote configured

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>