gitweb.git
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>

Correct packfile edge output in fast-import.Shawn O. Pearce Wed, 17 Jan 2007 07:42:43 +0000 (02:42 -0500)

Correct packfile edge output in fast-import.

Branches are only contained by a packfile if the branch actually
had its most recent commit in that packfile. So new branches are
set to MAX_PACK_ID to ensure they don't cause their commit to list
as part of the first packfile when it closes out if the commit was
actually in existance before fast-import started.

Also corrected the type of last_commit to be umaxint_t to prevent
overflow and wraparound on very large imports. Though that is
highly unlikely to occur as we're talking 4 billion commits, which
no real project has right now.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Declare no-arg functions as (void) in fast-import.Shawn O. Pearce Wed, 17 Jan 2007 06:47:25 +0000 (01:47 -0500)

Declare no-arg functions as (void) in fast-import.

Apparently the git convention is to declare any function which
takes no arguments as taking void. I did not do this during the
early fast-import development, but should have.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Correct a few types to be unsigned in fast-import.Shawn O. Pearce Wed, 17 Jan 2007 05:57:23 +0000 (00:57 -0500)

Correct a few types to be unsigned in fast-import.

The length of an atom string cannot be negative. So make it
explicit and declare it as an unsigned value.

The shift width in a mark table node also cannot be negative.
I'm also moving it to after the pointer arrays to prevent any
possible alignment problems on a 64 bit system.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Corrected BNF input documentation for fast-import.Shawn O. Pearce Wed, 17 Jan 2007 05:33:18 +0000 (00:33 -0500)

Corrected BNF input documentation for fast-import.

Now that fast-import uses uintmax_t (the largest available unsigned
integer type) for marks we don't want to say its an unsigned 32
bit integer in ASCII base 10 notation. It could be much larger,
especially on 64 bit systems, and especially if a frontend uses
a very large number of marks (1 per file revision on a very, very
large import).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Print out the edge commits for each packfile in fast... Shawn O. Pearce Tue, 16 Jan 2007 21:18:44 +0000 (16:18 -0500)

Print out the edge commits for each packfile in fast-import.

To help callers repack very large repositories into a series of
packfiles fast-import now outputs the last commits/tags it wrote to
a packfile when it prints out the packfile name. This information
can be feed to pack-objects --revs to repack. For the first pack
of an initial import this is pretty easy (just feed those SHA1s on
stdin) but for subsequent packs you want to feed the subsequent
pack's final SHA1s but also all prior pack's SHA1s prefixed with
the negation operator. This way the prior pack's data does not
get included into the subsequent pack.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Correct object_count type and stat output in fast-import.Shawn O. Pearce Tue, 16 Jan 2007 09:55:41 +0000 (04:55 -0500)

Correct object_count type and stat output in fast-import.

Since object_count is limited to 'unsigned long' (really an
unsigned 32 bit integer value) by the pack file format we may as
well use exactly that type here in fast-import for that counter.
An earlier change by me incorrectly made it uintmax_t.

But since object_count is a counter for the current packfile only,
we don't want to output its value at the end. Instead we should
sum up the individual type counters and report that total, as that
will cover all of the packfiles.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Correct max_packsize default in fast-import.Shawn O. Pearce Tue, 16 Jan 2007 09:25:12 +0000 (04:25 -0500)

Correct max_packsize default in fast-import.

Apparently amd64 has defined 'unsigned long' to be a 64 bit value,
which means -1 was way over the 4 GiB packfile limit. Whoops.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Remove unnecessary pack_fd global in fast-import.Shawn O. Pearce Tue, 16 Jan 2007 06:20:57 +0000 (01:20 -0500)

Remove unnecessary pack_fd global in fast-import.

Much like the pack_sha1 the pack_fd is an unnecessary global
variable, we already have the fd stored in our struct packed_git
*pack_data so that the core library functions in sha1_file.c are
able to lookup and decompress object data that we have previously
written. Keeping an extra copy of this value in our own variable
is just a hold-over from earlier versions of fast-import and is
now completely unnecessary.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Ensure we close the packfile after creating it in fast... Shawn O. Pearce Tue, 16 Jan 2007 06:17:47 +0000 (01:17 -0500)

