]> source.dussan.org Git - jgit.git/log
jgit.git
8 years agoRemove BitmapRevFilter.getCountOfLoadedCommits 29/59629/2
Jonathan Nieder [Wed, 4 Nov 2015 05:42:28 +0000 (21:42 -0800)]
Remove BitmapRevFilter.getCountOfLoadedCommits

The count of loaded commits is equal to the number of commits returned
by the walk.  Simplify BitmapRevFilter by counting them in the caller.

Change-Id: Ia95da47831d9e89d6f8068470ec4529aaabfa7dd

8 years agoMake BitmapBuilder.getBitmapIndex public 28/59628/2
Jonathan Nieder [Wed, 4 Nov 2015 07:20:14 +0000 (23:20 -0800)]
Make BitmapBuilder.getBitmapIndex public

Every Bitmap in current JGit code has an associated BitmapIndex.  Make
it public in BitmapBuilder to make retrieving bitmaps to OR in from
that index easier.

Change-Id: I2773aa94d8b67f12194608e6317c0792a5de21e2

8 years agoDeprecate BitmapBuilder.add and introduce simpler addObject method 25/59625/5
Jonathan Nieder [Wed, 4 Nov 2015 02:54:25 +0000 (18:54 -0800)]
Deprecate BitmapBuilder.add and introduce simpler addObject method

The BitmapIndex.BitmapBuilder.add API is subtle:

/**
 * Adds the id and the existing bitmap for the id, if one
 * exists, to the bitmap.
 *
 * @return true if the value was not contained or able to be
 * loaded.
 */
boolean add(AnyObjectId objectId, int type);

Reading the name of the method does not make it obvious what it will
do.  Does it add the named object to the bitmap, or all objects
reachable from it?  It depends on whether the BitmapIndex owns an
existing bitmap for that object.  I did not notice this subtlety when
skimming the javadoc, either.  This resulted in enough confusion to
subtly break the bitmap building code (see change
I30844134bfde0cbabdfaab884c84b9809dd8bdb8 for details).

So discourage use of the add() API by deprecating it.

To replace it, provide a addObject() method that adds a single object.
This way, callers can decide whether to use addObject() or or() based
on the context.

For example,

if (bitmap.add(c, OBJ_COMMIT)) {
for (RevCommit p : c.getParents()) {
rememberToAlsoHandle(p);
}
}

can be replaced with

if (bitmap.contains(c)) {
// already included
} else if (index.getBitmap(c) != null) {
bitmap.or(index.getBitmap(c));
} else {
bitmap.addObject(c, OBJ_COMMIT);
for (RevCommit p : c.getParents()) {
rememberToAlsoHandle(p);
}
}

which is more verbose but makes it clearer that the behavior
depends on the content of index.getBitmaps().

Change-Id: Ib745645f187e1b1483f8587e99501dfcb7b867a5

8 years agoAdd @Override annotations to BitmapIndexImpl 24/59624/3
Jonathan Nieder [Wed, 4 Nov 2015 02:38:18 +0000 (18:38 -0800)]
Add @Override annotations to BitmapIndexImpl

This makes it easier to distinguish between implementations of methods
from the interface from helpers internal to org.eclipse.jgit.internal.storage.*.

This was illegal in Java 5 but JGit requires newer Java these days.

Change-Id: I92c65f3407a334acddd32ec9e09ab7d1d39c4dc6

8 years agoRely on bitmap RevFilter to filter walk during bitmap selection 98/59598/4
Jonathan Nieder [Tue, 3 Nov 2015 19:31:21 +0000 (11:31 -0800)]
Rely on bitmap RevFilter to filter walk during bitmap selection

This RevWalk filters out reused bitmap commits via the 'reuse' bitmap.
Avoid possible wasted time and complexity by not also redundantly
marking them UNINTERESTING.

Change-Id: Ibb714002ddac599963d148a9aab90645fcc73141

8 years agoUse 'reused' bitmap to filter walk during bitmap selection 97/59597/4
Jonathan Nieder [Tue, 3 Nov 2015 19:24:02 +0000 (11:24 -0800)]
Use 'reused' bitmap to filter walk during bitmap selection

When building fullBitmap in order to determine which ancestor chain to
add this commit to, we were excluding the ancestors of reusedCommits
using markUninteresting.  This use of markUninteresting is a bit
wasteful because we already have a bitmap indicating exactly which
commits should be excluded (which can save some walking).  Use it.

A separate commit will remove the now-redundant markUninteresting
call.

No behavior change intended (except for performance improvement).

Change-Id: I1112641852d72aa05c9a8bd08a552c70342ccedb

8 years agoRely on bitmap RevFilter to filter tip commit setup walk 96/59596/4
Jonathan Nieder [Tue, 3 Nov 2015 19:16:22 +0000 (11:16 -0800)]
Rely on bitmap RevFilter to filter tip commit setup walk

This RevWalk filters out reused bitmap commits via the 'reuse' bitmap.
Avoid possible wasted time and complexity by not redundantly marking
them UNINTERESTING any more.

Change-Id: If467ccd1d75e17cf9367b2a0399fca3f9d52adf9

8 years agoUse 'reused' bitmap to filter tip commit setup walk 95/59595/4
Jonathan Nieder [Tue, 3 Nov 2015 19:15:36 +0000 (11:15 -0800)]
Use 'reused' bitmap to filter tip commit setup walk

When garbage collecting, we decide to reuse some bitmaps in older
history from the previous pack to save time.  The remainder of commit
selection only involves commits not covered by those bitmaps.

Currently we carry that out in two ways:

1. by building a bitmap representing the already-covered commits,
   for easy containment checks and AND-NOT-ing against
2. by marking the reused bitmap commits as uninteresting in the
   RevWalk that finds new commits

The mechanism in (2) is less efficient than (1): rw.next() will walk
back from reused bitmap commits to check whether the commit it is
about to emit is an ancestor of them, when using the bitmap from (1)
would let us perform the same check with a single contains() call.
Add a RevFilter teaching the RevWalk to perform that same check
directly using the bitmap from (1).

The next time the RevWalk is used, a different RevFilter is installed
so this does not break that.

A later commit will drop the markUninteresting calls.

No functional change intended except a possible speedup.

Change-Id: Ic375210fa69330948be488bf9dbbe4cb0d069ae6

8 years agoInclude ancestors of reused bitmap commits in reuse bitmap again 22/59622/1
Jonathan Nieder [Wed, 4 Nov 2015 01:45:06 +0000 (17:45 -0800)]
Include ancestors of reused bitmap commits in reuse bitmap again

Until 320a4142 (Update bitmap selection throttling to fully span
active branches, 2015-10-20), setupTipCommitBitmaps contained code
along the following lines:

for (PackBitmapIndexRemapper.Entry entry : bitmapRemapper) {
if (!reuse(entry))
continue;
RevCommit rc = (RevCommit) rw.peel(rw.parseAny(entry));

reuseCommits.add(new BitmapCommit(rc));
EWAHCompressedBitmap bitmap =
remap.ofObjectType(remap.getBitmap(rc), OBJ_COMMIT);
writeBitmaps.addBitmap(rc, bitmap, 0);
reuse.add(rc, OBJ_COMMIT);
}
writeBitmaps.clearBitmaps(); // Remove temporary bitmaps

