]> source.dussan.org Git - jgit.git/log
jgit.git
11 years agoRemove unused logger from RecursiveMerger 43/12243/1
Jonathan Nieder [Fri, 26 Apr 2013 17:16:09 +0000 (10:16 -0700)]
Remove unused logger from RecursiveMerger

JGit doesn't currently use java.util.logging.Logger.  Remove this
never-used Logger introduced in ab99b78ca08a (Implement recursive
merge strategy, 2013-02-21) to make that easier to see.

Change-Id: I92c578e7f3617085a667de7c992174057be3eb71

11 years agoMerge "status: Print conflict description for unmerged paths"
Robin Rosenberg [Thu, 25 Apr 2013 21:45:35 +0000 (17:45 -0400)]
Merge "status: Print conflict description for unmerged paths"

11 years agoDocument RevTag#getObject() that returned object is unparsed 01/12101/1
Robin Stocker [Mon, 22 Apr 2013 16:22:18 +0000 (18:22 +0200)]
Document RevTag#getObject() that returned object is unparsed

Change-Id: I238d388e40362721eecf37f64ad7d48a399ff129

11 years agoImprove class documentation of TagCommand 97/12097/1
Robin Stocker [Mon, 22 Apr 2013 13:35:10 +0000 (15:35 +0200)]
Improve class documentation of TagCommand

Change-Id: I9c636b927fa2d7cfbe1eb5535a9e702b2209f51d

11 years agoRevert "Add tests for FileUtils.delete and EMPTY_DIREECTORIES_ONLY" 76/12076/1
Shawn Pearce [Fri, 19 Apr 2013 19:01:58 +0000 (12:01 -0700)]
Revert "Add tests for FileUtils.delete and EMPTY_DIREECTORIES_ONLY"

This reverts commit 7aa54967a26cb027fe390ad1c624ebb30f9ac6d5.
The unit test dependend upon the specific order of names that
listFiles() returned members in. The order is completely undefined
and may differ even on different versions of Linux based systems.

A proper unit test for this code would have considered both cases,
where the deletion function was able to remove an empty subdirectory,
or fail to remove a subdirectory because a file was still present
within. This is not such a test.

Change-Id: Ib0a706fea01e4b1ed8c8e859247d247a1279b4bc

11 years agostatus: Print conflict description for unmerged paths 72/12072/1
Robin Stocker [Fri, 19 Apr 2013 17:44:24 +0000 (19:44 +0200)]
status: Print conflict description for unmerged paths

Prefix unmerged paths with conflict description (e.g. "both modified:"),
the same way C Git does.

Change-Id: I083cd191ae2ad3e2460aa4052774aed6e36c2699

11 years agoCreate constants in ConfigConstants for the "diff" section 31/11731/2
Robin Rosenberg [Sun, 7 Apr 2013 23:13:41 +0000 (01:13 +0200)]
Create constants in ConfigConstants for the "diff" section

Change-Id: I5cf5fe60374d1e94eb031488e4f92c8e521f41a6
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
11 years agoFix examples with refs/heads/ in RefSpec Javadoc 06/12006/2
Robin Stocker [Thu, 18 Apr 2013 08:55:23 +0000 (10:55 +0200)]
Fix examples with refs/heads/ in RefSpec Javadoc

Change-Id: I06c1c7242a1b4c8f499c27a598cca714803799b7
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
11 years agoIndexDiff: Provide stage state for conflicting entries 54/11354/3
Robin Stocker [Thu, 21 Mar 2013 00:39:04 +0000 (01:39 +0100)]
IndexDiff: Provide stage state for conflicting entries

Adds a new method getConflictingStageStates() which returns a
Map<String, StageState> (path to stage state). StageState is an enum for
all possible stage combinations (BOTH_DELETED, ADDED_BY_US, ...).

This can be used to implement the conflict text for unmerged paths in
output of "git status" or in EGit for decorations/hints.

Bug: 403697
Change-Id: Ib461640a43111b7df4a0debe92ff69b82171329c
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
11 years agoMerge "A deleted work tree file is not a conflict when merge wants to delete it"
Robin Rosenberg [Fri, 19 Apr 2013 11:39:39 +0000 (07:39 -0400)]
Merge "A deleted work tree file is not a conflict when merge wants to delete it"

11 years agoMerge "Untracked files should not be included in stash"
Robin Rosenberg [Fri, 19 Apr 2013 11:36:29 +0000 (07:36 -0400)]
Merge "Untracked files should not be included in stash"

11 years agoDo not export package org.eclipse.jgit from jgit tests 39/12039/2
Matthias Sohn [Thu, 18 Apr 2013 20:35:37 +0000 (22:35 +0200)]
Do not export package org.eclipse.jgit from jgit tests

Commit 3344b93c erroneously exported the package org.eclipse.jgit.lib
from the org.eclipse.jgit.test bundle which made this a split package
since the bundle org.eclipse.jgit exports the same package.

Split packages are evil in general and most probably caused the build
cycle errors observed recently when importing the jgit projects in
Eclipse [1].

[1] http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02012.html

Change-Id: I89919e56b928acdbff0b90e3919808025a8562c6
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoUntracked files should not be included in stash 40/12040/1
Robin Rosenberg [Thu, 18 Apr 2013 21:19:15 +0000 (23:19 +0200)]
Untracked files should not be included in stash

The previous code stashed untracked files and left them
in the work tree.

Bug: 403282
Change-Id: I71727addb2b55fb8e409cae2b6af8138b1ff7ef1

11 years agoRemove some unnecessary dependencies on FileRepostory 25/11925/2
Robin Rosenberg [Mon, 15 Apr 2013 22:05:41 +0000 (00:05 +0200)]
Remove some unnecessary dependencies on FileRepostory

Change-Id: Ib6ee3a2874a7e2240aa68f4ac32d00c4d1fab5ae
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
11 years agoMerge "Remove unused dependencies"
Robin Rosenberg [Thu, 18 Apr 2013 20:29:35 +0000 (16:29 -0400)]
Merge "Remove unused dependencies"

11 years agoImprove test coverage of AutoCRLF(In|Out)putStream 36/12036/2
Robin Stocker [Thu, 18 Apr 2013 19:55:35 +0000 (21:55 +0200)]
Improve test coverage of AutoCRLF(In|Out)putStream

Bug: 405672
Change-Id: I3894e98617fcee16dc2ac9853c203c62eb30c3ab
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
11 years agoMerge changes Id2848c16,I7621c434
Shawn Pearce [Wed, 17 Apr 2013 18:53:13 +0000 (14:53 -0400)]
Merge changes Id2848c16,I7621c434