Ensure we close the packfile after creating it in fast-import.

Because we are renaming the packfile into its file destination we
need to be sure its not open when the rename is called, otherwise
some operating systems (e.g. Windows) may prevent the rename from
occurring.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Use .keep files in fast-import during processing.Shawn O. Pearce Tue, 16 Jan 2007 06:15:31 +0000 (01:15 -0500)

Use .keep files in fast-import during processing.

Because fast-import automatically updates all references (heads
and tags) at the end of its run the repository is corrupt unless
the objects are available in the .git/objects/pack directory prior
to the refs being modified. The easiest way to ensure that is true
is to move the packfile and its associated index directly into the
.git/objects/pack directory as soon as we have finished output to it.

But the only safe way to do this is to create the a temporary .keep
file for that pack, so we use the same tricks that index-pack uses
when its being invoked by receive-pack.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Reuse sha1 in packed_git in fast-import.Shawn O. Pearce Tue, 16 Jan 2007 05:44:48 +0000 (00:44 -0500)

Reuse sha1 in packed_git in fast-import.

Rather than maintaing our own packfile level sha1 variable we
can make use of the one already available in struct packed_git.
Its meant for the SHA1 of the index but it can also hold the
SHA1 of the packfile itself between final checksumming of the
packfile and creation of the index.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Replace redundant yread() with read_in_full() in fast... Shawn O. Pearce Tue, 16 Jan 2007 05:35:41 +0000 (00:35 -0500)

Replace redundant yread() with read_in_full() in fast-import.

Prior to git having read_in_full() fast-import used its own private
function yread to perform the header reading task. No sense in
keeping that around now that read_in_full is a public, stable
function.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Use uintmax_t for marks in fast-import.Shawn O. Pearce Tue, 16 Jan 2007 05:33:19 +0000 (00:33 -0500)

Use uintmax_t for marks in fast-import.

If a frontend wants to use a mark per file revision and per commit
and is doing a truly huge import (such as a 32 GiB SVN repository)
we may need more than 2**32 unique mark values, especially if the
frontend is unable (or unwilling) to recycle mark values. For mark
idnums we should use the largest unsigned integer type available,
hoping that will be at least 64 bits when we are compiled as a 64
bit executable. This way we may consume huge amounts of memory
storing our mark table, but we'll at least be able to process
the entire import without failing.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Corrected buffer overflow during automatic checkpoint... Shawn O. Pearce Tue, 16 Jan 2007 04:40:27 +0000 (23:40 -0500)

Corrected buffer overflow during automatic checkpoint in fast-import.

If we previously were using a delta but we needed to checkpoint the
current packfile and switch to a new packfile we need to throw away
the delta and compress the raw object by itself, as delta chains
cannot span non-thin packfiles. Unfortunately the output buffer
in this case needs to grow, as the size of the compressed object
may be quite a bit larger than the size of the compressed delta.

I've also avoided recompressing the object if we are checkpointing
and we didn't use a delta. In this case the output buffer is the
correct size and has already been populated with the right data,
we just need to close out the current packfile and open a new one.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Print the packfile names to stdout from fast-import.Shawn O. Pearce Mon, 15 Jan 2007 13:03:38 +0000 (08:03 -0500)

Print the packfile names to stdout from fast-import.

Caller scripts may want to know what packfiles the fast-import
process just wrote out for them. This is now output to stdout,
one packfile name per line, after we checkpoint each packfile.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Implemented automatic checkpoints within fast-import.Shawn O. Pearce Mon, 15 Jan 2007 13:00:49 +0000 (08:00 -0500)

Implemented automatic checkpoints within fast-import.

When the number of objects or number of bytes gets close to the limit
allowed by the packfile format (or configured on the command line by
our caller) we should automatically checkpoint the current packfile
and start a new one before writing the object out. This does however
require that we abandon the delta (if we had one) as its not valid
in a new packfile.

I also added the simple rule that if we got a delta back but the
delta itself is the same size as or larger than the uncompressed
object to ignore the delta and just store the object data. This
should avoid some really bad behavior caused by our current delta
strategy.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Optimize index creation on large object sets in fast... Shawn O. Pearce Mon, 15 Jan 2007 11:51:58 +0000 (06:51 -0500)

