]> source.dussan.org Git - jgit.git/log
jgit.git
13 years agoFix duplicate objects in "thin+cached" packs from DFS 30/4630/6
Shawn O. Pearce [Wed, 16 Nov 2011 23:04:44 +0000 (15:04 -0800)]
Fix duplicate objects in "thin+cached" packs from DFS

The DfsReader must offer every representation of an object that
exists on the local repository when PackWriter asks for them. This
is necessary to identify objects in the thin pack part that are also
in the cached pack that will be appended onto the end of the stream.

Without looking at all alternatives, PackWriter may pack the same
object twice (once in the thin section, again in the cached base
pack). This may cause the command line C version to go into an
infinite loop when repacking the resulting repository, as it may see
a delta chain cycle with one of those duplicate copies of the object.

Previously the DfsReader tried to avoid looking at packs that it
might not care about, but this is insufficient, as all versions
must be considered during pack generation.

Change-Id: Ibf4a3e8ea5c42aef16404ffc42a5781edd97b18e

13 years agoDo not write edge objects to the pack stream 46/4646/5
Shawn O. Pearce [Thu, 17 Nov 2011 19:23:18 +0000 (11:23 -0800)]
Do not write edge objects to the pack stream

Consider two objects A->B where A uses B as a delta base, and these
are in the same source pack file ordered as "A B".

If cached packs is enabled and B is also in the cached pack that
will be appended onto the end of the thin pack, and both A, B are
supposed to be in the thin pack, PackWriter must consider the fact
that A's base B is an edge object that claims to be part of the
new pack, but is actually "external" and cannot be written first.

If the object reuse system considered B candidates fist this bug
does not arise, as B will be marked as edge due to it existing in
the cached pack. When the A candidates are later examined, A sees a
valid delta base is available as an edge, and will not later try to
"write base first" during the writing phase.

However, when the reuse system considers A candidates first they
see that B will be in the outgoing pack, as it is still part of
the thin pack, and arrange for A to be written first. Later when A
switches from being in-pack to being an edge object (as it is part
of the cached pack) the pointer in B does not get its type changed
from ObjectToPack to ObjectId, so B thinks A is non-edge.

We work around this case by also checking that the delta base B
is non-edge before writing the object to the pack. Later when A
writes its object header, delta base B's ObjectToPack will have
an offset == 0, which makes isWritten() = false, and the OBJ_REF
delta format will be used for A's header. This will be resolved by
the client to the copy of B that appears in the later cached pack.

Change-Id: Ifab6bfdf3c0aa93649468f49bcf91d67f90362ca

13 years agoUse long for more object counts in PackWriter 45/4645/4
Shawn O. Pearce [Thu, 17 Nov 2011 19:39:53 +0000 (11:39 -0800)]
Use long for more object counts in PackWriter

Packs can contain up to 2^32-1 objects, which exceeds the range of a
Java int. Try harder to accept higher object counts in some cases by
using long more often when we are working with the object count value.

This is a trivial refactoring, we may have to make even more changes
to the object handling code to support more than 2^31-1 objects.

Change-Id: I8cd8146e97cd1c738ad5b48fa9e33804982167e7

13 years agoSearch for annotated tag reuse first 44/4644/2
Shawn O. Pearce [Thu, 17 Nov 2011 19:44:43 +0000 (11:44 -0800)]
Search for annotated tag reuse first

Annotated tags are relatively rare and currently are scheduled in a
pack file near the commits, decreasing the time it takes to resolve
client requests reading tags as part of a history traversal.

Putting them first before the commits allows the storage system to
page in the tag area, and have it relatively hot in the LRU when
the nearby commit area gets examined too. Later looking at the
tree and blob data will pollute the cache, making it more likely
the tags are not loaded and would require file IO.

Change-Id: I425f1f63ef937b8447c396939222ea20fdda290f

13 years agoCorrect progress monitor on "Getting sizes:" phase 42/4642/2
Shawn O. Pearce [Thu, 17 Nov 2011 15:21:22 +0000 (07:21 -0800)]
Correct progress monitor on "Getting sizes:" phase

This counter always was running 1 higher, because it incremented
after the queue was exhausted (and every object was processed). Move
increments to be after the queue has provided a result, to ensure
we do not show a higher in-progress count than total count.

Change-Id: I97f815a0492c0957300475af409b6c6260008463

13 years agoRefactor DfsReader selection of cached packs 29/4629/2
Shawn O. Pearce [Wed, 16 Nov 2011 22:52:31 +0000 (14:52 -0800)]
Refactor DfsReader selection of cached packs

Make the code more clear with a simple refactoring of the boolean
logic into a method that describes the condition we are looking
for on each pack file. A cached pack is possible if there exists
a tips collection, and the collection is non-empty.

Change-Id: I4ac42b0622b39d159a0f4f223e291c35c71f672c

13 years agoMerge changes I366435e2,I64577f8f
Shawn Pearce [Fri, 18 Nov 2011 21:05:27 +0000 (16:05 -0500)]
Merge changes I366435e2,I64577f8f

* changes:
  [findBugs] Silence returning null for StringUtils.toBooleanOrNull()
  [findBugs] Prefer short-cut logic as it's more performant

13 years ago[findBugs] Silence returning null for StringUtils.toBooleanOrNull() 38/4638/1
Matthias Sohn [Wed, 16 Nov 2011 19:47:12 +0000 (20:47 +0100)]
[findBugs] Silence returning null for StringUtils.toBooleanOrNull()

As the method name and its javadoc clearly state that this method can
return null we can ignore this FindBugs warning.

Change-Id: I366435e26eda5d910f5d1a907db51f08efd4bb8c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years ago[findBugs] Prefer short-cut logic as it's more performant 37/4637/1
Matthias Sohn [Wed, 16 Nov 2011 19:54:40 +0000 (20:54 +0100)]
[findBugs] Prefer short-cut logic as it's more performant

