]> source.dussan.org Git - jgit.git/log
jgit.git
13 years agoPackFile: Cache the packName string 73/2773/1
Shawn O. Pearce [Fri, 18 Mar 2011 15:21:39 +0000 (08:21 -0700)]
PackFile: Cache the packName string

Instead of computing this on every request, compute it once and
hold onto the result. This improves performance for LocalCachedPack
which does a lot of tests against the pack name string.

Change-Id: I3803745e3a5dda7b5f0faf39aae9423e2c777e7f
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "Refactor ResolveMerger"
Christian Halstrick [Fri, 18 Mar 2011 15:34:15 +0000 (11:34 -0400)]
Merge "Refactor ResolveMerger"

13 years agoRefactor ResolveMerger 54/2754/2
Philipp Thun [Fri, 18 Mar 2011 12:33:36 +0000 (13:33 +0100)]
Refactor ResolveMerger

1. Perform an explicit check for untracked files.
2. Extract 'dirty checks' into separate methods
3. Clean up comments.
4. Tests: also check contents of files not affected by merge.

Change-Id: Ieb089668834d0a395c9ab192c555538917dfdc47
Signed-off-by: Philipp Thun <philipp.thun@sap.com>
13 years agoMerge "Moved tests for commit -o option to own test class"
Mathias Kinzler [Fri, 18 Mar 2011 06:58:19 +0000 (02:58 -0400)]
Merge "Moved tests for commit -o option to own test class"

13 years agoMoved tests for commit -o option to own test class 32/2732/4
Christian Halstrick [Fri, 18 Mar 2011 06:54:35 +0000 (07:54 +0100)]
Moved tests for commit -o option to own test class

We test the -o option of the commit command very accurate by
writing tests for each line of a decision table. In order to
still be able to point new jgit users to the CommitAndLogCommandTest
to find out how to use log() and commit() I factored out these 1200
lines of very specific tests into their own class.

Change-Id: Icf7c517f790a8fa79c8afd9b7f4a2805cf79196e
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
13 years agoAdd path filtering to LogCommand 67/2767/2
Chris Aniszczyk [Thu, 17 Mar 2011 19:30:55 +0000 (14:30 -0500)]
Add path filtering to LogCommand

Bug: 340049
Change-Id: I825b93b3412a3041aca225962fc8463a8f180650
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoAssume refs of alternates are reachable during fetch 17/2717/2
Shawn O. Pearce [Tue, 15 Mar 2011 01:52:00 +0000 (18:52 -0700)]
Assume refs of alternates are reachable during fetch

When fetching from a remote peer, consider all of the refs of any
alternate repository to be reachable locally, in addition to the refs
of the local repository.  This mirrors the push protocol and may avoid
unnecessary object transfer when the local repository is empty, but
its alternate and the remote share a lot of common history.

Junio C Hamano recently proposed a similar change to C Git's fetch
client, in order to work around a performance bug I identified when
fetching between two repositories that actually shared the same
alternate repository on the local system.

Change-Id: Iffb0b70e1223901ce2caac3b87ba7e0d6634d265
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoUploadPack: Report invalid want lines with ERR 51/2751/2
Shawn O. Pearce [Thu, 17 Mar 2011 04:50:42 +0000 (21:50 -0700)]
UploadPack: Report invalid want lines with ERR

Instead of aborting hard with a server-side exception, report an error
to the client with "ERR %s" in a context where the client is expecting
ACK/NAK.  Older clients will report this text to the user, but newer
ones know how to format this message in a more user-friendly way.

Change-Id: I1879b38988ba66f648c069c10dbfa14c3f34adb2
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoHandle "ERR %s" when ACK/NAK is expected 50/2750/2
Shawn O. Pearce [Thu, 17 Mar 2011 04:44:34 +0000 (21:44 -0700)]
Handle "ERR %s" when ACK/NAK is expected

If the remote peer replies with "ERR %s" instead of "ACK %s common" or
"NAK" during ancestor negotiation in the fetch-pack/upload-pack
protocol, treat that as an exception that aborts processing with the
error text as supplied by the remote system.

This matches behavior with "ERR %s" during the advertisements, which
is also a way for the remote to abort processing.

Change-Id: I2fe818e75c7f46156744ef4f703c40173cbc76d0
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPacketLineIn: Reuse internal lineBuffer for small strings 49/2749/2
Shawn O. Pearce [Thu, 17 Mar 2011 04:33:25 +0000 (21:33 -0700)]
PacketLineIn: Reuse internal lineBuffer for small strings

Most "ACK %s continue", "ACK %s common", "NAK" strings that are read
by the readACK() method and readString() are shorter than the
lineBuffer already available.  Reuse that buffer when reading from
the network stream and converting to a string with RawParseUtils to
avoid unnecessary temporary byte array allocations.

Change-Id: Ibc778d9f7721943a065041d80fc427ea50d90fff
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "Expose if name or email is based on a guess"
Shawn Pearce [Thu, 17 Mar 2011 17:45:52 +0000 (13:45 -0400)]
Merge "Expose if name or email is based on a guess"

13 years agoCommitCommand: add option to insert a change id 60/2760/2
Jens Baumgart [Thu, 17 Mar 2011 17:15:41 +0000 (18:15 +0100)]
CommitCommand: add option to insert a change id

An option to insert a change id into the commit message was added
to CommitCommand.
This change is a prerequisite for removing GitIndex from EGit.

Change-Id: Iff9e26a8aaf21d8224bfd6ce3c98821c077bcd82
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Signed-off-by: Philipp Thun <philipp.thun@sap.com>
Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
13 years agoMerge "Remove deprecated Repository.mapTree"
Mathias Kinzler [Thu, 17 Mar 2011 11:07:15 +0000 (07:07 -0400)]
Merge "Remove deprecated Repository.mapTree"

13 years agoExpose if name or email is based on a guess 28/2728/2
Matthias Sohn [Wed, 16 Mar 2011 15:23:14 +0000 (16:23 +0100)]
Expose if name or email is based on a guess

This enables applications to differentiate between explicitly set
configuration parameters and best effort attempts to guess these
parameters from the operating system.

