gitweb.git
Reimplement emailing part of hooks--update in contrib... Andy Parkins Fri, 30 Mar 2007 19:16:26 +0000 (19:16 +0000)

Reimplement emailing part of hooks--update in contrib/hooks/post-receive-email

The update hook is no longer the correct place to generate emails; there
is now the hooks/post-receive script which is run automatically after a
ref has been updated.

This patch is to make use of that new location, and to address some
faults in the old update hook.

The primary problem in the conversion was that in the update hook, the
ref has not actually been changed, but is about to be. In the
post-receive hook the ref has already been updated. That meant that
where we previously had lines like:

git rev-list --not --all

would now give the wrong list because "--all" in the post-receive hook
includes the ref that we are making the email for. This made it more
difficult to show only the new revisions added by this update.

The solution is not pretty; however it does work and doesn't need any
changes to git-rev-list itself. It also fixes (more accurately: reduces
the likelihood of) a nasty race when another update occurs while this
script is running. The solution, in short, looks like this (see the
source code for a longer explanation)

git rev-parse --not --all | grep -v $(git rev-parse $refname) |
git rev-list --pretty --stdin $oldrev..$newrev

This uses git-rev-parse followed by grep to filter out the revision of
the ref in question before it gets to rev-list and inhibits the output
of itself. By using $(git rev-parse $revname) rather than $newrev as the
filter, it also takes care of the situation where another update to the
same ref has been made since $refname was $newrev.

The second problem that is addressed is that of tags inhibiting the
correct output of an update email. Consider this, with somebranch and
sometag pointing at the same revision:

git push origin somebranch
git push origin sometag

That would work fine; the push of the branch would generate an email
containing all the new commits introduced by the update, then the push
of the tag would generate the shortlog formatted tag email. Now
consider:

git push origin sometag
git push origin somebranch

When some branch comes to run its "--not --all" line, it will find
sometag, and filter those commits from the email - leaving nothing.
That meant that those commits would not show (in full) on any email.
The fix is to not use "--all", and instead use "--branches" in the
git-rev-parse command.

Other changes
* Lose the monstrous one-giant-script layout and put things in easy to
digest functions. This makes it much easier to find the place you
need to change if you wanted to customise the output. I've also
tried to write more verbose comments for the same reason. The hook
script is big, mainly because of all the different cases that it has
to handle, so being easy to navigate is important.
* All uses of "git-command" changed to "git command", to cope better
if a user decided not to install all the hard links to git;
* Cleaned up some of the English in the email
* The fact that the receive hook makes the ref available also allows me
to use Shawn Pearce's fantastic suggestion that an annotated tag can
be parsed with git-for-each-ref. This removes the potentially
non-portable use of "<<<" heredocs and the nasty messing around with
"date" to convert numbers of seconds UTC to a real date
* Deletions are now caught and notified (briefly)
* To help with debugging, I've retained the command line mode from the
update hook; but made it so that the output is not emailed, it's just
printed to the screen. This could then be redirected if the user
wanted
* Removed the "Hello" from the beginning of the email - it's just
noise, and no one seriously has their day made happier by "friendly"
programs
* The fact that it doesn't rely on repository state as an indicator any
more means that it's far more stable in its output; hopefully the
same arguments will always generate the same email - even if the
repository changes in the future. This means you can easily recreate
an email should you want to.
* Included Jim Meyering's envelope sender option for the sendmail call
* The hook is now so big that it was inappropriate to copy it
to every repository by keeping it in the templates directory.
Instead, I've put a comment saying to look in contrib/hooks, and
given an example of calling the script from that template hook. The
advantage of calling the script residing at some fixed location is
that if a future package of git included a bug fixed version of the
script, that would be picked up automatically, and the user would not
have to notice and manually copy the new hook to every repository
that uses it.

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-svn: avoid respewing similar error messages for... Eric Wong Sat, 31 Mar 2007 00:54:48 +0000 (17:54 -0700)

git-svn: avoid respewing similar error messages for missing paths

We ignore errors if the path we're tracking did not exist for
a particular revision range, but we still print out warnings
telling the user about that.

As pointed out by Seth Falcon, this amounts to a lot of warnings
that could confuse and worry users. I'm not entirely comfortable
completely silencing the warnings, but showing one warning per
path that we track should be reasonable.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Rename warn() to warning() to fix symbol conflicts... Theodore Ts'o Fri, 30 Mar 2007 23:07:05 +0000 (19:07 -0400)

Rename warn() to warning() to fix symbol conflicts on BSD and Mac OS

This fixes a problem reported by Randal Schwartz:

>I finally tracked down all the (albeit inconsequential) errors I was getting
>on both OpenBSD and OSX. It's the warn() function in usage.c. There's
>warn(3) in BSD-style distros. It'd take a "great rename" to change it, but if
>someone with better C skills than I have could do that, my linker and I would
>appreciate it.

It was annoying to me, too, when I was doing some mergetool testing on
Mac OS X, so here's a fix.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: "Randal L. Schwartz" <merlyn@stonehenge.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-mailinfo fixes for patch mungingDon Zickus Fri, 30 Mar 2007 16:18:45 +0000 (12:18 -0400)

git-mailinfo fixes for patch munging

Don't translate the patch to UTF-8, instead preserve the data as
is. This also reverts a test case that was included in the
original patch series.

Also allow overwriting the authorship and title information we
gather from RFC2822 mail headers with additional in-body
headers, which was pointed out by Linus.

Signed-off-by: Don Zickus <dzickus@redhat.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Support comparing blobs (files) with different... Jakub Narebski Fri, 30 Mar 2007 21:41:26 +0000 (23:41 +0200)