Optimize index creation on large object sets in fast-import.

When we are generating multiple packfiles at once we only need
to scan the blocks of object_entry structs which contain objects
for the current packfile. Because the most recent blocks are at
the front of the linked list, and because all new objects going
into the current file are allocated from the front of that list,
we can stop scanning for objects as soon as we identify one which
doesn't belong to the current packfile.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Don't create a final empty packfile in fast-import.Shawn O. Pearce Mon, 15 Jan 2007 11:39:39 +0000 (06:39 -0500)

Don't create a final empty packfile in fast-import.

If the last packfile is going to be empty (has 0 objects) then it
shouldn't be kept after the import has terminated, as there is no
point to the packfile. So rather than hashing it and making the
index file, just delete the packfile.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Implemented manual packfile switching in fast-import.Shawn O. Pearce Mon, 15 Jan 2007 11:35:41 +0000 (06:35 -0500)

Implemented manual packfile switching in fast-import.

To help importers which are dealing with massive amounts of data
fast-import needs to be able to close the packfile it is currently
writing to and open a new packfile for any additional data that
will be received. A new 'checkpoint' command has been introduced
which can be used by the frontend import process to force this
to occur at any time. This may be useful to ensure a very long
running import doesn't lose any work due to unexpected failures.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Remove unnecessary duplicate_count in fast-import.Shawn O. Pearce Mon, 15 Jan 2007 10:03:32 +0000 (05:03 -0500)

Remove unnecessary duplicate_count in fast-import.

There is little reason to be keeping a global duplicate_count
value when we also keep it per object type. The global counter can
easily be computed at the end, once all processing has completed.
This saves us a couple of machine instructions in an unimportant
part of code. But it looks slightly better to me to not keep
two counters around.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Restructure fast-import to support creating multiple... Shawn O. Pearce Mon, 15 Jan 2007 09:39:05 +0000 (04:39 -0500)

Restructure fast-import to support creating multiple packfiles.

Now that we are starting to see some really large projects (such
as KDE or a fork of FreeBSD) get imported into Git we're running
into the upper limit on packfile object count as well as overall
byte length. The KDE and FreeBSD projects are both likely to
require more than 4 GiB to store their current history, which means
we really need multiple packfiles to handle their content.

This is a fairly simple restructuring of the internal code to help
us support creating multiple packfiles from within fast-import.
We are now adding a 5 digit incrementing suffix to the end of the
basename supplied to us by the caller, permitting up to 99,999
packs to be generated in a single fast-import run.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Misc. type cleanups within fast-import.Shawn O. Pearce Mon, 15 Jan 2007 05:16:23 +0000 (00:16 -0500)

Misc. type cleanups within fast-import.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

user-manual: rewrap, fix heading levelsJ. Bruce Fields Mon, 15 Jan 2007 03:43:47 +0000 (22:43 -0500)

user-manual:rewrap, fix heading levels

Fix some heading levels that prevented compile; rewrap some stuff.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>

Improve reuse of sha1_file library within fast-import.Shawn O. Pearce Sun, 14 Jan 2007 11:20:23 +0000 (06:20 -0500)

Improve reuse of sha1_file library within fast-import.

Now that the sha1_file.c library routines use the sliding mmap
routines to perform efficient access to portions of a packfile
I can remove that code from fast-import.c and just invoke it.
One benefit is we now have reloading support for any packfile which
uses OBJ_OFS_DELTA. Another is we have significantly less code
to maintain.

This code reuse change *requires* that fast-import generate only
an OBJ_OFS_DELTA format packfile, as there is absolutely no index
available to perform OBJ_REF_DELTA lookup in while unpacking
an object. This is probably reasonable to require as the delta
offsets result in smaller packfiles and are faster to unpack,
as no index searching is required. Its also only a temporary
requirement as users could always repack without offsets before
making the import available to older versions of Git.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

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>

Merge branch 'master' of git://git./git/gitJ. Bruce Fields Mon, 15 Jan 2007 00:27:28 +0000 (19:27 -0500)

Merge branch 'master' of git://git./git/git