Change-Id: I64577f8fd19ee0d2d407479cc70e521adc367f37
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoKeep track of a static collection of all PackWriter instances 95/4595/2
Dave Borowitz [Thu, 10 Nov 2011 20:58:13 +0000 (12:58 -0800)]
Keep track of a static collection of all PackWriter instances

Stored in a weak concurrent hash map, which we clean up while iterating.
Usually the weak reference behavior should not be necessary because
PackWriters should be released with release(), but we still want to
avoid leaks when dealing with broken client code.

Change-Id: I337abb952ac6524f7f920fedf04065edf84d01d2

13 years agoEstimate the amount of memory used by a PackWriter 94/4594/2
Dave Borowitz [Thu, 10 Nov 2011 20:53:50 +0000 (12:53 -0800)]
Estimate the amount of memory used by a PackWriter

Memory usage is dominated by three terms:
 - The maximum memory allocated to each delta window.
 - The maximum size of a single file held in memory during delta search.
 - ObjectToPack instances owned by the writer.

For the first two terms, rather than doing complex instrumentation of
the DeltaWindows, we just overestimate based on the config parameters
(though we may underestimate if the maximum size is not set).

For the ObjectToPack instances, we do some rough byte accounting of the
underlying Java object representation.

Change-Id: I23fe3cf9d260a91f1aeb6ea22d75af8ddb9b1939

13 years agoAdd an object encapsulating the state of a PackWriter 93/4593/2
Dave Borowitz [Thu, 10 Nov 2011 20:49:15 +0000 (12:49 -0800)]
Add an object encapsulating the state of a PackWriter

Exposes essentially the same state machine to the programmer as is
exposed to the client via a ProgressMonitor, using a wrapper around
beginTask()/endTask().

Change-Id: Ic3622b4acea65d2b9b3551c668806981fa7293e3

13 years agoMerge "Implement DirCacheEntry.toString() to ease debugging"
Christian Halstrick [Fri, 11 Nov 2011 08:21:29 +0000 (03:21 -0500)]
Merge "Implement DirCacheEntry.toString() to ease debugging"

13 years agoClean up tab usage in Directory/File conflict table 29/4529/2
Robin Rosenberg [Sun, 30 Oct 2011 20:51:22 +0000 (21:51 +0100)]
Clean up tab usage in Directory/File conflict table

Change-Id: I394fc1ef714c8465cbd5af9c73338b9a324ad9c4
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
13 years agoAdd detection of untracked folders to IndexDiffFilter 85/4385/6
Jens Baumgart [Wed, 26 Oct 2011 12:00:48 +0000 (14:00 +0200)]
Add detection of untracked folders to IndexDiffFilter

Decorators need to know whether folders in the working tree contain only
untracked files. This change enhances IndexDiffFilter to report such
folders. This works only together with treewalks which operate in
default traversal mode. For treewalks which process entries in
postorder mode (files are walked before their parent folder is walked)
this detection doesn't work.

Bug: 359264
Change-Id: I9298d1e3ccac0aec8bbd4e8ac867bc06a5c89c9f
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
13 years ago[blame] Fix blame following renames in non-toplevel directories 68/4368/4
Carsten Pfeiffer [Thu, 27 Oct 2011 22:15:27 +0000 (00:15 +0200)]
[blame] Fix blame following renames in non-toplevel directories

Mark the treeWalk as recursive; otherwise following renames only works
for toplevel files.

Bug: 302549
Change-Id: I70867928eadf332b0942f8bf6877a3acb3828c87
Signed-off-by: Carsten Pfeiffer <carsten.pfeiffer@gebit.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
13 years agoSupport a configured credentials provider in LsRemoteCommand 71/4571/4
Kevin Sawicki [Tue, 8 Nov 2011 20:49:16 +0000 (12:49 -0800)]
Support a configured credentials provider in LsRemoteCommand

Refactored the three common transport configuration options:
credentials provider, timeout, and transport config callback
into a new TransportCommand base class which is now extended
by all commands that use a Transport object during execution.

Bug: 349188
Change-Id: I90c2c14fb4e3cc4712905158f9047153a0c235c2
Signed-off-by: Kevin Sawicki <kevin@github.com>
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
13 years agoImplement DirCacheEntry.toString() to ease debugging 96/4596/1
Matthias Sohn [Thu, 10 Nov 2011 12:34:59 +0000 (13:34 +0100)]
Implement DirCacheEntry.toString() to ease debugging

Change-Id: I9aa1b5817a18fb340411f47b25b6711d533590fd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoMerge changes Ibb3467f7,I2af99903
Robin Rosenberg [Thu, 10 Nov 2011 07:07:04 +0000 (02:07 -0500)]
Merge changes Ibb3467f7,I2af99903

* changes:
  Always use try/finally around DfsBlockCache.clockLock
  DfsBlockCache: Fix NPE when evicting empty cell

13 years agoMerge "Do not use the deprecated Tree class internally"
Christian Halstrick [Wed, 9 Nov 2011 08:40:45 +0000 (03:40 -0500)]
Merge "Do not use the deprecated Tree class internally"

13 years agoDo not use the deprecated Tree class internally 51/4551/3
Robin Rosenberg [Tue, 8 Nov 2011 21:07:59 +0000 (22:07 +0100)]
Do not use the deprecated Tree class internally

Replace it with DirCache, like we did to remove GitIndex.

Change-Id: Ia354770cee5c68f19945279b34aef6de54697435

13 years agoKill GitIndex 55/4355/5
Robin Rosenberg [Sun, 16 Oct 2011 05:01:21 +0000 (07:01 +0200)]
Kill GitIndex

A few places were still using GitIndex. Replacing it was fairly
simple, but there is a difference in test outcome in
ReadTreeTest.testUntrackedConflicts. I believe the new behavior
is good, since we do not update neither the index, not the worktree.

Change-Id: I4be5357b7b3139dded17f77e07a140addb213ea7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoDeprecate GitIndex more by using only DirCache internally. 56/4356/6
Robin Rosenberg [Wed, 19 Oct 2011 21:14:41 +0000 (23:14 +0200)]
Deprecate GitIndex more by using only DirCache internally.