This loop OR-ed together bitmaps for commits whose bitmaps would be
reused.  A subtle point is the use of the add() method, which ORs in a
bitmap from the BitmapIndex when it exists and falls back to OR-ing in
a single bit when that bitmap does not exist in the BitmapIndex.

Commit 320a4142 removed the addBitmap step, so the bitmap does not
exist in the BitmapIndex and the fallback behavior is triggered.

Simplify and restore the intended behavior by avoiding use of the
subtle use of the add() method --- use or() directly instead.

Change-Id: I30844134bfde0cbabdfaab884c84b9809dd8bdb8

8 years agoMerge "Decrease indentation in setupTipCommitBitmaps"
Jonathan Nieder [Wed, 4 Nov 2015 00:41:22 +0000 (19:41 -0500)]
Merge "Decrease indentation in setupTipCommitBitmaps"

8 years agoMerge "[style] Add braces to DeltaTask"
Jonathan Nieder [Tue, 3 Nov 2015 23:33:26 +0000 (18:33 -0500)]
Merge "[style] Add braces to DeltaTask"

8 years ago[style] Add braces to DeltaTask 13/59613/1
Terry Parker [Sat, 31 Oct 2015 00:47:06 +0000 (17:47 -0700)]
[style] Add braces to DeltaTask

Change-Id: I3306cc77544dec6d9273b2c35b8db0ed43799992
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoDecrease indentation in setupTipCommitBitmaps 94/59594/1
Jonathan Nieder [Tue, 3 Nov 2015 19:42:53 +0000 (11:42 -0800)]
Decrease indentation in setupTipCommitBitmaps

Avoid leaving the reader in suspense by handling the unusual
(!RevCommit) case first.  As a nice side effect, there is less nesting
to keep track of in the rest of the loop body.

No functional change intended.

Change-Id: I1580de444fccde08070f696218c12041151a924a

8 years agoAdd support for pre-push hooks 18/59318/3
Christian Halstrick [Tue, 30 Jun 2015 14:43:20 +0000 (16:43 +0200)]
Add support for pre-push hooks

When the file <git-dir>/hooks/pre-push exists make sure that is is
executing during a push. The pre-push hook runs during git push, after
the remote refs have been updated but before any objects have been
transferred.

Change-Id: Ibbb58ee3227742d1a2f913134ce11e7a135c7f4c

8 years agoEnhance FS.runProcess() to support stdin-redirection and binary data 71/50371/10
Christian Halstrick [Wed, 17 Jun 2015 12:54:11 +0000 (14:54 +0200)]
Enhance FS.runProcess() to support stdin-redirection and binary data

In order to support filters in gitattributes FS.runProcess() is made
public. Support for stdin redirection has been added. Support for binary
data on stdin/stdout (as used be clean/smudge filters) has been added.

Change-Id: Ice2c152e9391368dc5748d7b825a838e3eb755f9
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoCleaned up various readPipe() threading issues 34/59434/2
Andrey Loskutov [Sun, 1 Nov 2015 12:40:02 +0000 (13:40 +0100)]
Cleaned up various readPipe() threading issues

Fixed random errors in discoverGitSystemConfig() on Linux where the
process error stream was closed by readPipe() before or while
GobblerThread was reading from it.

Marked readPipe() as @Nullable and fixed potential NPE in
discoverGitSystemConfig() on readPipe() return value.

Fixed process error output randomly mixed with other threads log
messages.

Change-Id: Id882af2762cfb75f010f693b2e1c46eb6968ee82
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoDon't report errors logged by FS with "debug" level 92/59392/1
Andrey Loskutov [Fri, 30 Oct 2015 23:06:27 +0000 (00:06 +0100)]
Don't report errors logged by FS with "debug" level

Change-Id: I6a10116cd2e6b58d2300a9e741afe2eeac719b03
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoBuilding bitmaps: Simplify the logic to sort by chains 81/59281/5
Terry Parker [Thu, 29 Oct 2015 18:02:01 +0000 (11:02 -0700)]
Building bitmaps: Simplify the logic to sort by chains

Change-Id: I3da98e85107154c159093c138893f54dfa7ef435
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoMerge "Pack bitmaps: improve readability"
Jonathan Nieder [Thu, 29 Oct 2015 18:11:40 +0000 (14:11 -0400)]
Merge "Pack bitmaps: improve readability"

8 years agoMerge "Bitmap generation: Add a test of ordering commits by "chains""
Jonathan Nieder [Thu, 29 Oct 2015 18:09:02 +0000 (14:09 -0400)]
Merge "Bitmap generation: Add a test of ordering commits by "chains""

8 years agoMerge "reset command should support the -- <paths> parameters"
Christian Halstrick [Thu, 29 Oct 2015 12:26:51 +0000 (08:26 -0400)]
Merge "reset command should support the -- <paths> parameters"

8 years agoreset command should support the -- <paths> parameters 60/59060/2
Kaloyan Raev [Fri, 25 Sep 2015 11:39:52 +0000 (14:39 +0300)]
reset command should support the -- <paths> parameters

Bug: 480750
Change-Id: Ia85b1aead03dcf2fcb50ce0391b656f7c60a08d4
Signed-off-by: Kaloyan Raev <kaloyan.r@zend.com>
8 years agoJGit CLI should check if calling itself when invoking native git exe 12/59012/2
Kaloyan Raev [Tue, 27 Oct 2015 14:14:54 +0000 (16:14 +0200)]
JGit CLI should check if calling itself when invoking native git exe

Bug: 480782
Change-Id: I0d7f7a648671e7ff678f2b19fe39b85f8835c061
Signed-off-by: Kaloyan Raev <kaloyan.r@zend.com>
8 years agoBitmap generation: Add a test of ordering commits by "chains" 91/59191/1
Terry Parker [Thu, 29 Oct 2015 04:59:10 +0000 (21:59 -0700)]
Bitmap generation: Add a test of ordering commits by "chains"

When commits are selected for bitmap generation, they are reordered
so that related "chains" of commits are grouped together. Chains are
"subbranches" of commits that may branch off of and re-merge with the
main line. Grouping by chains means that the XOR difference between
consecutive selected commits will be smaller, resulting in better
run-length compression of the XORed bitmaps.

Add a new testSelectionOrderingWithChains() test in a new
GcCommitSelectionTest test class. Also move related GC commit selection
tests out of GcBasicPackingTest and into GcCommitSelectionTest.

Change-Id: I8e80cac29c4ca8193b41c9898e5436c22a659f11
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoPack bitmaps: improve readability 77/59077/2
Terry Parker [Wed, 28 Oct 2015 05:33:24 +0000 (22:33 -0700)]
Pack bitmaps: improve readability

Add comments and rename variables in PackWriterBitmapPreparer to improve
readability.

Change-Id: I49e7a1c35307298f7bc32ebfc46ab08e94290125
Signed-off-by: Terry Parker <tparker@google.com>
8 years ago[performance] Remove synthetic access$ methods in dfs, diff and merge 74/59174/1
Andrey Loskutov [Wed, 28 Oct 2015 20:17:43 +0000 (21:17 +0100)]
[performance] Remove synthetic access$ methods in dfs, diff and merge

Java compiler must generate synthetic access methods for private methods
and fields of the enclosing class if they are accessed from inner
classes and vice versa.

While invisible in the code, those synthetic access methods exist in the
bytecode and seem to produce some extra execution overhead at runtime
(compared with the direct access to this fields or methods), see
https://git.eclipse.org/r/58948/.