* changes:
  Rescale "Compressing objects" progress meter by size
  Split delta search buckets by byte weight

11 years agoRescale "Compressing objects" progress meter by size 53/11953/2
Shawn Pearce [Tue, 16 Apr 2013 16:25:29 +0000 (09:25 -0700)]
Rescale "Compressing objects" progress meter by size

Instead of counting objects processed, count number of bytes added
into the window. This should rescale the progress meter so that 30%
complete means 30% of the total uncompressed content size has been
inflated and fed into the window.

In theory the progress meter should be more accurate about its
percentage complete/remaining fraction than with objects. When
counting objects small objects move the progress meter more rapidly
than large objects, but demand a smaller amount of work than large
objects being compressed.

Change-Id: Id2848c16a2148b5ca51e0ca1e29c5be97eefeb48

11 years agoSplit delta search buckets by byte weight 76/11876/6
Shawn Pearce [Tue, 16 Apr 2013 15:19:13 +0000 (08:19 -0700)]
Split delta search buckets by byte weight

Instead of assuming all objects cost the same amount of time to
delta compress, aggregate the byte size of objects in the list
and partition threads with roughly equal total bytes.

Before splitting the list select the N largest paths and assign
each one to its own thread. This allows threads to get through the
worst cases in parallel before attempting smaller paths that are
more likely to be splittable.

By running the largest path buckets first on each thread the likely
slowest part of compression is done early, while progress is still
reporting a low percentage. This gives users a better impression of
how fast the phase will run. On very complex inputs the slow part
is more likely to happen first, making a user realize its time to
go grab lunch, or even run it overnight.

If the worst sections are earlier, memory overruns may show up
earlier, giving the user a chance to correct the configuration and
try again before wasting large amounts of time. It also makes it
less likely the delta compression phase reaches 92% in 30 minutes
and then crawls for 10 hours through the remaining 8%.

Change-Id: I7621c4349b99e40098825c4966b8411079992e5f

11 years agoMerge "Support excluding objects during DFS compaction"
Shawn Pearce [Wed, 17 Apr 2013 18:19:21 +0000 (14:19 -0400)]
Merge "Support excluding objects during DFS compaction"

11 years agoSupport excluding objects during DFS compaction 62/11962/1
Shawn Pearce [Wed, 17 Apr 2013 00:54:23 +0000 (17:54 -0700)]
Support excluding objects during DFS compaction

By excluding objects the compactor can avoid storing objects that
are already well packed in the base GC packs, or any other pack
not being replaced by the current compaction operation.

For deltas the base object is still included even if the base exists
in another exclusion set.  This favors keeping deltas for recent
history, to support faster fetch operations for clients.

Change-Id: Ie822fe075fe5072fe3171450fda2f0ca507796a1

11 years agoMake recursive merge strategy the default merge strategy 91/11891/2
Matthias Sohn [Mon, 25 Mar 2013 02:39:58 +0000 (03:39 +0100)]
Make recursive merge strategy the default merge strategy

Use recursive merge as the default strategy since it can successfully
merge more cases than the resolve strategy can. This is also the default
in native Git.

Change-Id: I38fd522edb2791f15d83e99038185edb09fed8e1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoUpdate PackBitmapIndexRemapper to handle mappings not in the new pack. 10/11910/1
Colby Ranger [Mon, 15 Apr 2013 16:35:07 +0000 (09:35 -0700)]
Update PackBitmapIndexRemapper to handle mappings not in the new pack.

Previously, the code assumed all commits in the old pack would also
be present in the new pack. This assumption caused an
ArrayIndexOutOfBoundsException during remapping of ids. Fix the
iterator to only return entries that may be remapped. Furthermore,
update getBitmap() to return null if commit does not exist in the
new pack.

Change-Id: I065babe8cd39a7654c916bd01c7012135733dddf

11 years agoFix boundary conditions in AutoCRLFOutputStream 87/11887/2
Robin Rosenberg [Sun, 14 Apr 2013 17:15:53 +0000 (19:15 +0200)]
Fix boundary conditions in AutoCRLFOutputStream

This fixes some problems with inputs around the size of the internal
buffer in AutoCRLFOutputStream (8000).

Tests supplied by Robin Stocker.

Bug: 405672
Change-Id: I6147897290392b3bfd4040e8006da39c302a3d49

11 years agoNLS warning cleanup 85/11885/1
Robin Rosenberg [Sat, 13 Apr 2013 22:40:37 +0000 (00:40 +0200)]
NLS warning cleanup

Change-Id: Ia76aa02dd330a1f88096c2b059b363aa38d653e9

11 years agoMerge "Fix a possible NPE"
Robin Rosenberg [Sat, 13 Apr 2013 10:16:11 +0000 (06:16 -0400)]
Merge "Fix a possible NPE"

11 years agoMerge changes I845caede,Ie25c6d3a,I5caec313,Ib11ff99f,I9ccf20c3,Ic7826f29,I1bdd8b58...
Shawn Pearce [Fri, 12 Apr 2013 20:16:09 +0000 (16:16 -0400)]
Merge changes I845caede,Ie25c6d3a,I5caec313,Ib11ff99f,I9ccf20c3,Ic7826f29,I1bdd8b58,Idb84c1d7,I078841f9

* changes:
  Always attempt delta compression when reuseDeltas is false
  Avoid TemporaryBuffer.Heap on very small deltas
  Correct distribution of allowed delta size along chain length
  Split remaining delta work on path boundaries
  Replace DeltaWindow array with circularly linked list
  Micro-optimize copy instructions in DeltaEncoder
  Micro-optimize DeltaWindow primary loop
  Micro-optimize DeltaWindow maxMemory test to be != 0
  Mark DeltaWindowEntry methods final

11 years agoAlways attempt delta compression when reuseDeltas is false 66/11866/3
Shawn Pearce [Fri, 12 Apr 2013 19:59:02 +0000 (12:59 -0700)]
Always attempt delta compression when reuseDeltas is false

If reuseObjects=true but reuseDeltas=false the caller wants attempt
a delta for every object in the input list. Test for reuseDeltas
to ensure every object passes through the searchInWindow() method.

If no delta is possible for an object and it will be stored whole
(non-delta format), PackWriter may still reuse its content from any
source pack. This avoids an inflate()-deflate() cycle to recompress
the object contents.

Change-Id: I845caeded419ef4551ef1c85787dd5ffd73235d9

11 years agoAvoid TemporaryBuffer.Heap on very small deltas 07/11807/4
Shawn Pearce [Thu, 11 Apr 2013 07:49:42 +0000 (00:49 -0700)]
Avoid TemporaryBuffer.Heap on very small deltas