gitweb: Support comparing blobs (files) with different names

Fix the bug that caused "blobdiff" view called with new style URI
for a rename with change diff to be show as new (added) file diff.

New style URI for "blobdiff" for rename means with $hash_base ('hb') and
$hash_parent_base ('hpb') paramaters denoting tree-ish (usually commit)
of a blobs being compared, together with both $file_name ('f') and
$file_parent ('fp') parameters.

It is done by adding $file_parent ('fp') to the path limiter, meaning
that diff command becomes:

git diff-tree [options] hpb hb -- fp f

Other option would be finding hash of a blob using git_get_hash_by_path
subroutine and comparing blobs using git-diff, or using extended SHA-1
syntax and compare blobs using git-diff:

git diff [options] hpb:fp hp:f

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Do not bother documenting fetch--toolJunio C Hamano Fri, 30 Mar 2007 08:03:09 +0000 (01:03 -0700)

Do not bother documenting fetch--tool

Signed-off-by: Junio C Hamano <junkio@cox.net>

Update draft release notes for 1.5.1Junio C Hamano Fri, 30 Mar 2007 07:56:36 +0000 (00:56 -0700)

Update draft release notes for 1.5.1

Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'maint'Junio C Hamano Fri, 30 Mar 2007 06:44:30 +0000 (23:44 -0700)

Merge branch 'maint'

* maint:
git-upload-pack: make sure we close unused pipe ends
Documentation/git-rev-parse.txt: fix example in SPECIFYING RANGES.
Documentation/git-svnimport.txt: fix typo.

git-quiltimport /bin/sh-ism fixFrancis Daly Thu, 29 Mar 2007 21:38:20 +0000 (22:38 +0100)

git-quiltimport /bin/sh-ism fix

Bryan Wu reported
/usr/local/bin/git-quiltimport: 114: Syntax error: Missing '))'

