]> source.dussan.org Git - jgit.git/log
jgit.git
12 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

12 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

12 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

12 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

12 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

12 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

12 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

12 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

12 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

12 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

12 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"

12 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

12 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>
12 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 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 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>
13 years agoDo not requeue state vector in stateless RPC fetch 15/4315/1
Shawn O. Pearce [Wed, 14 Sep 2011 17:53:14 +0000 (10:53 -0700)]
Do not requeue state vector in stateless RPC fetch

If the no-done capability was enabled on the connection, don't
queue up the state vector again once the ACK %s ready message
is observed from the remote. The pack will be following in this
response stream, so the state vector is no longer required.

Change-Id: I7bd1e76957cb58c7ff1cdaeef227f1b02a7e5d24
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoWrap excessively long line in BasePackFetchConnection 14/4314/1
Shawn O. Pearce [Wed, 14 Sep 2011 17:48:43 +0000 (10:48 -0700)]
Wrap excessively long line in BasePackFetchConnection

Change-Id: I926838058c1de2146e22faa08570406600457acb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFix smart HTTP client stream alignment errors 13/4313/1
Shawn O. Pearce [Wed, 14 Sep 2011 22:31:42 +0000 (15:31 -0700)]
Fix smart HTTP client stream alignment errors

The client's use of UnionInputStream was broken when combined with a
8192 byte buffer used by PackParser. A smart HTTP client connection
always pushes in the execute stateless RPC input stream after the
data stream has ended from the remote peer. At the end of the pack,
PackParser asked to fill a 8192 byte buffer, but if only e.g. 1000
bytes remained UnionInputStream went to the next stream and asked
it for input, which triggered a new RPC, and failed because there
was nothing pending in the request buffer.

Change UnionInputStream to only return what it consumed from a
single InputStream without invoking the next InputStream, just in
case that second InputStream happens to be one of these magical
ones that generates an RPC invocation.

Change-Id: I0e51a8e6fea1647e4d2e08ac9cfc69c2945ce4cb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove duplicate calls to DirCache.unlock on checkout 40/4240/1
Kevin Sawicki [Tue, 13 Sep 2011 22:29:55 +0000 (15:29 -0700)]
Remove duplicate calls to DirCache.unlock on checkout

Calls to unlock the DirCache before throwing an exception
were not needed since checkout calls doCheckout wrapped
in a try block that calls DirCache.unlock in a finally
block.

Change-Id: I2b249a784f9e363430e288aad67fcefb7fac0a6e
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge branch 'stable-1.1' 29/4229/1
Matthias Sohn [Sun, 11 Sep 2011 20:43:41 +0000 (22:43 +0200)]
Merge branch 'stable-1.1'

* stable-1.1:
  Allow commit when submodule changes are present
  Ignore submodule on checkout instead of deleting it
  cleanup: Reuse local variable for current DirCacheEntry
  Prepare post v1.1.0.201109071825-rc3 builds
  JGit v1.1.0.201109071825-rc3
  Use commit message best practices for Mylyn Commit template

Change-Id: I6ab9e5cb48c036d2ee2e548f5ec040d93672d8ad
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoAllow commit when submodule changes are present 94/4194/4
Robin Rosenberg [Sun, 4 Sep 2011 14:34:15 +0000 (16:34 +0200)]
Allow commit when submodule changes are present

We do not yet check or validate submodules, but can accept that
someone staged a change in a submodule with other tools.

Change-Id: I642ede382314bfbd1892dd509a2222885cc5350a
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoIgnore submodule on checkout instead of deleting it 92/4192/5
Robin Rosenberg [Sat, 3 Sep 2011 20:54:37 +0000 (22:54 +0200)]
Ignore submodule on checkout instead of deleting it

The purpose of this commit is to prevent destruction of
submodules on checkout from a tree with a submodule to
another. For consistency we handle the reverse case too,
when we checkout a branch that has a submodule and the
submodule directory exists. And finally we ignore the
case where the submodule changes.

We do not update the submodules, we just try to ignore
them harder.