TemporaryBuffer is great when the output size is not known, but must
be bound by a relatively large upper limit that fits in memory, e.g.
64 KiB or 20 MiB.  The buffer gracefully supports growing storage by
allocating 8 KiB blocks and storing them in an ArrayList.

In a Git repository many deltas are less than 8 KiB.  Typical tree
objects are well below this threshold, and their deltas must be
encoded even smaller.

For these much smaller cases avoid the 8 KiB minimum allocation used
by TemporaryBuffer.  Instead allocate a very small OutputStream
writing to an array that is sized at the limit.

Change-Id: Ie25c6d3a8cf4604e0f8cd9a3b5b701a592d6ffca

11 years agoCorrect distribution of allowed delta size along chain length 06/11806/4
Shawn Pearce [Thu, 11 Apr 2013 07:30:15 +0000 (00:30 -0700)]
Correct distribution of allowed delta size along chain length

Nicolas Pitre discovered a very simple rule for selecting between two
different delta base candidates:

  - if based whole object, must be <= 50% of target
  - if at end of a chain, must be <= 1/depth * 50% of target

The rule penalizes deltas near the end of the chain, requiring them to
be very small in order to be kept by the packer.  This favors deltas
that are based on a shorter chain, where the read-time unpack cost is
much lower.  Fewer bytes need to be consulted from the source pack
file, and less copying is required in memory to rebuild the object.

Junio Hamano explained Nico's rule to me today, and this commit fixes
DeltaWindow to implement it as described.

When no base has been chosen the computation is simply the statements
denoted above.  However once a base with depth of 9 has been chosen
(e.g.  when pack.depth is limited to 10), a non-delta source may
create a new delta that is up to 10x larger than the already selected
base.  This reflects the intent of Nico's size distribution rule no
matter what order objects are visited in the DeltaWindow.

With this patch and my other patches applied, repacking JGit with:

  [pack]
    reuseObjects = false
    reuseDeltas = false
    depth = 50
    window = 250
    threads = 4
    compression = 9

  CGit (all) 5,711,735 bytes; real 0m13.942s user 0m47.722s [1]
  JGit heads 5,718,295 bytes; real 0m11.880s user 0m38.177s [2]
       rest      9,809 bytes

The improved JGit result for the head pack is only 6.4 KiB larger than
CGit's resulting pack.  This patch allowed JGit to find an additional
39.7 KiB worth of space savings.  JGit now also often runs 2s faster
than CGit, despite also creating bitmaps and pruning objects after the
head pack creation.

[1] time git repack -a -d -F --window=250 --depth=50
[2] time java -Xmx128m -jar jgit debug-gc

Change-Id: I5caec31359bf7248cabdd2a3254c84d4ee3cd96b

11 years agoSplit remaining delta work on path boundaries 38/11838/4
Shawn Pearce [Thu, 11 Apr 2013 22:32:07 +0000 (15:32 -0700)]
Split remaining delta work on path boundaries

When an idle thread tries to steal work from a sibling's remaining
toSearch queue, always try to split along a path boundary. This
avoids missing delta opportunities in the current window of the
thread whose work is being taken.

The search order is reversed to walk further down the chain from
current position, avoiding the risk of splitting the list within
the path the thread is currently processing.

When selecting which thread to split from use an accurate estimate
of the size to be taken. This avoids selecting a thread that has
only one path remaining but may contain more pending entries than
another thread with several paths remaining.

As there is now a race condition where the straggling thread can
start the next path before the split can finish, the stealWork()
loop spins until it is able to acquire a split or there is only
one path remaining in the siblings.

Change-Id: Ib11ff99f90a4d9efab24bf4a85342cc63203dba5

11 years agoRemove DFS locality ordering during packing 57/11857/2
Shawn Pearce [Fri, 12 Apr 2013 14:05:20 +0000 (07:05 -0700)]
Remove DFS locality ordering during packing

PackWriter generally chooses the order for objects when it builds the
object lists.  This ordering already depends on history information to
guide placing more recent objects first and historical objects last.

Allow PackWriter to make the basic ordering decisions, instead of
trying to override them.  The old approach of sorting the list caused
DfsReader to override any ordering change PackWriter might have tried
to make when repacking a repository.

This now better matches with WindowCursor's implementation, where
PackWriter solely determines the object ordering.

Change-Id: Ic17ab5631ec539f0758b962966c3a1823735b814

11 years agoReplace DeltaWindow array with circularly linked list 04/11804/2
Shawn Pearce [Thu, 11 Apr 2013 05:29:32 +0000 (22:29 -0700)]
Replace DeltaWindow array with circularly linked list

Typical window sizes are 10 and 250 (although others are accepted).
In either case the pointer overhead of 1 pointer in an array or
2 pointers for a double linked list is trivial.  A doubly linked
list as used here for window=250 is only another 1024 bytes on a
32 bit machine, or 2048 bytes on a 64 bit machine.

The critical search loops scan through the array in either the
previous direction or the next direction until the cycle is finished,
or some other scan abort condition is reached.  Loading the next
object's pointer from a field in the current object avoids the
branch required to test for wrapping around the edge of the array.
It also saves the array bounds check on each access.

When a delta is chosen the window is shuffled to hoist the currently
selected base as an earlier candidate for the next object. Moving
the window entry is easier in a double-linked list than sliding a
group of array entries.

Change-Id: I9ccf20c3362a78678aede0f0f2cda165e509adff

11 years agoMicro-optimize copy instructions in DeltaEncoder 03/11803/1
Shawn Pearce [Thu, 11 Apr 2013 08:11:11 +0000 (01:11 -0700)]
Micro-optimize copy instructions in DeltaEncoder

The copy instruction formatter should not to compute the shifts and
masks twice.  Instead compute them once and assume there is a register
available to store the temporary "b" for compare with 0.

Change-Id: Ic7826f29dca67b16903d8f790bdf785eb478c10d

11 years agoMicro-optimize DeltaWindow primary loop 02/11802/1
Shawn Pearce [Thu, 11 Apr 2013 04:27:54 +0000 (21:27 -0700)]
Micro-optimize DeltaWindow primary loop

javac and the JIT are more likely to understand a boolean being
used as a branch conditional than comparing int against 0 and 1.
Rewrite NEXT_RES and NEXT_SRC constants to be booleans so the
code is clarified for the JIT.

Change-Id: I1bdd8b587a69572975a84609c779b9ebf877b85d