This includes merging ReadTreeTest into DirCacheCheckoutTest and
converting IndexDiffTest to use DirCache only. The GitIndex specific
T0007GitIndex test remains.

GitIndex is deprecated. Let us speed up its demise by focusing the
DirCacheCheckout tests to using DirCache instead.

This also add explicit deprecation comments to methods that depend
on GitIndex in Repository and TreeEntry. The latter is deprecated in
itself.

Change-Id: Id89262f7fbfee07871f444378f196ded444f2783
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoAlways use try/finally around DfsBlockCache.clockLock 73/4573/1
Shawn O. Pearce [Mon, 7 Nov 2011 20:06:56 +0000 (12:06 -0800)]
Always use try/finally around DfsBlockCache.clockLock

Any RuntimeException or Error in this block will leave the lock
held by the caller thread, which can later result in deadlock or
just cache requests hanging forever because they cannot get to
the lock object.

Wrap everything in try/finally to prevent the lock from hanging,
even though a RuntimeException or Error should never happen in
any of these code paths.

Change-Id: Ibb3467f7ee4c06f617b737858b4be17b10d936e0

13 years agoDfsBlockCache: Fix NPE when evicting empty cell 72/4572/1
Shawn O. Pearce [Tue, 8 Nov 2011 20:22:37 +0000 (12:22 -0800)]
DfsBlockCache: Fix NPE when evicting empty cell

The cache starts with a single empty Ref that has no data, as the
clock list does not support being empty. When this Ref is removed,
the size has to be decremented from the associated DfsPackKey,
which was previously null. Make it always be non-null.

Change-Id: I2af99903e8039405ea6d67f383576ffa43839cff

13 years agoDon't throw away the stack trace when tests fail 49/4549/1
Robin Rosenberg [Sat, 5 Nov 2011 15:52:24 +0000 (16:52 +0100)]
Don't throw away the stack trace when tests fail

Most unexpected exceptions are completely useless yielding message
like "null" or "3" or in the best cases something reasonable, but
still out of context.

Just declare the test as throwing an exception. That will retain
the full stack trace leading to the point of failure without using
a debugger or changing the code.

Change-Id: Id2454d328d1aa665606ae002de2c3805fe7baa8e

13 years agoMerge "Do not resolve path using cygwin unless told to"
Shawn Pearce [Fri, 4 Nov 2011 22:09:56 +0000 (18:09 -0400)]
Merge "Do not resolve path using cygwin unless told to"

13 years agoMerge changes Icea2572d,I2633e472,I207c0c93,I10cee76c,Ifd78e8ce,I890b5fcc,Ia0b01f5d...
Shawn Pearce [Fri, 4 Nov 2011 22:06:30 +0000 (18:06 -0400)]
Merge changes Icea2572d,I2633e472,I207c0c93,I10cee76c,Ifd78e8ce,I890b5fcc,Ia0b01f5d,Iec524abd

* changes:
  DfsBlockCache: Update hits to not include contains()
  Add a listener for changes to a DfsObjDatabase's pack files
  Expose the reverse index size in the DfsPackDescription
  Add a DfsPackFile method to get the number of cached bytes
  Expose the list of pack files in the DfsBlockCache
  Add a DFS repository description and reference it in each pack
  Clarify the docstring of DfsBlockCache.reconfigure()
  DFS: A storage layer for JGit

13 years agoMerge "Refactor HTTP server stack to use Filter as base"
Shawn O. Pearce [Fri, 4 Nov 2011 22:05:09 +0000 (18:05 -0400)]
Merge "Refactor HTTP server stack to use Filter as base"

13 years agoDfsBlockCache: Update hits to not include contains() 46/4546/2
Colby Ranger [Thu, 3 Nov 2011 22:30:17 +0000 (15:30 -0700)]
DfsBlockCache: Update hits to not include contains()

Also expose the underlying hit and miss counters, in
addition to the hit ratio.

Change-Id: Icea2572d62e59318133b0a88848019f34ad70975

13 years agoAdd a listener for changes to a DfsObjDatabase's pack files 45/4545/3
Dave Borowitz [Wed, 19 Oct 2011 22:55:14 +0000 (15:55 -0700)]
Add a listener for changes to a DfsObjDatabase's pack files

Intended for cross-request use, so only refers to
DfsRepositoryDescriptions rather than DfsRepositorys.

Change-Id: I2633e472c9264d91d632069f608d53d4bdd0fc09

13 years agoExpose the reverse index size in the DfsPackDescription 44/4544/3
Dave Borowitz [Thu, 3 Nov 2011 19:57:58 +0000 (12:57 -0700)]
Expose the reverse index size in the DfsPackDescription

This is analogous to the getPackSize() and getIndexSize() methods.

Change-Id: I207c0c93f9145826d84b3610eb4319fca074ee0d

13 years agoAdd a DfsPackFile method to get the number of cached bytes 43/4543/3
Dave Borowitz [Thu, 3 Nov 2011 19:54:21 +0000 (12:54 -0700)]
Add a DfsPackFile method to get the number of cached bytes

The counter is actually stored in the DfsPackKey so it can be
manipulated by the cache.

Change-Id: I10cee76c92d65c68d1aa1a9dd0c4fd7173c4cede

13 years agoExpose the list of pack files in the DfsBlockCache 42/4542/3
Dave Borowitz [Thu, 3 Nov 2011 19:52:19 +0000 (12:52 -0700)]
Expose the list of pack files in the DfsBlockCache

Callers may want to inspect the contents of the cache, which this allows
them to do in a read-only fashion without any locking.

Change-Id: Ifd78e8ce34e26e5cc33e9dd61d70c593ce479ee0

13 years agoAdd a DFS repository description and reference it in each pack 41/4541/3
Dave Borowitz [Fri, 7 Oct 2011 22:31:19 +0000 (15:31 -0700)]
Add a DFS repository description and reference it in each pack