Bug: 356664
Change-Id: I202c695a57af99b13d0d7220803fd08def3d9b5e
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agocleanup: Reuse local variable for current DirCacheEntry 01/4201/2
Robin Rosenberg [Sat, 3 Sep 2011 21:55:11 +0000 (23:55 +0200)]
cleanup: Reuse local variable for current DirCacheEntry

Since we already have assigned i.getDirCacheEntry() to dce,
use dce instead.

Change-Id: I107713ad0b356516d75c29203f945b056bad3ac7
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoPrepare post v1.1.0.201109071825-rc3 builds 89/4189/1
Matthias Sohn [Wed, 7 Sep 2011 23:50:41 +0000 (01:50 +0200)]
Prepare post v1.1.0.201109071825-rc3 builds

Change-Id: I1244f6639263d156a6f9e4530167e5eb1826a535
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoJGit v1.1.0.201109071825-rc3 87/4187/1 v1.1.0.201109071825-rc3
Matthias Sohn [Wed, 7 Sep 2011 22:36:30 +0000 (00:36 +0200)]
JGit v1.1.0.201109071825-rc3

Change-Id: I1b989d3101272632eacabe25a0b111ad0ff5bb3b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix IOOBE in Repository.resolveSimple() 64/4164/1
Dariusz Luksza [Tue, 6 Sep 2011 08:12:39 +0000 (10:12 +0200)]
Fix IOOBE in Repository.resolveSimple()

IndexOutOfBoundException is thrown from Repository.resolveSimple() when
'-g' string is located less then 4 characters from the end of this
string.

Change-Id: I1128c2cdfec9db3023d4d0f1f40d863e84b75950
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
13 years agoUse commit message best practices for Mylyn Commit template 59/4159/1
Matthias Sohn [Mon, 5 Sep 2011 21:57:21 +0000 (23:57 +0200)]
Use commit message best practices for Mylyn Commit template

We should use a template for Mylyn commit messages that matches with our
guidelines for commit messages.

http://wiki.eclipse.org/EGit/Contributor_Guide#Commit_message_guidelines

Bug: 337401
Change-Id: I05812abf0eb0651d22c439142640f173fc2f2ba0
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix the names in the reflog for checkouts 39/4139/2
Robin Rosenberg [Sun, 4 Sep 2011 09:12:49 +0000 (11:12 +0200)]
Fix the names in the reflog for checkouts

We were diverging from the reference implementation. Always use the
ref we checkout to as the to-branch the reflog and avoid the
refs/heads both in the from-name and to-name.

Change-Id: Id973d9102593872e4df41d0788f0eb7c7fd130c4
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoAdd a helper for parsing branch switch info out of a reflog entry 38/4138/2
Robin Rosenberg [Sun, 4 Sep 2011 09:10:47 +0000 (11:10 +0200)]
Add a helper for parsing branch switch info out of a reflog entry

Change-Id: I91c7e08c4afd2562df2226887a933d93c78a0371
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoRemove workarounds for fixed Tycho bugs 48/4148/1
Matthias Sohn [Wed, 31 Aug 2011 07:36:48 +0000 (09:36 +0200)]
Remove workarounds for fixed Tycho bugs

This removes the workaround for Tycho bug
- http://issues.sonatype.org/browse/TYCHO-313
which has been fixed.

Change-Id: I54a8de885ae3e6c45a778171dad6f6e5e9322114
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoDefine os/ws/arch environments for tycho build 88/4088/3
Matthias Sohn [Tue, 30 Aug 2011 23:45:22 +0000 (01:45 +0200)]
Define os/ws/arch environments for tycho build

Explicitly define os/ws/arch environments for
target-platform-configuration to make build platform
independent.

Change-Id: If43f5ee573c9abaa0359ea2386477b379012e834
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years ago[blame] Reset rename detector before computing renames. 18/4118/1
Kevin Sawicki [Thu, 1 Sep 2011 20:29:43 +0000 (13:29 -0700)]
[blame] Reset rename detector before computing renames.