11 years agoMicro-optimize DeltaWindow maxMemory test to be != 0 01/11801/1
Shawn Pearce [Thu, 11 Apr 2013 05:21:18 +0000 (22:21 -0700)]
Micro-optimize DeltaWindow maxMemory test to be != 0

Instead of using a compare-with-0 use a does not equal 0.
javac bytecode has a special instruction for this, as it
is very common in software. We can assume the JIT knows
how to efficiently translate the opcode to machine code,
and processors can do != 0 very quickly.

Change-Id: Idb84c1d744d2874517fd4bfa1db390e2dbf64eac

11 years agoMerge "Consider working tree changes when stashing newly added files"
Robin Rosenberg [Thu, 11 Apr 2013 06:06:54 +0000 (02:06 -0400)]
Merge "Consider working tree changes when stashing newly added files"

11 years agoMark DeltaWindowEntry methods final 00/11800/1
Shawn Pearce [Thu, 11 Apr 2013 04:19:46 +0000 (21:19 -0700)]
Mark DeltaWindowEntry methods final

This class and all of its methods are only package visible.
Clarify the methods as final for the benefit of the JIT to
inline trivial code.

Change-Id: I078841f9900dbf299fbe6abf2599f0208ae96856

11 years agoMerge changes Ideecc472,I2b12788a,I6cb9382d,I12cd3326,I200baa0b,I05626f2e,I65e45422
Shawn Pearce [Thu, 11 Apr 2013 00:56:13 +0000 (20:56 -0400)]
Merge changes Ideecc472,I2b12788a,I6cb9382d,I12cd3326,I200baa0b,I05626f2e,I65e45422

* changes:
  Increase PackOutputStream copy buffer to 64 KiB
  Tighten object header writing in PackOutuptStream
  Skip main thread test in ThreadSafeProgressMonitor
  Declare members of PackOutputStream final
  Always allocate the PackOutputStream copyBuffer
  Disable CRC32 computation when no PackIndex will be created
  Steal work from delta threads to rebalance CPU load

11 years agoMerge "LogCommand.all(): filter out refs that do not refer to commit objects"
Robin Rosenberg [Wed, 10 Apr 2013 21:30:18 +0000 (17:30 -0400)]
Merge "LogCommand.all(): filter out refs that do not refer to commit objects"

11 years agoMerge "LogCommand.all(), peel references before using them"
Robin Rosenberg [Wed, 10 Apr 2013 21:29:58 +0000 (17:29 -0400)]
Merge "LogCommand.all(), peel references before using them"

11 years agoIncrease PackOutputStream copy buffer to 64 KiB 85/11785/1
Shawn Pearce [Wed, 10 Apr 2013 20:05:58 +0000 (13:05 -0700)]
Increase PackOutputStream copy buffer to 64 KiB

Colby just pointed out to me the buffer was 16 KiB. This may
be very small for common objects. Increase to 64 KiB.

Change-Id: Ideecc4720655a57673252f7adb8eebdf2fda230d

11 years agoTighten object header writing in PackOutuptStream 84/11784/3
Shawn Pearce [Wed, 10 Apr 2013 17:17:25 +0000 (10:17 -0700)]
Tighten object header writing in PackOutuptStream

Most objects are written as OFS_DELTA with the base in the pack,
that is why this case comes first in writeHeader(). Rewrite the
condition to always examine this first and cache the PackWriter's
formatting flag for use of OFS_DELTA headers, in modern Git networks
this is true more often then it it is false.

Assume the cost of write() is high, especially due to entering the
MessageDigest to update the pack footer SHA-1 computation. Combine
the OFS_DELTA information as part of the header buffer so that the
entire burst is a single write call, rather than two relatively
small ones. Most OFS_DELTA headers are <= 6 bytes, so this rewrite
tranforms 2 writes of 3 bytes each into 1 write of ~6 bytes.

Try to simplify the objectHeader code to reduce branches and use
more local registers. This shouldn't really be necessary if the
compiler is well optimized, but it isn't very hard to clarify data
usage to either javac or the JIT, which may make it easier for the
JIT to produce better machine code for this method.

Change-Id: I2b12788ad6866076fabbf7fa11f8cce44e963f35

11 years agoSkip main thread test in ThreadSafeProgressMonitor 82/11782/3
Shawn Pearce [Wed, 10 Apr 2013 16:41:55 +0000 (09:41 -0700)]
Skip main thread test in ThreadSafeProgressMonitor

update(int) is only invoked from a worker thread, in JGit's case
this is DeltaTask. The Javadoc of TSPM suggests update should only
ever be used by a worker thread.

Skip the main thread check, saving some cycles on each run of the
progress monitor.

Change-Id: I6cb9382d71b4cb3f8e8981c7ac382da25304dfcb

11 years agoDeclare members of PackOutputStream final 81/11781/2
Shawn Pearce [Wed, 10 Apr 2013 16:37:19 +0000 (09:37 -0700)]
Declare members of PackOutputStream final

These methods cannot be sanely overridden anywhere. Most methods
are package visible only, or are private. A few public methods do
exist but there is no useful way to override them since creation
of PackOutputStream is managed by PackWriter and cannot be delegated.

Change-Id: I12cd3326b78d497c1f9751014d04d1460b46e0b0

11 years agoAlways allocate the PackOutputStream copyBuffer 80/11780/2
Shawn Pearce [Wed, 10 Apr 2013 16:33:56 +0000 (09:33 -0700)]
Always allocate the PackOutputStream copyBuffer

The getCopyBuffer() is almost always used during output. All known
implementations of ObjectReuseAsIs rely on the buffer to be present,
and the only sane way to get good performance from PackWriter is to
reuse objects during packing.

Avoid a branch and test when obtaining this buffer by making sure
it is always populated.

Change-Id: I200baa0bde5dcdd11bab7787291ad64535c9f7fb

11 years agoDisable CRC32 computation when no PackIndex will be created 79/11779/2
Shawn Pearce [Wed, 10 Apr 2013 16:30:23 +0000 (09:30 -0700)]
Disable CRC32 computation when no PackIndex will be created

If a server is streaming 3GiB worth of pack data to a client there
is no reason to compute the CRC32 checksum on the objects. The
CRC32 code computed by PackWriter is used only in the new index
created by writeIndex(), which is never invoked for the native Git
network protocols.

Object reuse may still compute its own CRC32 to verify the data
being copied from an existing pack has not been corrupted. This
check is done by the ObjectReader that implements ObjectReuseAsIs
and has no relationship to the CRC32 being skipped during output.

Change-Id: I05626f2e0d6ce19119b57d8a27193922636d60a7