Just as DfsPackDescription describes a pack but does not imply it is
open in memory, a DfsRepositoryDescription describes a repository at a
basic level without it necessarily being open.

Change-Id: I890b5fccdda12c1090cfabf4083b5c0e98d717f6

13 years agoClarify the docstring of DfsBlockCache.reconfigure() 40/4540/2
Dave Borowitz [Thu, 3 Nov 2011 19:43:03 +0000 (12:43 -0700)]
Clarify the docstring of DfsBlockCache.reconfigure()

The docstring was copied from the local filesystem cache code, which
actually attempted to reconfigure the cache on the fly. The DFS cache is
designed to be "reconfigured" exactly once.

Change-Id: Ia0b01f5d6b6b3d3a68d65a5c229ff67c1cede5bc

13 years agoDFS: A storage layer for JGit 30/3930/8
Shawn O. Pearce [Sat, 2 Jul 2011 01:31:53 +0000 (18:31 -0700)]
DFS: A storage layer for JGit

In practice the DHT storage layer has not been performing as well as
large scale server environments want to see from a Git server.

The performance of the DHT schema degrades rapidly as small changes
are pushed into the repository due to the chunk size being less than
1/3 of the pushed pack size.  Small chunks cause poor prefetch
performance during reading, and require significantly longer prefetch
lists inside of the chunk meta field to work around the small size.

The DHT code is very complex (>17,000 lines of code) and is very
sensitive to the underlying database round-trip time, as well as the
way objects were written into the pack stream that was chunked and
stored on the database.  A poor pack layout (from any version of C Git
prior to Junio reworking it) can cause the DHT code to be unable to
enumerate the objects of the linux-2.6 repository in a completable
time scale.

Performing a clone from a DHT stored repository of 2 million objects
takes 2 million row lookups in the DHT to locate the OBJECT_INDEX row
for each object being cloned. This is very difficult for some DHTs to
scale, even at 5000 rows/second the lookup stage alone takes 6 minutes
(on local filesystem, this is almost too fast to bother measuring).
Some servers like Apache Cassandra just fall over and cannot complete
the 2 million lookups in rapid fire.

On a ~400 MiB repository, the DHT schema has an extra 25 MiB of
redundant data that gets downloaded to the JGit process, and that is
before you consider the cost of the OBJECT_INDEX table also being
fully loaded, which is at least 223 MiB of data for the linux kernel
repository.  In the DHT schema answering a `git clone` of the ~400 MiB
linux kernel needs to load 248 MiB of "index" data from the DHT, in
addition to the ~400 MiB of pack data that gets sent to the client.
This is 193 MiB more data to be accessed than the native filesystem
format, but it needs to come over a much smaller pipe (local Ethernet
typically) than the local SATA disk drive.

I also never got around to writing the "repack" support for the DHT
schema, as it turns out to be fairly complex to safely repack data in
the repository while also trying to minimize the amount of changes
made to the database, due to very common limitations on database
mutation rates..

This new DFS storage layer fixes a lot of those issues by taking the
simple approach for storing relatively standard Git pack and index
files on an abstract filesystem. Packs are accessed by an in-process
buffer cache, similar to the WindowCache used by the local filesystem
storage layer. Unlike the local file IO, there are some assumptions
that the storage system has relatively high latency and no concept of
"file handles". Instead it looks at the file more like HTTP byte range
requests, where a read channel is a simply a thunk to trigger a read
request over the network.

The DFS code in this change is still abstract, it does not store on
any particular filesystem, but is fairly well suited to the Amazon S3
or Apache Hadoop HDFS. Storing packs directly on HDFS rather than
HBase removes a layer of abstraction, as most HBase row reads turn
into an HDFS read.

Most of the DFS code in this change was blatently copied from the
local filesystem code. Most parts should be refactored to be shared
between the two storage systems, but right now I am hesistent to do
this due to how well tuned the local filesystem code currently is.

Change-Id: Iec524abdf172e9ec5485d6c88ca6512cd8a6eafb

13 years agoMerge "Allow '\' in user names in URI-ish"
Shawn Pearce [Fri, 4 Nov 2011 17:10:47 +0000 (13:10 -0400)]
Merge "Allow '\' in user names in URI-ish"

13 years agoAllow '\' in user names in URI-ish 48/4548/1
Robin Rosenberg [Fri, 4 Nov 2011 16:53:44 +0000 (17:53 +0100)]
Allow '\' in user names in URI-ish

Actually this is not ok according to the RFC, but this implementation is
ment to be Git compatible. A '\' is needed when the authentication
requires or allows authentication to a Windows domain where the
user name can be specified as DOMAIN\user.

Change-Id: If02f258c032486f1afd2e09592a3c7069942eb8b

13 years agoMerge "Provide an id for submodule entries."
Shawn Pearce [Fri, 4 Nov 2011 14:14:46 +0000 (10:14 -0400)]
Merge "Provide an id for submodule entries."

13 years agoFix NPE when PATH environment variable is empty 28/4528/5
Carl Myers [Fri, 4 Nov 2011 13:42:12 +0000 (14:42 +0100)]
Fix NPE when PATH environment variable is empty

Change-Id: Ic27d509cd5e2d6c855e7d355fc308399d9dc01c9
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoProvide an id for submodule entries. 04/4304/12
Kevin Sawicki [Fri, 4 Nov 2011 07:14:53 +0000 (08:14 +0100)]
Provide an id for submodule entries.

Open a repository for submodule entries that have a child .git
directory and use the resolved HEAD commit as the entry's id.

Change-Id: I68d6e127f018b24ee865865a2dd3011a0e21453c
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge "Implement Config.Entry.toString() to help debugging"
Shawn Pearce [Thu, 3 Nov 2011 20:19:17 +0000 (16:19 -0400)]
Merge "Implement Config.Entry.toString() to help debugging"

13 years agoMerge "DirCacheEntry: accessors for cached creation time (CTIME)"
Shawn Pearce [Thu, 3 Nov 2011 20:18:43 +0000 (16:18 -0400)]
Merge "DirCacheEntry: accessors for cached creation time (CTIME)"

