gitweb.git
Introduce 'git-format-patch --suffix=.patch'Junio C Hamano Wed, 17 Jan 2007 19:12:03 +0000 (11:12 -0800)

Introduce 'git-format-patch --suffix=.patch'

The default can also be changed with "format.suffix" configuration.
Leaving it empty would not add any suffix.

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

Documentation/glossary.txt: describe remotes/ tracking... Junio C Hamano Wed, 17 Jan 2007 18:54:58 +0000 (10:54 -0800)

Documentation/glossary.txt: describe remotes/ tracking and packed-refs

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

Documentation/glossary.txt: unpacked objects are loose.Junio C Hamano Wed, 17 Jan 2007 18:54:18 +0000 (10:54 -0800)

Documentation/glossary.txt: unpacked objects are loose.

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

Documentation: describe shallow repositoryJunio C Hamano Wed, 17 Jan 2007 18:53:31 +0000 (10:53 -0800)

Documentation: describe shallow repository

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

Make a short-and-sweet "git-add -i" synonym for "git... Junio C Hamano Wed, 17 Jan 2007 18:52:36 +0000 (10:52 -0800)

Make a short-and-sweet "git-add -i" synonym for "git-add --interactive"

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

Documentation: detached HEADJunio C Hamano Wed, 17 Jan 2007 18:43:50 +0000 (10:43 -0800)

Documentation: detached HEAD

Add discussion section to git-checkout documentation and mention
detached HEAD in repository-layout document.

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

Documentation: a few spelling fixesRené Scharfe Wed, 17 Jan 2007 15:32:41 +0000 (16:32 +0100)

Documentation: a few spelling fixes

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation/git-sh-setup.txt: programmer's docsJunio C Hamano Wed, 17 Jan 2007 09:13:05 +0000 (01:13 -0800)

Documentation/git-sh-setup.txt: programmer's docs

Clarify that this is not meant for end users, and list what
shell functions are defined.

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

Documentation/git-whatchanged.txt: show -<n> instead... Junio C Hamano Wed, 17 Jan 2007 09:11:56 +0000 (01:11 -0800)

Documentation/git-whatchanged.txt: show -<n> instead of --max-count.

... to match the change we did earlier to git-log documentation.

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

Documentation/git-status.txt: mention color configurationJunio C Hamano Wed, 17 Jan 2007 09:11:01 +0000 (01:11 -0800)

Documentation/git-status.txt: mention color configuration

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

Documentation/git-tar-tree.txt: default umask is now 002Junio C Hamano Wed, 17 Jan 2007 09:10:13 +0000 (01:10 -0800)

Documentation/git-tar-tree.txt: default umask is now 002

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

Documentation/git-tools.txt: mention tig and refer... Junio C Hamano Wed, 17 Jan 2007 09:09:41 +0000 (01:09 -0800)

Documentation/git-tools.txt: mention tig and refer to wiki

In general list at Wiki seems to be maintained a lot better than
this list.

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

Documentation/git-tag: the command can be used to also... Junio C Hamano Wed, 17 Jan 2007 09:08:30 +0000 (01:08 -0800)

Documentation/git-tag: the command can be used to also verify a tag.

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

Documentation/SubmittingPatches: Gnus tipsJunio C Hamano Wed, 17 Jan 2007 09:07:27 +0000 (01:07 -0800)

Documentation/SubmittingPatches: Gnus tips

Also warn about format=flowed (aka 'flawed').

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

git-commit: document log message formatting conventionJunio C Hamano Wed, 17 Jan 2007 06:53:28 +0000 (22:53 -0800)

git-commit: document log message formatting convention

Take it from the tutorial, since not everybody necessarily reads it.

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

cache.h; fix a couple of prototypesChris Wedgwood Wed, 17 Jan 2007 06:28:02 +0000 (22:28 -0800)

cache.h; fix a couple of prototypes

Trivial patch.

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

Document where configuration files are in config.txtJunio C Hamano Wed, 17 Jan 2007 06:45:35 +0000 (22:45 -0800)

Document where configuration files are in config.txt

Talking about what the files contain without talking about where
they are does not help new users.

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

Use merge-recursive in git-checkout -m (branch switching)Junio C Hamano Wed, 17 Jan 2007 04:46:39 +0000 (20:46 -0800)

Use merge-recursive in git-checkout -m (branch switching)

This allows "git checkout -m <other-branch>" to notice renames and
carry local changes in the working tree forward.

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

git-commit documentation: remove comment on unfixed... Junio C Hamano Wed, 17 Jan 2007 00:36:54 +0000 (16:36 -0800)

git-commit documentation: remove comment on unfixed git-rm

... which was fixed since then.

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

tutorial: shorthand for remotes but show distributed... Junio C Hamano Wed, 17 Jan 2007 00:10:14 +0000 (01:10 +0100)

tutorial: shorthand for remotes but show distributed nature of git

* Promiscous pull shows the distributed nature of git better.
* Add a new step after that to teach "remote add".
* Highlight that with the shorthand defined you will get
remote tracking branches for free.
* Fix Alice's workflow.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

tutorial: Use only separate layoutSanti Béjar Wed, 17 Jan 2007 00:09:12 +0000 (01:09 +0100)

tutorial: Use only separate layout