Most bourne-ish shells I have here accept
x=$((echo x)|cat)
but all bourne-ish shells I have here accept
x=$( (echo x)|cat)
because $(( might mean arithmetic expansion.

Signed-off-by: Francis Daly <francis@daoine.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Bisect: Improve error message in "bisect_next_check".Christian Couder Thu, 29 Mar 2007 07:42:35 +0000 (09:42 +0200)

Bisect: Improve error message in "bisect_next_check".

So we can remove the specific message in "bisect_run".

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'master' of git://repo.or.cz/git/mergetool.gitJunio C Hamano Fri, 30 Mar 2007 06:08:45 +0000 (23:08 -0700)

Merge branch 'master' of git://repo.or.cz/git/mergetool.git

* 'master' of git://repo.or.cz/git/mergetool.git:
mergetool: Clean up description of files and prompts for merge resolutions
mergetool: Make git-rm quiet when resolving a deleted file conflict
mergetool: Add support for Apple Mac OS X's opendiff command
mergetool: Fix abort command when resolving symlinks and deleted files
mergetool: Remove spurious error message if merge.tool config option not set
mergetool: factor out common code
mergetool: portability fix: don't use reserved word function
mergetool: portability fix: don't assume true is in /bin
mergetool: Don't error out in the merge case where the local file is deleted
mergetool: Replace use of "echo -n" with printf(1) to be more portable
Fix minor formatting issue in man page for git-mergetool

mergetool: Clean up description of files and prompts... Theodore Ts'o Thu, 29 Mar 2007 15:39:46 +0000 (11:39 -0400)

mergetool: Clean up description of files and prompts for merge resolutions

This fixes complaints from Junio for how messages and prompts are
printed when resolving symlink and deleted file merges.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: Make git-rm quiet when resolving a deleted... Theodore Ts'o Thu, 29 Mar 2007 14:05:02 +0000 (10:05 -0400)

mergetool: Make git-rm quiet when resolving a deleted file conflict

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: Add support for Apple Mac OS X's opendiff... Theodore Ts'o Thu, 29 Mar 2007 14:03:17 +0000 (10:03 -0400)

mergetool: Add support for Apple Mac OS X's opendiff command

Signed-off-by: Arjen Laarhoven <arjen@yaph.org>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: Fix abort command when resolving symlinks... Theodore Ts'o Thu, 29 Mar 2007 13:48:31 +0000 (09:48 -0400)

mergetool: Fix abort command when resolving symlinks and deleted files

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: Remove spurious error message if merge.tool... Theodore Ts'o Thu, 29 Mar 2007 13:46:31 +0000 (09:46 -0400)

mergetool: Remove spurious error message if merge.tool config option not set

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: factor out common codeTheodore Ts'o Thu, 29 Mar 2007 13:39:59 +0000 (09:39 -0400)

mergetool: factor out common code

Create common function check_unchanged(), save_backup() and
remove_backup().

Also fix some minor whitespace issues while we're at it.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: portability fix: don't use reserved word... Theodore Ts'o Thu, 29 Mar 2007 10:55:11 +0000 (06:55 -0400)

mergetool: portability fix: don't use reserved word function

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: portability fix: don't assume true is in... Theodore Ts'o Thu, 29 Mar 2007 10:46:59 +0000 (06:46 -0400)

mergetool: portability fix: don't assume true is in /bin

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: Don't error out in the merge case where... Theodore Ts'o Tue, 27 Mar 2007 22:00:03 +0000 (18:00 -0400)

mergetool: Don't error out in the merge case where the local file is deleted

If the file we are trying to merge resolve is in git-ls-files -u, then
skip the file existence test. If the file isn't reported in
git-ls-files, then check to see if the file exists or not to give an
appropriate error message.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

mergetool: Replace use of "echo -n" with printf(1)... Theodore Ts'o Tue, 27 Mar 2007 16:12:22 +0000 (12:12 -0400)

mergetool: Replace use of "echo -n" with printf(1) to be more portable

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

Fix minor formatting issue in man page for git-mergetoolTheodore Ts'o Tue, 27 Mar 2007 15:38:59 +0000 (11:38 -0400)

Fix minor formatting issue in man page for git-mergetool

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

git-upload-pack: make sure we close unused pipe endsH. Peter Anvin Tue, 27 Mar 2007 23:45:06 +0000 (16:45 -0700)

git-upload-pack: make sure we close unused pipe ends

Right now, we don't close the read end of the pipe when git-upload-pack
runs git-pack-object, so we hang forever (why don't we get SIGALRM?)
instead of dying with SIGPIPE if the latter dies, which seems to be the
norm if the client disconnects.

Thanks to Johannes Schindelin <Johannes.Schindelin@gmx.de> for
pointing out where this close() needed to go.

This patch has been tested on kernel.org for several weeks and appear
to resolve the problem of git-upload-pack processes hanging around
forever.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
(cherry picked from commit 465b3518a9ad5080a4b652ef35fb13c61a93e7a4)

Documentation/git-rev-parse.txt: fix example in SPECIFY... Gerrit Pape Thu, 29 Mar 2007 06:42:44 +0000 (06:42 +0000)

Documentation/git-rev-parse.txt: fix example in SPECIFYING RANGES.

Please see http://bugs.debian.org/404795:

In git-rev-parse(1), there is an example commit tree, which is used twice.
The explanation for this tree is very clear: B and C are commit *parents* to
A.

However, when the tree is reused as an example in the SPECIFYING RANGES, the
manpage author screws up and uses A as a commit *parent* to B and C! I.e.,
he inverts the tree.

And the fact that for this example you need to read the tree backwards is
not explained anywhere (and it would be confusing even if it was).

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation/git-svnimport.txt: fix typo.Gerrit Pape Thu, 29 Mar 2007 06:41:42 +0000 (06:41 +0000)

Documentation/git-svnimport.txt: fix typo.

This was noticed by Frederik Schwarzer. SVN's repository by default has
trunk, tags/, and branch_es_/.

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

GIT 1.5.1-rc3 v1.5.1-rc3Junio C Hamano Wed, 28 Mar 2007 22:58:09 +0000 (15:58 -0700)

GIT 1.5.1-rc3

Update main git.html page to point at 1.5.0.6 documentationJunio C Hamano Wed, 28 Mar 2007 22:40:17 +0000 (15:40 -0700)

Update main git.html page to point at 1.5.0.6 documentation

Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'maint' to synchronize with 1.5.0.6Junio C Hamano Wed, 28 Mar 2007 22:39:57 +0000 (15:39 -0700)

Merge branch 'maint' to synchronize with 1.5.0.6

GIT 1.5.0.6 v1.5.0.6Junio C Hamano Wed, 28 Mar 2007 20:53:00 +0000 (13:53 -0700)

GIT 1.5.0.6

commit: fix pretty-printing of messages with "\nencoding "Jeff King Wed, 28 Mar 2007 21:52:09 +0000 (17:52 -0400)

commit: fix pretty-printing of messages with "\nencoding "

The function replace_encoding_header is given the whole
commit buffer, including the commit message. When looking
for the encoding header, if none was found in the header, it
would locate any line in the commit message matching
"\nencoding " and remove it.

Instead, we now make sure to search only to the end of the
header.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

t4118: be nice to non-GNU sedJohannes Schindelin Fri, 23 Mar 2007 01:05:28 +0000 (21:05 -0400)

t4118: be nice to non-GNU sed

Elias Pipping:
> I'm on a mac, hence /usr/bin/sed is not gnu sed, which makes
> t4118 fail.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Ack'd-by: Elias Pipping <pipping@macports.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

t/t6006: add tests for a slightly more complex commit... Jeff King Wed, 28 Mar 2007 21:08:36 +0000 (17:08 -0400)

t/t6006: add tests for a slightly more complex commit messages

Especially this tests i18n messages and encoding header.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Fix "--pretty=format:" encoding itemJeff King Wed, 28 Mar 2007 21:09:05 +0000 (17:09 -0400)

Fix "--pretty=format:" encoding item

It printed the header "encoding " instead of just showing
the encoding, as all other items do.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Fix "--pretty=format:" for parent related items.Junio C Hamano Wed, 28 Mar 2007 20:33:37 +0000 (13:33 -0700)

Fix "--pretty=format:" for parent related items.

There are two breakages in the %P/%p interpolation. It appended
an excess SP at the end of the list, and it gave uninitialized
contents of a buffer on the stack for root commits.

This fixes it, while updating the t6006 test which expected the
wrong output.

Signed-off-by: Junio C Hamano <junkio@cox.net>

http-fetch: remove path_len from struct alt_base, it... Gerrit Pape Wed, 28 Mar 2007 09:47:35 +0000 (09:47 +0000)

http-fetch: remove path_len from struct alt_base, it was computed but never used

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

http-fetch: don't use double-slash as directory separat... Gerrit Pape Wed, 28 Mar 2007 09:46:15 +0000 (09:46 +0000)

http-fetch: don't use double-slash as directory separator in URLs

Please see http://bugs.debian.org/409887

http-fetch expected the URL given at the command line to have a trailing
slash anyway, and then added '/objects...' when requesting objects files
from the http server.

Now it doesn't require the trailing slash in <url> anymore, and strips
trailing slashes if given nonetheless.

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-commit: "read-tree -m HEAD" is not the right way... Junio C Hamano Wed, 28 Mar 2007 10:05:08 +0000 (03:05 -0700)

git-commit: "read-tree -m HEAD" is not the right way to read-tree quickly

It still looks at the working tree and checks for locally
modified paths. When are preparing a temporary index from HEAD,
we do not want any of that.

Signed-off-by: Junio C Hamano <junkio@cox.net>

Add some basic tests of rev-list --pretty=formatJeff King Wed, 28 Mar 2007 00:08:28 +0000 (20:08 -0400)

Add some basic tests of rev-list --pretty=format

These could stand to be a little more complex, but it should
at least catch obvious problems (like the recently fixed %ct
bug).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-upload-pack: make sure we close unused pipe endsH. Peter Anvin Tue, 27 Mar 2007 23:45:06 +0000 (16:45 -0700)

git-upload-pack: make sure we close unused pipe ends

Right now, we don't close the read end of the pipe when git-upload-pack
runs git-pack-object, so we hang forever (why don't we get SIGALRM?)
instead of dying with SIGPIPE if the latter dies, which seems to be the
norm if the client disconnects.

Thanks to Johannes Schindelin <Johannes.Schindelin@gmx.de> for
pointing out where this close() needed to go.

This patch has been tested on kernel.org for several weeks and appear
to resolve the problem of git-upload-pack processes hanging around
forever.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

--pretty=format: fix broken %ct and %at interpolationJeff King Tue, 27 Mar 2007 23:26:28 +0000 (19:26 -0400)

--pretty=format: fix broken %ct and %at interpolation

A pointer arithmetic error in fill_person caused random data
from the commit object to be included with the timestamp,
which looked something like:

$ git-rev-list --pretty=format:%ct origin/next | head
commit 98453bdb3db10db26099749bc4f2dc029bed9aa9
1174977948 -0700

Merge branch 'master' into next

* master:
Bisect: Use
commit c0ce981f5ebfd02463ff697b2fca52c7a54b0625
1174889646 -0700

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>

use xrealloc in help.cJames Bowes Tue, 27 Mar 2007 22:30:08 +0000 (18:30 -0400)

use xrealloc in help.c

Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

read-tree: use xcallocJames Bowes Tue, 27 Mar 2007 22:30:19 +0000 (18:30 -0400)

read-tree: use xcalloc

Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Fix "getaddrinfo()" bugletLinus Torvalds Tue, 27 Mar 2007 16:50:20 +0000 (09:50 -0700)

Fix "getaddrinfo()" buglet

At least in Linux glibc, "getaddrinfo()" has a very irritating feature (or
bug, who knows..).

Namely if you pass it in an empty string for the service name, it will
happily and quietly consider it identical to a NULL port pointer, and
return port number zero and no errors. Which obviously will not work.

Maybe that's what it's really expected to do, although the man-page for
getaddrinfo() certainly implies that it's a bug.

So when somebody passes me a "please pull" request pointing to something
like the following

git://git.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git

(note the extraneous colon at the end of the host name), git would happily
try to connect to port 0, which would generally just cause the remote to
not even answer, and the "connect()" will take a long time to time out.

So to work around the glibc feature/bug, just notice this empty port case
automatically. Also, add the port information to the error information
when it fails to look up (maybe it's the host-name that fails, maybe it's
the port-name - we should print out both).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Makefile: remove test-chmtime program in target clean.Gerrit Pape Tue, 27 Mar 2007 10:13:42 +0000 (10:13 +0000)

Makefile: remove test-chmtime program in target clean.

While running 'make test', the test-chmtime program is created, and should
be cleaned up on 'make clean'.

Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Cleanup and uniquify die_error callsJakub Narebski Tue, 27 Mar 2007 00:07:11 +0000 (02:07 +0200)

gitweb: Cleanup and uniquify die_error calls

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

sha1_file.c (write_sha1_file): Detect close failureJunio C Hamano Tue, 27 Mar 2007 19:55:44 +0000 (12:55 -0700)

sha1_file.c (write_sha1_file): Detect close failure

This is in the same spirit as earlier fix to write_sha1_from_fd().

Signed-off-by: Junio C Hamano <junkio@cox.net>

git.el: Display some information about the HEAD commit.Alexandre Julliard Mon, 26 Mar 2007 10:16:16 +0000 (12:16 +0200)

git.el: Display some information about the HEAD commit.

Use git-log --pretty=oneline to print a short description of the
current HEAD (and merge heads if any) in the buffer header.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Document git-log --first-parentJunio C Hamano Tue, 27 Mar 2007 19:51:13 +0000 (12:51 -0700)

Document git-log --first-parent

Signed-off-by: Junio C Hamano <junkio@cox.net>

Bisect: add checks at the beginning of "git bisect... Christian Couder Tue, 27 Mar 2007 04:49:57 +0000 (06:49 +0200)

Bisect: add checks at the beginning of "git bisect run".

We may be able to "run" with only one good revision given
and then verify that the result of the first run is bad.
And perhaps also the other way around.

But for now let's check that we have at least one bad and
one good revision before we start to run.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

sha1_file.c (write_sha1_from_fd): Detect close failure.Jim Meyering Mon, 26 Mar 2007 13:57:23 +0000 (15:57 +0200)

sha1_file.c (write_sha1_from_fd): Detect close failure.

I stumbled across this in the context of the fchmod 0444 patch.
At first, I was going to unlink and call error like the two subsequent
tests do, but a failed write (above) provokes a "die", so I made
this do the same. This is testing for a write failure, after all.

Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-rm: don't remove newly added file without -fJeff King Mon, 26 Mar 2007 18:55:39 +0000 (14:55 -0400)

git-rm: don't remove newly added file without -f

Given this set of commands:

$ echo "newly added file" >new
$ git add new
$ git rm new

the file "new" was previously removed from the working
directory and the index. Because it was not in HEAD, it is
available only by searching for unreachable objects.

Instead, we now err on the safe side and refuse to remove
a file which is not referenced by HEAD.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Bisect: Use "git-show-ref --verify" when reseting.Christian Couder Mon, 26 Mar 2007 04:14:40 +0000 (06:14 +0200)

Bisect: Use "git-show-ref --verify" when reseting.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Add example of config file and how to generate... Jakub Narebski Mon, 26 Mar 2007 01:34:41 +0000 (02:34 +0100)

gitweb: Add example of config file and how to generate projects list to gitweb/INSTALL

Add simple example of config file (turning on and allowing override of
a few %features). Also example config file and script to generate list
of projects in a format that can be used as GITWEB_LIST / $projects_list.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

GIT 1.5.1-rc2 v1.5.1-rc2Junio C Hamano Mon, 26 Mar 2007 01:00:45 +0000 (18:00 -0700)

GIT 1.5.1-rc2

Signed-off-by: Junio C Hamano <junkio@cox.net>

git-svn: fix rel_path() when not connected to the repos... Eric Wong Sun, 25 Mar 2007 23:35:31 +0000 (16:35 -0700)

git-svn: fix rel_path() when not connected to the repository root

This should fix fetching for people who did not use
"git svn --minimize" or cannot connect to the repository root
due to the lack of permissions.

I'm not sure what I was on when I made the change to the
rel_path() function in 4e9f6cc78e5d955bd0faffe76ae9aea6590189f1
that made it die() when we weren't connected to the repository
root :x

Thanks to Sven Verdoolaege for reporting this bug.

Signed-off-by: Junio C Hamano <junkio@cox.net>

use xmalloc in git.c and help.cJames Bowes Mon, 26 Mar 2007 00:39:36 +0000 (20:39 -0400)

use xmalloc in git.c and help.c

Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'jc/fpl'Junio C Hamano Mon, 26 Mar 2007 00:47:07 +0000 (17:47 -0700)

Merge branch 'jc/fpl'

* jc/fpl:
git-log --first-parent: show only the first parent log

Update README to point at a few key periodical messages... Junio C Hamano Mon, 26 Mar 2007 00:42:32 +0000 (17:42 -0700)

Update README to point at a few key periodical messages to the list

They give a good starting point to new people who want to get
involved. This owes suggestions by Martin Langhoff and Steven
Grimm.

Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'maint'Junio C Hamano Sun, 25 Mar 2007 22:08:11 +0000 (15:08 -0700)

Merge branch 'maint'

* maint:
user-manual: introduce "branch" and "branch head" differently
glossary: clean up cross-references
glossary: stop generating automatically
user-manual: Use def_ instead of ref_ for glossary references.
user-manual.txt: fix a tiny typo.
user-manual: run xsltproc without --nonet option

Merge branch 'maint' of git://linux-nfs.org/~bfields... Junio C Hamano Sun, 25 Mar 2007 22:07:27 +0000 (15:07 -0700)

Merge branch 'maint' of git://linux-nfs.org/~bfields/git into maint

* 'maint' of git://linux-nfs.org/~bfields/git:
user-manual: introduce "branch" and "branch head" differently
glossary: clean up cross-references
glossary: stop generating automatically
user-manual: Use def_ instead of ref_ for glossary references.
user-manual.txt: fix a tiny typo.
user-manual: run xsltproc without --nonet option

Merge branch 'js/remote-show-push'Junio C Hamano Sun, 25 Mar 2007 08:45:06 +0000 (01:45 -0700)

Merge branch 'js/remote-show-push'

* js/remote-show-push:
Teach git-remote to list pushed branches.

Merge branch 'maint'Junio C Hamano Sun, 25 Mar 2007 07:21:40 +0000 (00:21 -0700)

Merge branch 'maint'

* maint:
gitweb: Add some installation notes in gitweb/INSTALL
gitweb: Fix not marking signoff lines in "log" view
gitweb: Don't escape attributes in CGI.pm HTML methods
gitweb: Change to use explicitly function call cgi->escapHTML()

Use diff* with --exit-code in git-am, git-rebase and... Alex Riesen Sun, 25 Mar 2007 00:56:13 +0000 (01:56 +0100)

Use diff* with --exit-code in git-am, git-rebase and git-merge-ours

This simplifies the shell code, reduces its memory footprint, and
speeds things up. The performance improvements should be noticable
when git-rebase works on big commits.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Document --quiet option to git-diffAlex Riesen Sun, 25 Mar 2007 00:55:43 +0000 (01:55 +0100)

Document --quiet option to git-diff

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

write_sha1_from_fd() should make new objects read-onlyNicolas Pitre Sat, 24 Mar 2007 16:02:27 +0000 (12:02 -0400)

write_sha1_from_fd() should make new objects read-only

... like it is done everywhere else.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

make it more obvious that temporary files are temporary... Nicolas Pitre Sat, 24 Mar 2007 15:58:22 +0000 (11:58 -0400)

make it more obvious that temporary files are temporary files

When some operations are interrupted (or "die()'d" or crashed) then the
partial object/pack/index file may remain around. Make it more obvious
in their name that those files are temporary stuff and can be cleaned up
if no operation is in progress.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

update-hook: remove e-mail sending hook.Andy Parkins Fri, 23 Mar 2007 10:21:59 +0000 (10:21 +0000)

update-hook: remove e-mail sending hook.

The update hook's only job is to decide is a particular update
is allowed or not. It was not the right place to send out
update notification e-mails from to begin with, as the final
stage of updating refs can fail after this hook runs.

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Add some installation notes in gitweb/INSTALLJakub Narebski Sat, 24 Mar 2007 19:59:53 +0000 (20:59 +0100)

gitweb: Add some installation notes in gitweb/INSTALL

Add some installation and configuration notes for gitweb in
gitweb/INSTALL. Make use of filling gitweb configuration by
Makefile.

It does not cover (yet?) all the configuration variables and
options.

Some of contents duplicates information in gitweb/README file
(it is referred from gitweb/INSTALL).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Fix not marking signoff lines in "log" viewJakub Narebski Sat, 24 Mar 2007 19:59:13 +0000 (20:59 +0100)

gitweb: Fix not marking signoff lines in "log" view

The CSS selector for signoff lines style was too strict: in the "log"
view the commit message is not encompassed in container "page_body"
div.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Don't escape attributes in CGI.pm HTML methodsJakub Narebski Wed, 7 Mar 2007 01:21:25 +0000 (02:21 +0100)

gitweb: Don't escape attributes in CGI.pm HTML methods

There is no need to escape HTML tag's attributes in CGI.pm
HTML methods (like CGI::a()), because CGI.pm does attribute
escaping automatically.

$cgi->a({ ... -attribute => atribute_value }, tag_contents)

is translated to

<a ... attribute="attribute_value">tag_contents</a>

The rules for escaping attribute values (which are string contents) are
different. For example you have to take care about escaping embedded '"'
and "'" characters; CGI::a() does that for us automatically.

CGI::a() does not HTML escape tag_contents; we would need to write

<a href="URL">some <b>bold</b> text</a>

for example. So we use esc_html (or esc_path) to escape tag_contents
as needed.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Change to use explicitly function call cgi... Li Yang Tue, 6 Mar 2007 03:58:56 +0000 (11:58 +0800)

gitweb: Change to use explicitly function call cgi->escapHTML()

Change to use explicitly function call cgi->escapHTML().
This fix the problem on some systems that escapeHTML() is not
functioning, as default CGI is not setting 'escape' parameter.

Signed-off-by: Li Yang <leoli@freescale.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-am documentation: describe what is taken from where.Junio C Hamano Sat, 24 Mar 2007 10:08:54 +0000 (03:08 -0700)

git-am documentation: describe what is taken from where.

Signed-off-by: Junio C Hamano <junkio@cox.net>

git-revert: Revert revert message to old behaviourJohannes Schindelin Fri, 23 Mar 2007 16:06:11 +0000 (17:06 +0100)

git-revert: Revert revert message to old behaviour

When converting from the shell script, based on a misreading of the
sed invocation, the builtin included the abbreviated commit name,
and did _not_ include the quotes around the oneline message.

This fixes it.

[jc: with a fix for the typo/thinko spotted by Linus, and also
removing the unwanted abbrev at the beginning.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'maint'Junio C Hamano Sat, 24 Mar 2007 06:29:37 +0000 (23:29 -0700)

Merge branch 'maint'

* maint:
gitweb: Fix "next" link in commit view

Documentation: bisect: make a comment fit better in... Christian Couder Sat, 24 Mar 2007 05:32:05 +0000 (06:32 +0100)

Documentation: bisect: make a comment fit better in the man page.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation: bisect: add some titles to some paragraphs.Christian Couder Sat, 24 Mar 2007 05:30:33 +0000 (06:30 +0100)

Documentation: bisect: add some titles to some paragraphs.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation: bisect: reformat more paragraphs.Christian Couder Sat, 24 Mar 2007 05:31:49 +0000 (06:31 +0100)

Documentation: bisect: reformat more paragraphs.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation: bisect: reword one paragraph.Christian Couder Sat, 24 Mar 2007 05:31:16 +0000 (06:31 +0100)

Documentation: bisect: reword one paragraph.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation: bisect: reformat some paragraphs.Christian Couder Sat, 24 Mar 2007 05:29:58 +0000 (06:29 +0100)

Documentation: bisect: reformat some paragraphs.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Fix path-limited "rev-list --bisect" termination condition.Junio C Hamano Fri, 23 Mar 2007 20:34:49 +0000 (13:34 -0700)

Fix path-limited "rev-list --bisect" termination condition.

In a path-limited bisection, when the $bad commit is not
changing the limited path, and the number of suspects is 1, the
code miscounted and returned $bad from find_bisection(), which
is not marked with TREECHANGE. This is of course filtered by
the output routine, resulting in an empty output, in turn
causing git-bisect driver to say "$bad was both good and bad".

Illustration. Suppose you have these four commits, and only C
changes path P. You know D is bad and A is good.

A---B---C*--D

git-bisect driver runs this to find a bisection point:

$ git rev-list --bisect A..D -- P

which calls find_bisection() with B, C and D. The set of
commits that is given to this function is the same set of
commits as rev-list without --bisect option and pathspec
returns. Among them, only C is marked with TREECHANGE. Let's
call the set of commits given to find_bisection() that are
marked with TREECHANGE (or all of them if no path limiter is in
effect) "the bisect set". In the above example, the size of the
bisect set is 1 (contains only "C").

For each commit in its input, find_bisection() computes the
number of commits it can reach in the bisect set. For a commit
in the bisect set, this number includes itself, so the number is
1 or more. This number is called "depth", and computed by
count_distance() function.

When you have a bisect set of N commits, and a commit has depth
D, how good is your bisection if you returned that commit? How
good this bisection is can be measured by how many commits are
effectively tested "together" by testing one commit.

Currently you have (N-1) untested commits (the tip of the bisect
set, although it is included in the bisect set, is already known
to be bad). If the commit with depth D turns out to be bad,
then your next bisect set will have D commits and you will have
(D-1) untested commits left, which means you tested (N-1)-(D-1)
= (N-D) commits with this bisection. If it turns out to be good, then
your next bisect set will have (N-D) commits, and you will have
(N-D-1) untested commits left, which means you tested
(N-1)-(N-D-1) = D commits with this bisection.

Therefore, the goodness of this bisection is is min(N-D, D), and
find_bisection() function tries to find a commit that maximizes
this, by initializing "closest" variable to 0 and whenever a
commit with the goodness that is larger than the current
"closest" is found, that commit and its goodness are remembered
by updating "closest" variable. The "the commit with the best
goodness so far" is kept in "best" variable, and is initialized
to a commit that happens to be at the beginning of the list of
commits given to this function (which may or may not be in the
bisect set when path-limit is in use).

However, when N is 1, then the sole tree-changing commit has
depth of 1, and min(N-D, D) evaluates to 0. This is not larger
than the initial value of "closest", and the "so far the best
one" commit is never replaced in the loop.

When path-limit is not in use, this is not a problem, as any
commit in the input set is tree-changing. But when path-limit
is in use, and when the starting "bad" commit does not change
the specified path, it is not correct to return it.

Signed-off-by: Junio C Hamano <junkio@cox.net>

gitweb: Fix "next" link in commit viewJakub Narebski Fri, 23 Mar 2007 20:04:31 +0000 (21:04 +0100)

gitweb: Fix "next" link in commit view

Fix copy'n'paste error in commit c9d193df which caused that "next"
link for merge commits in "commit" view
(merge: _commit_ _commit_ ...)
was to "commitdiff" view instead of being to "commit" view.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-bisect.sh: properly dq $GIT_DIRJunio C Hamano Fri, 23 Mar 2007 20:24:22 +0000 (13:24 -0700)

git-bisect.sh: properly dq $GIT_DIR

Otherwise you would be in trouble if your GIT_DIR has IFS letters in it.

Signed-off-by: Junio C Hamano <junkio@cox.net>

git-bisect: typofixJunio C Hamano Fri, 23 Mar 2007 20:15:21 +0000 (13:15 -0700)

git-bisect: typofix

The branch you are on while bisecting is always "bisect", and
checking for "refs/heads/bisect*" is wrong. Only check if it is
exactly "refs/heads/bisect".

Signed-off-by: Junio C Hamano <junkio@cox.net>

checkout: report where the new HEAD is upon detaching... Junio C Hamano Fri, 23 Mar 2007 09:37:19 +0000 (02:37 -0700)

checkout: report where the new HEAD is upon detaching HEAD

After "git reset" moves the HEAD around, it reports which commit
you are on, which gives the user a warm fuzzy feeling of
assurance. Give the same assurance from git-checkout when
moving the detached HEAD around.

Signed-off-by: Junio C Hamano <junkio@cox.net>

Bisect: implement "git bisect run <cmd>..." to automati... Christian Couder Fri, 23 Mar 2007 07:49:59 +0000 (08:49 +0100)

Bisect: implement "git bisect run <cmd>..." to automatically bisect.

This idea was suggested by Bill Lear
(Message-ID: <17920.38942.364466.642979@lisa.zopyra.com>)
and I think it is a very good one.

This patch adds a new test file for "git bisect run", but there
is currently only one basic test.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Bisect: convert revs given to good and bad to commitsUwe Kleine-König Thu, 22 Mar 2007 16:18:08 +0000 (17:18 +0100)

Bisect: convert revs given to good and bad to commits

Without this the rev could be (e.g.) a tag and then the condition to end the
bisect might fail and you have to check the already known to be bad revision
once more.

Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>

t4118: be nice to non-GNU sedJohannes Schindelin Fri, 23 Mar 2007 01:05:28 +0000 (21:05 -0400)

t4118: be nice to non-GNU sed

Elias Pipping:
> I'm on a mac, hence /usr/bin/sed is not gnu sed, which makes
> t4118 fail.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Ack'd-by: Elias Pipping <pipping@macports.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-apply: Do not free the wrong buffer when we convert... Junio C Hamano Fri, 23 Mar 2007 00:32:51 +0000 (17:32 -0700)

git-apply: Do not free the wrong buffer when we convert the data for writeout

When we write out the result of patch application, we sometimes
need to munge the data (e.g. under core.autocrlf). After doing
so, what we should free is the temporary buffer that holds the
converted data returned from convert_to_working_tree(), not the
original one.

This patch also moves the call to open() up in the function, as
the caller expects us to fail cheaply if leading directories
need to be created (and then the caller creates them and calls
us again). For that calling pattern, attempting conversion
before opening the file adds unnecessary overhead.

Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge git://git2.kernel.org/pub/scm/gitk/gitkJunio C Hamano Thu, 22 Mar 2007 10:05:34 +0000 (03:05 -0700)

Merge git://git2.kernel.org/pub/scm/gitk/gitk

* git://git2.kernel.org/pub/scm/gitk/gitk:
[PATCH] prefer "git COMMAND" over "git-COMMAND" in gitk

Merge branch 'maint'Junio C Hamano Thu, 22 Mar 2007 10:05:25 +0000 (03:05 -0700)

Merge branch 'maint'

* maint:
Documentation/pack-format.txt: Clear up description of types.
fix typo in git-am manpage

Documentation/pack-format.txt: Clear up description... Peter Eriksen Wed, 21 Mar 2007 18:43:37 +0000 (19:43 +0100)

Documentation/pack-format.txt: Clear up description of types.

Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>

update HEAD reflog when branch pointed to by HEAD is... Nicolas Pitre Wed, 21 Mar 2007 21:11:44 +0000 (17:11 -0400)

update HEAD reflog when branch pointed to by HEAD is directly modified

The HEAD reflog is updated as well as the reflog for the branch pointed
to by HEAD whenever it is referenced with "HEAD".

There are some cases where a specific branch may be modified directly.
In those cases, the HEAD reflog should be updated as well if it is a
symref to that branch in order to be consistent.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

update-hook: abort early if the project description... Andy Parkins Tue, 20 Mar 2007 10:58:32 +0000 (10:58 +0000)

update-hook: abort early if the project description is unset

It was annoying to always have the first email from a project be from
the "Unnamed repository; edit this file to name it for gitweb project";
just because it's so easy to forget to set it.

This patch checks to see if the description file is still default (or
empty) and aborts if so - allowing you to fix the problem before sending
out silly looking emails to every developer.

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-merge: Put FETCH_HEAD data in merge commit messageMichael S. Tsirkin Thu, 22 Mar 2007 09:07:30 +0000 (11:07 +0200)

git-merge: Put FETCH_HEAD data in merge commit message

This makes git-fetch <URL> && git-merge FETCH_HEAD produce the
same merge message as git-pull <URL>.

Signed-off-by: Michael S. Tsirkin <mst@dev.mellanox.co.il>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-rebase: make 'rebase HEAD branch' work as expected.Junio C Hamano Thu, 22 Mar 2007 09:54:59 +0000 (02:54 -0700)

git-rebase: make 'rebase HEAD branch' work as expected.

When you want to amend the commit message of 3 commits before
the tip of the current branch, say 'master',

A--B--C--D--E(master)

it is sometimes handy to make your head detached at that commit
with:

$ git checkout HEAD~3 ;# check out B
$ git commit --amend ;# without modifying contents...

to create:

.B'(HEAD)
/
A--B--C--D--E(master)

and then rebase 'master' branch onto HEAD with this:

$ git rebase HEAD master

to result in:

.B'-C'-D'-E(master=HEAD)
/
A--B--C--D--E

However, the current code interprets HEAD after it switches to
the branch 'master', which means the rebase will not do
anything. You have to say something unwieldly like this
instead:

$ git rebase $(git rev-parse HEAD) master

This fixes it by expanding the $onto commit name before
switching to the target branch.

Signed-off-by: Junio C Hamano <junkio@cox.net>

tree_entry_interesting(): allow it to say "everything... Junio C Hamano Thu, 22 Mar 2007 00:00:27 +0000 (17:00 -0700)

tree_entry_interesting(): allow it to say "everything is interesting"

In addition to optimizing pathspecs that would never match,
which was done earlier, this optimizes pathspecs that would
always match (e.g. "arch/" while the traversal is already in
"arch/i386/" hierarchy).

This patch makes the worst case slightly more palatable, while
improving average case.

Signed-off-by: Junio C Hamano <junkio@cox.net>

tree-diff: avoid strncmp()Junio C Hamano Wed, 21 Mar 2007 19:34:46 +0000 (12:34 -0700)

tree-diff: avoid strncmp()

If we already know that some of the pathspecs can match later
entries in the tree we are looking at, we do not have to do more
expensive strncmp() upfront before comparing the length of the
match pattern and the path, as a path longer than the match
pattern will not match it, and a path shorter than the match
pattern will match only if the path is a directory-component
wise prefix of the match pattern.

Signed-off-by: Junio C Hamano <junkio@cox.net>

Teach tree_entry_interesting() that the tree entries... Junio C Hamano Wed, 21 Mar 2007 16:51:47 +0000 (09:51 -0700)

Teach tree_entry_interesting() that the tree entries are sorted.

When we are looking at a tree entry with pathspecs, if all the
pathspecs sort strictly earlier than the entry we are currently
looking at, there is no way later entries in the same tree would
match our pathspecs, because the entries are sorted.

Signed-off-by: Junio C Hamano <junkio@cox.net>

Switch over tree descriptors to contain a pre-parsed... Linus Torvalds Wed, 21 Mar 2007 17:09:56 +0000 (10:09 -0700)

Switch over tree descriptors to contain a pre-parsed entry

This makes the tree descriptor contain a "struct name_entry" as part of
it, and it gets filled in so that it always contains a valid entry. On
some benchmarks, it improves performance by up to 15%.

That makes tree entry "extract" trivial, and means that we only actually
need to decode each tree entry just once: we decode the first one when
we initialize the tree descriptor, and each subsequent one when doing
"update_tree_entry()". In particular, this means that we don't need to
do strlen() both at extract time _and_ at update time.

Finally, it also allows more sharing of code (entry_extract(), that
wanted a "struct name_entry", just got totally trivial, along with the
"tree_entry()" function).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Initialize tree descriptors with a helper function... Linus Torvalds Wed, 21 Mar 2007 17:08:25 +0000 (10:08 -0700)

Initialize tree descriptors with a helper function rather than by hand.

This removes slightly more lines than it adds, but the real reason for
doing this is that future optimizations will require more setup of the
tree descriptor, and so we want to do it in one place.

Also renamed the "desc.buf" field to "desc.buffer" just to trigger
compiler errors for old-style manual initializations, making sure I
didn't miss anything.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>