user-manual: reindentJ. Bruce Fields Sun, 14 Jan 2007 21:29:40 +0000 (16:29 -0500)

user-manual: reindent

Just some minor reindenting

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>

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>

Merge branch 'master' into sp/fast-importShawn O. Pearce Sun, 14 Jan 2007 07:44:18 +0000 (02:44 -0500)

Merge branch 'master' into sp/fast-import

I'm bringing master in early so that the OBJ_OFS_DELTA implementation
is available as part of the topic. This way git-fast-import can
learn about this new slightly smaller and faster packfile format,
and can generate them directly rather than needing to have them be
repacked with git-pack-objects.

Due to the API changes in master during the period of development
of git-fast-import, a few minor tweaks to fast-import.c are needed
to produce a working merge. I've done them here as part of the
merge to ensure bisection always works.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Allow creating branches without committing in fast... Shawn O. Pearce Fri, 12 Jan 2007 03:28:39 +0000 (22:28 -0500)

Allow creating branches without committing in fast-import.

Some importers may want to create a branch long before they actually
commit to it, or in some cases they may never commit to the branch
but they still need the ref to be created in the repository after
the import is complete.

This extends the 'reset ' command to automatically create a new
branch if the supplied reference isn't already known as a branch.

While I'm at it I also modified the syntax of the reset command
to terminate with an empty line, like commit and tag operate.
This just makes the command set more consistent.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Support creation of merge commits in fast-import.Shawn O. Pearce Fri, 12 Jan 2007 03:21:38 +0000 (22:21 -0500)

Support creation of merge commits in fast-import.

Some importers are able to determine when branch merges occurred
within their source data. In these cases they will want to supply
the correct commits to fast-import so that a proper merge commit
will exist in Git. This is now supported by supplying a 'merge '
command after the commit message and optional from command.

A merge is not actually performed by fast-import, its assumed that
the frontend performed any sort of merging activity already and
that fast-import should simply be storing its result.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Fix repository corruption when using marks for modified... Shawn O. Pearce Fri, 12 Jan 2007 02:25:01 +0000 (21:25 -0500)

Fix repository corruption when using marks for modified blobs.

Apparently we did not copy the blob SHA1 into the stack variable
'sha1' when a mark is used to refer to a prior blob. This code
was not previously tested as the Mozilla CVS -> git-fast-import
program always fed us full SHA1s for modified blobs and did not
use the mark feature there.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Additional fast-import tree delta corruption cleanups.Shawn O. Pearce Tue, 29 Aug 2006 02:06:13 +0000 (22:06 -0400)

Additional fast-import tree delta corruption cleanups.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Correct tree corruption problems in fast-import.Shawn O. Pearce Tue, 29 Aug 2006 01:43:04 +0000 (21:43 -0400)

Correct tree corruption problems in fast-import.

The new tree delta implementation caused blob SHA1s to be used
instead of a tree SHA1 when a tree was written out. This really
only appeared to happen when converting an existing file to a tree,
but may have been possible in some other situations.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Replace ywrite in fast-import with the standard write_o... Shawn O. Pearce Mon, 28 Aug 2006 17:54:01 +0000 (13:54 -0400)

Replace ywrite in fast-import with the standard write_or_die.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Reuse the same buffer for all commits/tags in fast... Shawn O. Pearce Mon, 28 Aug 2006 17:15:48 +0000 (13:15 -0400)

Reuse the same buffer for all commits/tags in fast-import.

Since most commits and tag objects are around the same size and we
only generate one at a time we can reuse the same buffer rather than
xmalloc'ing and free'ing the buffer every time we generate a commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Recycle data buffers for tree generation in fast-import.Shawn O. Pearce Mon, 28 Aug 2006 17:02:51 +0000 (13:02 -0400)

Recycle data buffers for tree generation in fast-import.

We only ever generate at most two tree streams at a time. Since most
trees are around the same size we can simply recycle the buffers from
one tree generation to the next rather than constantly xmalloc'ing
and free'ing them. This should perform slightly better when handling
a large number of trees as malloc has less work to do.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Implemented tree delta compression in fast-import.Shawn O. Pearce Mon, 28 Aug 2006 16:22:50 +0000 (12:22 -0400)