Then the newbies only have to understand one layout.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Fix spurious compile errorJohannes Schindelin Tue, 16 Jan 2007 21:10:54 +0000 (22:10 +0100)

Fix spurious compile error

From time to time, I would get this error:

[...]
sed: -e expression #8, char 41: Unterminated `s' command
make: *** [git-add--interactive] Error 1

Turns out that the function WriteMakefile() called in Makefile.PL
outputs the message "Writing perl.mak for Git" to stdout! Thus,
the output of "make -C perl -s --no-print-directory instlibdir"
would be prefixed by that message whenever Makefile.PL was newer
than perl.mak.

This is fixed by redirecting stdout to stderr in Makefile.PL.

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

git-rm documentation: remove broken behaviour from... Junio C Hamano Tue, 16 Jan 2007 19:50:29 +0000 (11:50 -0800)

git-rm documentation: remove broken behaviour from the example.

The example section were talking about the old broken default
behaviour. Correct it.

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

git-push documentation: remaining bitsJunio C Hamano Tue, 16 Jan 2007 19:46:03 +0000 (11:46 -0800)

git-push documentation: remaining bits

Mention --thin, --no-thin, --repo and -v.

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

document --exec for git-pushUwe Kleine-K\e,Av\e(Bnig Tue, 16 Jan 2007 15:02:02 +0000 (16:02 +0100)

document --exec for git-push

The text is just copied from git-send-pack.txt.

Signed-off-by: Uwe Kleine-K\e,Av\e(Bnig <zeisberg@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-svn: print and flush authentication prompts to... Eric Wong Tue, 16 Jan 2007 04:15:55 +0000 (20:15 -0800)

git-svn: print and flush authentication prompts to STDERR

People that redirect STDOUT output should always see STDERR
prompts interactively.

STDERR should always be flushed without buffering, so
they should always show up. If that is unset, we still
explicitly flush by calling STDERR->flush.

The svn command-line client prompts to STDERR, too.

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

Solaris 5.8 returns ENOTDIR for inappropriate renames.Jason Riedy Tue, 16 Jan 2007 01:30:59 +0000 (17:30 -0800)

Solaris 5.8 returns ENOTDIR for inappropriate renames.

The reflog code clears empty directories when rename returns
either EISDIR or ENOTDIR. Seems to be the only place.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Replace "echo -n" with printf in shell scripts.Jason Riedy Tue, 16 Jan 2007 01:31:29 +0000 (17:31 -0800)

Replace "echo -n" with printf in shell scripts.

Not all echos know -n. This was causing a test failure in
t5401-update-hooks.sh, but not t3800-mktag.sh for some reason.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Set _ALL_SOURCE for AIX, but avoid its struct list.Jason Riedy Tue, 16 Jan 2007 01:34:49 +0000 (17:34 -0800)

Set _ALL_SOURCE for AIX, but avoid its struct list.

AIX 5.3 seems to need _ALL_SOURCE for struct addrinfo, but that
introduces a struct list in grp.h.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Start all test scripts with /bin/sh.Jason Riedy Tue, 16 Jan 2007 01:31:49 +0000 (17:31 -0800)

Start all test scripts with /bin/sh.

My bash refused to run the two scripts missing a #!, and it's
better to use the same line for all the scripts.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-pull: disallow implicit merging to detached HEADJeff King Mon, 15 Jan 2007 22:25:33 +0000 (17:25 -0500)

git-pull: disallow implicit merging to detached HEAD

Instead, we complain to the user and suggest that they explicitly
specify the remote and branch. We depend on the exit status of
git-symbolic-ref, so let's go ahead and document that.

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

Fix git-fetch while on detached HEAD not to give needle... Junio C Hamano Mon, 15 Jan 2007 21:56:05 +0000 (13:56 -0800)

Fix git-fetch while on detached HEAD not to give needlessly alarming errors

When we are on a detached HEAD, there is no current branch.
There is no reason to leak the error messages to the end user
since this is a situation we expect to see.

This adds -q option to git-symbolic-ref to exit without issuing
an error message if the given name is not a symbolic ref.

By the way, with or without this patch, there currently is no
good way to tell failure modes between "git symbolic-ref HAED"
and "git symbolic-ref HEAD". Both says "is not a symbolic ref".

We may want to do something about it.

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

git reflog expire: document --stale-fix option.Junio C Hamano Mon, 15 Jan 2007 22:43:03 +0000 (14:43 -0800)

git reflog expire: document --stale-fix option.

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

Merge git://git.kernel.org/pub/scm/gitk/gitkJunio C Hamano Mon, 15 Jan 2007 07:43:47 +0000 (23:43 -0800)

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

* git://git.kernel.org/pub/scm/gitk/gitk:
[PATCH] Make gitk work when launched in a subdirectory
[PATCH] gitk: add current directory to main window title

Use nice names in conflict markers during cherry-pick... Shawn O. Pearce Mon, 15 Jan 2007 06:41:22 +0000 (01:41 -0500)

Use nice names in conflict markers during cherry-pick/revert.

Always call the current HEAD 'HEAD', and name the patch being
cherry-picked or reverted by its oneline subject rather than
its SHA1. This matches git am's behavior and is done because
users most commonly are cherry-picking by SHA1 rather than by
ref name.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Use merge-recursive in git-revert/git-cherry-pickJunio C Hamano Mon, 15 Jan 2007 06:00:02 +0000 (22:00 -0800)

Use merge-recursive in git-revert/git-cherry-pick

This makes revert and cherry-pick to use merge-recursive, to
allow them to notice renames. A pair of test scripts
demonstrate that an old change before a rename happened can be
applied (reverted) after a rename with cherry-pick (with revert).

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

Documentation: merge-output is not too verbose now.Junio C Hamano Mon, 15 Jan 2007 05:31:30 +0000 (21:31 -0800)

Documentation: merge-output is not too verbose now.

We've squelched output from merge-recursive, and git-merge when
used with recursive does not attempt the trivial one first
anymore, so there won't be "Trying ... Nope." messages now.

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

Remove hash in git-describe in favor of util slot.Shawn O. Pearce Mon, 15 Jan 2007 03:16:55 +0000 (22:16 -0500)

Remove hash in git-describe in favor of util slot.

Currently we don't use the util field of struct commit but we want
fast access to the highest priority name that references any given
commit object during our matching loop. A really simple approach
is to just store the name directly in the util field.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Correct priority of lightweight tags in git-describe.Shawn O. Pearce Sun, 14 Jan 2007 09:37:44 +0000 (04:37 -0500)

Correct priority of lightweight tags in git-describe.

We really want to always favor an annotated tag over a lightweight
tag when describing a commit. Unfortunately git-describe wasn't
doing this as it was favoring the depth attribute of a possible_tag
over the priority. Now priority is the highest sort and we only
consider a lightweight tag if no annotated tags were identified.

Rather than searching for the minimum tag using a simple loop we
now sort them using a stable sort algorithm, this way the possible
tags display in order if --debug gets used. The stable sort helps
to preseve the inherit topology/date order that we obtain during
our search loop.

This fix allows the tests in t6120-describe.sh to pass.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Add describe test.Junio C Hamano Sun, 14 Jan 2007 02:37:32 +0000 (18:37 -0800)

Add describe test.

... with help from Shawn.

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

Improve git-describe performance by reducing revision... Shawn O. Pearce Sat, 13 Jan 2007 22:30:53 +0000 (17:30 -0500)

Improve git-describe performance by reducing revision listing.

My prior version of git-describe ran very slowly on even reasonably
sized projects like git.git and linux.git as it tended to identify
a large number of possible tags and then needed to generate the
revision list for each of those tags to sort them and select the
best tag to describe the input commit.

All we really need is the number of commits in the input revision
which are not in the tag. We can generate these counts during
the revision walking and tag matching loop by assigning a color to
each tag and coloring the commits as we walk them. This limits us
to identifying no more than 26 possible tags, as there is limited
space available within the flags field of struct commit.

The limitation of 26 possible tags is hopefully not going to be a
problem in real usage, as most projects won't create 26 maintenance
releases and merge them back into a development trunk after the
development trunk was tagged with a release candidate tag. If that
does occur git-describe will start to revert to its old behavior of
using the newer maintenance release tag to describe the development
trunk, rather than the development trunk's own tag. The suggested
workaround would be to retag the development trunk's tip.

However since even 26 possible tags can take a while to generate a
description for on some projects I'm defaulting the limit to 10 but
offering the user --candidates to increase the number of possible
matches if they need a more accurate result. I specifically chose
10 for the default as it seems unlikely projects will have more
than 10 maintenance releases merged into a development trunk before
retagging the development trunk, and it seems to perform about the
same on linux.git as v1.4.4.4 git-describe.

A large amount of debugging information was also added during
the development of this change, so I've left it in to be toggled
on with --debug. It may be useful to the end user to help them
understand why git-describe took one particular tag over another.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Use binary searching on large buckets in git-describe.Shawn O. Pearce Sat, 13 Jan 2007 22:29:00 +0000 (17:29 -0500)

Use binary searching on large buckets in git-describe.

If a project has a really huge number of tags (such as several
thousand tags) then we are likely to have nearly a hundred tags in
some buckets. Scanning those buckets as linked lists could take
a large amount of time if done repeatedly during history traversal.

Since we are searching for a unique commit SHA1 we can sort all
tags by commit SHA1 and perform a binary search within the bucket.
Once we identify a particular tag as matching this commit we walk
backwards within the bucket matches to make sure we pick up the
highest priority tag for that commit, as the binary search may
have landed us in the middle of a set of tags which point at the
same commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Hash tags by commit SHA1 in git-describe.Shawn O. Pearce Sat, 13 Jan 2007 22:28:16 +0000 (17:28 -0500)

Hash tags by commit SHA1 in git-describe.

If a project has a very large number of tags then git-describe
will spend a good part of its time looping over the tags testing
them one at a time to determine if it matches a given commit.
For 10 tags this is not a big deal, but for hundreds of tags the
time could become considerable if we don't find an exact match for
the input commit and we need to walk back along the history chain.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Always perfer annotated tags in git-describe.Shawn O. Pearce Sat, 13 Jan 2007 22:27:52 +0000 (17:27 -0500)

Always perfer annotated tags in git-describe.

Several people have suggested that its always better to describe
a commit using an annotated tag, and to only use a lightweight tag
if absolutely no annotated tag matches the input commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

some doc updatesNicolas Pitre Mon, 15 Jan 2007 03:44:18 +0000 (22:44 -0500)

some doc updates

1) talk about "git merge" instead of "git pull ."

2) suggest "git repo-config" instead of directly editing config files