Change-Id: I67cc4099238a40c6dca795e64f0155ced6008ef1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoUse parent directory in InitCommand if directory is "." 30/2730/1
Philipp Thun [Wed, 16 Mar 2011 00:36:56 +0000 (01:36 +0100)]
Use parent directory in InitCommand if directory is "."

If no directory is set before executing an InitCommand, the current
directory (".") is used by default. By calling File.getParentFile() we
get the actual directory this points to. Using this directory makes it
easier to read paths.

Change-Id: I6245941395dae920e4f90b8985be6ef3cce570d3
Signed-off-by: Philipp Thun <philipp.thun@sap.com>
13 years agoMerge "Improve native Git transport when following repository"
Chris Aniszczyk [Tue, 15 Mar 2011 16:03:38 +0000 (12:03 -0400)]
Merge "Improve native Git transport when following repository"

13 years agoTransportProtocol: Allow null Repository in canHandle() 13/2713/2
Shawn O. Pearce [Mon, 14 Mar 2011 17:48:58 +0000 (10:48 -0700)]
TransportProtocol: Allow null Repository in canHandle()

This allows callers to determine if a URI is supported, before
worrying about the local repository.

Suggested-by: Dariusz Luksza <dariusz@luksza.org>
Change-Id: Ifc76a4ba841f2e2e7354bd51306b87b3b9d7f6ab
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoMerge "FS: Allow cloning an FS instance"
Chris Aniszczyk [Tue, 15 Mar 2011 15:09:16 +0000 (11:09 -0400)]
Merge "FS: Allow cloning an FS instance"

13 years agoMerge "FS: Allow userHome to be set and cached"
Chris Aniszczyk [Tue, 15 Mar 2011 15:05:37 +0000 (11:05 -0400)]
Merge "FS: Allow userHome to be set and cached"

13 years agoMerge "FS: Allow gitPrefix to be set and cached"
Chris Aniszczyk [Tue, 15 Mar 2011 15:00:08 +0000 (11:00 -0400)]
Merge "FS: Allow gitPrefix to be set and cached"

13 years agoMerge "FS: Overload detect() with no arguments"
Chris Aniszczyk [Tue, 15 Mar 2011 14:57:58 +0000 (10:57 -0400)]
Merge "FS: Overload detect() with no arguments"

13 years agoPushCommand: Allow adding any reference string 05/2705/2
Shawn O. Pearce [Mon, 14 Mar 2011 15:14:46 +0000 (08:14 -0700)]
PushCommand: Allow adding any reference string

The simplified form of add(String) makes it easier for applications
to pass down user input and allow PushCommand to convert it to the
internal RefSpec object.

Change-Id: Ibd2e95852db0e52ea4a36032942c4c42a7fb4261
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPushCommand: Add utilities for --all, --tags 04/2704/2
Shawn O. Pearce [Mon, 14 Mar 2011 15:08:39 +0000 (08:08 -0700)]
PushCommand: Add utilities for --all, --tags