Bug: 354507
Change-Id: I5e9c65a082d9dee1e87536c5cf2a8de75efa6a33
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoPrepare post-v1.1.0.201109011030-rc2 builds 08/4108/1
Matthias Sohn [Thu, 1 Sep 2011 15:36:10 +0000 (17:36 +0200)]
Prepare post-v1.1.0.201109011030-rc2 builds

Change-Id: I8dda83cdbe88beba4a480df9846848bf3aceb9e2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoJGit v1.1.0.201109011030-rc2 07/4107/1 v1.1.0.201109011030-rc2
Matthias Sohn [Thu, 1 Sep 2011 14:38:13 +0000 (16:38 +0200)]
JGit v1.1.0.201109011030-rc2

Change-Id: Ie6d65fe45ad92c813ce3a227729aa43681922249
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoUse the appropriate constant for ".git" 77/4077/3
Robin Rosenberg [Sat, 27 Aug 2011 14:58:26 +0000 (16:58 +0200)]
Use the appropriate constant for ".git"

We have two constants with the same content. DOT_GIT is intended
for the git repository below the work tree, while DOT_GIT_EXT is
the ".git" directory extension usually associated with bare
repositories.

Change-Id: I0946b4beb2d1c3af289ddbbb5641d2f4e4c49d3f
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoTolerate zlib deflation with window size < 32Kb 71/4071/1
Roberto Tyley [Thu, 25 Aug 2011 21:25:10 +0000 (22:25 +0100)]
Tolerate zlib deflation with window size < 32Kb

JGit currently identifies loose objects as 'corrupt' if they've been
deflated using a window size less than 32Kb, because the
isStandardFormat() function doesn't recognise the header
byte as a zlib header. This patch makes the method tolerant of
all valid window sizes (15-bit to 8-bit) - but doesn't sacrifice
it's accuracy in distingushing the standard loose-object format
from the experimental (now abandoned) format. It's based on a patch
which has been merged into C-Git master branch:

https://github.com/git/git/commit/7f684a2aff636f44a506

On memory constrained systems zlib may use a much smaller window
size - working on Agit, I found that Android uses a 4KB window;
giving a header byte of 0x48, not 0x78. Consequently all loose
objects generated by the Android platform appear 'corrupt' :(

It might appear that this patch changes isStandardFormat() to the
point where it could incorrectly identify the experimental format as
the standard one, but the two criteria (bitmask & checksum) can only
give a false result for an experimental object where both of the
following are true:

1) object size is exactly 8 bytes when uncompressed (bitmask)
2) [single-byte in-pack git type&size header] * 256
   + [1st byte of the following zlib header] % 31 = 0 (checksum)

As it happens, for all possible combinations of valid object type
(1-4) and window bits (0-7), the only time when the checksum will be
divisible by 31 is for 0x1838 - ie object type *1*, a Commit - which,
due the fields all Commit objects must contain, could never be as
small as 8 bytes in size.

Given this, the combination of the two criteria (bitmask & checksum)
always correctly determines the buffer format, and is more tolerant
than the previous version.

References:

Android uses a 4KB window for deflation:
http://android.git.kernel.org/?p=platform/libcore.git;a=blob;f=luni/src/main/native/java_util_zip_Deflater.cpp;h=c0b2feff196e63a7b85d97cf9ae5bb2583409c28;hb=refs/heads/gingerbread#l53

Code snippet searching for false positives with the zlib checksum:
https://gist.github.com/1118177

Change-Id: Ifd84cd2bd6b46f087c9984fb4cbd8309f483dec0

13 years agoMerge "Unwind loop that iterates over fetch connection refs."
Stefan Lay [Thu, 25 Aug 2011 15:09:52 +0000 (11:09 -0400)]
Merge "Unwind loop that iterates over fetch connection refs."

13 years agoReassign symbolic ref list after calling put. 66/4066/1
Kevin Sawicki [Wed, 24 Aug 2011 20:22:05 +0000 (13:22 -0700)]
Reassign symbolic ref list after calling put.

This is required since RefList.put returns a new RefList.