3) echo "URL: blah" > .git/remotes/foo is obsolete and should be
"git repo-config remote.foo.url blah"

4) support for partial URL prefix has been removed (see commit
ea560e6d64374ec1f6c163c276319a3da21a1345) so drop mention of it.

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

git log documentation: teach -<n> form.Junio C Hamano Mon, 15 Jan 2007 02:23:22 +0000 (18:23 -0800)

git log documentation: teach -<n> form.

We say "this shows only the most often used ones"; so instead of
teaching --max-number=<n> form, list -<n> form which is much
easier to type.

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

Convert output messages in merge-recursive to past... Shawn O. Pearce Sun, 14 Jan 2007 08:11:28 +0000 (03:11 -0500)

Convert output messages in merge-recursive to past tense.

Now that we are showing the output messages for verbosity levels
<5 after all actions have been performed (due to the progress meter
running during the actions) it can be confusing to see messages in
the present tense when the user is looking at a '100% done' message
right above them. Converting the messages to past tense will appear
more correct in this case, and shouldn't affect a developer who is
debugging the application and running it at a verbosity level >=5.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Display a progress meter during merge-recursive.Shawn O. Pearce Sun, 14 Jan 2007 05:28:58 +0000 (00:28 -0500)

Display a progress meter during merge-recursive.