11 years agoSteal work from delta threads to rebalance CPU load 39/11739/5
Shawn Pearce [Tue, 9 Apr 2013 01:11:30 +0000 (18:11 -0700)]
Steal work from delta threads to rebalance CPU load

If the configuration wants to run 4 threads the delta search work
is initially split somewhat evenly across the 4 threads. During
execution some threads will finish early due to the work not being
split fairly, as the initial partitions were based on object count
and not cost to inflate or size of DeltaIndex.

When a thread finishes early it now tries to take 50% of the work
remaining on a sibling thread, and executes that before exiting.
This repeats as each thread completes until a thread has only 1
object remaining.

Repacking Blink, Chromium's new fork of WebKit (2.2M objects 3.9G):

  [pack]
    reuseDeltas = false
    reuseObjects = false
    depth = 50
    threads = 8
    window = 250
    windowMemory = 800m

  before: ~105% CPU after 80%
  after:  >780% CPU to 100%

Change-Id: I65e45422edd96778aba4b6e5a0fd489ea48e8ca3

11 years agoConsider working tree changes when stashing newly added files 57/11757/3
Robin Rosenberg [Tue, 9 Apr 2013 19:22:18 +0000 (21:22 +0200)]
Consider working tree changes when stashing newly added files

Bug: 402396
Change-Id: I50ff707c0c9abcab3f98eea21aaa6e824f7af63a

11 years agoRemove unused dependencies 48/11748/3
Matthias Sohn [Tue, 9 Apr 2013 14:39:01 +0000 (16:39 +0200)]
Remove unused dependencies

Change-Id: I3cd161ac360a2e2635bffe309725a41c9527694e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoMerge "clean up merge squash and no-commit messages in pgm"
Christian Halstrick [Tue, 9 Apr 2013 07:09:33 +0000 (03:09 -0400)]
Merge "clean up merge squash and no-commit messages in pgm"

11 years agoAdd a constant for info/exclude 64/11564/3
Robin Rosenberg [Fri, 29 Mar 2013 23:03:08 +0000 (00:03 +0100)]
Add a constant for info/exclude

Change-Id: Ifd537ce4e726cb9460ea332f683428689bd3d7f4

11 years agoMerge changes I8445070d,I38f10d62,I2af0bf68
Matthias Sohn [Mon, 8 Apr 2013 21:25:01 +0000 (17:25 -0400)]
Merge changes I8445070d,I38f10d62,I2af0bf68

* changes:
  Fix plugin provider names to conform with release train requirement
  Add missing @since tags for new API methods
  DfsReaderOptions are options for a DFS stored repository

11 years agoFix plugin provider names to conform with release train requirement 35/11735/1
Matthias Sohn [Mon, 8 Apr 2013 20:54:45 +0000 (22:54 +0200)]
Fix plugin provider names to conform with release train requirement

According to release train requirements [1] the provider name for all
artifacts of Eclipse projects is "Eclipse <project name>".

[1] http://wiki.eclipse.org/Development_Resources/HOWTO/Release_Reviews#Checklist

Change-Id: I8445070d1d96896d378bfc49ed062a5e7e0f201f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoA deleted work tree file is not a conflict when merge wants to delete it 32/11732/2
Robin Rosenberg [Mon, 8 Apr 2013 20:05:06 +0000 (22:05 +0200)]
A deleted work tree file is not a conflict when merge wants to delete it

Bug: 405199
Change-Id: I4b2ef3dc432d2fad8a6fabd1c8aec407b5c8c5ac
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
11 years agoclean up merge squash and no-commit messages in pgm 39/11639/2
Tomasz Zarna [Thu, 4 Apr 2013 14:31:07 +0000 (16:31 +0200)]
clean up merge squash and no-commit messages in pgm

Change-Id: Iffa6e8752fbd94f3ef69f49df772be82e3da5d05

11 years agoDetect and handle a checkout conflict during merge nicely 00/11700/2
Robin Rosenberg [Sat, 6 Apr 2013 12:03:24 +0000 (14:03 +0200)]
Detect and handle a checkout conflict during merge nicely

Report the conflicting files nicely and inform the user.

Change-Id: I75d464d4156d10c6cc6c7ce5a321e2c9fb0df375

11 years agoAdd missing @since tags for new API methods 08/11708/3
Matthias Sohn [Sun, 7 Apr 2013 21:17:02 +0000 (23:17 +0200)]
Add missing @since tags for new API methods

Change-Id: I38f10d622c30f19d1154a4901477e844cb411707
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoDfsReaderOptions are options for a DFS stored repository 07/11707/1
Matthias Sohn [Wed, 3 Apr 2013 22:40:33 +0000 (00:40 +0200)]
DfsReaderOptions are options for a DFS stored repository

Change-Id: I2af0bf686188f1402fb53bf6dbe0ecb228069ace
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoSupport cutting existing delta chains longer than the max depth 85/11685/1
Shawn Pearce [Fri, 5 Apr 2013 17:02:01 +0000 (10:02 -0700)]
Support cutting existing delta chains longer than the max depth

Some packs built by JGit have incredibly long delta chains due to a
long standing bug in PackWriter. Google has packs created by JGit's
DfsGarbageCollector with chains of 6000 objects long, or more.

Inflating objects at the end of this 6000 long chain is impossible
to complete within a reasonable time bound. It could take a beefy
system hours to perform even using the heavily optimized native C
implementation of Git, let alone with JGit.

Enable pack.cutDeltaChains to be set in a configuration file to
permit the PackWriter to determine the length of each delta chain
and clip the chain at arbitrary points to fit within pack.depth.

Delta chain cycles are still possible, but no attempt is made to
detect them. A trivial chain of A->B->A will iterate for the full
pack.depth configured limit (e.g. 50) and then pick an object to
store as non-delta.

When cutting chains the object list is walked in reverse to try
and take advantage of existing chain computations. The assumption
here is most deltas are near the end of the list, and their bases
are near the front of the list. Going up from the tail attempts to
reuse chainLength computations by relying on the memoized value in
the delta base.

The chainLength field in ObjectToPack is overloaded into the depth
field normally used by DeltaWindow. This is acceptable because the
chain cut happens before delta search, and the chainLength is reset
to 0 if delta search will follow.

Change-Id: Ida4fde9558f3abbbb77ade398d2af3941de9c812

11 years agoMicro-optimize reuseDeltaFor in PackWriter 84/11684/1
Shawn Pearce [Fri, 5 Apr 2013 16:42:29 +0000 (09:42 -0700)]
Micro-optimize reuseDeltaFor in PackWriter