Change-Id: I717d75d6f6154a6e0dc7cde3b72b0a59c68d955c
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge "Fix boxing warnings in PushProcessTest"
Christian Halstrick [Wed, 24 Aug 2011 14:15:36 +0000 (10:15 -0400)]
Merge "Fix boxing warnings in PushProcessTest"

13 years agoFix boxing warnings in PushProcessTest 64/4064/1
Tomasz Zarna [Wed, 24 Aug 2011 13:40:48 +0000 (15:40 +0200)]
Fix boxing warnings in PushProcessTest

Change-Id: I5114968536853fb530b8a96c10def675e39c884f

13 years agoUse JGitText.refAlreadyExists instead of "ref exists" 57/4057/2
Tomasz Zarna [Wed, 24 Aug 2011 08:17:32 +0000 (10:17 +0200)]
Use JGitText.refAlreadyExists instead of "ref exists"

Change-Id: I113bcf82c6292db5269271f799d09c80acc40bcd

13 years agoUnwind loop that iterates over fetch connection refs. 56/4056/1
Kevin Sawicki [Mon, 22 Aug 2011 20:10:31 +0000 (13:10 -0700)]
Unwind loop that iterates over fetch connection refs.

Create separate loops based on whether the ref specs
collection is empty or not.

Change-Id: I2861b45fe083675e12ff47f591e104f8cf6dd216
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoThrow JGit exception when ResetCommand got wrong ref 79/3879/4
Christian Halstrick [Tue, 16 Aug 2011 13:15:01 +0000 (15:15 +0200)]
Throw JGit exception when ResetCommand got wrong ref

If the ResetCommand should reset to a invalid ref (e.g. HEAD in a repo
whithout a single commit) it was throwing an NPE. This is fixed now by
throwing a JGitInternalExcpeption. It would be nicer if we could throw
a InvalidRefException, but this would modify our API.

Bug: 339610
Change-Id: Iffcb4f2cca9f702176471d93c3a71e5cb3e700b1
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoImplement server support for shallow clones 20/1320/12
Matt Fischer [Tue, 27 Jul 2010 03:39:37 +0000 (22:39 -0500)]
Implement server support for shallow clones

This implements the server side of shallow clones only (i.e.
git-upload-pack), not the client side.

CQ: 5517
Bug: 301627
Change-Id: Ied5f501f9c8d1fe90ab2ba44fac5fa67ed0035a4
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoPackWriter: support excluding objects already in other packs 97/3997/8
Shawn O. Pearce [Tue, 16 Aug 2011 19:32:10 +0000 (12:32 -0700)]
PackWriter: support excluding objects already in other packs

This can be useful when implementing garbage collection and there
are packs that should not be copied, such as huge packs that have
a sibling ".keep" file alongside of them.

Callers driving PackWriter need to initialize the list of packs not
to include objects from by passing each index to excludeObjects().

Change-Id: Id7f34df69df97be406bcae184308e92b0e8690fd
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoFix ClassCastException in MergeCommand 60/3860/5
Denys Digtiar [Mon, 18 Jul 2011 05:33:30 +0000 (08:33 +0300)]
Fix ClassCastException in MergeCommand

Test was added which reproduce the ClassCastException when ours or
theirs merge strategy is set to MergeCommand. Merger and MergeCommand
were updated in order to avoid exception.

Change-Id: I4c1284b4e80d82638d0677a05e5d38182526d196
Signed-off-by: Denys Digtiar <duemir@gmail.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoAdd ListTagCommand to JGit API 01/3901/3
Ketan Padegaonkar [Mon, 23 May 2011 06:36:52 +0000 (12:06 +0530)]
Add ListTagCommand to JGit API

Bug: 355246
Change-Id: I11e019f3c19b4340ac7160ac8fcbadd52499d322
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoMerge "Add DeleteTagCommand to JGit API"
Chris Aniszczyk [Sun, 21 Aug 2011 20:24:23 +0000 (16:24 -0400)]
Merge "Add DeleteTagCommand to JGit API"

13 years agoAdd DeleteTagCommand to JGit API 20/4020/2
Tomasz Zarna [Wed, 17 Aug 2011 13:12:07 +0000 (15:12 +0200)]
Add DeleteTagCommand to JGit API