By removing the "private" access modifier from affected methods and
fields we help compiler to avoid generation of synthetic access methods
and hope to improve execution performance.

To validate changes, one can either use javap or use Bytecode Outline
plugin in Eclipse. In both cases one should look for "synthetic
access$<number>" methods at the end of the class and inner class files
in question - there should be none.

NB: don't mix this "synthetic access$" methods up with "public synthetic
bridge" methods generated to allow generic method override return types.

Change-Id: I94fb481b68c84841c1db1a5ebe678b13e13c962b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years ago[performance] Remove synthetic access$ methods in lib, util and dircache 72/59172/1
Andrey Loskutov [Wed, 28 Oct 2015 19:52:43 +0000 (20:52 +0100)]
[performance] Remove synthetic access$ methods in lib, util and dircache

Java compiler must generate synthetic access methods for private methods
and fields of the enclosing class if they are accessed from inner
classes and vice versa.

While invisible in the code, those synthetic access methods exist in the
bytecode and seem to produce some extra execution overhead at runtime
(compared with the direct access to this fields or methods), see
https://git.eclipse.org/r/58948/.

By removing the "private" access modifier from affected methods and
fields we help compiler to avoid generation of synthetic access methods
and hope to improve execution performance.

To validate changes, one can either use javap or use Bytecode Outline
plugin in Eclipse. In both cases one should look for "synthetic
access$<number>" methods at the end of the class and inner class files
in question - there should be none.

NB: don't mix this "synthetic access$" methods up with "public synthetic
bridge" methods generated to allow generic method override return types.

Change-Id: Ie7b65f251ec4452d5a5ed48aa0f272cf49a9aecd
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years ago[performance] Remove synthetic access$ methods in transport package 70/59170/1
Andrey Loskutov [Wed, 28 Oct 2015 19:24:12 +0000 (20:24 +0100)]
[performance] Remove synthetic access$ methods in transport package

Java compiler must generate synthetic access methods for private methods
and fields of the enclosing class if they are accessed from inner
classes and vice versa.

While invisible in the code, those synthetic access methods exist in the
bytecode and seem to produce some extra execution overhead at runtime
(compared with the direct access to this fields or methods), see
https://git.eclipse.org/r/58948/.

By removing the "private" access modifier from affected methods and
fields we help compiler to avoid generation of synthetic access methods
and hope to improve execution performance.

To validate changes, one can either use javap or use Bytecode Outline
plugin in Eclipse. In both cases one should look for "synthetic
access$<number>" methods at the end of the class and inner class files
in question - there should be none.

NB: don't mix this "synthetic access$" methods up with "public synthetic
bridge" methods generated to allow generic method override return types.

Change-Id: I0ebaeb2bc454cd8051b901addb102c1a6688688b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years ago[performance] Remove synthetic access$ methods in pack and file packages 73/59073/2
Andrey Loskutov [Tue, 27 Oct 2015 22:51:21 +0000 (23:51 +0100)]
[performance] Remove synthetic access$ methods in pack and file packages

Java compiler must generate synthetic access methods for private methods
and fields of the enclosing class if they are accessed from inner
classes and vice versa.

While invisible in the code, those synthetic access methods exist in the
bytecode and seem to produce some extra execution overhead at runtime
(compared with the direct access to this fields or methods), see
https://git.eclipse.org/r/58948/.

By removing the "private" access modifier from affected methods and
fields we help compiler to avoid generation of synthetic access methods
and hope to improve execution performance.

To validate changes, one can either use javap or use Bytecode Outline
plugin in Eclipse. In both cases one should look for "synthetic
access$<number>" methods at the end of the class and inner class files
in question - there should be none.

NB: don't mix this "synthetic access$" methods up with "public synthetic
bridge" methods generated to allow generic method override return types.

Change-Id: If53ec94145bae47b74e2561305afe6098012715c
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoAdd missing dependency to org.slf4j for org.eclipse.jgit.test bundle 84/58884/1
Matthias Sohn [Sat, 24 Oct 2015 19:18:01 +0000 (21:18 +0200)]
Add missing dependency to org.slf4j for org.eclipse.jgit.test bundle

This OSGi dependency was missed in 6c424d32.

Change-Id: I5bad895896194ad468c260d6c0810132a358f152
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "WalkEncryptionTest: get rid of Log4J dependency"
Matthias Sohn [Fri, 23 Oct 2015 17:56:18 +0000 (13:56 -0400)]
Merge "WalkEncryptionTest: get rid of Log4J dependency"

8 years agoRestore TestRepository.getClock(), it is used by Gerrit/Gitiles 70/58770/1
Terry Parker [Thu, 22 Oct 2015 22:29:04 +0000 (15:29 -0700)]
Restore TestRepository.getClock(), it is used by Gerrit/Gitiles

Change-Id: I88880f18998e33377c0c684cbd8007b5d27d76e7
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoAdd best-effort variant of File.getCanonicalFile() 60/58760/2
Thomas Wolf [Thu, 22 Oct 2015 19:23:18 +0000 (21:23 +0200)]
Add best-effort variant of File.getCanonicalFile()

See https://git.eclipse.org/r/#/c/58405/.

Change-Id: I097c4b1369754f59137eb8848a680c61b06510ad
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
8 years agoExpose bitmap selection parameters via PackConfig 84/58684/2
Terry Parker [Mon, 19 Oct 2015 22:59:47 +0000 (15:59 -0700)]
Expose bitmap selection parameters via PackConfig

Expose the following bitmap selection parameters via PackConfig:
"bitmapContiguousCommitCount", "bitmapRecentCommitCount",
"bitmapRecentCommitSpan", "bitmapDistantCommitSpan",
"bitmapExcessiveBranchCount", and "bitmapInactiveBranchAge".

The value of bitmapContiguousCommitCount, whereby bitmaps are
created for the most recent N commits in a branch, has never
been verified. If experiments show that they are not valuable,
then we can simplify the implementation so that there is only
a concept of recent and distant commit history (defined by
"bitmapRecentCommitCount"), and the only controls we need are
"bitmapRecentCommitSpan" and "bitmapDistantCommitSpan".

Change-Id: I288bf3f97d6fbfdfcd5dde2699eff433a7307fb9
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoUpdate bitmap selection throttling to fully span active branches. 68/58468/3
Terry Parker [Tue, 20 Oct 2015 22:29:38 +0000 (15:29 -0700)]
Update bitmap selection throttling to fully span active branches.

Replace the “bitmapCommitRange” parameter that was recently introduced
with two new parameters: “bitmapExcessiveBranchCount” and
“bitmapInactiveBranchAgeInDays”. If the count of branches does not
exceed “bitmapExcessiveBranchCount”, then the current algorithm is kept
for all branches.

If the branch count is excessive, then the commit time for the tip
commit for each branch is used to determine if a branch is “inactive”.
"Active" branches get full commit selection using the existing
algorithm. "Inactive" branches get fewer bitmaps near the branch tips.

Introduce a "contiguousCommitCount" parameter that always enforces that
the N most recent commits in a branch are selected for bitmaps. The
previous nextSelectionDistance() algorithm created anywhere from 1-100
contiguous bitmaps at branch tips.

For example, consider a branch with commits numbering 0-300, with 0
being the most recent commit. If the most recent 200 commits are not
merge commits and the 200th commit was the last one selected,
nextSelectionDistance() returned 100, causing commits 200-101 to be
ignored. Then a window of size 100 was evaluated, searching for merge
commits. Since no merge commits are found, the next commit (commit 0)
was selected, for a total of 1 commit in the topmost 100 commits.