This switch is called mostly for OBJ_TREE and OBJ_BLOB types, which
typically make up 66% of the objects in a repository. Simplify the
test for these common types by testing for the one bit they have in
common and returning early.

Object type 5 is currently undefined. In the old code it would hit
the default and return true. In the new code it will match the early
case and also return true. In either implementation 5 should never show
up as it is not a valid type known to Git.

Object type 6 OFS_DELTA is not permitted to be supplied here.
Object type 7 REF_DELTA is not permitted to be supplied here.

Change-Id: I0ede8acee928bb3e73c744450863942064864e9c

11 years agoStatic import OBJ_* constants into PackWriter 83/11683/1
Shawn Pearce [Fri, 5 Apr 2013 16:38:04 +0000 (09:38 -0700)]
Static import OBJ_* constants into PackWriter

Shortens most of the code that touches the objectLists.

Change-Id: Ib14d366dd311e544e7ba50e9ce07a6f3ce0cf254

11 years agoRenumber internal ObjectToPack flags 69/11669/1
Shawn Pearce [Fri, 5 Apr 2013 02:43:12 +0000 (19:43 -0700)]
Renumber internal ObjectToPack flags

Now that WANT_WRITE is gone renumber the flags to move the unused
bit next to the type. Recluster AS_IS and DELTA_ATTEMPTED to be
next to each other since these bits are tested as a pair.

Change-Id: I42994b5ff1f67435e15c3f06d02e3b82141e8f08

11 years agoMove wantWrite flag to be special offset 1 68/11668/1
Shawn Pearce [Fri, 5 Apr 2013 00:50:32 +0000 (17:50 -0700)]
Move wantWrite flag to be special offset 1

Free up the WANT_WRITE flag in ObjectToPack by switching the test
to use the special offset value of 1. The Git pack file format
calls for the first 4 bytes to be 'PACK', which means any object
must start at an offset >= 4. Current versions require another 8
bytes in the header, placing the first object at offset = 12.

So offset = 1 is an invalid location for an object, and can be
used as a marker signal to indicate the writing loop has tried
to write the object, but recursed into the base first. When an
object is visited with offset == 1 it means there is a cycle in
the delta base path, and the cycle must be broken.

Change-Id: I2d05b9017c5f9bd9464b91d43e8d4b4a085e55bc

11 years agoDon't delta compress garbage objects 65/11665/1
Shawn Pearce [Thu, 4 Apr 2013 22:23:08 +0000 (15:23 -0700)]
Don't delta compress garbage objects

Garbage is randomly ordered and unlikely to delta compress against
other garbage. Disable delta compression allowing objects to switch
to whole form when moving to the garbage pack.

Because the garbage is not well compressed assume deltas were not
attempted during a normal GC cycle.

Override the reuse settings, garbage that can be reused should be
reused as-is into the garbage pack rather than switching something
like the compression level during a GC. It is intended that garbage
will eventually be removed from the repository so expending CPU
time on a compression switch is not worthwhile.

Change-Id: I0e8e58ee99e5011d375d3d89c94f2957de8402b9

11 years agoDelete broken DFS read-ahead support 64/11664/1
Shawn Pearce [Thu, 4 Apr 2013 22:06:57 +0000 (15:06 -0700)]
Delete broken DFS read-ahead support

This implementation has been proven to deadlock in production server
loads. Google has been running with it disabled for a quite a while,
as the bugs have been difficult to identify and fix.

Instead of suggesting it works and is useful, drop the code. JGit
should not advertise support for functionality that is known to
be broken.

In a few of the places where read-ahead was enabled by DfsReader
there is more information about what blocks should be loaded when.
During object representation selection, or size lookup, or sending
object as-is to a PackWriter, or sending an entire pack as-is the
reader knows exactly which blocks are required in the cache, and it
also can compute when those will be needed. The broken read-ahead
code was stupid and just read a fixed amount ahead of the current
offset, which can waste IOs if more precise data was available.

DFS systems are usually slow to respond so read-ahead is still
a desired feature, but it needs to be rebuilt from scratch and
make better use of the offset information.

Change-Id: Ibaed8288ec3340cf93eb269dc0f1f23ab5ab1aea

11 years agoFix a possible NPE 61/11661/3
Robin Rosenberg [Thu, 4 Apr 2013 22:07:20 +0000 (00:07 +0200)]
Fix a possible NPE

String.valueOf is an overloaded and the compiler unfortunately picks
the wrong one since null contains no type information.

Change-Id: Icd197eaa046421f3cfcc5bf3e7601dc5bc7486b6

11 years agoOptimize DFS object reuse selection code 55/11655/4
Shawn Pearce [Thu, 4 Apr 2013 19:18:22 +0000 (12:18 -0700)]
Optimize DFS object reuse selection code

Rewrite this complicated logic to examine each pack file exactly
once. This reduces thrashing when there are many large pack files
present and the reader needs to locate each object's header.

The intermediate temporary list is now smaller, it is bounded to
the same length as the input object list. In the prior version of
this code the list contained one entry for every representation of
every object being packed.

Only one representation object is allocated, reducing the overall
memory footprint to be approximately one reference per object found
in the current pack file (the pointer in the BlockList). This saves
considerable working set memory compared to the prior version that
made and held onto a new representation for every ObjectToPack.

Change-Id: I2c1f18cd6755643ac4c2cf1f23b5464ca9d91b22

11 years agoSimplify size test in PackWriter 54/11654/1
Shawn Pearce [Thu, 4 Apr 2013 18:23:16 +0000 (11:23 -0700)]
Simplify size test in PackWriter

Clip the configured limit to Integer.MAX_VALUE at the top of the
loop, saving a compare branch per object considered. This can cut
2M branches out of a repacking of the Linux kernel.

Rewrite the logic so the primary path is to match the conditional;
most objects are larger than BLKSZ (16 bytes) and less than limit.
This may help branch prediction on CPUs if the CPU tries to assume
execution takes the side of the branch and not the second.

Change-Id: I5133d1651640939afe9fbcfd8cfdb59965c57d5a

11 years agoDeclare critical exposed methods of ObjectToPack final 53/11653/1
Shawn Pearce [Thu, 4 Apr 2013 18:17:07 +0000 (11:17 -0700)]
Declare critical exposed methods of ObjectToPack final

There is no reasonable way for a subclass to correctly override and
implement these methods. They depend on internal state that cannot
otherwise be managed.

Most of these methods are also in critical paths of PackWriter.
Declare them final so subclasses do not try to replace them,
and so the JIT knows the smaller ones can be safely inlined.

Change-Id: I9026938e5833ac0b94246d21c69a143a9224626c