Because large merges on slow systems can take up to a minute to
execute we should try to keep the user entertained with a progress
meter to let them know how far we have progressed through the
current merge.

The progress meter considers each entry in the in-memory index to
be a unit, which means a single recursive merge will double the
number of units in the progress meter. Files which are unmerged
after the 3-way tree merge are also considered a unit within the
progress meter.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Enable output buffering in merge-recursive.Shawn O. Pearce Sun, 14 Jan 2007 05:28:53 +0000 (00:28 -0500)

Enable output buffering in merge-recursive.

Buffering all message output until a merge invocation is complete is
necessary to prevent intereferring with a progress meter that would
indicate the number of files completely merged, and how many remain.
This change does not introduce a progress meter, but merely lays
the groundwork to buffer the output.

To aid debugging output buffering is only enabled if verbosity
is lower than 5. When using verbosity levels above 5 the user is
probably debugging the merge program itself and does not want to
see the output delayed, especially if they are stepping through
portions of the code in a debugger.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Allow the user to control the verbosity of merge-recursive.Shawn O. Pearce Sun, 14 Jan 2007 05:28:48 +0000 (00:28 -0500)

Allow the user to control the verbosity of merge-recursive.

Junio C Hamano <junkio@cox.net> writes:
>
> I think the output from merge-recursive can be categorized into 5
> verbosity levels:
>
> 1. "CONFLICT", "Rename", "Adding here instead due to D/F conflict"
> (outermost)
>
> 2. "Auto-merged successfully" (outermost)
>
> 3. The first "Merging X with Y".
>
> 4. outermost "Merging:\ntitle1\ntitle2".
>
> 5. outermost "found N common ancestors\nancestor1\nancestor2\n..."
> and anything from inner merge.
>
> I would prefer the default verbosity level to be 2 (that is, show
> both 1 and 2).

and this change makes it so. I think level 3 is probably pointless
as its only one line of output above level 2, but I can see how some
users may want to view it but not view the slightly more verbose
output of level 4.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Remove unnecessary call_depth parameter in merge-recursive.Shawn O. Pearce Sun, 14 Jan 2007 05:28:33 +0000 (00:28 -0500)

Remove unnecessary call_depth parameter in merge-recursive.

Because the output_indent always matches the call_depth value
there is no reason to pass around the call_depth to the merge
function during each recursive invocation.

This is a simple refactoring that will make the code easier to
follow later on as I start to add output verbosity controls.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'jc/int'Junio C Hamano Sun, 14 Jan 2007 20:04:25 +0000 (12:04 -0800)

Merge branch 'jc/int'

* jc/int:
More tests in t3901.
Consistent message encoding while reusing log from an existing commit.
t3901: test "format-patch | am" pipe with i18n
Use log output encoding in --pretty=email headers.

Merge branch 'sp/merge' (early part)Junio C Hamano Sun, 14 Jan 2007 20:03:53 +0000 (12:03 -0800)

Merge branch 'sp/merge' (early part)

* 'sp/merge' (early part):
Improve merge performance by avoiding in-index merges.

Merge branch 'jc/subdir'Junio C Hamano Sun, 14 Jan 2007 19:41:36 +0000 (11:41 -0800)

Merge branch 'jc/subdir'

* jc/subdir:
Allow whole-tree operations to be started from a subdirectory
Use cd_to_toplevel in scripts that implement it by hand.
Define cd_to_toplevel shell function in git-sh-setup

Remove read_or_die in favor of better error messages.Shawn O. Pearce Sun, 14 Jan 2007 06:01:49 +0000 (01:01 -0500)

Remove read_or_die in favor of better error messages.

