]> source.dussan.org Git - jgit.git/log
jgit.git
14 years agoRemove unnecessary failing test method 13/1613/2
Stefan Lay [Fri, 17 Sep 2010 14:24:08 +0000 (16:24 +0200)]
Remove unnecessary failing test method

Method test006_readCaseInsensitive in TestConfig already does the
same thing, and doesn't require an OS specific test for the value being
asserted.
This is additionally a fast fix for the failing JUnit test after
change 3fe5276.

Change-Id: I96d2794dbc7db55bdd0fbfcf675aabb15cc8419f
Signed-off-by: Stefan Lay <stefan.lay@sap.com>
14 years agoProbe filesystem and set core.filemode correctly 01/1601/1
Shawn O. Pearce [Wed, 15 Sep 2010 14:59:38 +0000 (07:59 -0700)]
Probe filesystem and set core.filemode correctly

When creating a new FileRepository, probe the capability of the
local filesystem and set core.filemode based on how it reacts.

We can't just rely on FS.supportsExecute() because a POSIX system
(which usually does support execute) might be storing the repository
on a partition that doesn't have execute support (e.g. plain FAT-32).

Creating a temporary file, setting both states, checking we get
the desired results will let us set the variable correctly on
all systems.

Change-Id: I551488ea8d352d2179c7b244f474d2e3d02567a2
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMerge branch 'stable-0.9' 84/1584/1
Shawn O. Pearce [Sat, 11 Sep 2010 05:17:50 +0000 (22:17 -0700)]
Merge branch 'stable-0.9'

* stable-0.9:
  Correct Javadoc for WS_IGNORE_CHANGE comparator

14 years agoCorrect Javadoc for WS_IGNORE_CHANGE comparator 83/1583/1
Shawn O. Pearce [Sat, 11 Sep 2010 05:13:30 +0000 (22:13 -0700)]
Correct Javadoc for WS_IGNORE_CHANGE comparator

Change-Id: I8aa1e7c7ae192ed28b2c8aaa3c5884b7b4666e9c
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoAllow ../relative paths in remotes 75/1575/2
Chris West (Faux) [Thu, 9 Sep 2010 00:15:27 +0000 (01:15 +0100)]
Allow ../relative paths in remotes

git allows remotes to be relative paths, but the regex
validating urls wouldn't accept anything starting with "..".
Other functionality works fine with these paths.

Bug: 311300
Change-Id: Ib74de0450a1c602b22884e19d994ce2f52634c77

14 years agoMerge changes I3668a396,I18f48321,I121f356c
Matthias Sohn [Thu, 9 Sep 2010 12:29:08 +0000 (08:29 -0400)]
Merge changes I3668a396,I18f48321,I121f356c

* changes:
  Unpack and cache large deltas as loose objects
  Remember loose objects and fast-track their lookup
  Correctly name DeltaBaseCache

14 years agoUpdate .eclipse_iplog for 0.9 67/1567/1
Matthias Sohn [Wed, 8 Sep 2010 21:17:54 +0000 (23:17 +0200)]
Update .eclipse_iplog for 0.9

Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
14 years agoUnpack and cache large deltas as loose objects 56/1556/4
Shawn O. Pearce [Wed, 8 Sep 2010 02:47:23 +0000 (19:47 -0700)]
Unpack and cache large deltas as loose objects

Instead of spooling large delta bases into temporary files and then
immediately deleting them afterwards, spool the large delta out to
a normal loose object.  Later any requests for that large delta can
be answered by reading from the loose object, which is much easier
to stream efficiently for readers.

Since the object is now duplicated, once in the pack as a delta and
again as a loose object, any future prune-packed will automatically
delete the loose object variant, releasing the wasted disk space.

As prune-packed is run automatically during either repack or gc, and
gc --auto triggers automatically based on the number of loose objects,
we get automatic cache management for free.  Large objects that were
unpacked will be periodically cleared out, and will simply be restored
later if they are needed again.

After a short offline discussion with Junio Hamano today, we may want
to propose a change to prune-packed to hold onto larger loose objects
which also exist in pack files as deltas, if the loose object was
recently accessed or modified in the last 2 days.

Change-Id: I3668a3967c807010f48cd69f994dcbaaf582337c
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoRemember loose objects and fast-track their lookup 55/1555/3
Shawn O. Pearce [Wed, 8 Sep 2010 02:16:39 +0000 (19:16 -0700)]
Remember loose objects and fast-track their lookup

Recently created objects are usually what branches point to, and
are usually written out as loose objects.  But due to the high cost
of asking the operating system if a file exists, these are the last
thing that ObjectDirectory examines when looking for an object by
its ObjectId.

Caching recently seen loose objects permits the opening code to
jump directly to the loose object, accelerating lookup for branch
heads that are accessed often.

To avoid exploding the cache its limited to approximately 2048
entries.  When more ids are added, the table is simply cleared
and reset in size.

Change-Id: I18f483217412b102f754ffd496c87061d592e535
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoCorrectly name DeltaBaseCache 54/1554/1
Shawn O. Pearce [Wed, 8 Sep 2010 01:18:55 +0000 (18:18 -0700)]
Correctly name DeltaBaseCache

This class is used only to cache the unpacked form of an object that
was used as a base for another object.  The theory goes that if an
object is used as a delta base for A, it will probably also be a
delta base for B, C, D, E, etc. and therefore having an unpacked copy
of it on hand will make delta resolution for the others very fast.

However since objects are usually only accessed once, we don't want
to cache everything we unpack, just things that we are likely to
need again.  The only things we need again are the delta bases.
Hence, its a delta base cache.

This gets us the class name UnpackedObjectCache back, so we can
use it to actually create a cache of unpacked object information.

Change-Id: I121f356cf4eca7b80126497264eac22bd5825a1d
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoSupport core.autocrlf = input 52/1552/1
Shawn O. Pearce [Wed, 8 Sep 2010 00:14:27 +0000 (17:14 -0700)]
Support core.autocrlf = input

The core.autocrlf variable can take on three values: false, true,
and input.  Parsing it as a boolean is wrong, we instead need to
parse a tri-state enumeration.

Add support for parsing and setting enum values from Java from and
to the text based configuration file, and use that to handle the
autocrlf variable.