13 years agoSuppress unused and unchecked warnings 32/4532/1
Kevin Sawicki [Thu, 3 Nov 2011 10:03:01 +0000 (11:03 +0100)]
Suppress unused and unchecked warnings

Change-Id: I9f51cc749f5cb9d2e3aa86874e60fca29b779565
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoDirCacheEntry: accessors for cached creation time (CTIME) 50/4450/1
Marc Strapetz [Mon, 31 Oct 2011 16:45:51 +0000 (17:45 +0100)]
DirCacheEntry: accessors for cached creation time (CTIME)

Change-Id: I986d5fff63ff1a86cca6bab49c744ea673fe4892

13 years agoMerge "Ensure the ObjectInserter flushes after a merge"
Shawn O. Pearce [Sat, 29 Oct 2011 01:14:26 +0000 (21:14 -0400)]
Merge "Ensure the ObjectInserter flushes after a merge"

13 years agoDo not resolve path using cygwin unless told to 31/4431/1
Robin Rosenberg [Fri, 28 Oct 2011 12:58:32 +0000 (14:58 +0200)]
Do not resolve path using cygwin unless told to

The system property jgit.cygpath must be set to true in order
for cygwin's cygpath to be used to translate path from cygwin
namespace to Windows namespace.

The cygwin path translation should be considered deprecated.

Bug: 353389
Change-Id: I2b5234c0ab936dac67d1e232f4cd28331bf3226d
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoImplement Config.Entry.toString() to help debugging 01/4401/2
Matthias Sohn [Thu, 27 Oct 2011 20:55:59 +0000 (22:55 +0200)]
Implement Config.Entry.toString() to help debugging

Change-Id: I86f6359d955d39ab033848b87ed39d20378d3c1f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoMerge "Enable full Transport configuration for JGit API commands"
Shawn Pearce [Thu, 27 Oct 2011 14:25:18 +0000 (10:25 -0400)]
Merge "Enable full Transport configuration for JGit API commands"

13 years agoMerge "Close the repo in CloneCommandTest"
Christian Halstrick [Thu, 27 Oct 2011 12:57:06 +0000 (08:57 -0400)]
Merge "Close the repo in CloneCommandTest"

13 years agoEnsure the ObjectInserter flushes after a merge 12/4412/2
Shawn O. Pearce [Wed, 26 Oct 2011 21:42:51 +0000 (14:42 -0700)]
Ensure the ObjectInserter flushes after a merge

If this does not happen some databases may discard
objects and not make them available.

Change-Id: I347b3c3724db52c8a6c09f4804071497a3a377ab

13 years agoMerge changes I488e9c97,I30f1049f,I1c088dce
Matthias Sohn [Wed, 26 Oct 2011 21:29:23 +0000 (17:29 -0400)]
Merge changes I488e9c97,I30f1049f,I1c088dce

* changes:
  Cosmetic adjustment of relative date format, do not display "0 months"
  Make use of the many date formatting options in the log command
  Define a utility class for handling Git date formats

13 years agoCosmetic adjustment of relative date format, do not display "0 months" 83/4383/7
Robin Rosenberg [Thu, 20 Oct 2011 22:23:57 +0000 (00:23 +0200)]
Cosmetic adjustment of relative date format, do not display "0 months"

Though it may seem less precise, "0 months" looks bad and the reference
Git implementation also does not display "0 months"

Change-Id: I488e9c97656f9941788ae88d7c5c1562ab6c26f0

13 years agoMake use of the many date formatting options in the log command 82/4382/6
Robin Rosenberg [Sun, 9 Oct 2011 20:01:39 +0000 (22:01 +0200)]
Make use of the many date formatting options in the log command

Change-Id: I30f1049fce086f2cf7e39ba3ad8b335df3a7b827

13 years agoClose the repo in CloneCommandTest 10/4410/1
Robin Rosenberg [Wed, 26 Oct 2011 20:14:20 +0000 (22:14 +0200)]
Close the repo in CloneCommandTest

The test failed on Windows only

Change-Id: Ibff5308b33deb73570626a08a04e86ad8f418023

13 years agoMerge "Allow detecting which files were renamed during a revwalk"
Matthias Sohn [Wed, 26 Oct 2011 20:18:21 +0000 (16:18 -0400)]
Merge "Allow detecting which files were renamed during a revwalk"

13 years agoAllow detecting which files were renamed during a revwalk 69/4369/3
Carsten Pfeiffer [Tue, 25 Oct 2011 07:22:11 +0000 (09:22 +0200)]
Allow detecting which files were renamed during a revwalk

The egit history view shows the files associated with a commit by using
a PathFilter. When following renames with a FollowFilter, the PathFilter
cannot be configured anymore because the affected files are simply not
known.

Thus, it should be possible to get to know which files are renamed.

Bug: 302549
Change-Id: I4761e9f5cfb4f0ef0b0e1e38991401a1d5003bea

13 years agoFix compatibilty breakage for SystemReader 98/4398/1
Robin Rosenberg [Sun, 23 Oct 2011 20:53:17 +0000 (22:53 +0200)]
Fix compatibilty breakage for SystemReader

Introducing a new abstract method is not nice when one
expects other to subclass them. Create default implementations
so old code that implements SystemReader does not break.
The default methods just delegate to the JVM.

Change-Id: I42cdfdcb6b29f7203697a23833dca85185b0b9b3
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoDefine a utility class for handling Git date formats 81/4381/4
Robin Rosenberg [Sat, 22 Oct 2011 23:51:30 +0000 (01:51 +0200)]
Define a utility class for handling Git date formats

Besides the formats known by git-log(1) we also add "locale"
and "localelocal" that formats dates according to the user's locale.
"locale" does not translate into local timezone, while
localelocal does.

Change-Id: I1c088dcec992c107e43f6c17be4ac9ed6eb428bf