11 years agoDeclare internal flag accessors of ObjectToPack final 52/11652/1
Shawn Pearce [Thu, 4 Apr 2013 18:14:38 +0000 (11:14 -0700)]
Declare internal flag accessors of ObjectToPack final

None of these methods should ever be overridden at runtime by an
extension class. Given how small they are the JIT should perform
inlining where reasonable. Hint this is possible by marking all
methods final so its clear no replacement can be loaded later on.

Change-Id: Ia75a5d36c6bd25b24169e2bdfa360c8f52b669cd

11 years agoRemove unused method isDeltaAttempted() 51/11651/1
Shawn Pearce [Thu, 4 Apr 2013 18:03:30 +0000 (11:03 -0700)]
Remove unused method isDeltaAttempted()

This flag is never checked on its own. It is only checked as part
of a pair through the doNotAttemptDelta() method. Delete the method
so there is less confusion about the flag being used on its own.

Change-Id: Id7088caa649599f4f11d633412c2a2af0fd45dd8

11 years agoSimplify setDoNotDelta() to always set the flag 50/11650/1
Shawn Pearce [Thu, 4 Apr 2013 17:53:22 +0000 (10:53 -0700)]
Simplify setDoNotDelta() to always set the flag

This method is only invoked with true as the argument.
Remove the unnecessary parameter and branch, making
the code easier for the JIT to optimize.

Change-Id: I68a9cd82f197b7d00a524ea3354260a0828083c6

11 years agoAdd the no-commit option to MergeCommand 45/4945/6
Tomasz Zarna [Thu, 12 Jan 2012 17:32:53 +0000 (18:32 +0100)]
Add the no-commit option to MergeCommand

Added also tests and the associated option for the command line Merge
command.

Bug: 335091
Change-Id: Ie321c572284a6f64765a81674089fc408a10d059
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoMerge "Fix PathFilterGroup not to throw StopWalkException too early"
Christian Halstrick [Thu, 4 Apr 2013 07:42:25 +0000 (03:42 -0400)]
Merge "Fix PathFilterGroup not to throw StopWalkException too early"

11 years agoMerge "Indicate initial commit on a branch in the reflog"
Christian Halstrick [Thu, 4 Apr 2013 07:41:56 +0000 (03:41 -0400)]
Merge "Indicate initial commit on a branch in the reflog"

11 years agoFix PathFilterGroup not to throw StopWalkException too early 97/11597/3
Robin Rosenberg [Tue, 2 Apr 2013 07:00:58 +0000 (09:00 +0200)]
Fix PathFilterGroup not to throw StopWalkException too early

Due to the Git internal sort order a directory is sorted as if it ended
with a '/', this means that the path filter didn't set the last possible
matching entry to the correct value. In the reported issue we had the
following filters.

org.eclipse.jgit.console
org.eclipse.jgit

As an optimization we throw a StopWalkException when the walked tree
passes the last possible filter, which was this:
org.eclipse.jgit.console

Due to the git sorting order, the tree was processed in this order:
org.eclipse.jgit.console
org.eclipse.jgit.test
org.eclipse.jgit

At org.eclipse.jgit.test we threw the StopWalkException preventing the
walk from completing successfully.

A correct last possible match should be:
org.eclipse.jgit/

For simplicit we define it as:
org/eclipse/jgit/

This filter would be the maximum if we also had e.g. org and org.eclipse
in the filter, but that would require more work so we simply replace all
characters lower than '/' by a slash.

We believe the possible extra walking does not not warrant the extra
analysis.

Bug: 362430
Change-Id: I4869019ea57ca07d4dff6bfa8e81725f56596d9f

11 years agoIndicate initial commit on a branch in the reflog 65/11565/4
Robin Rosenberg [Fri, 29 Mar 2013 22:59:21 +0000 (23:59 +0100)]
Indicate initial commit on a branch in the reflog

Bug: 393463
Change-Id: I4733d6f719bc0dc694e7a6a6ad2092de6364898c

11 years agoLogCommand.all(): filter out refs that do not refer to commit objects 69/11569/1
Arthur Baars [Sun, 31 Mar 2013 14:28:47 +0000 (15:28 +0100)]
LogCommand.all(): filter out refs that do not refer to commit objects

 1. I have authored 100% of the content I'm contributing,
 2. I have the rights to donate the content to Eclipse,
 3. I contribute the content under the EDL

Change-Id: I48b1828e0b1304f76276ec07ebac7ee9f521b194

11 years agoLogCommand.all(), peel references before using them 13/10813/5
Arthur Baars [Mon, 4 Mar 2013 11:14:16 +0000 (11:14 +0000)]
LogCommand.all(), peel references before using them

Problem:
LogCommand.all() throws an IncorrectObjectTypeException when
there are tag references, and the repository does not contain
the file "packed-refs". It seems that the references were not properly
peeled before being added to the markStart() method.

Solution:
Call getRepository().peel() on every Ref that has isPeeled()==false
in LogCommand.all() .

Added test case for LogCommand.all() on repo with a tag.

 1. I have authored 100% of the content I'm contributing,
 2. I have the rights to donate the content to Eclipse,
 3. I contribute the content under the EDL

Bug: 402025
Change-Id: Idb8881eeb6ccce8530f2837b25296e8e83636eb7

11 years agoSpeed up clone/fetch with large number of refs 48/10448/4
Robin Rosenberg [Mon, 18 Feb 2013 19:25:00 +0000 (20:25 +0100)]
Speed up clone/fetch with large number of refs

Instead of re-reading all refs after each update, execute
the deletes first, then read all refs once and perform
the check for conflicting ref names in memory.

Change-Id: I17d0b3ccc27f868c8497607d8e57bf7082e65ba3

11 years agoMerge "When renaming the lock file succeeds the lock isn't held anymore"
Robin Rosenberg [Thu, 28 Mar 2013 19:57:38 +0000 (15:57 -0400)]
Merge "When renaming the lock file succeeds the lock isn't held anymore"

11 years agoFix CommitCommand amend mode to preserve parent order 53/11553/1
Shawn Pearce [Thu, 28 Mar 2013 17:58:21 +0000 (13:58 -0400)]
Fix CommitCommand amend mode to preserve parent order

Change-Id: I476921ff8dfa6a357932d42ee59340873502b582

11 years agoFixed parsing of URI with a IPv6-address 28/9228/2
Andreas König [Thu, 13 Dec 2012 16:43:59 +0000 (17:43 +0100)]
Fixed parsing of URI with a IPv6-address

Allowed ipv6-address in a uri like:
  http://[::1]:8080/repo.git