Originally I introduced read_or_die for the purpose of reading
the pack header and trailer, and I was too lazy to print proper
error messages.

Linus Torvalds <torvalds@osdl.org>:
> For a read error, at the very least you have to say WHICH FILE
> couldn't be read, because it's usually a matter of some file just
> being too short, not some system-wide problem.

and of course Linus is right. Make it so.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Hide output about SVN::Core not being found during... Shawn O. Pearce Sun, 14 Jan 2007 08:22:47 +0000 (03:22 -0500)

Hide output about SVN::Core not being found during tests.

If the user doesn't have SVN::Core installed or working then the
SVN tests properly turn themselves off. But the user doesn't need
to know that SVN::Core isn't loadable as a Perl module. Unless of
course they are trying to debug the test, so lets relegate the Perl
failures to --verbose only.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

simplify the "no changes added to commit" messageNicolas Pitre Sun, 14 Jan 2007 02:23:55 +0000 (21:23 -0500)

simplify the "no changes added to commit" message

Suggesting the use of [-a|-i|-o] with git-commit is unnecessarily
complex and confusing. In this context -o is totally useless and -i
requires extra arguments which are not mentioned. The only sensible
hint (besides reading the man page but let's not go there) is
"commit -a".

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

More tests in t3901.Junio C Hamano Sat, 13 Jan 2007 21:34:44 +0000 (13:34 -0800)

More tests in t3901.

This adds tests for "cherry-pick" and "rebase --merge" (and
indirectly "commit -C" since it is used in the latter) to make
sure they create a new commit with correct encoding.

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

Consistent message encoding while reusing log from... Junio C Hamano Sat, 13 Jan 2007 21:33:07 +0000 (13:33 -0800)

Consistent message encoding while reusing log from an existing commit.

The following commands can reuse log message from an existing
commit while creating a new commit:

git-cherry-pick
git-rebase (both with and without --merge)
git-commit (-c and -C)

When the original commit was made in a different encoding from
the current i18n.commitencoding, "cat-file commit" would give a
string that is inconsistent with what the resulting commit will
claim to be in. Replace them with "git show -s --encoding".

"git-rebase" without --merge is "git format-patch" piped to "git
am" in essence, and has been taken care of before this commit.

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

git-commit documentation: -a adds and also removesJunio C Hamano Sat, 13 Jan 2007 20:26:13 +0000 (12:26 -0800)

git-commit documentation: -a adds and also removes

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

t3901: test "format-patch | am" pipe with i18nJunio C Hamano Sat, 13 Jan 2007 09:20:53 +0000 (01:20 -0800)

t3901: test "format-patch | am" pipe with i18n

This checks combinations of i18n.commitencoding (declares what
encoding you are feeding commit-tree to make commits) and
i18n.logoutputencoding (instructs what encoding to emit the
commit message out to log output, including e-mail format) to
make sure the "format-patch | am" pipe used in git-rebase works
correctly.

I suspect "git cherry-pick" and "git rebase --merge" may fail
similar tests. We'll see.

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

Use log output encoding in --pretty=email headers.Junio C Hamano Sat, 13 Jan 2007 01:32:38 +0000 (17:32 -0800)

Use log output encoding in --pretty=email headers.

Private functions add_rfc2047() and pretty_print_commit() assumed
they are only emitting UTF-8.

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

git-remote: no longer silent on unknown commands.Quy Tonthat Sat, 13 Jan 2007 11:55:21 +0000 (22:55 +1100)

git-remote: no longer silent on unknown commands.

Signed-off-by: Quy Tonthat <qtonthat@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-svn: fix tests to work with older svnEric Wong Sat, 13 Jan 2007 10:47:53 +0000 (02:47 -0800)

git-svn: fix tests to work with older svn

Some of the recent changes and shortcuts to the tests broke
things for people using older versions of svn:

t9104-git-svn-follow-parent.sh:
v1.2.3 (from SuSE 10.0 as reported by riddochc on #git
(thanks!)) required an extra 'svn up'. I was also able to
reproduce this with v1.1.4 (Debian Sarge).

lib-git-svn.sh:
SVN::Repos bindings in versions up to and including 1.1.4
(Sarge again) do not pass fs-config options to the underlying
library. BerkeleyDB repositories also seem completely broken
on all my Sarge machines; so not using FSFS does not seem to
be an option for most people.

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

[PATCH] Make gitk work when launched in a subdirectoryPeter Baumann Tue, 9 Jan 2007 14:30:19 +0000 (15:30 +0100)

[PATCH] Make gitk work when launched in a subdirectory

Make gitk use git-rev-parse --git-dir to find the repository.

Signed-off-by: Peter Baumann <siprbaum@stud.informatik.uni-erlangen.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>

[PATCH] gitk: add current directory to main window... Doug Maxey Sun, 10 Dec 2006 20:31:46 +0000 (14:31 -0600)

[PATCH] gitk: add current directory to main window title

This can help people keep track of which gitk is which, when they
have several on the screen.

Signed-off-by: Doug Maxey <dwm@enoyolf.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>

Allow whole-tree operations to be started from a subdir... Junio C Hamano Fri, 12 Jan 2007 20:52:03 +0000 (12:52 -0800)

Allow whole-tree operations to be started from a subdirectory

This updates five commands (merge, pull, rebase, revert and cherry-pick)
so that they can be started from a subdirectory.

This may not actually be what we want to do. These commands are
inherently whole-tree operations, and an inexperienced user may
mistakenly expect a "git pull" from a subdirectory would merge
only the subdirectory the command started from.

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

Use cd_to_toplevel in scripts that implement it by... Junio C Hamano Fri, 12 Jan 2007 20:49:05 +0000 (12:49 -0800)

Use cd_to_toplevel in scripts that implement it by hand.

This converts scripts that do "cd $(rev-parse --show-cdup)" by
hand to use cd_to_toplevel.

I think git-fetch does not have to go to the toplevel, but that
should be dealt with in a separate patch.

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

Define cd_to_toplevel shell function in git-sh-setupJunio C Hamano Fri, 12 Jan 2007 20:44:08 +0000 (12:44 -0800)

Define cd_to_toplevel shell function in git-sh-setup

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

Make git-prune-packed a bit more chatty.Junio C Hamano Fri, 12 Jan 2007 23:00:13 +0000 (15:00 -0800)

Make git-prune-packed a bit more chatty.

Steven Grimm noticed that git-repack's verbosity is inconsistent
because pack-objects is chatty and prune-packed is not. This
makes the latter a bit more chatty and gives -q option to
squelch it.

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

glossary typofixJunio C Hamano Fri, 12 Jan 2007 22:13:53 +0000 (14:13 -0800)

glossary typofix

Pointed out by Paul Witt <paul.witt@oxix.org>

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

use 'init' instead of 'init-db' for shipped docs and... Nicolas Pitre Fri, 12 Jan 2007 21:01:46 +0000 (16:01 -0500)

use 'init' instead of 'init-db' for shipped docs and tools

While 'init-db' still is and probably will always remain a valid git
command for obvious backward compatibility reasons, it would be a good
idea to move shipped tools and docs to using 'init' instead.

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

Explain "Not a git repository: '.git'".Junio C Hamano Fri, 12 Jan 2007 20:24:16 +0000 (12:24 -0800)

Explain "Not a git repository: '.git'".

Andy Parkins noticed that the error message some "whole tree"
oriented commands emit is stated misleadingly when they refused
to run from a subdirectory.

We could probably allow some of them to work from a subdirectory
but that is a semantic change that could have unintended side
effects, so let's start at first by rewording the error message
to be easier to read without doing anything else to be safe.

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

merge-recursive: do not report the resulting tree objec... Junio C Hamano Fri, 12 Jan 2007 20:05:58 +0000 (12:05 -0800)

merge-recursive: do not report the resulting tree object name

It is not available in the outermost merge, and it is only
useful for debugging merge-recursive in the inner merges.

Sergey Vlasov noticed that the old code accesses an
uninitialized location.

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

git-revert: Fix die before git-sh-setup defines it.Bob Proulx Fri, 12 Jan 2007 06:45:38 +0000 (23:45 -0700)

git-revert: Fix die before git-sh-setup defines it.

The code previously checked it's own name and called 'die' upon
an error. However 'die' was not yet defined because git-sh-setup
had not been sourced yet. Instead simply write the error message
to stderr and exit with an error as was originally desired.

Signed-off-by: Bob Proulx <bob@proulx.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

fix documentation for git-commit --no-verifyMichael S. Tsirkin Fri, 12 Jan 2007 07:49:35 +0000 (09:49 +0200)

fix documentation for git-commit --no-verify

Despite what the documentation claims, git-commit does not check commit
for suspicious lines: all hooks are disabled by default,
and the pre-comit hook could be changed to do something else.

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

Fix up totally buggered read_or_die()Linus Torvalds Fri, 12 Jan 2007 04:37:38 +0000 (20:37 -0800)

Fix up totally buggered read_or_die()

The "read_or_die()" function would silently NOT die for a partial read,
and since it was of type "void" it obviously couldn't even return the
partial number of bytes read.

IOW, it was totally broken. This hopefully fixes it up.

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

Clean up write_in_full() usersLinus Torvalds Fri, 12 Jan 2007 04:23:00 +0000 (20:23 -0800)

Clean up write_in_full() users

With the new-and-improved write_in_full() semantics, where a partial write
simply always returns a real error (and always sets 'errno' when that
happens, including for the disk full case), a lot of the callers of
write_in_full() were just unnecessarily complex.

In particular, there's no reason to ever check for a zero length or
return: if the length was zero, we'll return zero, otherwise, if a disk
full resulted in the actual write() system call returning zero the
write_in_full() logic would have correctly turned that into a negative
return value, with 'errno' set to ENOSPC.

I really wish every "write_in_full()" user would just check against "<0"
now, but this fixes the nasty and stupid ones.

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

reflog-expire: brown paper bag fix.Junio C Hamano Fri, 12 Jan 2007 03:56:43 +0000 (19:56 -0800)

reflog-expire: brown paper bag fix.

When --stale-fix is not passed, the code did not initialize the
two commit objects properly.

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

GIT v1.5.0-rc1 v1.5.0-rc1Junio C Hamano Fri, 12 Jan 2007 02:22:48 +0000 (18:22 -0800)

GIT v1.5.0-rc1

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

plug a few leaks in revision walking used in describe.Junio C Hamano Thu, 11 Jan 2007 06:36:16 +0000 (22:36 -0800)

plug a few leaks in revision walking used in describe.

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

Chose better tag names in git-describe after merges.Shawn O. Pearce Wed, 10 Jan 2007 11:39:47 +0000 (06:39 -0500)

Chose better tag names in git-describe after merges.

Recently git.git itself encountered a situation on its master and
next branches where git-describe stopped reporting 'v1.5.0-rc0-gN'
and instead started reporting 'v1.4.4.4-gN'. This appeared to be
a backward jump in version numbering.

maint o-------------------4
\ \
master o-o-o-o-o-o-o-5-o-C-o-W

The issue is that commit C in the diagram claims it is version
1.5.0, as the tag v1.5.0 is placed on commit 5. Yet commit W
claims it is version 1.4.4.4 as the tag v1.5.0 has an older tag
date than the v1.4.4.4 tag.

As it turns out this situation is very common. A bug fix applied
to maint and later merged into master occurs frequently enough that
it should Just Work Right(tm).

Rather than taking the first tag that gets found git-describe will
now generate a list of all possible tags and select the one which
has the most number of commits in common with HEAD (or whatever
revision the user requested the description of).

This rule is based on the principle shown in the diagram above.
There are a large number of commits on the primary development branch
'master' which do not appear in the 'maint' branch, and many of
these are already tagged as part of v1.5.0-rc0. Additionally these
commits are not in v1.4.4.4, as they are part of the v1.5.0 release
still being developed. The v1.5.0-rc0 tag is more descriptive of
W than v1.4.4.4 is, and therefore should be used.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'jc/bare'Junio C Hamano Fri, 12 Jan 2007 00:50:36 +0000 (16:50 -0800)

Merge branch 'jc/bare'

* jc/bare:
Disallow working directory commands in a bare repository.
git-fetch: allow updating the current branch in a bare repository.
Introduce is_bare_repository() and core.bare configuration variable
Move initialization of log_all_ref_updates

Merge branch 'ar/merge-recursive'Junio C Hamano Fri, 12 Jan 2007 00:48:28 +0000 (16:48 -0800)

Merge branch 'ar/merge-recursive'

* ar/merge-recursive:
merge-recursive: do not use on-file index when not needed.
Speed-up recursive by flushing index only once for all entries

Merge branch 'jc/detached-head'Junio C Hamano Fri, 12 Jan 2007 00:47:34 +0000 (16:47 -0800)

Merge branch 'jc/detached-head'

* jc/detached-head:
git-checkout: handle local changes sanely when detaching HEAD
git-checkout: safety check for detached HEAD checks existing refs
git-checkout: fix branch name output from the command
git-checkout: safety when coming back from the detached HEAD state.
git-checkout: rewording comments regarding detached HEAD.
git-checkout: do not warn detaching HEAD when it is already detached.
Detached HEAD (experimental)
git-branch: show detached HEAD
git-status: show detached HEAD

git-status: wording update to deal with deleted files.Junio C Hamano Thu, 11 Jan 2007 23:34:41 +0000 (15:34 -0800)

git-status: wording update to deal with deleted files.

If you do:

$ /bin/rm foo
$ git status

we used to say "git add ... to add content to commit". But
suggsting "git add" to record the deletion of a file is simply
insane.

So this rewords various things:

- The section header is the old "Changed but not updated",
instead of "Changed but not added";

- Suggestion is "git add ... to update what will be committed",
instead of "... to add content to commit";

- If there are removed paths, the above suggestion becomes "git
add/rm ... to update what will be committed";

- For untracked files, the suggestion is "git add ... to
include in what will be committed".

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

git-rm: do not fail on already removed file.Junio C Hamano Thu, 11 Jan 2007 22:58:47 +0000 (14:58 -0800)

git-rm: do not fail on already removed file.

Often the user would do "/bin/rm foo" before telling git, but
then want to tell git about it. "git rm foo" however would fail
because it cannot unlink(2) foo.

Treat ENOENT error return from unlink(2) as if a successful
removal happened.

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

Avoid errors and warnings when attempting to do I/O... Eric Wong Thu, 11 Jan 2007 21:43:40 +0000 (13:43 -0800)

Avoid errors and warnings when attempting to do I/O on zero bytes

Unfortunately, while {read,write}_in_full do take into account
zero-sized reads/writes; their die and whine variants do not.

I have a repository where there are zero-sized files in
the history that was triggering these things.

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

Better error messages for corrupt databasesLinus Torvalds Thu, 11 Jan 2007 22:09:31 +0000 (14:09 -0800)

Better error messages for corrupt databases

This fixes another problem that Andy's case showed: git-fsck-objects
reports nonsensical results for corrupt objects.

There were actually two independent and confusing problems:

- when we had a zero-sized file and used map_sha1_file, mmap() would
return EINVAL, and git-fsck-objects would report that as an insane and
confusing error. I don't know when this was introduced, it might have
been there forever.

- when "parse_object()" returned NULL, fsck would say "object not found",
which can be very confusing, since obviously the object might "exist",
it's just unparseable because it's totally corrupt.

So this just makes "xmmap()" return NULL for a zero-sized object (which is
a valid thing pointer, exactly the same way "malloc()" can return NULL for
a zero-sized allocation). That fixes the first problem (but we could have
fixed it in the caller too - I don't personally much care whichever way it
goes, but maybe somebody should check that the NO_MMAP case does
something sane in this case too?).

And the second problem is solved by just making the error message slightly
clearer - the failure to parse an object may be because it's missing or
corrupt, not necessarily because it's not "found".

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

config-set: check write-in-full returns in set_multivarJunio C Hamano Thu, 11 Jan 2007 21:16:26 +0000 (13:16 -0800)

config-set: check write-in-full returns in set_multivar

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

index-pack: write-or-die instead of unchecked write... Junio C Hamano Thu, 11 Jan 2007 21:15:51 +0000 (13:15 -0800)

index-pack: write-or-die instead of unchecked write-in-full.

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

write_in_full: really write in full or return error... Linus Torvalds Thu, 11 Jan 2007 21:04:11 +0000 (13:04 -0800)

write_in_full: really write in full or return error on disk full.

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

Document git-initJunio C Hamano Thu, 11 Jan 2007 20:58:10 +0000 (12:58 -0800)

Document git-init

These days, the command does a lot more than just initialise the
object database (such as setting default config-variables,
installing template hooks...), and "git init" is actually a more
sensible name nowadays.

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

write-cache: do not leak the serialized cache-tree... Linus Torvalds Thu, 11 Jan 2007 20:25:16 +0000 (12:25 -0800)

write-cache: do not leak the serialized cache-tree data.

It is not used after getting written, and just is leaking every time
we write the index out.

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

Improve merge performance by avoiding in-index merges.Shawn O. Pearce Thu, 28 Dec 2006 07:35:34 +0000 (02:35 -0500)

Improve merge performance by avoiding in-index merges.

In the early days of Git we performed a 3-way read-tree based merge
before attempting any specific merge strategy, as our core merge
strategies of merge-one-file and merge-recursive were slower script
based programs which took far longer to execute. This was a good
performance optimization in the past, as most merges were able to
be handled strictly by `read-tree -m -u`.

However now that merge-recursive is a C based program which performs
a full 3-way read-tree before it starts running we need to pay the
cost of the 3-way read-tree twice if we have to do any sort of file
level merging. This slows down some classes of simple merges which
`read-tree -m -u` could not handle but which merge-recursive does
automatically.

For a really trivial merge which can be handled entirely by
`read-tree -m -u`, skipping the read-tree and just going directly
into merge-recursive saves on average 50 ms on my PowerPC G4 system.
May sound odd, but it does appear to be true.

In a really simple merge which needs to use merge-recursive to handle
a file that was modified on both branches, skipping the read-tree
in git-merge saves on average almost 100 ms (on the same PowerPC G4)
as we avoid doing some work twice.

We only avoid `read-tree -m -u` if the only strategy to use is
merge-recursive, as not all merge strategies perform as well as
merge-recursive does.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Disallow working directory commands in a bare repository.Shawn O. Pearce Sun, 31 Dec 2006 04:32:38 +0000 (23:32 -0500)

Disallow working directory commands in a bare repository.

If the user tries to run a porcelainish command which requires
a working directory in a bare repository they may get unexpected
results which are difficult to predict and may differ from command
to command.

Instead we should detect that the current repository is a bare
repository and refuse to run the command there, as there is no
working directory associated with it.

[jc: updated Shawn's original somewhat -- bugs are mine.]

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

merge-recursive: do not use on-file index when not... Junio C Hamano Wed, 10 Jan 2007 19:20:58 +0000 (11:20 -0800)

merge-recursive: do not use on-file index when not needed.

This revamps the merge-recursive implementation following the
outline in:

Message-ID: <7v8xgileza.fsf@assigned-by-dhcp.cox.net>

There is no need to write out the index until the very end just
once from merge-recursive. Also there is no need to write out
the resulting tree object for the simple case of merging with a
single merge base.

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

Speed-up recursive by flushing index only once for... Alex Riesen Thu, 4 Jan 2007 10:22:47 +0000 (11:22 +0100)

Speed-up recursive by flushing index only once for all entries

The merge-recursive implementation in C inherited the invariant
that the on-file index file is written out and later read back
after any index operations and writing trees from the original
Python implementation. But it was only because the original
implementation worked at the scripting level.

There is no need to write out the index file after handling
every path.

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

Provide better feedback for the untracked only case... Jürgen Rühle Wed, 10 Jan 2007 22:25:03 +0000 (23:25 +0100)

Provide better feedback for the untracked only case in status output

Since 98bf8a47c296f51ea9722fef4bb81dbfb70cd4bb status would claim that
git-commit could be useful even if there are no changes except untracked files.

Since wt-status is already computing all the information needed go the whole
way and actually track the (non-)emptiness of all three sections separately,
unify the code, and provide useful messages for each individual case.

Thanks to Junio and Michael Loeffler for suggestions.

Signed-off-by: Jürgen Rühle <j-r@online.de>

Merge branch 'js/reflog'Junio C Hamano Wed, 10 Jan 2007 22:16:16 +0000 (14:16 -0800)

Merge branch 'js/reflog'

* js/reflog:
Sanitize for_each_reflog_ent()