13 years agoAdd locale to the properties manageable by SystemReader 80/4380/1
Robin Rosenberg [Sun, 9 Oct 2011 16:43:16 +0000 (18:43 +0200)]
Add locale to the properties manageable by SystemReader

Change-Id: I5e9af40d38bb671cb9fcdb0fa3b4eb3af5f36f6c

13 years agoAdd a method to SystemReader to get the time zone 79/4379/1
Robin Rosenberg [Sun, 9 Oct 2011 12:47:19 +0000 (14:47 +0200)]
Add a method to SystemReader to get the time zone

Change-Id: Ifd31f408ed2c5b7869694b715fea3219e74963ef

13 years agoUse the SystemReader to get system time 78/4378/1
Robin Rosenberg [Sun, 9 Oct 2011 12:47:49 +0000 (14:47 +0200)]
Use the SystemReader to get system time

Change-Id: Ib79c0cc964bfe799b204419e552b9aa6243966ce

13 years agoFix bad checkout behaviour when a file is removed 58/4358/4
Robin Rosenberg [Mon, 17 Oct 2011 06:28:19 +0000 (08:28 +0200)]
Fix bad checkout behaviour when a file is removed

We deleted the entry if there was a file and an index
entry, but not when there was just an index entry. Now
delete the file in both cases since the missing file
just means our worktree is dirty. This affected the
implementation of reset --hard.

Bug: 347574
Change-Id: Ie66fa61303472422830f5e33614e93ad65094e5d

13 years agoCorrect typo in RevWalk.parseBody comment 52/4352/2
Kevin Sawicki [Fri, 14 Oct 2011 15:49:17 +0000 (08:49 -0700)]
Correct typo in RevWalk.parseBody comment

Change-Id: I0e65a5a6809a8d32d256322dbcae94b6aa603e5e
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge "Extend IndexDiff to calculate ignored files and folders"
Christian Halstrick [Mon, 10 Oct 2011 13:01:49 +0000 (09:01 -0400)]
Merge "Extend IndexDiff to calculate ignored files and folders"

13 years agoRefactor HTTP server stack to use Filter as base 32/4332/1
Shawn O. Pearce [Sat, 8 Oct 2011 00:23:58 +0000 (17:23 -0700)]
Refactor HTTP server stack to use Filter as base

All Git URLs operate off a suffix approach, for example the default
binding is for paths such as:

  */info/refs
  */git-upload-pack
  */git-receive-pack

These names are not common on project hosting servers, especially
one like Gerrit Code Review.

In addition to offering Git-over-HTTP as a servlet, offer it as a
filter that triggers when a matching suffix appears, but otherwise
delegates the request through the chain.  This filter would permit
Gerrit Code Review to place projects at the root of the server,
rather than within the "/p/" subdirectory, making the HTTP and SSH
URL structure exactly match each other.

To prevent breakage with existing users, the MetaServlet and
GitServlet are kept as wrappers delegating to their filters,
returning 404 Not Found when the filter has no match.

Change-Id: I2465c15c086497e0faaae5941159d80c028fa8b1

13 years agoMerge changes I7cdb563b,I7f60ae68,I7bd1e769,I92683805,I0e51a8e6
Shawn O. Pearce [Fri, 7 Oct 2011 20:00:21 +0000 (16:00 -0400)]
Merge changes I7cdb563b,I7f60ae68,I7bd1e769,I92683805,I0e51a8e6

* changes:
  UploadPack: Fix races in smart HTTP negotiation
  PackWriter: Export more statistics
  Do not requeue state vector in stateless RPC fetch
  Wrap excessively long line in BasePackFetchConnection
  Fix smart HTTP client stream alignment errors

13 years agoExtend IndexDiff to calculate ignored files and folders 20/4320/4
Jens Baumgart [Wed, 5 Oct 2011 11:56:23 +0000 (13:56 +0200)]
Extend IndexDiff to calculate ignored files and folders

IndexDiff was extended to calculate ignored files and folders.
The calculation only considers files that are NOT in the index.
This functionality is required by the new EGit decorator implementation.

Bug: 359264
Change-Id: I8f09d6a4d61b64aeea80fd22bf3a2963c2bca347
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
13 years agoMerge "Fix DirCacheEdtor.DeleteTree for empty string argument"
Christian Halstrick [Wed, 5 Oct 2011 10:21:01 +0000 (06:21 -0400)]
Merge "Fix DirCacheEdtor.DeleteTree for empty string argument"

13 years agoAdd missing comment text for mergeCommitTree parameter 62/4062/2
Kevin Sawicki [Wed, 24 Aug 2011 01:41:05 +0000 (18:41 -0700)]
Add missing comment text for mergeCommitTree parameter

Change-Id: I35cef13d8be4f06515668f710fd508700b90f44d
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoDo not attempt to resolve describe-labels with less than four digits 70/4170/2
Robin Rosenberg [Tue, 6 Sep 2011 15:37:53 +0000 (17:37 +0200)]
Do not attempt to resolve describe-labels with less than four digits

Change-Id: I21dcd3cca3b41102fd898238d8d640dea25e0caf
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoFix DirCacheEdtor.DeleteTree for empty string argument 90/4290/2
Robin Rosenberg [Sat, 24 Sep 2011 22:18:24 +0000 (00:18 +0200)]
Fix DirCacheEdtor.DeleteTree for empty string argument

Change-Id: I7425da91c0752ae82484e3c29d21b57402d30c61

13 years agoAdd varargs version of PathFilterGroup.createFromStrings 09/4309/4
Kevin Sawicki [Thu, 29 Sep 2011 17:16:29 +0000 (10:16 -0700)]
Add varargs version of PathFilterGroup.createFromStrings

This allows the following usage pattern:

  PathFilterGroup.createFromStrings("path1", "path2");

Change-Id: I589e758cc55873ce75614602e017ac793435e24d
Signed-off-by: Kevin Sawicki <kevin@github.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoNew config constant for default start-point 68/4168/4
Manuel Doninger [Thu, 8 Sep 2011 17:37:11 +0000 (19:37 +0200)]
New config constant for default start-point