The --all flag on the command line implies using refs/heads/* as
a push specification. Add this to the standard command object.

The --tags flag on the command line implies using refs/tags/* as
a push specification. Add this to the standard command object.

Change-Id: Iaef200b17cce77604548dbfb15cf2499b10687b5
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "PushCommand: Default to pushing HEAD"
Chris Aniszczyk [Tue, 15 Mar 2011 14:01:04 +0000 (10:01 -0400)]
Merge "PushCommand: Default to pushing HEAD"

13 years agoMerge "PushCommand: Set force-update in-place"
Chris Aniszczyk [Tue, 15 Mar 2011 14:00:33 +0000 (10:00 -0400)]
Merge "PushCommand: Set force-update in-place"

13 years agoMerge "Make --git-dir optional for 'jgit init'"
Chris Aniszczyk [Tue, 15 Mar 2011 13:59:24 +0000 (09:59 -0400)]
Merge "Make --git-dir optional for 'jgit init'"

13 years agoMerge "CloneCommand: add a test to ensure we fetch all tags"
Chris Aniszczyk [Tue, 15 Mar 2011 13:57:32 +0000 (09:57 -0400)]
Merge "CloneCommand: add a test to ensure we fetch all tags"

13 years agoMake --git-dir optional for 'jgit init' 20/2720/1
Philipp Thun [Fri, 11 Mar 2011 14:49:27 +0000 (15:49 +0100)]
Make --git-dir optional for 'jgit init'

For compatibility reasons with regards to native git and also to
make the init command easier to use from the command line,
argument --git-dir should not be required.

Additionally the path created in case --git-dir is not supplied now is
canonical and thus easier to read.

Change-Id: Idb7d77e983a78c4b21fbf232fc1e75ef581e5ed1
Signed-off-by: Philipp Thun <philipp.thun@sap.com>
13 years agoReplace 'occured' by 'occurred' 19/2719/1
Philipp Thun [Tue, 15 Mar 2011 12:55:58 +0000 (13:55 +0100)]
Replace 'occured' by 'occurred'

This change fixes a common typo.

Signed-off-by: Philipp Thun <philipp.thun@sap.com>
13 years agoImprove native Git transport when following repository 15/2715/1
Shawn O. Pearce [Mon, 14 Mar 2011 22:36:17 +0000 (15:36 -0700)]
Improve native Git transport when following repository

If the client is only following the remote repository and has not
created any new non-common commits, the client will wind up sending
a "have %s" line for each tag in the repository.  For some projects
like git.git, this is 339 tags and growing, resulting in more than
16 KiB needing to be POSTed over 12 HTTP requests.

Teach UploadPack (server side) to always execute the okToGiveUp()
logic at least once per negotiation round to determine if the server
can compute a pack right now.  If it can, shove in an "ACK %s ready"
message to tell the client this and try to prevent receiving ancient
tags in future negotiation rounds.

Teach BasePackFetchConnection (client side) to honor a "ACK %s ready"
from the remote and break out of its SEND_HAVE loop once the remote
knows it can create a pack.  This avoids sending the remaining 307
tags of git.git.

These two changes together reduce the number of HTTP RPCs from 13
down to 3 in order to fetch from git.git over smart HTTP.  If either
side is missing the change, the older behavior (and its 13 RPCs)
is used.

Change-Id: I64736318fd0abf9ee5e56bd0b737707adb580b37
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "PackWriter: Rename getObjectsNumber to getObjectCount"
Chris Aniszczyk [Mon, 14 Mar 2011 22:09:40 +0000 (18:09 -0400)]
Merge "PackWriter: Rename getObjectsNumber to getObjectCount"

13 years agoCloneCommand: add a test to ensure we fetch all tags 14/2714/1
Chris Aniszczyk [Mon, 14 Mar 2011 22:01:06 +0000 (17:01 -0500)]
CloneCommand: add a test to ensure we fetch all tags

Bug: 326611
Change-Id: Ibf9a7caa84d99f39fca88bebc10c03b01955146d
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoMerge "Always fetch tags during clone"
Chris Aniszczyk [Mon, 14 Mar 2011 21:33:36 +0000 (17:33 -0400)]
Merge "Always fetch tags during clone"

13 years agoCommitCommand: set correct Reflog message when amending 78/2678/2
Jens Baumgart [Wed, 9 Mar 2011 17:26:46 +0000 (18:26 +0100)]
CommitCommand: set correct Reflog message when amending

Change-Id: I2322d31b09ca63bdcee50e90340e326467dc5021
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoFS: Allow cloning an FS instance 12/2712/1
Shawn O. Pearce [Mon, 14 Mar 2011 16:19:39 +0000 (09:19 -0700)]
FS: Allow cloning an FS instance

This permits an application to create its own copy of FS.DETECTED
before manually setting the userHome or gitPrefix.

Bug: 337101
Change-Id: Ieea33c8d0ebdc801a4656b829d2a4b398559fd45
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFS: Allow userHome to be set and cached 11/2711/1
Shawn O. Pearce [Mon, 14 Mar 2011 16:17:39 +0000 (09:17 -0700)]
FS: Allow userHome to be set and cached

This permits callers to modify the meaning of userHome, which
may be useful if their application allows the user to select
different user settings locations.

Bug: 337101
Change-Id: I076815edeec1c20dea028f7840be3930337dff77
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFS: Allow gitPrefix to be set and cached 10/2710/1
Shawn O. Pearce [Mon, 14 Mar 2011 16:07:53 +0000 (09:07 -0700)]
FS: Allow gitPrefix to be set and cached

This permits callers to modify the meaning of gitPrefix, which
may be useful if their application allows the user to select
the location where C Git is installed.

Bug: 337101
Change-Id: I07362a5772da4955e01406bdeb8eaf87416be1d6
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFS: Overload detect() with no arguments 09/2709/1
Shawn O. Pearce [Mon, 14 Mar 2011 16:06:16 +0000 (09:06 -0700)]
FS: Overload detect() with no arguments

This allows callers to perform the logic that constructed the
current FS.DETECTED value.

Change-Id: Id8517d131dcc3f675c60b2d935730872695ed1b0
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoAlways fetch tags during clone 08/2708/1
Shawn O. Pearce [Mon, 14 Mar 2011 15:53:41 +0000 (08:53 -0700)]
Always fetch tags during clone

C Git always fetches tags during clone, even if the tag doesn't
point to an object that was fetched by the branch specifications.
Match that behavior, as users expect it.

Bug: 326611
Change-Id: I81a82b7359a9649f18a172219da44ed54e77ca2f
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPushCommand: Default to pushing HEAD 01/2701/2
Shawn O. Pearce [Mon, 14 Mar 2011 14:20:02 +0000 (07:20 -0700)]
PushCommand: Default to pushing HEAD

If no RefSpec was specified, push the branch that is currently
checked out as HEAD.

Change-Id: I6f13ef6346188698a14e000fc590850afbc34b21
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPushCommand: Set force-update in-place 00/2700/2
Shawn O. Pearce [Mon, 14 Mar 2011 14:14:44 +0000 (07:14 -0700)]
PushCommand: Set force-update in-place

Rather than copying the entire list, just replace each element
with the version that has setForceUpdate(true) invoked on it.

Change-Id: I2eaa4466d497cb2408ce61dc62ca26e0c32fe841
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Rename getObjectsNumber to getObjectCount 99/2699/2
Shawn O. Pearce [Mon, 14 Mar 2011 14:09:41 +0000 (07:09 -0700)]
PackWriter: Rename getObjectsNumber to getObjectCount

This better matches with PackFile and CachedPack's methods
that return the same value.

Change-Id: Idb9b7c71d2048dd2344a62c2cde20b4e34529ab7
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFix dumb transport push 98/2698/2
Shawn O. Pearce [Mon, 14 Mar 2011 14:06:35 +0000 (07:06 -0700)]
Fix dumb transport push

PackWriter incorrectly returned 0 from getObjectsNumber() when the
pack has not been written yet. This caused dumb transports like
amazon-s3:// and sftp:// to abort early and never write out a pack,
under the assumption that the pack had no objects.

Until the pack header is written to the output stream, compute the
current object count each time it is requested. Once the header is
started, use the object count from the stats object.

Change-Id: I041a2368ae0cfe6f649ec28658d41a6355933900
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoAvoid NullPointerException in PlotCommit 02/2702/1
Mathias Kinzler [Mon, 14 Mar 2011 14:40:22 +0000 (15:40 +0100)]
Avoid NullPointerException in PlotCommit

Bug: 339289
Change-Id: Idf36f080ae6638c2bdbe11d69a4ad870851622b1
Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
13 years agoObjectIdOwnerMap: More lightweight map for ObjectIds 90/2690/2
Shawn O. Pearce [Thu, 10 Mar 2011 23:42:32 +0000 (15:42 -0800)]
ObjectIdOwnerMap: More lightweight map for ObjectIds

OwnerMap is about 200 ms faster than SubclassMap, more friendly to the
GC, and uses less storage: testing the "Counting objects" part of
PackWriter on 1886362 objects:

  ObjectIdSubclassMap:
    load factor 50%
    table: 4194304 (wasted 2307942)
    ms spent 36998 36009 34795 34703 34941 35070 34284 34511 34638 34256
    ms avg 34800 (last 9 runs)

  ObjectIdOwnerMap:
    load factor 100%
    table: 2097152 (wasted 210790)
    directory: 1024
    ms spent 36842 35112 34922 34703 34580 34782 34165 34662 34314 34140
    ms avg 34597 (last 9 runs)

The major difference with OwnerMap is entries must extend from
ObjectIdOwnerMap.Entry, where the OwnerMap has injected its own
private "next" field into each object. This allows the OwnerMap to use
a singly linked list for chaining collisions within a bucket. By
putting collisions in a linked list, we gain the entire table back for
the SHA-1 bits to index their own "private" slot.

Unfortunately this means that each object can appear in at most ONE
OwnerMap, as there is only one "next" field within the object instance
to thread into the map. For types that are very object map heavy like
RevWalk (entity RevObject) and PackWriter (entity ObjectToPack) this
is sufficient, these entity types are only put into one map by their
container.  By introducing a new map type, we don't break existing
applications that might be trying to use ObjectIdSubclassMap to track
RevCommits they obtained from a RevWalk.

The OwnerMap uses less memory. Each object uses 1 reference more (so
we're up 1,886,362 references), but the table is 1/2 the size (2^20
rather than 2^21). The table itself wastes only 210,790 slots, rather
than 2,307,942. So OwnerMap is wasting 200k fewer references.

OwnerMap is more friendly to the GC, because it hardly ever generates
garbage. As the map reaches its 100% load factor target, it doubles in
size by allocating additional segment arrays of 2048 entries. (So the
first grow allocates 1 segment, second 2 segments, third 4 segments,
etc.)  These segments are hooked into the pre-allocated directory of
1024 spaces. This permits the map to grow to 2 million objects before
the directory itself has to grow. By using segments of 2048 entries,
we are asking the GC to acquire 8,204 bytes in a 32 bit JVM. This is
easier to satisfy then 2,307,942 bytes (for the 512k table that is
just an intermediate step in the SubclassMap). By reusing the
previously allocated segments (they are re-hashed in-place) we don't
release any memory during a table grow.

When the directory grows, it does so by discarding the old one and
using one that is 4x larger (so the directory goes to 4096 entries on
its first grow). A directory of size 4096 can handle up to 8 millon
objects. The second directory grow (16384) goes to 33 million objects.
At that point we're starting to really push the limits of the JVM
heap, but at least its many small arrays. Previously SubclassMap would
need a table of 67108864 entries to handle that object count, which
needs a single contiguous allocation of 256 MiB. That's hard to come
by in a 32 bit JVM. Instead OwnerMap uses 8192 arrays of about 8 KiB
each. This is much easier to fit into a fragmented heap.

Change-Id: Ia4acf5cfbf7e9b71bc7faa0db9060f6a969c0c50
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "ObjectIdSubclassMap: Micro-optimize wrapping at end of table"
Shawn O. Pearce [Sun, 13 Mar 2011 23:28:01 +0000 (19:28 -0400)]
Merge "ObjectIdSubclassMap: Micro-optimize wrapping at end of table"

13 years agoRegister TransportProtocols using services 67/2667/2
Shawn O. Pearce [Mon, 7 Mar 2011 23:39:03 +0000 (15:39 -0800)]
Register TransportProtocols using services

Use the Java 6 like services approach to find all supported
TransportProtocols within the CLASSPATH and load them all for use.

This allows users to inject additional protocol implementations simply
by putting their JARs on the application CLASSPATH, provided the
protocol author has written the proper services file.

Change-Id: I7a82d8846e4c4ed012c769f03d4bb2461f1bd148
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMake the supported Transports extensible and discoverable 66/2666/2
Shawn O. Pearce [Mon, 7 Mar 2011 23:01:49 +0000 (15:01 -0800)]
Make the supported Transports extensible and discoverable

The new TransportProtocol type describes what a particular Transport
implementation wants in order to support a connection.  3rd parties
can now plug into the Transport.open() logic by implementing their
own TransportProtocol and Transport classes, and registering with
Transport.register().

GUI applications can help the user configure a connection by looking
at the supported fields of a particular TransportProtocol type, which
makes the GUI more dynamic and may better support new Transports.

Change-Id: Iafd8e3a6285261412aac6cba8e2c333f8b7b76a5
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "Don't auto follow non-annotated tags in fetch"
Shawn O. Pearce [Sun, 13 Mar 2011 23:22:31 +0000 (19:22 -0400)]
Merge "Don't auto follow non-annotated tags in fetch"

13 years agoAdd -o option to commit command 35/2635/5
Philipp Thun [Fri, 11 Mar 2011 13:25:46 +0000 (14:25 +0100)]
Add -o option to commit command

This change adds the --only/ -o option to the commit command.

Change-Id: I44352d56877f8204d985cb7a35a2e0faffb7d341
Signed-off-by: Philipp Thun <philipp.thun@sap.com>
13 years agoObjectIdSubclassMap: Micro-optimize wrapping at end of table 89/2689/1
Shawn O. Pearce [Thu, 10 Mar 2011 18:09:58 +0000 (10:09 -0800)]
ObjectIdSubclassMap: Micro-optimize wrapping at end of table

During a review of the class, Josh Bloch pointed out we can use
"i = (i + 1) & mask" to wrap around at the end of the table, instead
of a conditional with a branch.  This is generally faster due to one
less branch that will be mis-predicted by the CPU.

Change-Id: Ic88c00455ebc6adde9708563a6ad4d0377442bba
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge changes I0d797533,I128522af,I6dd076eb,Ief6f81b9,I83d01e5c
Shawn O. Pearce [Thu, 10 Mar 2011 18:02:59 +0000 (13:02 -0500)]
Merge changes I0d797533,I128522af,I6dd076eb,Ief6f81b9,I83d01e5c

* changes:
  ObjectIdSubclassMap: Avoid field loads in inner loops
  ObjectIdSubclassMap: Manually inline index()
  ObjectIdSubclassMap: Change initial size to 2048
  ObjectIdSubclassMap: Grow before insertions
  ObjectIdSubclassMap: Use & rather than % for hashing

13 years agoMerge "Cache gitPrefix in FS_Win32"
Shawn Pearce [Thu, 10 Mar 2011 18:02:24 +0000 (13:02 -0500)]
Merge "Cache gitPrefix in FS_Win32"

13 years agoFix Bundle-Version of jgit source bundle 88/2688/1
Matthias Sohn [Thu, 10 Mar 2011 13:23:39 +0000 (14:23 +0100)]
Fix Bundle-Version of jgit source bundle

Bug: 339033
Change-Id: Idaf965cb684d5ed3f3634b0f3d256c92182d7c58
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoCache gitPrefix in FS_Win32 87/2687/1
Marc Strapetz [Thu, 10 Mar 2011 12:17:57 +0000 (13:17 +0100)]
Cache gitPrefix in FS_Win32

readPipe() may consume rather much time, so
gitPrefix should be cached. If the git executable changes,
users should run FS.detect() again to get a new
instance of FS_Win32.

13 years agoObjectIdSubclassMap: Avoid field loads in inner loops 85/2685/1
Shawn O. Pearce [Wed, 9 Mar 2011 22:44:14 +0000 (14:44 -0800)]
ObjectIdSubclassMap: Avoid field loads in inner loops

Ensure the JIT knows the table cannot be changed during the critical
inner loop of get() or insert() by loading the field into a final
local variable.  This shouldn't be necessary, but the instance member
is declared non-final (to resizing) and it is not very obvious to the
JIT that the table cannot be modified by AnyObjectId.equals().

Simplify the JIT's decision making by making it obvious, these
values cannot change during the critical inner loop, allowing
for better register allocation.

Change-Id: I0d797533fc5327366f1207b0937c406f02cdaab3
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoObjectIdSubclassMap: Manually inline index() 84/2684/1
Shawn O. Pearce [Wed, 9 Mar 2011 22:38:35 +0000 (14:38 -0800)]
ObjectIdSubclassMap: Manually inline index()

This method is trivial in definition, and is called in only 3
places. Inline the method manually to ensure its really going
to be inlined by the JIT at runtime.

Change-Id: I128522af8167c07d2de6cc210573599038871dda
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoObjectIdSubclassMap: Change initial size to 2048 83/2683/1
Shawn O. Pearce [Wed, 9 Mar 2011 22:34:27 +0000 (14:34 -0800)]
ObjectIdSubclassMap: Change initial size to 2048

32 is way to small for the map. Most applications using the map
will need to load more than 16 objects just from the root refs
being read from the Repository.

Default the initial size to 2048. This cuts out 6 expansions in
the early life of the table, reducing garbage and rehashing time.

Change-Id: I6dd076ebc0b284f1755855d383b79535604ac547
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoObjectIdSubclassMap: Grow before insertions 82/2682/1
Shawn O. Pearce [Wed, 9 Mar 2011 22:32:43 +0000 (14:32 -0800)]
ObjectIdSubclassMap: Grow before insertions

If the table needs to be grown, do it before the current insertion
rather than after. This is a tiny micro-optimization that allows
the compiler to reuse the result of "++size" to compare against
previously pre-computed size at which the table should rehash itself.

Change-Id: Ief6f81b91c10ed433d67e0182f558ca70d58a2b0
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoObjectIdSubclassMap: Use & rather than % for hashing 81/2681/1
Shawn O. Pearce [Wed, 9 Mar 2011 22:26:39 +0000 (14:26 -0800)]
ObjectIdSubclassMap: Use & rather than % for hashing

Bitwise and is faster than integer modulus operations, and since
the table size is always a power of 2, this is simple to use for
index operation.

Change-Id: I83d01e5c74fd9e910c633a98ea6f90b59092ba29
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoObjectIdSubclassMap: Fix non-standard naming conventions 80/2680/1
Shawn O. Pearce [Wed, 9 Mar 2011 22:28:14 +0000 (14:28 -0800)]
ObjectIdSubclassMap: Fix non-standard naming conventions

obj_hash doesn't match our naming conventions, camelCaseNames
are the preferred format.

Change-Id: I72da199daccb60a98d17b6af1e498189bf149515
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFixed ordering of Config.getSubsections(...) 79/2679/1
Jesse Greenwald [Wed, 9 Mar 2011 17:48:52 +0000 (09:48 -0800)]
Fixed ordering of Config.getSubsections(...)

A standard HashSet was being used to store the list of subsections as
they were being parsed.  This was changed to use a LinkedHashSet so
that iterating over the set would return values in the same order as
they are listed in the config file.

Change-Id: I4251f95b8fe0ad59b07ff563c9ebb468f996c37d

13 years ago[findbugs] ProgressReportingFilter can be a static inner class 74/2674/1
Matthias Sohn [Tue, 8 Mar 2011 23:05:36 +0000 (00:05 +0100)]
[findbugs] ProgressReportingFilter can be a static inner class

Change-Id: I628b1f25f04c9297655d5ac451ae5a133db53896
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years ago[findbugs] Avoid futile attempt to change max pool size 73/2673/1
Matthias Sohn [Tue, 8 Mar 2011 22:41:47 +0000 (23:41 +0100)]
[findbugs] Avoid futile attempt to change max pool size

Javadoc for ScheduledThreadPoolExecutor says [1]:
While ScheduledThreadPoolExecutor inherits from ThreadPoolExecutor, a
few of the inherited tuning methods are not useful for it. In
particular, because it acts as a fixed-sized pool using corePoolSize
threads and an unbounded queue, adjustments to maximumPoolSize have no
useful effect.

[1]
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html

Change-Id: I8eccb7d6544aa6e27f5fa064c19dddb2a706523f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoPackWriter: Reduce GC during enumeration 68/2668/1
Shawn O. Pearce [Tue, 8 Mar 2011 01:49:08 +0000 (17:49 -0800)]
PackWriter: Reduce GC during enumeration

Instead of resizing an ArrayList until all objects have been added,
append objects into a specialized List type that uses small arrays
of 1024 entries for each 1024 objects added.

For a large repository like linux-2.6, PackWriter will now allocate
1,758 smaller arrays to hold the object list, without creating any
garbage from the intermediate states due to list expansion.

1024 was chosen as the block size (and initial directory size) as this
is a reasonable balance for the PackWriter code.  Each block uses
approximately 4096 bytes in a 32 bit JVM, as does the default top
level block directory.  The top level directory doesn't expand until 1
million items have been added to the list, which for linux-2.6 won't
yet occur as the lists are per-object-type and are thus bounded to
about 1/3 of 1.8 million.

Change-Id: If9e4092eb502394c5d3d044b58cf49952772f6d6
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove deprecated Repository.mapTree 64/2664/1
Shawn O. Pearce [Mon, 7 Mar 2011 20:36:48 +0000 (12:36 -0800)]
Remove deprecated Repository.mapTree

The mapTree() routines have been deprecated for a long time, and their
sibilings for mapCommit() and mapTag() were already removed from the
main Repository API.

Remove mapTree().  Application callers who only need the tree's name
can use resolve("^{tree}") syntax to resolve to the tree ObjectId, or
fail if the input is not a tree.

Applications that want to read a tree should use DirCache or TreeWalk.

Change-Id: I85726413790fc87721271c482f6636f81baf8b82
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove deprecated TreeVisitor 63/2663/1
Shawn O. Pearce [Mon, 7 Mar 2011 20:29:59 +0000 (12:29 -0800)]
Remove deprecated TreeVisitor

This type and its associated methods has been deprecated for a while
now.  Time to remove it.  Applications can use a TreeWalk instead to
access the elements of any tree-like object.

Change-Id: I047e552ac77b77e2de086f63cb4fb318da57c208
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove deprecated TreeIterator 62/2662/1
Shawn O. Pearce [Mon, 7 Mar 2011 20:26:51 +0000 (12:26 -0800)]
Remove deprecated TreeIterator

This interface has been deprecated for a while now.
Applications can use a TreeWalk instead.

Change-Id: I751d6e919e4b501c36fc36e5f816b8a8c5379cb9
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove deprecated IndexTreeVisitor 61/2661/1
Shawn O. Pearce [Mon, 7 Mar 2011 20:23:15 +0000 (12:23 -0800)]
Remove deprecated IndexTreeVisitor

This has been deprecated for some time now.  Applications should
instead use DirCache within a TreeWalk.

Change-Id: I8099d93f07139c33fe09bdeef8d739782397da17
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove deprecated WriteTree 60/2660/1
Shawn O. Pearce [Mon, 7 Mar 2011 20:20:44 +0000 (12:20 -0800)]
Remove deprecated WriteTree

This class has been deprecated for a long time now.
Time to remove it.  Applications can use the newer
DirCache.writeTree() as a replacement.

Change-Id: I91dc9507668d8a3ecadd6acd4f1c8b7bd7760cc3
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove deprecated WorkDirCheckout 59/2659/1
Shawn O. Pearce [Mon, 7 Mar 2011 20:18:12 +0000 (12:18 -0800)]
Remove deprecated WorkDirCheckout

This class has been deprecated for a long time now.
Time to remove it.  Applications can use the newer
DirCacheCheckout class as a replacement.

Change-Id: Id66d29fcca5a7286b8f8838303d83f40898918d2
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemove deprecated Treeish interface 58/2658/1
Shawn O. Pearce [Mon, 7 Mar 2011 20:12:20 +0000 (12:12 -0800)]
Remove deprecated Treeish interface

This interface has been deprecated for a long time now.
Time to remove it.

Change-Id: I29a938657e4637b2a9d0561940b38d70866613f7
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoAllow to amend a commit with CommitCommand 56/2656/3
Tomasz Zarna [Mon, 7 Mar 2011 15:33:53 +0000 (16:33 +0100)]
Allow to amend a commit with CommitCommand

Bug: 339088
Change-Id: I57dc727688c4bb6968ac076b176661c857c05afa
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoEnable test methods in CommitAndLogCommandTests 55/2655/3
Tomasz Zarna [Mon, 7 Mar 2011 15:47:04 +0000 (16:47 +0100)]
Enable test methods in CommitAndLogCommandTests

Change-Id: I52bbf19416cba42340004f0235e17a436cad1058
Bug: 339086
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
13 years agoPackFile: Fix copy as-is for small objects 49/2649/1
Shawn O. Pearce [Sat, 5 Mar 2011 02:56:16 +0000 (18:56 -0800)]
PackFile: Fix copy as-is for small objects

When I disabled validation I broke the code that handled copying small
objects whose contents were below 8192 bytes in size but spanned over
the end of one window and into the next window.  These objects did not
ever populate the temporary write buffer, resulting in garbage writing
into the output stream instead of valid object contents.

Change-Id: Ie26a2aaa885d0eee4888a9b12c222040ee4a8562
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "PushCommand: Test for update of tracking branch"
Shawn Pearce [Fri, 4 Mar 2011 21:55:32 +0000 (16:55 -0500)]
Merge "PushCommand: Test for update of tracking branch"

13 years agoMerge "Fix DirCache re-read."
Shawn Pearce [Fri, 4 Mar 2011 15:19:06 +0000 (10:19 -0500)]
Merge "Fix DirCache re-read."

13 years agoMerge "Use generics in RepositoryFilter constructor"
Shawn Pearce [Fri, 4 Mar 2011 15:17:27 +0000 (10:17 -0500)]
Merge "Use generics in RepositoryFilter constructor"

13 years agoDon't auto follow non-annotated tags in fetch 42/2642/1
Shawn O. Pearce [Fri, 4 Mar 2011 15:14:50 +0000 (07:14 -0800)]
Don't auto follow non-annotated tags in fetch

When fetch TagOpt is AUTO_FOLLOW do not follow refs/tags/ names that
point directly to commits which are on unreleated side branches.

Change-Id: Iea6eee5a05ae7402a7f256fd9c1e3d3b5ccb58dd
Reported-by: Slawomir Ginter <sginter@atlassian.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoFix DirCache re-read. 41/2641/1
Robin Rosenberg [Fri, 4 Mar 2011 15:00:25 +0000 (16:00 +0100)]
Fix DirCache re-read.

During unit tests and most likely elsewhere, updates come too fast for
a simple timestamp comparison (with one seconds resolution) to work.
I.e. DirCache thinks it hasn't changed.

Use FileSnapshot instead which has more advanced logic.

Change-Id: Ib850f84398ef7d4b8a8a6f5a0ae6963e37f2b470
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
13 years agoPushCommand: Test for update of tracking branch 39/2639/2
Robin Stocker [Mon, 28 Feb 2011 18:12:37 +0000 (19:12 +0100)]
PushCommand: Test for update of tracking branch

Bug 317411 (Push does not update remote tracking branch) is assigned to
JGit. This test verifies that JGit does the right thing.

Bug: 317411
Change-Id: I8f632e3e6c8a4f16a1170b1dba92e8fd3d6267d0

13 years agoMerge changes I52054d7b,If5865ac9
Shawn O. Pearce [Fri, 4 Mar 2011 14:21:59 +0000 (09:21 -0500)]
Merge changes I52054d7b,If5865ac9

* changes:
  resolve(): Fix wrong parsing of branch "foo-gbed2-dev"
  RemoteRefUpdate: Accept Ref and ObjectId arguments for source

13 years agoMerge "Adapt to Jetty 7.3 API change coming with Indigo"
Christian Halstrick [Fri, 4 Mar 2011 08:32:20 +0000 (03:32 -0500)]
Merge "Adapt to Jetty 7.3 API change coming with Indigo"

13 years agoresolve(): Fix wrong parsing of branch "foo-gbed2-dev" 38/2638/1
Shawn O. Pearce [Fri, 4 Mar 2011 00:17:29 +0000 (16:17 -0800)]
resolve(): Fix wrong parsing of branch "foo-gbed2-dev"

When parsing a string such as "foo-gbed2" resolve() was assuming the
suffix was from git describe output.  This lead to JGit trying to find
the completion for the object abbreviation "bed2", rather than using
the current value of the reference.  If there was only one such object
in the repository, JGit might actually use the wrong value here, as
resolve() would return the completion of the abbreviation "bed2"
rather than the current value of the reference "refs/heads/foo-gbed2".

Move the parsing of git describe abbreviations out of the operator
portion of the resolve() method and into the simple portion that is
supposed to handle only object ids or reference names, and only do the
describe parsing after all other approaches have already failed to
provide a resolution.

Add new unit tests to verify the behavior is as expected by users.

Bug: 338839
Change-Id: I52054d7b89628700c730f9a4bd7743b16b9042a9
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoRemoteRefUpdate: Accept Ref and ObjectId arguments for source 37/2637/1
Shawn O. Pearce [Thu, 3 Mar 2011 22:36:19 +0000 (14:36 -0800)]
RemoteRefUpdate: Accept Ref and ObjectId arguments for source

Applications may already have a Ref or ObjectId on hand that they want
the remote to be updated to.  Instead of converting these into a
String and relying on the parsing rules of resolve(), allow the
application to supply the Ref or ObjectId directly.

Bug: 338839
Change-Id: If5865ac9eb069de1c8f224090b6020fc422f9f12
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoImprove readability of timestamps shown by debug-show-dir-cache 32/2632/2
Matthias Sohn [Thu, 3 Mar 2011 15:19:47 +0000 (16:19 +0100)]
Improve readability of timestamps shown by debug-show-dir-cache

The old format is hard to read.

Change-Id: I27f3a7dbd92b26256993d27d5223b743fef70902
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoEnhance debug-show-dir-cache command to show stage 31/2631/1
Matthias Sohn [Thu, 3 Mar 2011 09:56:38 +0000 (10:56 +0100)]
Enhance debug-show-dir-cache command to show stage

Change-Id: I6fb17ec7f04f8bfaf1253b2ff08200ef9fc51898
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoPackWriter: Validate reused cached packs 30/2630/1
Shawn O. Pearce [Wed, 2 Mar 2011 20:49:00 +0000 (12:49 -0800)]
PackWriter: Validate reused cached packs

If object reuse validation is enabled, the output pack is going to
probably be stored locally.  When reusing an existing cached pack
to save object enumeration costs, ensure the cached pack has not
been corrupted by checking its SHA-1 trailer.  If it has, writing
will abort and the output pack won't be complete.  This prevents
anyone from trying to use the output pack, and catches corruption
before it can be carried any further.

Change-Id: If89d0d4e429d9f4c86f14de6c0020902705153e6
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Avoid CRC-32 validation when feeding IndexPack 29/2629/1
Shawn O. Pearce [Wed, 2 Mar 2011 20:23:55 +0000 (12:23 -0800)]
PackWriter: Avoid CRC-32 validation when feeding IndexPack

There is no need to validate the object contents during
copyObjectAsIs if the result is going to be parsed by unpack-objects
or index-pack.  Both programs will compute the SHA-1 of the object,
and also validate most of the pack structure.  For git daemon
like servers, this work is already done on the client end of the
connection, so the server doesn't need to repeat that work itself.

Disable object validation for the 3 transport cases where we know
the remote side will handle object validation for us (push, bundle
creation, and upload pack).  This improves performance on the server
side by reducing the work that must be done.

Change-Id: Iabb78eec45898e4a17f7aab3fb94c004d8d69af6
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Position tags after commits 22/2622/1
Shawn O. Pearce [Tue, 1 Mar 2011 00:30:23 +0000 (16:30 -0800)]
PackWriter: Position tags after commits

Annotated tags need to be parsed by many viewing tools, but putting
them at the end of the pack hurts because kernel prefetching might
not have loaded them, since they are so far from the commits they
reference.

Position tags right behind the commits, but before the trees.
Typically the annotated tag set for a repository is very small,
so the extra prefetch burden it puts on tools that don't need
annotated tags (but do need commits and trees) is fairly low.

Change-Id: Ibbabdd94e7d563901c0309c79a496ee049cdec50
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Refactor object writing loop 21/2621/1
Shawn O. Pearce [Tue, 1 Mar 2011 00:08:05 +0000 (16:08 -0800)]
PackWriter: Refactor object writing loop

This simple refactoring makes it easier to pre-process each of the
object lists before its handed into the actual write routine.

Change-Id: Iea95e5ecbc7374f6bcbb43d1c75285f4f564d09d
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Don't reuse commit or tag deltas 20/2620/1
Shawn O. Pearce [Mon, 28 Feb 2011 23:39:31 +0000 (15:39 -0800)]
PackWriter: Don't reuse commit or tag deltas

JGit doesn't generate deltas for commit or tag objects when it packs
a repository from scratch.  This is an explicit design decision that
is (mostly) justified by the fact that these objects do not delta
compress well.

Annotated tags are made once on stable points of the project history,
it is unlikely they will ever appear again with sufficient common
text to justify using a delta over just deflating the raw content.
JGit never tries to delta compress annotated tags and I take the
stance that these are best stored as non-deltas given how frequently
they might be accessed by repository viewers.

Commits only have sufficient common text when they are cherry-picked
to forward-port or back-port a change from one branch to another.
Even in these cases the distance between the commits as returned
by the log traversal has to be small enough that they would both
appear in the delta search window at the same time in order to
delta compress one of the messages against the other.  JGit never
tries to delta compress commits, as it requires a lot of CPU time
but typically does not produce a smaller pack file.

Avoid reusing deltas for either of these types when constructing a
new pack.  To avoid killing performance during serving of network
clients, UploadPack disables this code change by allowing PackWriter
to reuse delta commits.  Repositories that were already repacked by
C Git will not have their delta commits decompressed and recompressed
on the fly during object writing, saving server-side CPU resources.

Change-Id: I749407e7c5c677e05e4d054b40db7656cfa7fca8
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPackWriter: Do not delta compress already packed objects 19/2619/1
Shawn O. Pearce [Tue, 1 Mar 2011 17:28:11 +0000 (09:28 -0800)]
PackWriter: Do not delta compress already packed objects

This is a tiny optimization to how delta search works.  Checking for
isReuseAsIs() avoids doing delta compression search on non-delta
objects already stored in packs within the repository.  Such objects
are not likely to be delta compressable, as they were already delta
searched when their containing pack was generated and they were
not delta compressed at that time.  Doing delta compression now is
unlikely to produce a different result, but would waste a lot of CPU.

The isReuseAsIs() flag is checked before isDoNotDelta() because it
is very common to reuse objects in the output pack.  Most objects
get reused, and only a handful have the isDoNotDelta() bit set.
Moving the check earlier allows the loop to more quickly skip
through objects that will never need to be considered.

Change-Id: Ied757363f775058177fc1befb8ace20fe9759bac
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoPaper bag fix BatchingProgressMonitor alarm queue 17/2617/1
Shawn O. Pearce [Tue, 1 Mar 2011 18:06:39 +0000 (10:06 -0800)]
Paper bag fix BatchingProgressMonitor alarm queue

The alarm queue threads were started with an empty task body, which
meant the thread started and terminated immediately, leaving the
queue itself with no worker.

Change-Id: I2a9b5fe9c2bdff4a5e0f7ec7ad41a54b41a4ddd6
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoMerge "ProgressMonitor: Refactor to use background alarms"
Chris Aniszczyk [Tue, 1 Mar 2011 17:05:59 +0000 (12:05 -0500)]
Merge "ProgressMonitor: Refactor to use background alarms"

13 years agoMerge "Show notes in Log CLI command - Part 2"
Chris Aniszczyk [Tue, 1 Mar 2011 16:13:00 +0000 (11:13 -0500)]
Merge "Show notes in Log CLI command - Part 2"

13 years agoShow notes in Log CLI command - Part 2 97/2597/2
Sasa Zivkov [Thu, 24 Feb 2011 10:12:06 +0000 (11:12 +0100)]
Show notes in Log CLI command - Part 2

This change fixes issues identified in the commit
5f3d577e5a1e8f23a2b6ea6a2bf24516806e01b8.

Change-Id: Idbd935f5f60ad043faa0d4982b3e101ef7c07d60
Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com>
13 years agoProgressMonitor: Refactor to use background alarms 15/2615/1
Shawn O. Pearce [Tue, 1 Mar 2011 03:34:06 +0000 (19:34 -0800)]
ProgressMonitor: Refactor to use background alarms

Instead of polling the system clock on every update(1) method call,
use a scheduled executor to toggle a volatile once per second until
the task is done.  Check the volatile on each update(int), looking
to see if output should occur.

This limits progress output to either once per 1% complete, or once
per second.  To save time during update calls the timer isn't reset
during each 1% of output, which means we may see one unnecessary
output trigger if at least 1% completed during the one second of the
alarm time.

Change-Id: I8fdd7e31c37bef39a5d1b3da7105da0ef879eb84
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
13 years agoAdapt to Jetty 7.3 API change coming with Indigo 71/2171/2
Matthias Sohn [Tue, 1 Mar 2011 01:04:07 +0000 (02:04 +0100)]
Adapt to Jetty 7.3 API change coming with Indigo

Indigo comes with Jetty 7.3 bringing some API changes. This still
works with Jetty 7.1.6 shipped with Helios.

Change-Id: If4f9d6ef6b45c94f8bb097f8b02c10317b47547b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
13 years agoFix NPE on checkout of remote tracking branch 14/2614/1
Matthias Sohn [Mon, 28 Feb 2011 23:21:14 +0000 (00:21 +0100)]
Fix NPE on checkout of remote tracking branch

Checkout of remote tracking branch failed when no local branch
existed. Also enhance RepositoryTestCase to enable checking index
state of another test repository.

Bug: 337695
Change-Id: Idf4c05bdf23b5161688818342b2bf9a45b49f479
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>