Bug: 353226
Change-Id: I54ae237cab792742333a249eb5a774d5e1775af8
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoMerge "PackWriter: Make want/have actual sets"
Christian Halstrick [Thu, 18 Aug 2011 07:43:38 +0000 (03:43 -0400)]
Merge "PackWriter: Make want/have actual sets"

13 years agoUse HEAD as default ref for RefLogCommand. 23/4023/4
Kevin Sawicki [Wed, 17 Aug 2011 15:56:16 +0000 (08:56 -0700)]
Use HEAD as default ref for RefLogCommand.

This mirrors the default command-line behavior.

Change-Id: I4f819410fa6df3064c560beb3184b61fd7bb1f15
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoMerge "Adds DiffEntry.scan(TreeWalk, boolean) method"
Matthias Sohn [Wed, 17 Aug 2011 11:31:54 +0000 (07:31 -0400)]
Merge "Adds DiffEntry.scan(TreeWalk, boolean) method"

13 years agoAdds DiffEntry.scan(TreeWalk, boolean) method 19/3819/10
Dariusz Luksza [Wed, 17 Aug 2011 10:43:35 +0000 (12:43 +0200)]
Adds DiffEntry.scan(TreeWalk, boolean) method

Adds method into DiffEntry class that allows to specify whether changed
trees are included in scanning result list. By default changed trees
aren't added, but in some cases having changed tree would be useful.

Also adds check for tree count in TreeWalk and when it is different from
two it will thrown an IllegalArgumentException.

This change is required by egit
I7ddb21e7ff54333dd6d7ace3209bbcf83da2b219

Change-Id: I5a680a73e1cffa18ade3402cc86008f46c1da1f1
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix typo in IndexDiff.getModified() comment. 15/4015/1
Kevin Sawicki [Tue, 16 Aug 2011 20:22:42 +0000 (13:22 -0700)]
Fix typo in IndexDiff.getModified() comment.

Removes an extra instance of the word 'on'.

Change-Id: Ie5f137f0dda440f5879f6d5c62ebce0431530ad7
Signed-off-by: Kevin Sawicki <kevin@github.com>
13 years agoPackWriter: Make want/have actual sets 99/3999/4
Shawn O. Pearce [Tue, 16 Aug 2011 19:18:39 +0000 (12:18 -0700)]
PackWriter: Make want/have actual sets

During parsing these are used with contains(). If they are a List
type, the contains operation is not efficient. Some callers such
as UploadPack often pass a List here, so convert to Set when the
type isn't efficient for contains().

Change-Id: If948ae3bf1f46e756bd2d5db14795e12ba7a6207
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "Add DiffCommand to JGit API"
Christian Halstrick [Tue, 16 Aug 2011 12:25:46 +0000 (08:25 -0400)]
Merge "Add DiffCommand to JGit API"

13 years agoAdd DiffCommand to JGit API 19/3919/2
Tomasz Zarna [Tue, 16 Aug 2011 09:47:55 +0000 (11:47 +0200)]
Add DiffCommand to JGit API

Bug: 334766
Change-Id: Iea74c599a956a058608e424d0274f879bc2f064a

13 years agoMerge changes I1ca7acb4,Ia41b7a1c,I33b65286,Ie2823724,I6b65bfb4
Shawn O. Pearce [Sun, 14 Aug 2011 22:51:58 +0000 (18:51 -0400)]
Merge changes I1ca7acb4,Ia41b7a1c,I33b65286,Ie2823724,I6b65bfb4

* changes:
  DHT: Change DhtReadher caches to be dynamic by workload
  DHT: Use a proper HashMap for RecentChunk lookups
  DHT: Always have at least one recent chunk in DhtReader
  DHT: Fix NPE during prefetch
  DHT: Drop leading hash digits from row keys

13 years agoRevert "PackWriter: Do not delta compress already packed objects" 96/3996/1
Shawn O. Pearce [Sun, 14 Aug 2011 00:01:24 +0000 (17:01 -0700)]
Revert "PackWriter: Do not delta compress already packed objects"