This constant determine the default start-point, if the user
don't want to create a branch from the current HEAD.

Change-Id: Iea944e11e80134fbafc4c47383457d5ed11a4164
Signed-off-by: Manuel Doninger <manuel.doninger@googlemail.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoAdd blame unit test for file that is renamed twice. 35/4135/4
Kevin Sawicki [Sun, 4 Sep 2011 21:46:06 +0000 (14:46 -0700)]
Add blame unit test for file that is renamed twice.

Bug: 354507
Change-Id: I853774ecc1662d095a50a9668431c6e3ce4156c4
Signed-off-by: Kevin Sawicki <kevin@github.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoMerge "Use bundle dependency for org.hamcrest.org"
Robin Rosenberg [Fri, 30 Sep 2011 16:29:54 +0000 (12:29 -0400)]
Merge "Use bundle dependency for org.hamcrest.org"

13 years agoFire IndexChangedEvent on DirCache.commit() 19/4219/9
Matthias Sohn [Thu, 29 Sep 2011 22:00:22 +0000 (00:00 +0200)]
Fire IndexChangedEvent on DirCache.commit()

Since we replaced GitIndex by DirCache JGit didn't fire
IndexChangedEvents anymore. For EGit this still worked with a high
latency since its RepositoryChangeScanner which is scheduled to
run each 10 seconds fires the event in case the index changes.
This scanner is meant to detect index changes induced by a different
process e.g. by calling "git add" from native git.

When the index is changed from within the same process we should fire
the event synchronously. Compare the index checksum on write to index
checksum when index was read earlier to determine if index really
changed. Use IndexChangedListener interface to keep DirCache decoupled
from Repository.

Change-Id: Id4311f7a7859ffe8738863b3d86c83c8b5f513af
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoRemove TODO for generated constructor. 02/4302/1
Kevin Sawicki [Wed, 28 Sep 2011 21:10:24 +0000 (14:10 -0700)]
Remove TODO for generated constructor.

Change-Id: Ie405f6de99b8fa632d7462400e647a37f30e2e31
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoFix status in index entries after checkout of paths 96/4296/3
Christian Halstrick [Tue, 27 Sep 2011 16:43:14 +0000 (18:43 +0200)]
Fix status in index entries after checkout of paths