If instead the 250th commit was selected, then by the same logic
commit 50 is selected. At that point nextSelectionDistance() switches to
selecting consecutive commits, so commits 0-50 in the topmost 100
commits are selected. The "contiguousCommitCount" parameter provides
more determinism by always selecting a constant number or topmost
commits.

Add an optimization to break out of the inner loop of selectCommits() if
all of the commits for the current branch have already been found.

When reusing bitmaps from an existing pack, remove unnecessary
populating and clearing of the writeBitmaps/PackBitmapIndexBuilder.

Add comments to PackWriterBitmapPreparer, rename methods and variables
for readability.

Add tests for bitmap selection with and without merge commits and with
excessive branch pruning triggered.

Note: I will follow up with an additional change that exposes the new
parameters through PackConfig.

Change-Id: I5ccbb96c8849f331c302d9f7840e05f9650c4608
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoWalkEncryptionTest: get rid of Log4J dependency 86/58586/1
Marc Strapetz [Wed, 21 Oct 2015 09:24:59 +0000 (11:24 +0200)]
WalkEncryptionTest: get rid of Log4J dependency

Instead use SLF4J as all other code does

Change-Id: I0fee9c0aaa1d98f918f25aa11c2160d86399467e
Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
8 years agoMerge "Push control of time into MockSystemReader"
Jonathan Nieder [Tue, 20 Oct 2015 23:07:18 +0000 (19:07 -0400)]
Merge "Push control of time into MockSystemReader"

8 years agoPush control of time into MockSystemReader 26/58526/3
Terry Parker [Tue, 20 Oct 2015 00:33:50 +0000 (17:33 -0700)]
Push control of time into MockSystemReader

LocalDiskRepositoryTestCase and TestRepository have competing ideas
about time. Push them into MockSystemReader so they can
cooperate.

Rename getClock() methods that return Dates to getDate().

Change-Id: Ibbd9fe7f85d0064b0a19e3b675b9718a9e67c479
Signed-off-by: Terry Parker <tparker@google.com>
9 years agoSilence Maven complaining about unset versions of reporting plugins 03/58403/2
Matthias Sohn [Sun, 18 Oct 2015 16:28:04 +0000 (18:28 +0200)]
Silence Maven complaining about unset versions of reporting plugins

Since we use the reporting plugins only in the parent pom.xml there's no
point in using the new pluginManagement tag in the reporting section
which was introduced to fix
https://issues.apache.org/jira/browse/MSITE-443

Change-Id: I750ca3765e95afb06609a362fb3354afc3b66b90
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoAdding JGitV1 and JGitV2 Walk Encryption 44/56744/7
Andrei Pozolotin [Fri, 25 Sep 2015 20:55:32 +0000 (20:55 +0000)]
Adding JGitV1 and JGitV2 Walk Encryption

Building on top of https://git.eclipse.org/r/#/c/56391/

Here we preserve compatibility with JetS3t
and add 2 new native JGit encryption implementations.

For reference, see connection configuration files:
* Version 0: jgit-s3-connection-v-0.properties
* Version 1: jgit-s3-connection-v-1.properties
* Version 2: jgit-s3-connection-v-2.properties

Change-Id: I713290bcacbe92d88e5ef28ce137de73dd1abe2f
Signed-off-by: Andrei Pozolotin <andrei.pozolotin@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoAdding AES Walk Encryption support in http://www.jets3t.org/ mode 91/56391/20
Andrei Pozolotin [Mon, 21 Sep 2015 22:59:14 +0000 (22:59 +0000)]
Adding AES Walk Encryption support in http://www.jets3t.org/ mode

See previous attempt: https://git.eclipse.org/r/#/c/16674/

Here we preserve as much of JetS3t mode as possible
while allowing to use new Java 8+ PBE algorithms
such as PBEWithHmacSHA512AndAES_256

Summary of changes:
* change pom.xml to control long tests
* add WalkEncryptionTest.launch to run long tests
* add AmazonS3.Keys to to normalize use of constants
* change WalkEncryption to support AES in JetS3t mode
* add WalkEncryptionTest to test remote encryption pipeline
* add support for CI configuration for live Amazon S3 testing
* add log4j based logging for tests in both Eclipse and Maven build

To test locally, check out the review branch, then:
* create amazon test configuration file
* located your home dir: ${user.home}
* named jgit-s3-config.properties
* file format follows AmazonS3 connection settings file:
accesskey = your-amazon-access-key
secretkey = your-amazon-secret-key
test.bucket = your-bucket-for-testing
* finally:
* run in Eclipse: WalkEncryptionTest.launch
* or
* run in Shell: mvn test --define test=WalkEncryptionTest

Change-Id: I6f455fd9fb4eac261ca73d0bec6a4e7dae9f2e91
Signed-off-by: Andrei Pozolotin <andrei.pozolotin@gmail.com>
9 years agoTest stability: add fsTick() to avoid random testPruneNone() failures 00/58100/1
Andrey Loskutov [Tue, 13 Oct 2015 19:24:47 +0000 (22:24 +0300)]
Test stability: add fsTick() to avoid random testPruneNone() failures

At least on Windows the test failed each second time on the last assert.
Adding a small timeout before gc.prune() makes the test stable again.

Change-Id: I23d98dd565912c58dcf2f24f3ebc24824670cff3
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoFixed jgit test failures on Windows 25/57925/2
Andrey Loskutov [Sat, 10 Oct 2015 19:02:24 +0000 (22:02 +0300)]
Fixed jgit test failures on Windows

RepoCommandTest was failing because of open file handle left.
IgnoreNodeTest was failing because of problems with creation of files
with trailing spaces on Windows.
HookTest was failing because of wrong line delimiter.

Change-Id: I34f074ac447eb4c3ada8b250309bb568b426189d
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoMerge "Don't call reader.close() 2 times on dispose()"
Matthias Sohn [Sat, 10 Oct 2015 23:38:52 +0000 (19:38 -0400)]
Merge "Don't call reader.close() 2 times on dispose()"

9 years agoMerge "Limit the range of commits for which bitmaps are created."
Shawn Pearce [Sat, 10 Oct 2015 16:04:24 +0000 (12:04 -0400)]
Merge "Limit the range of commits for which bitmaps are created."

9 years agoDon't call reader.close() 2 times on dispose() 00/57900/1
Andrey Loskutov [Sat, 10 Oct 2015 13:21:41 +0000 (16:21 +0300)]
Don't call reader.close() 2 times on dispose()

Bug: 479406
Change-Id: I6645a8f36ea349a5f04fd14d2c1ef2ecac2bcc37
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoDelete non empty directories before checkout a path 27/53827/22
Andrey Loskutov [Sun, 16 Aug 2015 11:00:00 +0000 (13:00 +0200)]
Delete non empty directories before checkout a path

If the checkout path is currently a non-empty directory (and was a link
or a regular file before), this directory will be removed before
performing checkout, but only if the checkout path is specified.

Bug: 474973
Change-Id: Ifc6c61592d9b54d26c66367163acdebea369145c
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoLimit the range of commits for which bitmaps are created. 59/57759/1
Terry Parker [Thu, 8 Oct 2015 22:06:37 +0000 (15:06 -0700)]
Limit the range of commits for which bitmaps are created.