Implemented tree delta compression in fast-import.

We now store for every tree entry two modes and two sha1 values;
the base (aka "version 0") and the current/new (aka "version 1").
When we generate a tree object we also regenerate the prior version
object and use that as our base object for a delta. This strategy
saves a significant amount of memory as we can continue to use the
atom pool for file/directory names and only increases each tree
entry by an additional 24 bytes of memory.

Branches should automatically delta against their ancestor tree,
unless the ancestor tree is already at the delta chain limit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Converted hash memcpy/memcmp to new hashcpy/hashcmp... Shawn O. Pearce Mon, 28 Aug 2006 14:46:58 +0000 (10:46 -0400)

Converted hash memcpy/memcmp to new hashcpy/hashcmp/hashclr.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Don't crash fast-import if no branch log was requested.Shawn O. Pearce Mon, 28 Aug 2006 00:13:44 +0000 (20:13 -0400)

Don't crash fast-import if no branch log was requested.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Added 'reset' command to clear a branch's tree.Shawn O. Pearce Sun, 27 Aug 2006 10:20:49 +0000 (06:20 -0400)

Added 'reset' command to clear a branch's tree.

Sometimes an import frontend may need to work with a temporary branch
which will actually contain many different branches over the life
of the import. This is especially useful when the frontend needs
to create a tag from a set of file versions which are otherwise
never a commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Map only part of the generated pack file at any point... Shawn O. Pearce Sun, 27 Aug 2006 09:53:48 +0000 (05:53 -0400)

Map only part of the generated pack file at any point in time.

When generating a very large pack file (for example close to 1 GB
in size) it may be impossible for the kernel to find a contiguous
free range within a 32 bit address space for the mapping to be
located at. This is especially problematic on large imports where
there is a lot of malloc activity occuring within the same process
and the malloc'd regions may straddle the previously mapped regions,
thereby creating large holes in the address space.

So instead we map only 128 MB of the pack at any given time.
This will likely increase the number of times the file gets mapped
(with additional system time required to update the page tables
more frequently) but will allow the program to handle packs up to
4 GB in size.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Fixed compile error in fast-import.Shawn O. Pearce Sun, 27 Aug 2006 03:37:31 +0000 (23:37 -0400)

Fixed compile error in fast-import.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Fixed GPF in fast-import caused by unterminated linked... Shawn O. Pearce Sun, 27 Aug 2006 02:38:02 +0000 (22:38 -0400)

Fixed GPF in fast-import caused by unterminated linked list.

fast-import was encounting a GPF when it ran out of free tree_entry
objects but didn't know this was the cause because the last
tree_entry wasn't terminated with a NULL pointer. The missing NULL
pointer occurred when we allocated additional entries via xmalloc
but didn't set the last tree_entry's "next" pointer to NULL.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Added --branch-log to option to fast-import.Shawn O. Pearce Sat, 26 Aug 2006 03:07:06 +0000 (23:07 -0400)

Added --branch-log to option to fast-import.

This option can be used to have a record of every commit, the mark
(if supplied) and branch name of the commit recorded into a log file
when the commit is generated. This log can be useful to verify the
results of an import as the commits can be compared to some source
repository matching commits through the mark value.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Added option to export the marks table when fast-import... Shawn O. Pearce Fri, 25 Aug 2006 20:03:04 +0000 (16:03 -0400)

Added option to export the marks table when fast-import terminates.

The marks table can be used by the frontend to load any commit after
the import and compare it to whatever data the frontend knows about
that commit. If the mark idnums can be easily correlated to some
reference source then its relatively trivial to compare the GIT
tree to the reference to verify the accuracy of the import.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Account for tree entry memory costs in fast-import.Shawn O. Pearce Fri, 25 Aug 2006 18:53:32 +0000 (14:53 -0400)

Account for tree entry memory costs in fast-import.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Moved from command to after data to help cvs2svn.Shawn O. Pearce Fri, 25 Aug 2006 02:38:13 +0000 (22:38 -0400)

Moved from command to after data to help cvs2svn.