The checkout command was producing an inconsistent state of the index
which even confuses native git. The content sha1 of the touched index
entries was updated, but the length and the filemode was not updated.
Later in coding the index entries got automatically corrected (through
Dircache.checkoutEntry()) but the correction was after persisting the
index to disk. So, the correction was lost and we ended up with an index
where length and sha1 don't fit together.
A similar problem is fixed with "lastModified" of DircacheEntry. When
checking out a path without specifying an explicit commit (you want to
checkout what's in the index) the index was not updated regarding
lastModified. Readers of the index will think the checked-out
file is dirty because the file has a younger lastmodified then what's
in the index.

Change-Id: Ifc6d806fbf96f53c94d9ded0befcc932d943aa04
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Bug: 355205

13 years agoUse bundle dependency for org.hamcrest.org 97/4297/2
Matthias Sohn [Tue, 27 Sep 2011 13:34:52 +0000 (15:34 +0200)]
Use bundle dependency for org.hamcrest.org

This is required to make org.eclipse.jgit.test compile when SWTBot isn't
installed which should only be necessary for EGit developers.

Change-Id: I7fc22ca9fc3048cdcf211c56612a3d1b8bed8f6e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoMerge "Fix DirCache,getEntriesWithin for empty string arguemnt"
Christian Halstrick [Mon, 26 Sep 2011 08:27:54 +0000 (04:27 -0400)]
Merge "Fix DirCache,getEntriesWithin for empty string arguemnt"

13 years agoMerge "Remove duplicate calls to DirCache.unlock on checkout"
Robin Rosenberg [Sun, 25 Sep 2011 08:44:45 +0000 (04:44 -0400)]
Merge "Remove duplicate calls to DirCache.unlock on checkout"

13 years agoFix DirCache,getEntriesWithin for empty string arguemnt 27/4127/2
Robin Rosenberg [Sat, 24 Sep 2011 22:17:19 +0000 (00:17 +0200)]
Fix DirCache,getEntriesWithin for empty string arguemnt

Change-Id: I0bea130df611de3ef8c9251093b11c62b5442cd1

13 years agoMerge "Document the show methods of RevWalkTextBuiltin"
Robin Rosenberg [Thu, 22 Sep 2011 16:27:48 +0000 (12:27 -0400)]
Merge "Document the show methods of RevWalkTextBuiltin"

13 years agoMerge "Fix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin"
Robin Rosenberg [Thu, 22 Sep 2011 16:27:27 +0000 (12:27 -0400)]
Merge "Fix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin"

13 years agoMerge "Remove use of GitIndex to detect index changes"
Robin Rosenberg [Thu, 22 Sep 2011 16:24:37 +0000 (12:24 -0400)]
Merge "Remove use of GitIndex to detect index changes"

13 years agoTest the reflog message for commit, cherry-pick, revert and merge 07/4207/2
Robin Rosenberg [Thu, 8 Sep 2011 17:42:19 +0000 (19:42 +0200)]
Test the reflog message for commit, cherry-pick, revert and merge

Change-Id: I319f09577b3e04f6c31399fe8e57e9a9ad2c8a6c
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoAppend merge strategy to reflog message 06/4206/2
Robin Rosenberg [Thu, 8 Sep 2011 16:35:17 +0000 (18:35 +0200)]
Append merge strategy to reflog message

Change-Id: Ia0e73208b86c45a3d96698e973f6e70ec5cb7303
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix the reflog prefix for cherry-pick, revert and merge commands 05/4205/2
Robin Rosenberg [Thu, 8 Sep 2011 16:05:01 +0000 (18:05 +0200)]
Fix the reflog prefix for cherry-pick, revert and merge commands

We should see whether the commit was a regular commit or something
else.

Change-Id: I82d8300cf3c53cb2bdcb6495386aadb803e0c6f7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoDocument the show methods of RevWalkTextBuiltin 64/4264/1
Robin Rosenberg [Sun, 18 Sep 2011 11:07:24 +0000 (13:07 +0200)]
Document the show methods of RevWalkTextBuiltin

Change-Id: Ic704008cb215e1437c0a3fd1aec3aa38209ef3c7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoFix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin 49/4249/2
Robin Rosenberg [Sun, 18 Sep 2011 11:08:03 +0000 (13:08 +0200)]
Fix a boxing warning in org.eclipse.jgit.pgm.RevWalkTextBuiltin

Change-Id: Ia154da79926ce25731e856bed264dd19a76bc1f1
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoEnable full Transport configuration for JGit API commands 82/4082/2
Roberto Tyley [Fri, 16 Sep 2011 15:04:35 +0000 (16:04 +0100)]
Enable full Transport configuration for JGit API commands

Add a TransportConfigCallback parameter to JGit API commands, to allow
consumers of the JGit command API to perform custom Transport configuration
that would be otherwise difficult to anticipate & expose on the API command
builders.

My specific use-case is configuring additional properties on SshTransport
- I need to take over the SshSessionFactory used by the transport. Using
TransportConfigCallback I can simply do this (rather than reimplement the
API command classes):

public void configure(Transport tn) {
  if (tn instanceof SshTransport) {
    ((SshTransport) tn).setSshSessionFactory(factoryProvider.get());
  }
}

Adding an explicit setSshSessionFactory() method to the JGit command
classes would bloat the API. Also, creating the replacement
SshSessionFactory is unnecessary if the transport is not SSH, but the type
of the Transport is only known once the remote has been resolved and the
URI parsed - consequently it makes sense to perform this step in a
callback, where the transport instance can be inspected to determine if
it's of a relevant type.

A note about where this leaves the API - there are now 4 commands:

CloneCommand
PullCommand
FetchCommand
PushCommand

-that share 3 identical transport-related parameters:

timeout
credentialsProvider
transportConfigurator

I think there's potential for introducing an interface or val-object to
identify/encapsulate this repetition, which I'd be happy to do in a
subsequent commit.

Change-Id: I8983c3627cdd7d7b2aeb0b6a3dadee553378b951
Signed-off-by: Roberto Tyley <roberto.tyley@gmail.com>
13 years agoRemove use of GitIndex to detect index changes 18/4218/3
Matthias Sohn [Fri, 9 Sep 2011 15:41:34 +0000 (17:41 +0200)]
Remove use of GitIndex to detect index changes

We can detect index changes using FileSnapshot. This is more efficient
and removes usage of a deprecated class.

Change-Id: I4a679102c9a1bd8e82b9ca93eb9dbbde445e9be4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoPrepare 1.2.0 builds 56/4256/1
Matthias Sohn [Thu, 15 Sep 2011 20:00:44 +0000 (22:00 +0200)]
Prepare 1.2.0 builds

Change-Id: I9ec247135d93ef28d732e94f18d0ec1d0e2e6d44
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoMerge branch 'stable-1.1' 55/4255/1
Matthias Sohn [Thu, 15 Sep 2011 20:51:28 +0000 (22:51 +0200)]
Merge branch 'stable-1.1'

* stable-1.1:
  Prepare post v1.1.0.201109151100-r build
  JGit v1.1.0.201109151100-r

Change-Id: I31a2e8d26d635ded9ea956a26ad9b2d9e20862a1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoPrepare post v1.1.0.201109151100-r build 54/4254/1 stable-1.1
Matthias Sohn [Thu, 15 Sep 2011 19:51:23 +0000 (21:51 +0200)]
Prepare post v1.1.0.201109151100-r build

Change-Id: Ib099ec93d8243b238641d79328216874532ab5eb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoJGit v1.1.0.201109151100-r 50/4250/1 v1.1.0.201109151100-r
Matthias Sohn [Thu, 15 Sep 2011 15:28:38 +0000 (17:28 +0200)]
JGit v1.1.0.201109151100-r

Change-Id: Iadcec7e5973600e005cbdeb837fa197d3ae2ea86
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoUploadPack: Fix races in smart HTTP negotiation 76/4076/2
Shawn O. Pearce [Sat, 27 Aug 2011 00:28:18 +0000 (17:28 -0700)]
UploadPack: Fix races in smart HTTP negotiation

Clients cache the set of advertised references at the start of a
negotiation, and keep replaying the same "want SHA1" list to the
server on each negotiation step.  If another client pushes into
a branch and moves it by fast-forward, any request to obtain that
branch's prior SHA-1 is still valid, the commit is reachable from
the new position of the reference.  Unfortunately the fast-forward
causes smart HTTP negotations to fail, as the server no longer is
advertising that prior SHA-1.

Instead of causing clients to fail out with a "want invalid" error
and forcing the end-user retry, possibly getting into a never ending
try-fail-retry race while other clients are pushing into the same
busy repository, allow the slightly stale want request so long as
it is still reachable.

C Git implemented this same change recently to fix races on the
smart HTTP protocol when the C Git git-http-backend is used.

The new RequestPolicy feature also allows server authors to make
an even more lenient configuration that exports any SHA-1 to the
client. This might be useful in certain settings where a server
has authenticated the client as the "repository owner" and wants
to allow them to grab any content from the server as a complete
unbroken history chain.

The new setAdvertisedRefs() method allows server authors to manually
fix the references that are advertised, possibly bypassing the
getAllRefs() call on the Repository object.

Change-Id: I7cdb563bf9c55c83653f217f6e53c3add55a0541
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Export more statistics 13/4013/5
Shawn O. Pearce [Mon, 15 Aug 2011 23:38:28 +0000 (16:38 -0700)]
PackWriter: Export more statistics

Export the shallow pack information, and also a handy function to
sum up the total times.  Include the time writing out the index file,
if it was created.

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