A bitmap index contains bitmaps for a set of commits in a pack file.
Creating a bitmap for every commit is too expensive, so heuristics
select the most "important" commits. The most recent commits are the
most valuable. To clone a repository only those for the branch tips are
needed. When fetching, only commits since the last fetch are needed.

The commit selection heuristics generally work, but for some
repositories the number of selected commits is prohibitively high. One
example is the MSM 3.10 Linux kernel. With over 1 million commits on
2820 branches, the current heuristics resulted in +36k selected commits.
Each uncompressed bitmap for that repository is ~413k, making it
difficult to complete a GC operation in available memory.

The benefit of creating bitmaps over the entire history of a repository
like the MSM 3.10 Linux kernel isn't clear. For that repository, most
history for the last year appears to be in the last 100k commits.
Limiting bitmap commit selection to just those commits reduces the count
of selected commits from ~36k to ~10.5k. Dropping bitmaps for older
commits does not affect object counting times for clones or for fetches
on clients that are reasonably up-to-date.

This patch defines a new "bitmapCommitRange" PackConfig parameter to
limit the commit selection process when building bitmaps. The range
starts with the most recent commit and walks backwards. A range of 10k
considers only the 10000 most recent commits. A range of zero creates
bitmaps only for branch tips. A range of -1 (the default) does not limit
the range--all commits in the pack are used in the commit selection
process.

Change-Id: Ied92c70cfa0778facc670e0f14a0980bed5e3bfb
Signed-off-by: Terry Parker <tparker@google.com>
9 years agoAdd utility method allowing to check for empty folders in workdir 28/57728/2
Christian Halstrick [Thu, 8 Oct 2015 16:17:30 +0000 (18:17 +0200)]
Add utility method allowing to check for empty folders in workdir

Previously the method DirCacheCheckoutTest#assertWorkDir() silently
skipped over empty folders. If tests would have left unexpected empty
folders in the worktree this would be overlooked. Now empty folders have
to be specified by something like mkmap("<foldername>", "/", ...]

Change-Id: Idb8b270e92daf02ecdc381d148a5958bd83ec057
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoAlign docstring for RepoCommand.setRecordRemoteBranch with argument 53/57553/2
Stefan Beller [Tue, 6 Oct 2015 21:02:19 +0000 (14:02 -0700)]
Align docstring for RepoCommand.setRecordRemoteBranch with argument

Change-Id: Ia3aa1130795d162e482b4088f190956d70857244
Signed-off-by: Stefan Beller <sbeller@google.com>
9 years agoMerge "RepoCommand: Add setRecordRemoteBranch option to record upstream branch"
Jonathan Nieder [Mon, 5 Oct 2015 23:24:46 +0000 (19:24 -0400)]
Merge "RepoCommand: Add setRecordRemoteBranch option to record upstream branch"

9 years agoRepoCommand: Add setRecordRemoteBranch option to record upstream branch 50/56650/18
Stefan Beller [Mon, 5 Oct 2015 23:01:11 +0000 (16:01 -0700)]
RepoCommand: Add setRecordRemoteBranch option to record upstream branch

On a server also running Gerrit that is using RepoCommand to
convert from an XML manifest to a git submodule superproject
periodically, it would be handy to be able to use Gerrit's
submodule subscription feature[1] to update the superproject
automatically between RepoCommand runs as changes are merged
in each subprojects.

This requires setting the 'branch' field for each submodule
so that Gerrit knows what branch to watch.  Add an option to
do that.

Setting the branch field also is useful for plain Git users,
since it allows them to use "git submodule update --remote" to
manually update all submodules between RepoCommand runs.

[1] https://gerrit-review.googlesource.com/Documentation/user-submodules.html

Change-Id: I1a10861bcd0df3b3673fc2d481c8129b2bdac5f9
Signed-off-by: Stefan Beller <sbeller@google.com>
9 years agoCompare API against 4.1.0.201509280440-r 27/57327/1
Matthias Sohn [Fri, 2 Oct 2015 23:28:23 +0000 (01:28 +0200)]
Compare API against 4.1.0.201509280440-r

Change-Id: Ia04d09ca337c357004567a54a9fc01ea1e55e508
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoMerge "[ignore rules] fix for handling unmatched '[' brackets"
Matthias Sohn [Fri, 2 Oct 2015 06:12:18 +0000 (02:12 -0400)]
Merge "[ignore rules] fix for handling unmatched '[' brackets"

9 years agoMerge branch 'stable-4.1' 55/57255/1
Matthias Sohn [Thu, 1 Oct 2015 23:34:45 +0000 (01:34 +0200)]
Merge branch 'stable-4.1'

* stable-4.1:
  pgm: Open RevWalk and TreeWalk in try-with-resource
  ant: Open Repository and Git in try-with-resource
  pgm: Create instances of Git in try-with-resource
  FanoutBucket: Create ObjectInserter.Formatter in try-with-resource
  Fix compiler warnings in DiffFormatter.writeGitLinkText

Change-Id: I448ecc9a1334977d9f304dd61ea20c7a8e692b10
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agopgm: Open RevWalk and TreeWalk in try-with-resource 62/57162/1
David Pursehouse [Thu, 1 Oct 2015 08:38:53 +0000 (17:38 +0900)]
pgm: Open RevWalk and TreeWalk in try-with-resource

To prevent potential resource leaks.

Change-Id: I2039af04d9fb75405f8e13abf508623b7d4ef324
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoant: Open Repository and Git in try-with-resource 61/57161/1
David Pursehouse [Thu, 1 Oct 2015 08:29:36 +0000 (17:29 +0900)]
ant: Open Repository and Git in try-with-resource

To prevent potential resource leak.

Change-Id: I3f4af9037c9d26ec575b529ab66066365ab918a5
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agopgm: Create instances of Git in try-with-resource 55/57155/1
David Pursehouse [Thu, 1 Oct 2015 07:07:02 +0000 (16:07 +0900)]
pgm: Create instances of Git in try-with-resource

To prevent potential resource leak.

Change-Id: I8ac4ae61193324849bafb46501a55f93c5029a4e
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoFanoutBucket: Create ObjectInserter.Formatter in try-with-resource 48/57148/1
David Pursehouse [Thu, 1 Oct 2015 06:10:22 +0000 (15:10 +0900)]
FanoutBucket: Create ObjectInserter.Formatter in try-with-resource

To prevent potential resource leak.

Change-Id: Ife09be2822bc476199f10da8d1eb7ccc8da05b79
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoUse japicmp instead of clirr to detect API changes 39/57139/1
Matthias Sohn [Wed, 30 Sep 2015 23:41:52 +0000 (01:41 +0200)]
Use japicmp instead of clirr to detect API changes

Clirr doesn't support Java 8 hence use japicmp instead.
See https://github.com/siom79/japicmp

Change-Id: If4b30a6d6aa849b4d6b3b0c900558c609822840c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years ago[ignore rules] fix for handling unmatched '[' brackets 73/56773/6
Andrey Loskutov [Sat, 26 Sep 2015 16:21:14 +0000 (18:21 +0200)]
[ignore rules] fix for handling unmatched '[' brackets

This patch makes JGit parsing of ignore rules containing unmatched '['
bracket compatible to the Git CLI.

Since '[' starts character group, Git tries to parse the ignore rule as
a shell glob pattern and if the character group is not closed, the glob
pattern is invalid and so the ignore rule never matches anything.