Bug: 301775
Change-Id: I81b9e33087a33d2ef2eac89ba93b9e83b7ecc223
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoRefactor diff sequence API 02/1502/6
Shawn O. Pearce [Thu, 2 Sep 2010 19:53:27 +0000 (12:53 -0700)]
Refactor diff sequence API

Instead of making the sequence itself responsible for the equivalence
function, use an external function that is supplied by the caller.
This cleans up the code because we now say cmp.equals(a, ai, b, bi)
instead of a.equals(ai, b, bi).

This refactoring also removes the odd concept of creating different
types of sequences to have different behaviors for whitespace
ignoring.  Instead DiffComparator now supports singleton functions
that apply a particular equivalence algorithm to a type of sequence.

Change-Id: I559f494d81cdc6f06bfb4208f60780c0ae251df9
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMerge "Reduce compares in Edit.getType"
Chris Aniszczyk [Tue, 7 Sep 2010 02:33:09 +0000 (22:33 -0400)]
Merge "Reduce compares in Edit.getType"

14 years agoFix checkReferencedIsReachable to use correct base list 45/1545/1
Shawn O. Pearce [Mon, 6 Sep 2010 18:59:23 +0000 (11:59 -0700)]
Fix checkReferencedIsReachable to use correct base list

When checkReferencedIsReachable is set in ReceivePack we are trying
to prove that the push client is permitted to access an object that
it did not send to us, but that the received objects link to either
via a link inside of an object (e.g. commit parent pointer or tree
member) or by a delta base reference.

To do this check we are making a list of every potential delta base,
and then ensuring that every delta base used appears on this list.
If a delta base does not appear on this list, we abort with an error,
letting the client know we are missing a particular object.

Preventing spurious errors about missing delta base objects requires
us to use the exact same list of potential delta bases as the remote
push client used.  This means we must use TOPO ordering, and we
need to enable BOUNDARY sorting so that ObjectWalk will correctly
include any trees found during the enumeration back to the common
merge base between the interesting and uninteresting heads.