cvs2svn has three phases: begin_commit, middle_commit, end_commit.
The ancester is computed in the middle_commit phase. So its easier
to generate a stream if the from command appears after the commit
message itself but before the file change commands.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Remove branch creation command from fast-import.Shawn O. Pearce Thu, 24 Aug 2006 22:45:26 +0000 (18:45 -0400)

Remove branch creation command from fast-import.

Jon Smirl was finding it difficult to alter cvs2svn to generate
branch commands prior to the first commit of the same branch.
This change moves the 'from' command to be an optional parameter of
the 'commit' command, thereby allowing a new branch to be defined
at the moment it gets used to create the first commit on that branch.

This change makes it impossible to create a branch with no commits
on it as at least one commit is needed to register the branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Round out memory pool allocations in fast-import to... Shawn O. Pearce Thu, 24 Aug 2006 08:46:29 +0000 (04:46 -0400)

Round out memory pool allocations in fast-import to pointer sizes.

Some architectures (e.g. SPARC) would require that we access pointers
only on pointer-sized alignments. So ensure the pool allocator
rounds out non-pointer sized allocations to the next pointer so we
don't generate bad memory addresses. This could have occurred if
we had previously allocated an atom whose string was not a whole
multiple of the pointer size, for example.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Implemented tree reloading in fast-import.Shawn O. Pearce Thu, 24 Aug 2006 08:37:35 +0000 (04:37 -0400)

Implemented tree reloading in fast-import.

Tree reloading allows fast-import to swap out the least-recently used
branch by simply deallocating the data structures from memory that
were associated with that branch. Later if the branch becomes active
again it can lazily recreate those structures on demand by reloading
the necessary trees from the pack file it originally wrote them to.

The reloading process is implemented by mmap'ing the pack into
memory and using a much tighter variant of the pack reading code
contained in sha1_file.c. This was a blatent copy from sha1_file.c
but the unpacking functions were significantly simplified and are
actually now in a form that should make it easier to map only the
necessary regions of a pack rather than the entire file.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Implemented 'tag' command in fast-import.Shawn O. Pearce Thu, 24 Aug 2006 07:12:13 +0000 (03:12 -0400)

Implemented 'tag' command in fast-import.

Tags received from the frontend are generated in memory in a simple
linked list in the order that the tag commands were sent by the
frontend. If multiple different tag objects for the same tag name
get generated the last one sent by the frontend will be the one
that gets written out at termination. Multiple tag objects for
the same name will cause all older tags of the same name to be lost.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Added branch load counter to fast-import.Shawn O. Pearce Wed, 23 Aug 2006 08:31:12 +0000 (04:31 -0400)

Added branch load counter to fast-import.

If the branch load count exceeds the number of branches created then
the frontend is causing fast-import to page branches into and out of
memory due to the way its ordering its commits. Performance can
likely be increased if the frontend were to alter its commit
sequence such that it stays on one branch before switching to another
branch, then never returns to the prior branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Added mark store/find to fast-import.Shawn O. Pearce Wed, 23 Aug 2006 08:17:45 +0000 (04:17 -0400)

Added mark store/find to fast-import.

Marks are now saved when the mark directive gets used by the frontend
and may be used in place of a SHA1 expression to locate a previous
SHA1 which fast-import may have generated. This is particularly
useful with commits where the frontend does not (easily) have the
ability to compute the SHA1 for an arbitrary commit but needs it
to generate a branch or tag from that commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Converted fast-import to accept standard command line... Shawn O. Pearce Wed, 23 Aug 2006 06:00:31 +0000 (02:00 -0400)

Converted fast-import to accept standard command line parameters.

The following command line options are now accepted before the
pack name:

--objects=n # replaces the object count after the pack name
--depth=n # delta chain depth to use (default is 10)
--active-branches=n # maximum number of branches to keep in memory

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Fixed segfault in fast-import after growing a tree.Shawn O. Pearce Wed, 23 Aug 2006 05:33:47 +0000 (01:33 -0400)

Fixed segfault in fast-import after growing a tree.

Growing a tree caused all subtrees to be deallocated and put back
into the free list yet those subtree's contents were still actively
in use. Consequently they were doled out again and got stomped
on elsewhere. Releasing a tree is now performed in two parts,
either releasing only the content array or releasing the content
array and recursively releasing the subtree(s).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>