See also http://article.gmane.org/gmane.comp.version-control.git/278699.

Bug: 478490
Change-Id: I734a4d14fcdd721070e3f75d57e33c2c0700d503
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoAdd test case comparing CGit vs JGit ignore behavior for random patterns 44/56844/5
Sébastien Arod [Mon, 28 Sep 2015 12:18:55 +0000 (14:18 +0200)]
Add test case comparing CGit vs JGit ignore behavior for random patterns

This test case was developed in the scope of bug 478065.

Bug: 478065
Change-Id: Ibcce1ed375d4a6ba05461e6c6b287d16752fa681
Signed-off-by: Sébastien Arod <sebastien.arod@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoFix compiler warnings in DiffFormatter.writeGitLinkText 50/57050/1
David Pursehouse [Wed, 30 Sep 2015 09:18:09 +0000 (18:18 +0900)]
Fix compiler warnings in DiffFormatter.writeGitLinkText

- Remove declaration of IOException that is no longer thrown

- Add missing //$NON-NLS-1$ to prevent "Non-externalized string literal"
  warning.

These warnings seem to have been introduced by If13f7b406.

Change-Id: I30058eed31b92067a6ab22e787732b08e29f8d63
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
9 years agoPrepare 4.2.0-SNAPSHOT builds 46/56846/2
Matthias Sohn [Mon, 28 Sep 2015 12:22:38 +0000 (14:22 +0200)]
Prepare 4.2.0-SNAPSHOT builds

Change-Id: If559d3565b1f84c93a533e1ce18d5293605d1950
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoMerge branch 'stable-4.1' 45/56845/1
Matthias Sohn [Mon, 28 Sep 2015 12:21:47 +0000 (14:21 +0200)]
Merge branch 'stable-4.1'

* stable-4.1:
  Prepare 4.1.1-SNAPSHOT builds
  JGit v4.1.0.201509280440-r

Change-Id: Ie898f10c39f32419628f2b6dff7e3ec083ddfdfe
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoPrepare 4.1.1-SNAPSHOT builds 40/56840/1
Matthias Sohn [Mon, 28 Sep 2015 11:37:39 +0000 (13:37 +0200)]
Prepare 4.1.1-SNAPSHOT builds

Change-Id: I035f3a8d0f0de86e8b8f00e668be5ce008402e82
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoJGit v4.1.0.201509280440-r 17/56817/1 v4.1.0.201509280440-r
Matthias Sohn [Mon, 28 Sep 2015 08:36:08 +0000 (10:36 +0200)]
JGit v4.1.0.201509280440-r

Change-Id: I9a536870b9f5c1247c52d6c976a954115982fa1c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUse java.nio.file consistently in FS 90/56390/3
Matthias Sohn [Mon, 21 Sep 2015 23:17:18 +0000 (01:17 +0200)]
Use java.nio.file consistently in FS

Since 4.0 we require Java 7 so there is no longer a need to override the
following methods in FS_POSIX, FS_Win32, FS_Win32_Cygwin
- lastModified()
- setLastModified()
- length()
- isSymlink()
- exists()
- isDirectory()
- isFile()
- isHidden()
Hence implement these methods in FS and remove overrides in subclasses.

Change-Id: I5dbde6ec806c66c86ac542978918361461021294
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoDeprecate FileUtil and move the code to FileUtils 92/55592/4
Andrey Loskutov [Wed, 9 Sep 2015 21:13:34 +0000 (23:13 +0200)]
Deprecate FileUtil and move the code to FileUtils

As discussed on https://git.eclipse.org/r/53836 it does not make sense
to have two similar utility classes in same package with intersecting
functionality. To not break the API, all methods from FileUtil are
copied to FileUtils, all FileUtil API is made deprecated and redirecting
now to FileUtils. Moved simple methods which are available in Java 7 API
are made package private and can be removed at any point later entirely
(right now they are in use).

Bug: 475070
Change-Id: Idffcf9840496c448173af7c052d8898ada68e27b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years ago[performance] Cache platform name in SystemReader 95/55595/4
Andrey Loskutov [Wed, 9 Sep 2015 22:04:38 +0000 (00:04 +0200)]
[performance] Cache platform name in SystemReader

SystemReader.isMacOs() and SystemReader.isWindows() return values are
unlikely to change during the JVM lifetime (except tests). Don't read
system properties each time the methods are called, just use previously
calculated value.

Change-Id: I495521f67a8b544e7b7247d99bbd05a42ea16d20
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years ago[ignore rules] fix for backslash handling 78/56678/3
Andrey Loskutov [Thu, 24 Sep 2015 22:37:50 +0000 (00:37 +0200)]
[ignore rules] fix for backslash handling

An attempt to re-implement not well documented Git CLI behavior for
patterns with backslashes.

It looks like Git silently ignores all \ characters in ignore rules, if
they are NOT covered by 3 cases described in [1]:

{quote}
1) ... Put a backslash ("\") in front of the first hash for patterns
that begin with a hash.
...
2) Trailing spaces are ignored unless they are quoted with backslash
("\").
...
3) Put a backslash ("\") in front of the first "!" for patterns that
begin with a literal "!", for example, "\!important!.txt".
{quote}

Undocumented also is the fact that backslash itself can be escaped by
backslash.

So \h\e\l\l\o\.t\x\t rule matches hello.txt and a\\\\b a\b in Git CLI.

Additionally, the glob parser [2] knows special meaning of backslash:

{quote}
One can remove the special meaning of '?', '*' and '[' by preceding
them by a backslash, or, in case this is part of a shell command
line, enclosing them in quotes.  Between brackets these characters
stand for themselves.  Thus, "[[?*\]" matches the four characters
'[', '?', '*' and '\'.
{quote}

[1] https://www.kernel.org/pub/software/scm/git/docs/gitignore.html
[2] http://man7.org/linux/man-pages/man7/glob.7.html

Bug: 478065
Change-Id: I3dc973475d1943c5622103701fa8cb3ea0684e3e
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years ago[ignore rules] Fix for character group matcher 60/56760/1
Andrey Loskutov [Sat, 26 Sep 2015 09:34:02 +0000 (11:34 +0200)]
[ignore rules] Fix for character group matcher

Currently we fail to properly recognize character group if the pattern
before character group contains opening bracket.

See comment from Sebastien Arod on https://git.eclipse.org/r/56678/

Change-Id: I70d3657a2a328818ea2bdc1409d18ecb3a85825b
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoMerge "Show submodule difference as a hunk"
Matthias Sohn [Fri, 25 Sep 2015 21:48:02 +0000 (17:48 -0400)]
Merge "Show submodule difference as a hunk"

9 years agoShow submodule difference as a hunk 63/56263/3
Jacob Keller [Fri, 18 Sep 2015 06:05:07 +0000 (23:05 -0700)]
Show submodule difference as a hunk

Current DiffFormat behavior regarding submodules (aka git links) is
incorrect. The "Subproject commit <sha1>" appears as part of the diff
header, rather than as its own hunk.

--> From JGit implementation
 diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin
 index b9d3ca8..ec6ed89 160000
 --- a/plugins/cookbook-plugin
 +++ b/plugins/cookbook-plugin
 -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf
 +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e

--> From C Git 2.5.2
 diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin
 index b9d3ca8..ec6ed89 160000
 --- a/plugins/cookbook-plugin
 +++ b/plugins/cookbook-plugin
 @@ -1 +1 @@
 -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf
 +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e

The current way of processing submodules results in no hunk header and
includes the contents of the hunk as part of the headers. To fix this, we
can't just have our writeGitLinkDiffText output the hunk header. We have
to change the flow so that the raw text gets parsed as a diff. The easiest
way to do this is to fake the RawText in the FormatResult when we have a
GITLINK.

It should be noted that it seems possible for there to be a difference
between a GITLINK and a non-GITLINK, but I don't think this can happen in
practice, so I don't think we need to worry too much about it.

This patch also fixes up the test for GitLink headers, as the test was
for the old behavior. My setup has 3 other failing tests which may or
may not be the result of environmental changes. However, the same tests
fail without this commit, so I do not believe they are related.

Bug: 477759
Change-Id: If13f7b406904fad814416c93ed09ea47ef183337
Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
9 years agoProperly support special regex characters in ignore rules 37/56437/4
Andrey Loskutov [Tue, 22 Sep 2015 14:42:14 +0000 (16:42 +0200)]
Properly support special regex characters in ignore rules

Ignore rules should escape $^(){}+| chars if using regular expressions,
because they should be treated literally if they aren't part of a
character group.

Bug: 478055
Change-Id: Ic7276442d7f8f02594b85eae1ef697362e62d3bd
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoRemove unneeded @SuppressWarnings("boxing") 78/56278/3
Hugo Arès [Fri, 18 Sep 2015 18:35:46 +0000 (14:35 -0400)]
Remove unneeded @SuppressWarnings("boxing")

Fix the unit tests to not do boxing by using assertEquals(int, int)
instead of assertThat with a matcher.

Change-Id: I5412fe2f72c8ea0227b9ff3a3352ccb555e22231
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoFix endless loop in ObjectChecker for MacOS 77/56177/2
Christian Halstrick [Thu, 17 Sep 2015 14:11:39 +0000 (16:11 +0200)]
Fix endless loop in ObjectChecker for MacOS

Bug: 477090
Change-Id: I0ba416f1cc172a835dd2723ff7fa904597ffd097
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoFix warnings about missing serialVersionUID 20/56120/2
Hugo Arès [Wed, 16 Sep 2015 18:34:54 +0000 (14:34 -0400)]
Fix warnings about missing serialVersionUID

Change-Id: Ieff64896aebeab793ff08ab89f10d5ccaee66021
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoFix integer boxing eclipse warning 16/56116/2
Hugo Arès [Wed, 16 Sep 2015 17:22:15 +0000 (13:22 -0400)]
Fix integer boxing eclipse warning

Change-Id: I89a8495a799254586016393e51697cfbceacac8b
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoFix integer boxing eclipse warning 15/56115/1
Hugo Arès [Wed, 16 Sep 2015 16:54:24 +0000 (12:54 -0400)]
Fix integer boxing eclipse warning

There was this warning because private assertEquals(Object, Object)
method was shadowing JUnit assertEquals methods.

Change-Id: I889bfe1d8c48210d9a42147a523c4829c5b5d1e3
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
9 years agoMerge branch 'stable-4.0' 30/55930/2
Matthias Sohn [Mon, 14 Sep 2015 22:54:53 +0000 (00:54 +0200)]
Merge branch 'stable-4.0'

Change-Id: I1b448ce01f4cdfa62611da9e4d37321a4af9c12d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoPrepare 4.0.3-SNAPSHOT builds 27/55927/1
Matthias Sohn [Mon, 14 Sep 2015 21:38:48 +0000 (23:38 +0200)]
Prepare 4.0.3-SNAPSHOT builds

Change-Id: Ic5ab059bee460c76c6ff3e08141ce351a559691c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUploadPack: Verify clients send only commits for shallow lines 03/55903/3
Shawn Pearce [Mon, 14 Sep 2015 19:18:20 +0000 (12:18 -0700)]
UploadPack: Verify clients send only commits for shallow lines

If a client mistakenly tries to send a tag object as a shallow line
JGit blindly assumes this is a commit and tries to parse the tag
buffer using the commit parser. This can cause an obtuse error like:

  InvalidObjectIdException: Invalid id: t c0ff331234...

The "t" comes from the "object c0ff331234..." line of the tag tring
to be parsed as though it where the "tree" line of a commit.

Run any client supplied shallow lines through the RevWalk to lookup
the object types. Fail fast with a protocol exception if any of them
are non-commit.

Skip objects not known to this repository. This matches behavior
with git-core's upload-pack, which sliently skips over any shallow
line object named by the client but not known by the server.

Change-Id: Ic6c57a90a42813164ce65c2244705fc42e84d700

9 years agoJGit v4.0.2.201509141540-r 07/55907/1 v4.0.2.201509141540-r
Matthias Sohn [Mon, 14 Sep 2015 19:41:35 +0000 (21:41 +0200)]
JGit v4.0.2.201509141540-r

Change-Id: I766d95aa282c92dcbd2846145ee52e9cc62dd1f8
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoS3 transport: Fix check for tmpdir 92/55692/1
Shawn Pearce [Thu, 10 Sep 2015 21:18:50 +0000 (14:18 -0700)]
S3 transport: Fix check for tmpdir

Properties.containsKey() is the correct call here; contains() was testing
if a value is present but the key is what was meant.

Change-Id: Ice72c9f4388583e18cf8aca6e837cc4299fd07fd

9 years agoURIish: fall back to host as humanish name 53/51253/4
Patrick Steinhardt [Thu, 2 Jul 2015 12:15:22 +0000 (14:15 +0200)]
URIish: fall back to host as humanish name

When we have a URI that contains an empty path component (that is
it only contains a "/") we want to fall back to the host as
humanish name.

This change is according to the behavior of upstream git, which
falls back on the hostname when guessing directory names for
newly cloned repositories (see [1] for the discussion).

[1] http://article.gmane.org/gmane.comp.version-control.git/274669

Change-Id: I44400c6ab72a2722d2155d53d63671bd867d6c44
Signed-off-by: Patrick Steinhardt <ps@pks.im>
9 years agoUpdate build to final R20150821153341 Orbit repository for Mars.1 47/55247/1
Matthias Sohn [Thu, 3 Sep 2015 22:46:06 +0000 (00:46 +0200)]
Update build to final R20150821153341 Orbit repository for Mars.1

Change-Id: I32d4c21f7cdd0c1a24f797012f98daa9a7f48acf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUpdate org.apache.httpcomponents 46/55246/1
Matthias Sohn [Mon, 13 Jul 2015 23:55:58 +0000 (01:55 +0200)]
Update org.apache.httpcomponents

- update org.apache.httpcomponents.httpcore to 4.3.3
- update org.apache.httpcomponents.httpclient to 4.3.6, 4.3.5 and later
  are reported to fix vulnerability CVE-2014-3577

CQ: 9220
CQ: 9221
Bug: 470523
Change-Id: I024448c941e81f7c1dc1cc2394329df90e9b3048
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoPushCertificateStore: Don't add no-op command to batch 28/55128/2
Dave Borowitz [Wed, 2 Sep 2015 19:04:33 +0000 (15:04 -0400)]
PushCertificateStore: Don't add no-op command to batch

If no refs match the input list and we are writing to a batch,
the returned new commit from write() will match the current commit.
Adding a command to the batch for this case is harmless as it will
succeed, but it's more straightforward to just skip adding a command
in this case.

Add tests or the combination of saving matching refs and saving to a
batch.

Change-Id: I6837389b08e6c80bc2d4c9e9c506d07293ea5fb2

9 years agoRestore lazy Bundle-ActivationPolicy removed in 3a4a5a4e 36/54936/1
Matthias Sohn [Mon, 31 Aug 2015 20:18:54 +0000 (22:18 +0200)]
Restore lazy Bundle-ActivationPolicy removed in 3a4a5a4e

This header was removed unintentionally from some bundles in
3a4a5a4e57f41c595ba950ea6f6680260669bf34. Restore it to ensure lazy
activation of bundles.

Change-Id: I1f841f978fb93278e3ec0533a01f1363510dd976
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUpdate uses-clauses in OSGi manifests 72/54872/2
Matthias Sohn [Mon, 31 Aug 2015 07:38:18 +0000 (09:38 +0200)]
Update uses-clauses in OSGi manifests

In Bug 476164 it was reported that EGit doesn't start when the platform
comes with jsch 0.1.51 while this version of EGit/JGit brings jsch
0.1.53. This could be caused by outdated uses-clauses. Hence recompute
them using PDE tooling.

Bug: 476164
Change-Id: I185ba097884ead9cd034eba842bd3bf34181a99b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoUse java.io.File to check existence of loose objects in ObjectDirectory 57/54757/1
Matthias Sohn [Fri, 28 Aug 2015 11:09:50 +0000 (13:09 +0200)]
Use java.io.File to check existence of loose objects in ObjectDirectory

It was reported in [1] that 197e3393a51424fae45e51dce4a649ba26e5a368 led
to a performance regression in a BFG benchmark. Analysis showed that
this is caused by the exists() method in FS_POSIX, now overriding the
default implementation in FS. The default implementation of FS.exists()
uses java.io.File.exists(), while the new implementation in FS_POSIX
uses java.nio.file.Files.exists() - by simply removing the override in
FS_POSIX, performance was restored.

Profiling showed that java.nio.file.Files.exists() is substantially
slower than java.io.File.exists(), to the point where the exists() call
doubles the average cost of a call to
ObjectDirectory.insertUnpackedObject() - which the BFG uses a lot,
because it's rewriting history. Average times measured on Ubuntu were:

java.io.File.exists() - 4 microseconds
java.nio.file.Files.exists() - 60 microseconds

The loose object exists test should be using java.io.File and not FS.
ObjectDirectory uses FS.resolve() to traverse symlinks to objects but
then once inside objects all 256 sharded directories should be real
directories, and the object files should be real files, not dangling
symlinks. java.io.File.exists() is sufficient here, and faster.

Change ObjectDirectory to use File.exists() once its computed the File
handle.

This does mean JGit cannot run ObjectDirectory code on an abstract
virtual filesystem plugged into NIO2. If you really want to run JGit on
an esoteric non-standard filesystem like "in memory" you should look at
the DFS storage backend, which has fewer abstraction points to deal
with. Or write your own from scratch.

[1] https://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02954.html

Change-Id: I74684dc3957ae1ca52a7097f83a6c420aa24310f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoFix warnings on FileUtils.isStaleFileHandle() 32/54632/1
Matthias Sohn [Wed, 26 Aug 2015 21:30:12 +0000 (23:30 +0200)]
Fix warnings on FileUtils.isStaleFileHandle()

- add @since annotation for new API method
- silence non-externalized String warning

Change-Id: I864176ced64e9569e7f2cdf8f777720655bfc578
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoDeprecate redundant FileUtil.delete(File), use FileUtils instead 37/53837/7
Andrey Loskutov [Sun, 16 Aug 2015 16:15:30 +0000 (18:15 +0200)]
Deprecate redundant FileUtil.delete(File), use FileUtils instead

Bug: 475070
Change-Id: I6dc651f4b47e1b2c8d7954ec982e21ae6bb5f7a6
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoHandle stale file handles on packed-refs file 50/54350/4
Martin Fick [Wed, 19 Aug 2015 21:05:54 +0000 (15:05 -0600)]
Handle stale file handles on packed-refs file

On a local filesystem the packed-refs file will be orphaned if it is
replaced by another client while the current client is reading the old
one. However, since NFS servers do not keep track of open files, instead
of orphaning the old packed-refs file, such a replacement will cause the
old file to be garbage collected instead.  A stale file handle exception
will be raised on NFS servers if the file is garbage collected (deleted)
on the server while it is being read.  Since we no longer have access to
the old file in these cases, the previous code would just fail. However,
in these cases, reopening the file and rereading it will succeed (since
it will reopen the new replacement file).  So retrying the read is a
viable strategy to deal with stale file handles on the packed-refs file,
implement such a strategy.

Since it is possible that the packed-refs file could be replaced again
while rereading it (multiple consecutive updates can easily occur with
ref deletions), loop on stale file handle exceptions, up to 5 extra
times, trying to read the packed-refs file again, until we either read
the new file, or find that the file no longer exists. The limit of 5 is
arbitrary, and provides a safe upper bounds to prevent infinite loops
consuming resources in a potential unforeseen persistent error
condition.

Change-Id: I085c472bafa6e2f32f610a33ddc8368bb4ab1814
Signed-off-by: Martin Fick<mfick@codeaurora.org>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
9 years agoMerge "Add public isStaleFileHandle() API, improve detection."
Matthias Sohn [Wed, 26 Aug 2015 20:16:28 +0000 (16:16 -0400)]
Merge "Add public isStaleFileHandle() API, improve detection."

9 years agoAdd public isStaleFileHandle() API, improve detection. 89/54489/1
Martin Fick [Tue, 25 Aug 2015 13:48:50 +0000 (07:48 -0600)]
Add public isStaleFileHandle() API, improve detection.

Add a public API to the FileUtils to determine if an IOException is a
stale NFS file handle exception.  This will make it easier to detect
such errors, and interpret them consistently throughout the codebase.
This new API is a bit more lenient in its detection than the previous
detection, and should be able to detect some errors which previously
were not identified as stale file handle exceptions because they had the
word NFS in the error message.  Adjust the packfile handling code to use
this new API for detection.

Change-Id: I21f80014546ba1afec7335890e5ae79e7f521412
Signed-off-by: Martin Fick<mfick@codeaurora.org>
9 years agoSet "potentialNullReference" to "error" level and fixed all issues 75/52575/5
Andrey Loskutov [Sun, 26 Jul 2015 12:42:52 +0000 (14:42 +0200)]
Set "potentialNullReference" to "error" level and fixed all issues

There should be no functional change, the logic updated only to make
code simple so that compiler can understand what is going for. Removed
all @SuppressWarnings("null") annotations since they cannot be used if
"org.eclipse.jdt.core.compiler.problem.potentialNullReference" option is
set to the "error" level.

Bug: 470647
Change-Id: Ie93c249fa46e792198d362e531d5cbabaf41fdc4
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoEnable annotation based NPE analysis in jgit 80/50580/7
Andrey Loskutov [Sat, 20 Jun 2015 18:01:56 +0000 (20:01 +0200)]
Enable annotation based NPE analysis in jgit

Bug: 470647
Change-Id: I14d1983bb7c208faeffee0504e0567e38d8a89f3
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
9 years agoUpdate Jetty to 9.2.13.v20150730 77/54177/1
Matthias Sohn [Wed, 19 Aug 2015 22:46:58 +0000 (00:46 +0200)]
Update Jetty to 9.2.13.v20150730

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