Change-Id: Ia00a20f694b2e9314892df77f9b11f551bb1d34e
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
11 years agoNew functions to facilitate the writing of CLI test cases 63/5963/6
François Rey [Thu, 13 Sep 2012 22:11:18 +0000 (00:11 +0200)]
New functions to facilitate the writing of CLI test cases

Writing CLI test cases is tedious because of all the formatting and
escaping subtleties needed when comparing actual output with what's
expected. While creating a test case the two new functions are to be
used instead of the existing execute() in order to prepare the correct
command and expected output and to generate the corresponding test code
that can be pasted into the test case function.

Change-Id: Ia66dc449d3f6fb861c300fef8b56fba83a56c94c
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
11 years agoMerge "File.renameTo behaves differently on Unix and Windows"
Matthias Sohn [Wed, 27 Mar 2013 13:09:04 +0000 (09:09 -0400)]
Merge "File.renameTo behaves differently on Unix and Windows"

11 years agoMerge "Extend FileUtils.rename to common git semantics"
Matthias Sohn [Wed, 27 Mar 2013 13:03:23 +0000 (09:03 -0400)]
Merge "Extend FileUtils.rename to common git semantics"

11 years agoWhen renaming the lock file succeeds the lock isn't held anymore 98/11498/1
Matthias Sohn [Tue, 26 Mar 2013 20:20:19 +0000 (21:20 +0100)]
When renaming the lock file succeeds the lock isn't held anymore

This wrong book-keeping caused IOExceptions to be thrown because
LockFile.unlock() erroneously tried to delete the non-existing lock
file. These IOExeptions were hidden since they were silently caught.

Change-Id: If42b6192d92c5a2d8f2bf904b16567ef08c32e89
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoAlways add FileExt to DfsPackDescription 82/11482/1
Shawn Pearce [Tue, 26 Mar 2013 17:57:19 +0000 (13:57 -0400)]
Always add FileExt to DfsPackDescription

Instead of forcing the implementation of the DFS backend to handle
making sure the extension bits are set correctly, have the common
callers in JGit set the extension at the same time they supply the
file sizes to the pack description. This simplifies assumptions for
an implementation of the DFS backend.

Change-Id: I55142ad8ea08a3e2e8349f72b3714578eba9c342

11 years agoFile.renameTo behaves differently on Unix and Windows 21/11321/4
Robin Rosenberg [Tue, 19 Mar 2013 13:19:28 +0000 (14:19 +0100)]
File.renameTo behaves differently on Unix and Windows

On Windows renameTo will not overwrite a file, so it must be deleted
first. The fix for Bug 402834 did not account for that.

Bug: 403685
Change-Id: I3453342c17e064dcb50906a540172978941a10a6

11 years agoExtend FileUtils.rename to common git semantics 14/11414/3
Robin Rosenberg [Sun, 24 Mar 2013 00:06:29 +0000 (01:06 +0100)]
Extend FileUtils.rename to common git semantics

Unlike the OS or Java rename this method will (on *nix) try (on Windows)
replace the target with the source provided the target does not exist,
the target does exist and is a file, or if it is a directory which only
contains directories. In the latter case the directory hierarchy will be
deleted.
If the initial rename fails and the target is an existing file the the
target file will be deleted first and then the rename is retried.

Change-Id: Iae75c49c85445ada7795246a02ce02f7c248d956
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
11 years agoMerge "Add tests for FileUtils.delete and EMPTY_DIREECTORIES_ONLY"
Christian Halstrick [Sun, 24 Mar 2013 22:59:31 +0000 (18:59 -0400)]
Merge "Add tests for FileUtils.delete and EMPTY_DIREECTORIES_ONLY"

11 years agoUpdate build to Tycho 0.17 16/11416/1
Matthias Sohn [Sun, 24 Mar 2013 03:31:23 +0000 (04:31 +0100)]
Update build to Tycho 0.17

Change-Id: I92c9757a37644ec48ed1d785f4dacd6c44276632
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoAdd tests for FileUtils.delete and EMPTY_DIREECTORIES_ONLY 12/11412/3
Robin Rosenberg [Sat, 23 Mar 2013 23:49:23 +0000 (00:49 +0100)]
Add tests for FileUtils.delete and EMPTY_DIREECTORIES_ONLY

Change-Id: I54a46c29df5eafc7739a6ef29e5dc80fa2f6d9ba

11 years agoSimpleHttpServer API shouldn't expose internals 01/11401/1
Matthias Sohn [Fri, 22 Mar 2013 20:36:10 +0000 (21:36 +0100)]
SimpleHttpServer API shouldn't expose internals

Change-Id: I5963ae720f33cb148de08b4c64d02c81d6791139
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoGrant access to jgit internals to junit and http.server bundles 00/11400/1
Matthias Sohn [Fri, 22 Mar 2013 20:35:16 +0000 (21:35 +0100)]
Grant access to jgit internals to junit and http.server bundles

Change-Id: Ib34f9635b4d060f5d17a6c823ec91af1d934a180
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoAdd missing @since tags 99/11399/1
Matthias Sohn [Fri, 22 Mar 2013 20:15:48 +0000 (21:15 +0100)]
Add missing @since tags

Change-Id: I6b20d78e6bd1f245fdca331554c106f8bae44b9c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoFix @since tags in JGit, version 2.4 never existed 53/11353/4
Tomasz Zarna [Wed, 20 Mar 2013 22:48:34 +0000 (23:48 +0100)]
Fix @since tags in JGit, version 2.4 never existed

Change-Id: Iaca88ec28b412e6b58e7b39a0762ba54b25f9471
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
11 years agoMerge changes If98b0b97,I7c9c09b4
Shawn Pearce [Thu, 21 Mar 2013 07:52:33 +0000 (03:52 -0400)]
Merge changes If98b0b97,I7c9c09b4

* changes:
  Add convenience factory method for most used builder pattern
  Don't use internal type FileRepository in public API

11 years agoAllow users to show server messages while pushing 32/9732/10
André Dietisheim [Fri, 1 Feb 2013 14:58:44 +0000 (15:58 +0100)]
Allow users to show server messages while pushing

Allow users to provide their OutputStream (via Transport#
push(monitor, refUpdates, out)) so that server messages can be written
to it (in SideBandInputStream) while they're coming in.

CQ: 7065
Bug: 398404
Change-Id: I670782784b38702d52bca98203909aca0496d1c0
Signed-off-by: Andre Dietisheim <andre.dietisheim@gmail.com>
Signed-off-by: Chris Aniszczyk <zx@twitter.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>