To ensure JGit's own push client matches this same potential delta
base list, we need to undo 60aae90d4d15 ("Disable topological
sorting in PackWriter") and switch back to using the conventional
TOPO ordering for commits in a pack file.  This ensures that our
own push client will use the same potential base object list as
checkReferencedIsReachable uses on the receiving side.

Change-Id: I14d0a326deb62a43f987b375cfe519711031e172
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoDiscard object bodies when checking connectivity 44/1544/1
Shawn O. Pearce [Mon, 6 Sep 2010 18:36:08 +0000 (11:36 -0700)]
Discard object bodies when checking connectivity

Since we are only checking the links between objects we don't need
to hold onto commit messages after their headers have been parsed
by the walker.  Dropping them saves a bit of memory, which is always
good when accepting huge pack files.

Change-Id: I378920409b6acf04a35cdf24f81567b1ce030e36
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoDeltaStream: Fix data corruption when reading large copies 43/1543/1
Shawn O. Pearce [Mon, 6 Sep 2010 17:06:37 +0000 (10:06 -0700)]
DeltaStream: Fix data corruption when reading large copies

If the copy instruction was larger than the input buffer given to us,
we copied the wrong part of the base stream during the next read().

This occurred on really big binary files where a copy instruction
of 64k wasn't unreasonable, but the caller's buffer was only 8192
bytes long.  We copied the first 8192 bytes correctly, but then
reseeked the base stream back to the start of the copy region on
the second read of 8192 bytes.  Instead of a sequence like ABCD
being read into the caller, we read AAAA.

Change-Id: I240a3f722a3eda1ce8ef5db93b380e3bceb1e201
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoUse 8192 as default buffer size in ObjectLoader copyTo 42/1542/1
Shawn O. Pearce [Mon, 6 Sep 2010 16:59:35 +0000 (09:59 -0700)]
Use 8192 as default buffer size in ObjectLoader copyTo

As ObjectStreams are supposed to be buffered, most implementors will
be wrapping their underlying stream inside of a BufferedInputStream
in order to satisfy this requirement.  Because developers are by
nature lazy, they will use the default buffer size rather than
specify their own.

The OpenJDk JRE implementations use 8192 as the default buffer
size, and when the higher level reader uses the same buffer size
the buffers "stack" nicely by avoiding a copy to the internal
buffer array.  As OpenJDK is a popular virtual machine, we should
try to benefit from this nice stacking property during copyTo().

Change-Id: I69d53f273b870b841ced2be2e9debdfd987d98f4
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMerge "Add helper methods to Edit"
Chris Aniszczyk [Mon, 6 Sep 2010 17:04:51 +0000 (13:04 -0400)]
Merge "Add helper methods to Edit"

14 years agoMerge "log: Fix commit headers and -p flag"
Shawn O. Pearce [Mon, 6 Sep 2010 16:06:17 +0000 (12:06 -0400)]
Merge "log: Fix commit headers and -p flag"

14 years agoMerge "Use 5 MiB for RevWalk default limit"
Shawn O. Pearce [Mon, 6 Sep 2010 15:37:29 +0000 (11:37 -0400)]
Merge "Use 5 MiB for RevWalk default limit"

14 years agocleanup: Remove unnecessary @SuppressWarnings 34/1534/2
Robin Rosenberg [Sat, 4 Sep 2010 21:58:50 +0000 (23:58 +0200)]
cleanup: Remove unnecessary @SuppressWarnings

Change-Id: I1b239b587e1cc811bbd6e1513b07dc93a891a842
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
14 years agoReduce compares in Edit.getType 11/1511/2
Shawn O. Pearce [Thu, 2 Sep 2010 20:07:23 +0000 (13:07 -0700)]
Reduce compares in Edit.getType

We can slightly optimize this method by removing some compares
based on knowledge of how the orderings have to work.  This way
a getType() invocation requires at most 2 int compares for any
result, vs. the 6 required to find REPLACE before.

Change-Id: I62a04cc513a6d28c300d1c1496a8608d5df4efa6
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoAdd helper methods to Edit 01/1501/3
Shawn O. Pearce [Thu, 2 Sep 2010 06:09:48 +0000 (23:09 -0700)]
Add helper methods to Edit

Exposing isEmpty, getLengthA, getLengthB make it easier to examine
the state of an edit and work with it from higher level code.

The before and after cut routines make it easy to split an edit
that contains another edit, such as to decompose a REPLACE that
contains a common sequence within it.

Change-Id: Id63d6476a7a6b23acb7ab237d414a0a1a7200290
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agolog: Fix commit headers and -p flag 29/1529/1
Shawn O. Pearce [Sat, 4 Sep 2010 06:33:28 +0000 (23:33 -0700)]
log: Fix commit headers and -p flag

We weren't flushing the commit message before the diff output, which
meant the headers and message showed randomly interleaved with the
diff rather than immediately before.

Change-Id: I6cefab8d40e9d40c937e9deb12911188fec41b26
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoFix QuotedString.GIT_PATH escaping rules 28/1528/1
Shawn O. Pearce [Fri, 3 Sep 2010 20:01:57 +0000 (13:01 -0700)]
Fix QuotedString.GIT_PATH escaping rules

We shouldn't escape non-special ASCII characters such as '@' or '~'.
These are valid in a path name on POSIX systems, and may appear as
part of a path in a GNU or Git style patch script.  Escaping them
into octal just obfuscates the user's intent, with no gain.

When parsing an escaped octal sequence, we must parse no more
than 3 digits.  That is, "\1002" is actually "@2", not the Unicode
character \u0202.

Change-Id: I3a849a0d318e69b654f03fd559f5d7f99dd63e5c
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoRemove costly quoting test in DiffFormatter 27/1527/1
Shawn O. Pearce [Fri, 3 Sep 2010 19:59:53 +0000 (12:59 -0700)]
Remove costly quoting test in DiffFormatter

QuotedString.GIT_PATH returns the input reference exactly if
the string does not require quoting, otherwise it returns a
copy that contains the quotes on either end, plus escapes in
the middle where necessary to meet conventions.

Testing the return against '"' + name + '"' is always false,
because GIT_PATH will never return it that way.  The only way
we have quotes on either end is if there is an escape in the
middle, in which case the string isn't equal anyway.

Change-Id: I4d21d8e5c7da0d7df9792c01ce719548fa2df16b
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMerge branch 'unpack-error' 25/1525/1
Shawn O. Pearce [Fri, 3 Sep 2010 18:09:45 +0000 (11:09 -0700)]
Merge branch 'unpack-error'

* unpack-error:
  ReceivePack: Rethrow exceptions caught during indexing

Change-Id: I0d0239d69cb5cd1a622bdee879978f0299e0ca40

14 years agoReceivePack: Rethrow exceptions caught during indexing 24/1524/1
Shawn O. Pearce [Fri, 3 Sep 2010 16:38:30 +0000 (09:38 -0700)]
ReceivePack: Rethrow exceptions caught during indexing

If we get an exception while indexing the incoming pack, its likely
a stream corruption.  We already report an error to the client, but
we eat the stack trace, which makes debugging issues related to a
bug inside of JGit nearly impossible.  Rethrow it under a new type
UnpackException, so embedding servers or applications can catch the
error and provide it to a human who might be able to forward such
traces onto a JGit developer for evaluation.

Change-Id: Icad41148bbc0c76f284c7033a195a6b51911beab
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoUse 5 MiB for RevWalk default limit 93/1493/3
Shawn O. Pearce [Wed, 1 Sep 2010 21:14:54 +0000 (14:14 -0700)]
Use 5 MiB for RevWalk default limit

Instead of getting the limit from CoreConfig, use the larger of the
reader's limit or 5 MiB, under the assumption that any annotated tag
or commit of interest should be under 5 MiB.  But if a repository
was really insane and had bigger objects, the reader implementation
can set its streaming limit higher in order to allow RevWalk to
still process it.

Change-Id: If2c15235daa3e2d1f7167e781aa83fedb5af9a30
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMove ObjectDirectory streaming limit to WindowCacheConfig 94/1494/3
Shawn O. Pearce [Tue, 31 Aug 2010 20:13:28 +0000 (13:13 -0700)]
Move ObjectDirectory streaming limit to WindowCacheConfig

IDEs like Eclipse offer up the settings in WindowCacheConfig to the
user as a global set of options that are configured for the entire
JVM process, not per-repository, as the cache is shared across the
entire JVM.  The limit on how much we are willing to allocate for
an object buffer is similar to the limit on how much we can use for
data caches, allocating that much space impacts the entire JVM and
not just a single repository, so it should be a global limit.

Change-Id: I22eafb3e223bf8dea57ece82cd5df8bfe5badebc
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agodiff: Default arguments to HEAD, working directory 92/1492/2
Shawn O. Pearce [Wed, 1 Sep 2010 19:29:40 +0000 (12:29 -0700)]
diff: Default arguments to HEAD, working directory

Similar to C Git, default our difference when no trees are given
to us to something that makes a tiny bit of sense to the human.

We also now support the --cached flag, and have its meaning work the
same way as C Git.

Change-Id: I2f19dad4e018404e280ea3e95ebd448a4b667f59
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoSupport creating the working directory difference 91/1491/2
Shawn O. Pearce [Wed, 1 Sep 2010 19:30:11 +0000 (12:30 -0700)]
Support creating the working directory difference

If the iterators passed into a diff formatter are working tree
iterators, we should enable ignoring files that are ignored, as
well as actually pull up the current content from the working tree
rather than getting it from the repository.

Because we abstract away the working directory access logic,
we can now actually support rename detection between the working
directory and the local repository when using a DiffFormatter.
This means its possible for an application to show an unstaged
delete-add pair as a rename if the add path is not ignored.
(Because the ignored file wouldn't show up in our difference output.)

Even more interesting is we can now do rename detection between any
two working trees, if both input iterators are WorkingTreeIterators.

Unfortunately we don't (yet) optimize for comparing the working
tree with the index involved so we can take advantage of cached
stat data to rule out non-dirty paths.

Change-Id: I4c0598afe48d8f99257266bf447a0ecd23ca7f5e
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoFix TreeWalk bug comparing DirCache and WorkingTree with ANY_DIFF 90/1490/2
Shawn O. Pearce [Wed, 1 Sep 2010 19:31:37 +0000 (12:31 -0700)]
Fix TreeWalk bug comparing DirCache and WorkingTree with ANY_DIFF

When comparing a DirCache and a WorkingTree using ANY_DIFF we
sometimes didn't recursive into a subtree of both sides gave us
zeroId() back for the identity of a subtree.  This happens when the
DirCache doesn't have a valid cache tree for the subtree, as then
it uses zeroId() for the ObjectId of the subtree, which then appears
to be equal to the zeroId() of the WorkingTreeIterator's subtree.

We work around this by adding a hasId() method that returns true
only if this iterator has a valid ObjectId.  The idEquals method
on TreeWalk than only performs a compare between two iterators if
both iterators have a valid id.

Change-Id: I695f7fafbeb452e8c0703a05c02921fae0822d3f
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agolog, diff: Add --src-prefix, --dst-prefix, --no-prefix 89/1489/2
Shawn O. Pearce [Wed, 1 Sep 2010 16:34:43 +0000 (09:34 -0700)]
log, diff: Add --src-prefix, --dst-prefix, --no-prefix

Change-Id: I0c7154a51143d56362f12ee4fa93133778d3a9eb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMove rename detection, path following into DiffFormatter 88/1488/2
Shawn O. Pearce [Wed, 1 Sep 2010 16:23:18 +0000 (09:23 -0700)]
Move rename detection, path following into DiffFormatter

Applications just want a quick way to configure our diff
implementation, and then just want to use it without a lot of fuss.

Move all of the rename detection logic and path following logic
out of our pgm package and into DiffFormatter itself, making it
much easier for a GUI to take advantage of the features without
duplicating a lot of code.

Change-Id: I4b54e987bb6dc804fb270cbc495fe4cae26c7b0e
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMerge "Fix RepositoryState.MERGING"
Chris Aniszczyk [Thu, 2 Sep 2010 16:10:09 +0000 (12:10 -0400)]
Merge "Fix RepositoryState.MERGING"

14 years agoFix RepositoryState.MERGING 09/1509/1
Jens Baumgart [Thu, 2 Sep 2010 16:01:47 +0000 (18:01 +0200)]
Fix RepositoryState.MERGING

canResetHead now returns true.
Resetting mixed / hard works in EGit in merging state.

Change-Id: I1512145bbd831bb9734528ce8b71b1701e3e6aa9
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
14 years agoMerge "Add reset() to AbstractTreeIterator API"
Chris Aniszczyk [Thu, 2 Sep 2010 15:30:31 +0000 (11:30 -0400)]
Merge "Add reset() to AbstractTreeIterator API"

14 years agoMerge "Improve DiffFormatter text file access"
Chris Aniszczyk [Thu, 2 Sep 2010 15:29:58 +0000 (11:29 -0400)]
Merge "Improve DiffFormatter text file access"

14 years agoMerge "Correct diff header formatting"
Chris Aniszczyk [Thu, 2 Sep 2010 15:28:33 +0000 (11:28 -0400)]
Merge "Correct diff header formatting"

14 years agoMerge "Remove duplicated code in DiffFormatter"
Chris Aniszczyk [Thu, 2 Sep 2010 15:20:43 +0000 (11:20 -0400)]
Merge "Remove duplicated code in DiffFormatter"

14 years agoMerge "Adding sorting to LongList"
Christian Halstrick [Thu, 2 Sep 2010 11:53:15 +0000 (07:53 -0400)]
Merge "Adding sorting to LongList"

14 years agoMerge "Use int[] rather than IntList for RawText hashes"
Christian Halstrick [Thu, 2 Sep 2010 11:46:50 +0000 (07:46 -0400)]
Merge "Use int[] rather than IntList for RawText hashes"

14 years agoAdding sorting to LongList 00/1500/1
Shawn O. Pearce [Thu, 2 Sep 2010 06:07:08 +0000 (23:07 -0700)]
Adding sorting to LongList

Sorting the array can be useful when its being used as a map of pairs
that are appended into the array and then later merge-joined against
another array of similar semantics.

Change-Id: I2e346ef5c99ed1347ec0345b44cda0bc29d03e90
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMerge "Add toString and improve Javadoc of NotIgnoredFilter"
Chris Aniszczyk [Thu, 2 Sep 2010 00:39:40 +0000 (20:39 -0400)]
Merge "Add toString and improve Javadoc of NotIgnoredFilter"

14 years agoUse int[] rather than IntList for RawText hashes 98/1498/1
Shawn O. Pearce [Wed, 1 Sep 2010 23:54:20 +0000 (16:54 -0700)]
Use int[] rather than IntList for RawText hashes

We know exactly how many lines we need by the time we compute our
per-line hashes, as we have already built the lines IntList to give
us the starting position of each line in the buffer.  Using that
we can properly size the array, and don't need the dynamic growing
feature of IntList.  So drop the indirection and just use a fixed
size array.

Change-Id: I5c8c592514692a8abff51e5928aedcf71e100365
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoRefactor Git API exceptions to a new package 77/1477/2
Chris Aniszczyk [Tue, 31 Aug 2010 20:46:58 +0000 (15:46 -0500)]
Refactor Git API exceptions to a new package

Create a new 'org.eclipse.jgit.api.errors' package to contain
exceptions related to using the Git porcelain API.

Change-Id: Iac1781bd74fbd520dffac9d347616c3334994470
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
14 years agoAdd toString and improve Javadoc of NotIgnoredFilter 95/1495/1
Shawn O. Pearce [Wed, 1 Sep 2010 22:22:48 +0000 (15:22 -0700)]
Add toString and improve Javadoc of NotIgnoredFilter

Today while debugging some TreeWalk related code I noticed this
filter did not have a toString(), making it harder to see what the
filter graph was at a glance in the debugger.  Add a toString()
for debugging to match other TreeFilters, and clean up the Javadoc
slightly so its a bit more clear about the purpose of the filter.

While we are mucking about with some of this code, simplify
the logic of include so its shorter and thus faster to read.
The pattern now more closely matches that of SkipWorkTreeFilter.

Change-Id: Iad433a1fa6b395dc1acb455aca268b9ce2f1d41b
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoIndexDiff honors Index entries' "skipWorkTree" flag. 47/1447/5
Marc Strapetz [Wed, 1 Sep 2010 14:02:18 +0000 (16:02 +0200)]
IndexDiff honors Index entries' "skipWorkTree" flag.

Change-Id: I428d11412130b64fc46d7052011f5dff3d653802
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMerge "Avoid double quotes in Git Config"
Shawn Pearce [Wed, 1 Sep 2010 22:02:44 +0000 (18:02 -0400)]
Merge "Avoid double quotes in Git Config"

14 years agoMerge "Add FS.detect() for detection of file system abstraction."
Shawn Pearce [Wed, 1 Sep 2010 21:59:54 +0000 (17:59 -0400)]
Merge "Add FS.detect() for detection of file system abstraction."

14 years agoAdd reset() to AbstractTreeIterator API 87/1487/1
Shawn O. Pearce [Wed, 1 Sep 2010 16:20:33 +0000 (09:20 -0700)]
Add reset() to AbstractTreeIterator API

This allows callers to force the iterator back to its starting point,
so it can be traversed again.  The default way to do this is to use
back(1) until first() is true, but this isn't very efficient for any
iterator.  All current implementations have better ways to implement
reset without needing to seek backwards.

Change-Id: Ia26e6c852fdac8a0e9c80ac72c8cca9d897463f4
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoImprove DiffFormatter text file access 86/1486/1
Shawn O. Pearce [Wed, 1 Sep 2010 03:09:14 +0000 (20:09 -0700)]
Improve DiffFormatter text file access

When we are asked to create a difference between two files the caller
really wants to see that output.  Instead of punting because a file
is too big to process, consider it to be binary.  This reduces the
accuracy of our output display, but makes it a lot more likely that
the formatter can still generate something semi-useful.

We set our default binary threshold to 50 MiB, which is the same
threshold that PackWriter uses before punting and deciding a file
is too big to delta compress.  Anything under this size we try to
load and process, anything over that size (or that won't allocate
in the heap) gets tagged as binary.

Change-Id: I69553c9ef96db7f2058c6210657f1181ce882335
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoCorrect diff header formatting 85/1485/1
Shawn O. Pearce [Wed, 1 Sep 2010 02:28:15 +0000 (19:28 -0700)]
Correct diff header formatting

When adding or deleting a file, we shouldn't ever prefix /dev/null
with the a/ or b/ prefixes.  Doing so is a mistake and confuses a
patch parser which handles /dev/null magically, while a/dev/null is
a file called null in the dev directory of the project.

Also when adding or deleting the "diff --git" line has the "real"
path on both sides, so we should see the following when adding the
file called foo:

  diff --git a/foo b/foo
  --- /dev/null
  +++ b/foo

The --- and +++ lines do not appear in a pure rename or copy delta,
C Git diff seems to omit these, so we now omit them as well.  We also
omit the index line when the ObjectIds are exactly equal.

Change-Id: Ic46892dea935ee8bdee29088aab96307d7ec6d3d
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoRemove duplicated code in DiffFormatter 84/1484/1
Shawn O. Pearce [Wed, 1 Sep 2010 01:40:10 +0000 (18:40 -0700)]
Remove duplicated code in DiffFormatter

Instead of trying to stream out the header, we can drop a redundant
code path by formatting the header into a temporary buffer and then
streaming out the actual line differences later.

Its a small amount of unnecessary work to buffer the file header,
but these are typically very tiny so the cost to format and reparse
is relatively low.

Change-Id: Id14a527a74ee0bd7e07f46fdec760c22b02d5bdf
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoMove DiffFormatter default initialization to fields 83/1483/1
Shawn O. Pearce [Wed, 1 Sep 2010 03:27:25 +0000 (20:27 -0700)]
Move DiffFormatter default initialization to fields

Other fields in this class are initialized in their declaration, make
the code consistent with itself and use only one style.

Change-Id: I49a007e97ba52faa6b89f7e4b1eec85dccac0fa4
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoCorrect Javadoc of DiffFormatter class 82/1482/1
Shawn O. Pearce [Wed, 1 Sep 2010 03:24:37 +0000 (20:24 -0700)]
Correct Javadoc of DiffFormatter class

This class does a lot more than just reflow a patch script, it now is
the primary means of creating a diff output.

Change-Id: I74467c9a53dc270ef8c84e7c75f388414ec8ba8f
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agodiff: Fix bad metaVar reference in --abbrev option 81/1481/1
Shawn O. Pearce [Wed, 1 Sep 2010 17:00:47 +0000 (10:00 -0700)]
diff: Fix bad metaVar reference in --abbrev option

Change-Id: If92545b731ff80bff071aee9bbd852bbd187c7c5
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoAdd FS.detect() for detection of file system abstraction. 80/1480/1
Marc Strapetz [Wed, 1 Sep 2010 15:14:16 +0000 (17:14 +0200)]
Add FS.detect() for detection of file system abstraction.

To give the user more control on which file system abstraction
should be used on Windows, FS.detect() may be configured
to assume a Cygwin installation or nor.

14 years agoAvoid double quotes in Git Config 52/1452/5
Mathias Kinzler [Wed, 1 Sep 2010 07:13:19 +0000 (09:13 +0200)]
Avoid double quotes in Git Config

Currently, if a branch is created that has special chars ('#' in the bug),
Config will surround the subsection name with double quotes during
it's toText method which will result in an invalid file after saving the
Config.

Bug: 318249
Change-Id: I0a642f52def42d936869e4aaaeb6999567901001
Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
14 years agoExtend DirCache test case to check "intent to add" flag. 75/1475/1
Marc Strapetz [Tue, 31 Aug 2010 19:54:30 +0000 (21:54 +0200)]
Extend DirCache test case to check "intent to add" flag.

14 years agoPartial support for index file format "3". 46/1446/4
Marc Strapetz [Tue, 31 Aug 2010 11:26:29 +0000 (13:26 +0200)]
Partial support for index file format "3".

Extended flags are processed and available via DirCacheEntry's
new isSkipWorkTree() and isIntentToAdd() methods.  "resolve-undo"
information is completely ignored since its an optional extension.

Change-Id: Ie6e9c6784c9f265ca3c013c6dc0e6bd29d3b7233

14 years agoMerge "DirCacheEntry: UPDATE_NEEDED should be in-core flag."
Shawn Pearce [Tue, 31 Aug 2010 18:29:03 +0000 (14:29 -0400)]
Merge "DirCacheEntry: UPDATE_NEEDED should be in-core flag."

14 years agoAdd test for RawParseUtils.formatBase10 73/1473/1
Shawn O. Pearce [Tue, 31 Aug 2010 18:26:26 +0000 (11:26 -0700)]
Add test for RawParseUtils.formatBase10

Change-Id: I3ad3533d03990c9e84186e53b9d755784b2a3758
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoFix RawParseUtils.formatBase10 to work with negative values 66/1466/2
Marc Strapetz [Tue, 31 Aug 2010 11:19:48 +0000 (13:19 +0200)]
Fix RawParseUtils.formatBase10 to work with negative values

Change-Id: Iffa220de76c5e180796fa46c4d67f52a1b3b2e35
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoRemove deprecated PersonIdent constructor 72/1472/1
Chris Aniszczyk [Tue, 31 Aug 2010 16:55:27 +0000 (11:55 -0500)]
Remove deprecated PersonIdent constructor

Change-Id: I3831de1b6df25a52df30d367f0216573e6ee6b53
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
14 years agoImprove MergeAlgorithm to produce smaller conflicts 70/1470/1
Christian Halstrick [Tue, 31 Aug 2010 15:14:07 +0000 (17:14 +0200)]
Improve MergeAlgorithm to produce smaller conflicts

The merge algorithm was reporting conflicts which where to big.

Example: The common base was "ABC", the "ours" version contained
"AB1C" (the addition of "1" after pos 2) and the "theirs" version also
contained "AB1C". We have two potentially conflicting edits in the
same region which happen to bring in exactly the same content. This
should not be a conflict - but was previously reported as
"AB<<<1===1>>>C".

This is fixed by checking every conflicting chunk whether the
conflicting regions have a common prefix or suffix and by removing
this regions from the conflict.

Change-Id: I4dc169b8ef7a66ec6b307e9a956feef906c9e15e
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
14 years agoDirCacheEntry: UPDATE_NEEDED should be in-core flag. 65/1465/1
Marc Strapetz [Tue, 31 Aug 2010 09:25:16 +0000 (11:25 +0200)]
DirCacheEntry: UPDATE_NEEDED should be in-core flag.

In correspondance to CGit, UPDATE_NEEDED flag should not be
written to disk. Furthermore, it currently intersects CGit's
CE_EXTENDED flag.

14 years agoFix build of JGit source bundle and feature 63/1463/2
Matthias Sohn [Tue, 31 Aug 2010 00:35:08 +0000 (02:35 +0200)]
Fix build of JGit source bundle and feature

Add local changes I missed to push with [1] which broke the JGit
build.

[1] http://egit.eclipse.org/r/#change,1442

Change-Id: I300bfa84c5d8b5128026869b694ef5da7b0d3a4a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
14 years agoLet Resolve be the default Merge strategy 62/1462/1
Christian Halstrick [Mon, 23 Aug 2010 15:07:03 +0000 (17:07 +0200)]
Let Resolve be the default Merge strategy

the merge command should use by default the "resolve" merge strategy.

Change-Id: I6c6973a3397cca12bd8a6bd950d04b1766a08b4c
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
14 years agoAdded merge strategy RESOLVE 26/1226/7
Christian Halstrick [Thu, 12 Aug 2010 13:19:18 +0000 (15:19 +0200)]
Added merge strategy RESOLVE

This adds the first merge strategy to JGit which does real
content-merges if necessary. The new merge strategy "resolve" takes as
input three commits: a common base, ours and theirs. It will simply takeover
changes on files which are only touched in ours or theirs. For files
touched in ours and theirs it will try to merge the two contents
knowing taking into account the specified common base.

Rename detection has not been introduced for now.

Change-Id: I49a5ebcdcf4f540f606092c0f1dc66c965dc66ba
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Stefan Lay <stefan.lay@sap.com>
14 years agoMerge "Add one more test to ReadTreeTest"
Chris Aniszczyk [Mon, 30 Aug 2010 20:59:15 +0000 (16:59 -0400)]
Merge "Add one more test to ReadTreeTest"

14 years agoWait for JIT optimization before measuring diff performance 49/1449/4
Matthias Sohn [Sun, 29 Aug 2010 21:41:10 +0000 (23:41 +0200)]
Wait for JIT optimization before measuring diff performance

On Mac OS X MyerDiffPerformanceTest was failing since during the
first few tests the JIT compiler is running in parallel slowing down
the tests. When setting the JVM option -Xbatch forcing the JIT to do
its work prior to running the code this effect can be avoided. Instead
we chose to run some tests without recording prior to the recorded
tests since relying on -X JVM parameters isn't portable across JVMs.

Use 10k * powers of 2 as sample size instead of odd numbers used
before and also improve formatting of performance readings.

Bug: 323766
Change-Id: I9a46d73f81a785f399d3cf5a90c8c0516526e048
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
14 years agoGenerate source plugin and source feature for jgit 42/1442/3
Matthias Sohn [Fri, 27 Aug 2010 23:18:20 +0000 (01:18 +0200)]
Generate source plugin and source feature for jgit

Change-Id: Ibc5a302078bfc01d9ee45a4c0ab0b79b2abd185a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
14 years agoImprove LargeObjectException reporting 60/1460/1
Shawn O. Pearce [Mon, 30 Aug 2010 18:53:25 +0000 (11:53 -0700)]
Improve LargeObjectException reporting

Use 3 different types of LargeObjectException for the 3 major ways
that we can fail to load an object.  For each of these use a unique
string translation which describes the root cause better than just
the ObjectId.name() does.

Change-Id: I810c98d5691b74af9fc6cbd46fc9879e35a7bdca
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoIndexPack: Use byte limited form of getCachedBytes 59/1459/1
Shawn O. Pearce [Mon, 30 Aug 2010 18:01:33 +0000 (11:01 -0700)]
IndexPack: Use byte limited form of getCachedBytes

Currently our algorithm requires that we have the delta base as
a contiguous byte array... but getCachedBytes() might not work
if the object is considered to be large by its underlying loader.
Use the limited form to obtain the object as a byte array instead.

Change-Id: I33f12a8811cb6a4a67396174733f209db8119b42
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoUndo translation of protocol string 'unpack error' 58/1458/1
Shawn O. Pearce [Mon, 30 Aug 2010 17:58:19 +0000 (10:58 -0700)]
Undo translation of protocol string 'unpack error'

This string is part of the network protocol, and isn't meant to
be translated into another language.  Clients actually scan for
the string "unpack error " off the wire and react magically to
this information.  If it were translated, they would instead have
a protocol exception, which isn't very useful when there is already
an error occurring.

Change-Id: Ia5dc8d36ba65ad2552f683bb637e80b77a7d92f0
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoAdd one more test to ReadTreeTest 50/1450/1
Christian Halstrick [Mon, 30 Aug 2010 07:07:59 +0000 (09:07 +0200)]
Add one more test to ReadTreeTest

Add an explicit test case to check that we don't
overwrite dirty files in case Head & Index are
equal.

Change-Id: I6266d0a449e55369d2d0a048694dca5565c5fcf3
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
14 years agoMerge "Buffer very large delta streams to reduce explosion of CPU work"
Shawn O. Pearce [Sun, 29 Aug 2010 00:31:24 +0000 (20:31 -0400)]
Merge "Buffer very large delta streams to reduce explosion of CPU work"

14 years agoRevert "Hide Maven target directories from Eclipse" 44/1444/2
Robin Rosenberg [Sat, 28 Aug 2010 07:45:23 +0000 (09:45 +0200)]
Revert "Hide Maven target directories from Eclipse"

This reverts commit db4c516f673e4c274e55adc27a95891c52a5aba8 since
it breaks compatibility with Eclipse 3.5 which can no longer import
the projects

Bug: 323390
Change-Id: I3cc91364a6747cfcb4c611a9be5258f81562f726

14 years agoBuffer very large delta streams to reduce explosion of CPU work 41/1441/1
Shawn O. Pearce [Fri, 27 Aug 2010 20:28:14 +0000 (13:28 -0700)]
Buffer very large delta streams to reduce explosion of CPU work

Large delta streams are unpacked incrementally, but because a delta
can seek to a random position in the base to perform a copy we may
need to inflate the base repeatedly just to complete one delta.
So work around it by copying the base to a temporary file, and then
we can read from that temporary file using random seeks instead.
Its far more efficient because we now only need to inflate the
base once.

This is still really ugly because we have to dump to a temporary
file, but at least the code can successfully process a large
file without throwing OutOfMemoryError.  If speed is an
issue, the user will need to increase the JVM heap and ensure
core.streamFileThreshold is set to a higher value, so we don't use
this code path as often.

Unfortunately we lose the "optimization" of skipping over portions
of a delta base that we don't actually need in the final result.
This is going to cause us to inflate and write to disk useless
regions that were deleted and do not appear in the final result.
We could later improve on our code by trying to flatten delta
instruction streams before we touch the bottom base object, and
then only store the portions of the base we really need for the
final result and that appear out-of-order.  Since that is some
pretty complex code I'm punting on it for now and just doing this
simple whole-object buffering.

Because the process umask might be permitting other users to read
files we create, we put the temporary buffers into $GIT_DIR/objects.
We can reasonably assume that if a reader can read our temporary
buffer file in that directory, they can also read the base pack
file we are pulling it from and therefore its not a security breach
to expose the inflated content in a file.  This requires a reader
to have write access to the repository, but only if the file is
really big.  I'd rather err on the side of caution here and refuse
to read a very big file into /tmp than to possibly expose a secured
content because the Java 5 JVM won't let us create a protected
temporary file that only the current user can access.

Change-Id: I66fb80b08cbcaf0f65f2db0462c546a495a160dd
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoAdd TagCommand 93/1293/11
Chris Aniszczyk [Thu, 12 Aug 2010 16:25:31 +0000 (11:25 -0500)]
Add TagCommand

A tag command is added to the Git porcelain API. Tests were
also added to stress test the tag command.

Change-Id: Iab282a918eb51b0e9c55f628a3396ff01c9eb9eb
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
14 years agoImplement a Dircache checkout (needed for merge) 25/825/18
Christian Halstrick [Fri, 11 Jun 2010 05:33:16 +0000 (07:33 +0200)]
Implement a Dircache checkout (needed for merge)

Implementation of a checkout (or 'git read-tree') operation which
works together with DirCache. This implementation does similar things
as WorkDirCheckout which main problem is that it works with deprecated
GitIndex. Since GitIndex doesn't support multiple stages of a file
which is required in merge situations this new implementation is
required to enable merge support.

Change-Id: I13f0f23ad60d98e5168118a7e7e7308e066ecf9c
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
14 years agoAdd getBaseCommit() to Merger 56/1356/3
Christian Halstrick [Fri, 20 Aug 2010 15:17:01 +0000 (17:17 +0200)]
Add getBaseCommit() to Merger

The Merger was was only exposing the merge base as an
AbstractTreeIterator. Since we need the merge base as
RevCommit to generate the merge result I expose it here.

Change-Id: Ibe846370a35ac9bdb0c97ce2e36b2287577fbcad
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoIncrease heap size for jgit tests 35/1435/2
Matthias Sohn [Thu, 26 Aug 2010 22:26:25 +0000 (00:26 +0200)]
Increase heap size for jgit tests

Otherwise PackFileTest.testDelta_LargeObjectChain() reproducibly
fails with OutOfMemoryError on Mac OS X 10.6.4.

Change-Id: I6a55ff9ba181102606a0d99ffd52392a1615a422
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
14 years agoRemove unused import 33/1433/1
Matthias Sohn [Thu, 26 Aug 2010 21:53:41 +0000 (23:53 +0200)]
Remove unused import

Change-Id: I22f5751720576475e5e1e04110268f6f7fb376b1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
14 years agoMerge "Fix parsing of multiple authors in PersonIdent."
Shawn Pearce [Thu, 26 Aug 2010 19:00:58 +0000 (15:00 -0400)]
Merge "Fix parsing of multiple authors in PersonIdent."

14 years agoMerge "Use JUnit4 for tests"
Shawn Pearce [Thu, 26 Aug 2010 18:50:05 +0000 (14:50 -0400)]
Merge "Use JUnit4 for tests"

14 years agoRun formatter on edited lines via save action 31/1431/1
Chris Aniszczyk [Thu, 26 Aug 2010 17:31:34 +0000 (12:31 -0500)]
Run formatter on edited lines via save action

Updates the project level settings to run the formatter
on save on only on the edited lines.

Change-Id: I26dd69d0c95e6d73f9fdf7031f3c1dbf3becbb79
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
14 years agoUse JUnit4 for tests 30/1430/1
Chris Aniszczyk [Thu, 26 Aug 2010 17:26:38 +0000 (12:26 -0500)]
Use JUnit4 for tests

We should use JUnit4 for tests. This patch updates
the MANIFEST.MF and respective launch configurations.

Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
14 years agoFix parsing of multiple authors in PersonIdent. 24/1324/5
Marc Strapetz [Thu, 19 Aug 2010 13:34:44 +0000 (15:34 +0200)]
Fix parsing of multiple authors in PersonIdent.

PersonIdent should be parsable for an invalid commit which
contains multiple authors, like "A <a@a.org>, B <b@b.org>".
PersonIdent(String) constructor now delegates to
RawParseUtils.parsePersonIdent().

Change-Id: Ie9798d36d9ecfcc0094ca795f5a44b003136eaf7

14 years agoIncrease temporary buffer for unit test 28/1428/1
Shawn O. Pearce [Thu, 26 Aug 2010 00:53:00 +0000 (17:53 -0700)]
Increase temporary buffer for unit test

Because we are using the large stream size, we have to be
above the STREAM_THRESHOLD constant, which I just increased.

Change-Id: I6f10ec8558d9f751d4b547fcae05af94f1c8866b
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoIncrease the default streaming threshold to 15 MiB 27/1427/1
Shawn O. Pearce [Thu, 26 Aug 2010 00:05:31 +0000 (17:05 -0700)]
Increase the default streaming threshold to 15 MiB

Applying deltas in the large streaming mode is horrifically slow.
Trying to pack icu4c is impossible because a single 11 MiB file
sits on top of a 15 MiB file though a 10 deep delta chain, which
results in this very slow inflate process.

Upping the default limit to 15 MiB lets us process this large in a
reasonable time, but its still sufficiently low enough to prevent
exploding the heap of a very large process like Eclipse or Gerrit
Code Review.

We have to revisit the streaming delta application process and do
something much smarter, like flatten the delta chain before we apply
it to the base.  But even that is ugly, I've seen a 155 MiB delta
sitting on top of a 450 MiB file to produce a 300 MiB result object.
If the chain is deep, we may have trouble flatting it down.

Change-Id: If5a0dcbf9d14ea683d75546f104b09bb8cd8fdbb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoFix reuse from pack file for REF_DELTA types 26/1426/1
Shawn O. Pearce [Wed, 25 Aug 2010 23:46:43 +0000 (16:46 -0700)]
Fix reuse from pack file for REF_DELTA types

We miscomputed the CRC32 checksum for a REF_DELTA type of object, by
not including the full 20 byte ObjectId of the delta base in the CRC
code we use when the delta is too large to go through our two faster
small reuse code paths.  This resulted in a corruption error during
packing, where the PackFile erroneously suspected the data was wrong
on the local filesystem and aborted writing, because the CRC didn't
match what we had read from the index.

Change-Id: I7d12cdaeaf2c83ddc11223ce0108d9bd6886e025
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoCleanup and correct resolve Javadoc 10/1410/2
Shawn O. Pearce [Wed, 25 Aug 2010 01:18:24 +0000 (18:18 -0700)]
Cleanup and correct resolve Javadoc

We didn't fully cover what we support and what we don't.  It was
also a bit hard to follow the syntaxes supported.  Clean that up
by documenting it.

Change-Id: I7b96fa6cbefcc2364a51f336712ad361ae42df2d
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoSupport parsing commit:path style blob references 09/1409/2
Shawn O. Pearce [Wed, 25 Aug 2010 00:52:26 +0000 (17:52 -0700)]
Support parsing commit:path style blob references

We can now resolve expressions that reference a path within a
commit, designating a specific revision of a specific tree or
file in the project.

Change-Id: Ie6a8be629d264d72209db894bd680c5900035cc0
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoSupport parsing git describe style output 08/1408/2
Shawn O. Pearce [Wed, 25 Aug 2010 00:35:52 +0000 (17:35 -0700)]
Support parsing git describe style output

We now match on the -gABBREV style output created by git describe
when its describing a non-tagged commit, and resolve that back to
the full ObjectId using the abbreviation resolution feature that
we already support.

Change-Id: Ib3033f9483d9e1c66c8bb721ff48d4485bcdaef1
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoRename T0008_testparserev to RepositoryResolveTest 07/1407/2
Shawn O. Pearce [Tue, 24 Aug 2010 23:45:53 +0000 (16:45 -0700)]
Rename T0008_testparserev to RepositoryResolveTest

Calling it by the old numerical numbering system makes it really
hard to find the test that tests Repository.resolve(String).

Change-Id: I92d0ecbc8d66ce21bfed08888eeedf1300ffa594
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoThrow AmbiguousObjectException during resolve if its ambiguous 03/1403/3
Shawn O. Pearce [Tue, 24 Aug 2010 23:26:40 +0000 (16:26 -0700)]
Throw AmbiguousObjectException during resolve if its ambiguous

Its wrong to return null if we are resolving an abbreviation and we
have proven it matches more than one object.  We know how to resolve
it if we had more nybbles, as there are two or more objects with the
same prefix.  Declare that to the caller quite clearly by giving them
an AmbiguousObjectException.

Change-Id: I01bb48e587e6d001b93da8575c2c81af3eda5a32
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
14 years agoComplete an abbreviation when formatting a patch 02/1402/3
Shawn O. Pearce [Tue, 24 Aug 2010 22:50:36 +0000 (15:50 -0700)]
Complete an abbreviation when formatting a patch

If we are given a DiffEntry header that already has abbreviated
ObjectIds on it, we may still be able to resolve those locally and
output the difference.  Try to do that through the new resolve API
on ObjectReader.

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