This reverts commit 67b064fc9fa7418fab83957b4f4e4baf9c6e08be.

The "tiny optimization" introduced by 67b0 turns out to have a big
savings on wall-clock time when the object store is very slow (e.g.
the DHT support in JGit), but comes with a much bigger penalty in
space used by the output stream.  CGit packed with 67b0 enabled is
7 MiB larger than it should be (36 MiB rather than 28/29 MiB).  The
much bigger Linux kernel repository gained over 200 MiB, though some
of this may have been caused by a smaller window setting.

Revert this patch as PackWriter should be optimizing for space used
rather than time spent, since its primary use is network transfer, and
that isn't free.

Change-Id: I7413a9ef89762208159b4a1adc5a22a4c9245611
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoSpeed up ObjectWalk by 6235 objects/sec 78/3978/2
Shawn O. Pearce [Mon, 8 Aug 2011 22:11:54 +0000 (15:11 -0700)]
Speed up ObjectWalk by 6235 objects/sec

The "Counting objects" phase of packing is the most time consuming
part for any server providing access to Git repositories. Scanning
through the entire project history, including every revision of
every tree that has ever existed is expensive and takes an incredible
amount of CPU time.

Inline the tree parsing logic, unroll a number of loops, and setup
to better handle the common case of seeing another occurrence of
an object that was already marked SEEN.

This change boosts the "Counting objects" phase when JGit is acting
as a server and is packing the linux-2.6 repository for its client.
Compared to CGit on the same hardware, a JGit daemon server is now
21883 objects/sec faster:

CGit:
  Counted 2058062 objects in 38981 ms at 52796.54 objects/sec
  Counted 2058062 objects in 38920 ms at 52879.29 objects/sec
  Counted 2058062 objects in 39059 ms at 52691.11 objects/sec

JGit (before):
  Counted 2058062 objects in 31529 ms at 65275.21 objects/sec
  Counted 2058062 objects in 30359 ms at 67790.84 objects/sec
  Counted 2058062 objects in 30033 ms at 68526.69 objects/sec

JGit (this commit):
  Counted 2058062 objects in 28726 ms at 71644.57 objects/sec
  Counted 2058062 objects in 27652 ms at 74427.24 objects/sec
  Counted 2058062 objects in 27528 ms at 74762.50 objects/sec

Above the first run was a "cold server". For JGit the JVM had just
started up with `jgit daemon`, and for CGit we hadn't touched the
repository "recently" (but it was certainly in kernel buffer cache).
The second and third runs were against the running JGit JVM, allowing
timing tests to better reflect the benefits of JGit's pack and index
caching, as well as any optimizations the JIT may have performed.

The timings are fair.  CGit is opening, checking and mmap'ing both
the pack and index during the timer.  JGit is opening, checking
and malloc+read'ing the pack and index data into its Java heap
during the timer. Both processes are walking the same graph space,
and are computing the "path hash" necessary to sort objects in the
object table for delta compression.  Since this commit only impacts
the "Counting objects" phase, delta compression was obviously not
included in the timings and JGit may still be performing delta
compression slower than CGit, resulting in an overall slower server
experience for clients.

Change-Id: Ieb184bfaed8475d6960a494b1f3c870e0382164a
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "PackWriter: Only search for base objects on thin packs"
Shawn O. Pearce [Sat, 13 Aug 2011 21:33:18 +0000 (17:33 -0400)]
Merge "PackWriter: Only search for base objects on thin packs"

13 years agoblame: Implement blame on the command line 69/3569/8
Shawn O. Pearce [Sun, 29 May 2011 21:12:37 +0000 (14:12 -0700)]
blame: Implement blame on the command line

Command line options match the C implementation of `git blame` as
closely as possible, making for a pretty complete tool.

Change-Id: Ie1bd172ad9de586c3b60f0ee4a77a8f047364882
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "Ignore missing MERGE_MSG when deleting MERGE_MSG"
Shawn Pearce [Sat, 13 Aug 2011 21:08:40 +0000 (17:08 -0400)]
Merge "Ignore missing MERGE_MSG when deleting MERGE_MSG"