]> source.dussan.org Git - jgit.git/log
jgit.git
8 years agoCherryPickCommandTest: Create Git instances in try-with-resource 42/64842/1
David Pursehouse [Thu, 21 Jan 2016 09:07:54 +0000 (18:07 +0900)]
CherryPickCommandTest: Create Git instances in try-with-resource

Change-Id: I9d49258bdf12f3221013c37cfb8a21ea27f28860
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoDiffFormatterTest: Create auto-closeable instances in try-with-resource 40/64840/1
David Pursehouse [Thu, 21 Jan 2016 08:00:15 +0000 (17:00 +0900)]
DiffFormatterTest: Create auto-closeable instances in try-with-resource

Git, ByteArrayOutputStream, and DiffFormatter are auto-closeable and
should be managed in try-with-resource.

Change-Id: I83395116acb4b4f7cd4300fd69564355bc07e4bb
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoConfigTest: Create Git instance in try-with-resource 30/64830/1
David Pursehouse [Thu, 21 Jan 2016 06:31:56 +0000 (15:31 +0900)]
ConfigTest: Create Git instance in try-with-resource

Change-Id: Ie65c69e0f1aed95bcdf68ebd68d21b3e2590b41c
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoCommitAndLogCommandTest: Use assumeFalse to skip test on Windows 29/64829/1
David Pursehouse [Thu, 21 Jan 2016 06:30:23 +0000 (15:30 +0900)]
CommitAndLogCommandTest: Use assumeFalse to skip test on Windows

Use JUnit's assumeFalse method to cause the test to skip when
run on Windows.

Change-Id: I3f59440cfe62c37c127e381052b60471fbe8ec5e
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoCommitAndLogCommandTest: Create Git instances in try-with-resource 28/64828/1
David Pursehouse [Thu, 21 Jan 2016 06:25:46 +0000 (15:25 +0900)]
CommitAndLogCommandTest: Create Git instances in try-with-resource

Change-Id: Id06417f1d3914cd3addacdbe9b5801a06cc3955f
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoAddCommandTest: Create Git instances in try-with-resource 25/64825/1
David Pursehouse [Thu, 21 Jan 2016 01:21:12 +0000 (10:21 +0900)]
AddCommandTest: Create Git instances in try-with-resource

Change-Id: Idf42f03099eeb9975fef9492ea8a75776afc2a3c
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoArchiveCommandTest: Create Git instances in try-with-resource 24/64824/1
David Pursehouse [Thu, 21 Jan 2016 00:45:58 +0000 (09:45 +0900)]
ArchiveCommandTest: Create Git instances in try-with-resource

Change-Id: Icbfd92395db85818736142fd3fb3432385e89ca9
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoTagCommandTest: Instantiate Git and RevWalk objects in try-with-resource 44/64744/1
David Pursehouse [Wed, 20 Jan 2016 09:34:41 +0000 (18:34 +0900)]
TagCommandTest: Instantiate Git and RevWalk objects in try-with-resource

Change-Id: I08959650e2970e964bc864dc6d120d7bddfd8232
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoBlameCommandTest: Instantiate Git objects in try-with-resource 43/64743/1
David Pursehouse [Wed, 20 Jan 2016 09:33:58 +0000 (18:33 +0900)]
BlameCommandTest: Instantiate Git objects in try-with-resource

Change-Id: Icb9e6bb9ee99589fa2e0388c8b305a8a1f5954db
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoSideBandOutputStreamTest: Use try-with-resource 18/64718/1
David Pursehouse [Wed, 20 Jan 2016 02:38:35 +0000 (11:38 +0900)]
SideBandOutputStreamTest: Use try-with-resource

Factor out the creation of the SideBandOutputStream objects into
a utility method that wraps it in a try-with-resource.

Remove the "unused" suppression that is now unnecessary, and add
declaration that the tests methods can throw Exception.

Change-Id: Iff02e4e3532bd6ab6e423f197e70d44c4f328d0b
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoFileTreeIteratorJava7Test: Create Git instances in try-with-resource 17/64717/1
David Pursehouse [Wed, 20 Jan 2016 02:22:18 +0000 (11:22 +0900)]
FileTreeIteratorJava7Test: Create Git instances in try-with-resource

Change-Id: I493e90e8a0d96db5acc49759c8e138b0a8c7b099
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoCheckoutCommandTest: Create Git instances in try-with-resource 25/64325/2
David Pursehouse [Thu, 14 Jan 2016 08:56:49 +0000 (17:56 +0900)]
CheckoutCommandTest: Create Git instances in try-with-resource

Also rename a local variable in one of the tests that was hiding
a class variable of the same name.

Change-Id: Ia9398157b87a78df6eef0b64a833c16ca2e57ce3
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoBranchCommandTest: Create Git instances in try-with-resource 24/64324/2
David Pursehouse [Thu, 14 Jan 2016 08:53:28 +0000 (17:53 +0900)]
BranchCommandTest: Create Git instances in try-with-resource

Also remove a local variable in one of the tests that was
hiding a member variable with the same name.

Change-Id: Ia4d94cdbf2d83d8be2645f0a93d8891d01606c59
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoCheckoutTest: Create Git instances in try-with-resource 23/64323/2
David Pursehouse [Thu, 14 Jan 2016 08:49:26 +0000 (17:49 +0900)]
CheckoutTest: Create Git instances in try-with-resource

Change-Id: I49a03f7bee0b61c062ce160674f9aa0cd1bcc8ba
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoBranchTest: Create Git instances in try-with-resource 22/64322/2
David Pursehouse [Thu, 14 Jan 2016 08:38:18 +0000 (17:38 +0900)]
BranchTest: Create Git instances in try-with-resource

Change-Id: I8becee479fab91a18e6daffd6f4fd57338c9d120
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoURIishTest: Use @Test annotation's `expected` argument 21/64321/2
David Pursehouse [Thu, 14 Jan 2016 08:25:56 +0000 (17:25 +0900)]
URIishTest: Use @Test annotation's `expected` argument

Specify the expected exception in the annotation, instead of
catching it and calling `fail()` when it wasn't raised.

Change-Id: I8a640c0e42353533e4e73b85b50c224dc060f2d7
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoSuppress "The allocated object is never used" warning in tests 20/64320/2
David Pursehouse [Thu, 14 Jan 2016 08:01:50 +0000 (17:01 +0900)]
Suppress "The allocated object is never used" warning in tests

Change-Id: Ibb405e0b36ce5a2cb30268a7de31ab2bd079ad80
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoAdd $NON-NLS to suppress "Non-externalized string literal" warnings 19/64319/2
David Pursehouse [Thu, 14 Jan 2016 07:37:39 +0000 (16:37 +0900)]
Add $NON-NLS to suppress "Non-externalized string literal" warnings

Change-Id: I3e6f83ad2bc7d493e2c1ab5a8c60affa2b49c386
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoDon't use deprecated constructors of CmdLineException 16/64316/2
David Pursehouse [Thu, 14 Jan 2016 06:25:28 +0000 (15:25 +0900)]
Don't use deprecated constructors of CmdLineException

Change-Id: If01fa896537209821d6a7a262ee978572195a397
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoMerge "Prepare 4.2.0-SNAPSHOT builds" into stable-4.2
Matthias Sohn [Tue, 19 Jan 2016 15:04:05 +0000 (10:04 -0500)]
Merge "Prepare 4.2.0-SNAPSHOT builds" into stable-4.2

8 years agoMerge "Remove org.eclipse.jgit.updatesite project from tools/version.sh" into stable-4.2
Matthias Sohn [Tue, 19 Jan 2016 14:15:58 +0000 (09:15 -0500)]
Merge "Remove org.eclipse.jgit.updatesite project from tools/version.sh" into stable-4.2

8 years agoPrepare 4.2.0-SNAPSHOT builds 57/64657/1
Matthias Sohn [Tue, 19 Jan 2016 12:10:20 +0000 (13:10 +0100)]
Prepare 4.2.0-SNAPSHOT builds

Change-Id: Ibe38a95bf36db0c0ed948280b28c416943ec0329
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRemove org.eclipse.jgit.updatesite project from tools/version.sh 56/64656/1
Matthias Sohn [Tue, 19 Jan 2016 12:07:24 +0000 (13:07 +0100)]
Remove org.eclipse.jgit.updatesite project from tools/version.sh

We don't need to update versions for this project which was removed
a long time ago.

Change-Id: Ie2d030134942add152847581797db3a213ec4c9e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRevParse: Remove superfluous semicolon 15/64315/1
David Pursehouse [Thu, 14 Jan 2016 06:17:46 +0000 (15:17 +0900)]
RevParse: Remove superfluous semicolon

Change-Id: I5975bc58d7933dafb3e7a8d891e9f6878b98a9a1
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoRefUpdateTest: Use try-with-resource for auto-closable types 14/64314/1
David Pursehouse [Thu, 14 Jan 2016 06:09:20 +0000 (15:09 +0900)]
RefUpdateTest: Use try-with-resource for auto-closable types

Change-Id: I25c8db0e410aa2a4a53dc7d8863e4a6efefcf7cb
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoRefUpdateTest: Add null check to prevent potential NPE 13/64313/1
David Pursehouse [Thu, 14 Jan 2016 06:06:10 +0000 (15:06 +0900)]
RefUpdateTest: Add null check to prevent potential NPE

Change-Id: I64b1850c3bb80b09409044461ca3fdde1c46d4bb
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoCommitCommand: Remove redundant null check 12/64312/1
David Pursehouse [Thu, 14 Jan 2016 05:59:55 +0000 (14:59 +0900)]
CommitCommand: Remove redundant null check

Repository.getWorkTree is annotated as @NonNull, so the check
for it returning null is redundant.

Change-Id: I597b0f774ff857b8900519f14a1a17a904cf7c6f
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
8 years agoJGit v4.2.0.201512141825-rc1 71/62671/1 v4.2.0.201512141825-rc1
Matthias Sohn [Mon, 14 Dec 2015 23:22:13 +0000 (00:22 +0100)]
JGit v4.2.0.201512141825-rc1

Change-Id: Id725ea888acd23793d37de2864ec0727160a2eaf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'master' into stable-4.2 70/62670/1
Matthias Sohn [Mon, 14 Dec 2015 23:07:22 +0000 (00:07 +0100)]
Merge branch 'master' into stable-4.2

Change-Id: Ia92c91e1226da7d6455ab14f1e255a1546f8f357
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "push: Do not blindly overwrite peer"
Shawn Pearce [Mon, 14 Dec 2015 22:45:56 +0000 (17:45 -0500)]
Merge "push: Do not blindly overwrite peer"

8 years agopush: Do not blindly overwrite peer 50/62650/2
Shawn Pearce [Mon, 14 Dec 2015 04:26:01 +0000 (20:26 -0800)]
push: Do not blindly overwrite peer

If an application uses PushConnection directly on the native Git wire
protocols JGit should send along the application's expected oldId, not
the advertised value.  This allows the remote peer to compare-and-swap
since it was not tested inside JGit.

Discovered when I tried to use a PushConnection (bypassing the
standard PushProcess) and the client blindly overwrote the remote
reference, even though my app had supplied the wrong ObjectId for
the expectedOldObjectId. This was not expected and cost me over an
hour of debugging, plus "corruption" in the remote repository.

By passing along the exact expectedOldObjectId from the app the
remote side can do the check that the application skipped, and
avoid data loss.

Change-Id: Id3920837e6c47100376225bb4dd61fa3e88c64db

8 years agoFix FileTreeIterator.idSubmodule(Entry) 26/61826/2
Christian Halstrick [Wed, 2 Dec 2015 08:16:03 +0000 (09:16 +0100)]
Fix FileTreeIterator.idSubmodule(Entry)

FileTreeIterator was calling by mistake
WorkingTreeIterator.idSubmodule(Entry). Instead it should always compute
idSubmodule on its own.

Change-Id: Id1b988aded06939b1d7edd2671e34bf756896c0e

8 years agoURIish: fixed full uri pattern not expecting end of line after host name 96/61596/3
Andrey Loskutov [Mon, 30 Nov 2015 21:48:13 +0000 (22:48 +0100)]
URIish: fixed full uri pattern not expecting end of line after host name

Bug: 483326
Change-Id: I8b6e3eb648c8ec2c38f73de22382537b1276b779
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoAdd remote command to JGit CLI 53/59553/5
Kaloyan Raev [Mon, 6 Jan 2014 12:40:47 +0000 (14:40 +0200)]
Add remote command to JGit CLI

Supported subcommands are:
 - <none> (lists available remotes)
 - add
 - remove
 - set-url
 - update

Supported options are:
 --verbose
 --push
 --prune

Bug: 481316
Change-Id: I57c34ed6daabb7d308bc383b17c1ef4af433e714
Signed-off-by: Kaloyan Raev <kaloyan.r@zend.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Fix NPE in HttpAuthMethod"
Christian Halstrick [Tue, 8 Dec 2015 07:25:34 +0000 (02:25 -0500)]
Merge "Fix NPE in HttpAuthMethod"

8 years agoUse runtime retention for Nullable annotation 48/62148/5
Jonathan Nieder [Mon, 7 Dec 2015 20:56:32 +0000 (12:56 -0800)]
Use runtime retention for Nullable annotation

JGit's Nullable type was added[1] in the hope of being able to add
nullness annotations that (a) do not preclude building and running
with Java 7 and (b) could be shared by Gerrit, which uses a custom
Nullable type for other reasons[2].  Sharing a type is useful because
Eclipse's null analysis is only able to use one Nullable type at a
time in a given workspace (so for this analysis to function in a
workspace used to develop Gerrit, JGit and Gerrit would need to use
the same Nullable type).

The new Nullable type has CLASS instead of RUNTIME retention because
there wasn't any obvious use for the annotation at run time.

Gerrit uses the Nullable annotation to communicate with Guice.  Guice
injection happens at runtime, so it needs to be able to read the
@Nullable annotations at run time[3].  Otherwise Guice produces
provisioning errors, such as

 3) null returned by binding at com.google.gerrit.lucene.LuceneChangeIndex$Factory.create()
  but parameter 7 of com.google.gerrit.lucene.LuceneChangeIndex.<init>() is not @Nullable

Switch to RUNTIME retention to avoid this.

While at it, update the javadoc to explain more clearly how this
annotation relates to other Nullable types[4].  This should make it
clearer why JGit needed another Nullable type:

 A. Avoiding dependency on Java 8
 B. RUNTIME retention to allow Guice to read the annotation at run time
 C. Named Nullable so Guice can recognize the annotation
 D. Not an addition to Java EE's javax.annotation package, to avoid
    the split-package problem[2] that prevents the annotation from
    being readable at run time when loaded from an OSGi container
 E. Avoiding heavyweight dependencies, deprecated dependencies, and
    dependencies on package internals

 org.checkerframework.checker.nullness.qual.Nullable: A
 com.sun.istack.internal.Nullable: B, E
 *.CheckForNull, *.NullAllowed, etc: C
 edu.umd.cs.findbugs.annotations.Nullable: B, E
 javax.annotation.Nullable: D
 org.eclipse.jdt.annotation.Nullable: B
 org.jetbrains.annotations.Nullable: B
 org.jmlspecs.annotation.Nullable: E
 android.annotation.Nullable, android.support.annotation.Nullable: E

[1] https://git.eclipse.org/r/59993
[2] https://gerrit-review.googlesource.com/50112
[3] https://github.com/google/guice/blob/master/core/src/com/google/inject/internal/Nullability.java
[4] https://github.com/typetools/checker-framework/blob/5832a01f1/checker/src/org/checkerframework/checker/nullness/NullnessAnnotatedTypeFactory.java#L118
    http://types.cs.washington.edu/checker-framework/current/checker-framework-manual.html#nullness-related-work

Change-Id: I6c482653d2b53e3509abb11211b67fc29cf2949c
Signed-off-by: Jonathan Nieder <jrn@google.com>
8 years agoFix NPE in HttpAuthMethod 17/62117/1
Matthias Sohn [Fri, 27 Nov 2015 10:02:32 +0000 (11:02 +0100)]
Fix NPE in HttpAuthMethod

If the password char array is null constructing a new String from this
array fails with a NPE. Add a null check to fix this.

Change-Id: Ifae6eecca38d5f114861f44658a32521e6e96866
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoSupport atomic push in JGit client 41/61841/2
Shawn Pearce [Thu, 3 Dec 2015 05:47:58 +0000 (21:47 -0800)]
Support atomic push in JGit client

This should mirror the behavior of `git push --atomic` where the
client asks the server to apply all-or-nothing. Some JGit servers
already support this based on a custom DFS backend. InMemoryRepository
is extended to support atomic push for unit testing purposes.

Local disk server side support inside of JGit is a more complex animal
due to the excessive amount of file locking required to protect every
reference as a loose reference.

Change-Id: I15083fbe48447678e034afeffb4639572a32f50c

8 years agoFix wrong @since tag In ReceiveCommand 81/61781/1
Matthias Sohn [Wed, 2 Dec 2015 14:24:26 +0000 (15:24 +0100)]
Fix wrong @since tag In ReceiveCommand

Change-Id: I58fa657dd4783fed0ffca94020c87c49d99009c6
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoReceiveCommand.filter: Accept Iterable 12/61712/1
Shawn Pearce [Tue, 1 Dec 2015 22:20:44 +0000 (14:20 -0800)]
ReceiveCommand.filter: Accept Iterable

PreReceiveHook is given a Collection<ReceiveCommand> and it can be
very useful here to call ReceiveCommand.filter(cmds, NOT_ATTEMPTED).

Overload filter to accept both Iterable and List.
Keep backwards binary compatibility for List by upcasting to Iterable.

Change-Id: Ib1341876c703670945ef209edc8259715ee86c26

8 years agoMerge changes If1490ca2,Ife950253
Shawn Pearce [Tue, 1 Dec 2015 00:03:10 +0000 (19:03 -0500)]
Merge changes If1490ca2,Ife950253

* changes:
  DirCacheBuilder: Speed up reading from trees
  Delay locating .gitattributes until requested

8 years agoDirCacheBuilder: Speed up reading from trees 18/61518/7
Shawn Pearce [Sat, 28 Nov 2015 17:23:59 +0000 (09:23 -0800)]
DirCacheBuilder: Speed up reading from trees

Recursively copying a tree into a DirCache is a bottleneck for some
algorithms like the in memory merge code in Gerrit Code Review.  Drop
a layer down in the stack and use CanonicalTreeParser directly as the
addition logic only processes 1 tree at a time and does not need the
merge sorting feature (or overhead) of TreeWalk.

Combined with 761814fe9c ("DirCacheEntry: Speed up creation by
avoiding string cast") tree loading 38,900 entries nearly halves
in running time from 70ms to 36ms on some platforms.

Change-Id: If1490ca25de0679a71cf508f59b486f9cc816165

8 years agoDirCache: Add helper to read from a tree 20/61520/3
Shawn Pearce [Sat, 28 Nov 2015 20:34:55 +0000 (12:34 -0800)]
DirCache: Add helper to read from a tree

Application code sometimes wants to read a DirCache from an ObjectId,
but its confusing how to do this because its buried inside the
DirCacheBuilder.

Use this utility in a few places within JGit that also want to read
a DirCache from a tree's ObjectId.

Change-Id: I578b7e18e58753d154937f4ab835012b09e5adca

8 years agoDelay locating .gitattributes until requested 22/61522/5
Shawn Pearce [Sun, 29 Nov 2015 20:04:03 +0000 (12:04 -0800)]
Delay locating .gitattributes until requested

Instead of checking every entry for .gitattributes only look for the
entry on request by TreeWalk.  This avoids impacting uses like RevWalk
filtering history.

When the attrs is requested skip to the start of the tree and look for
.gitattributes until either it is found, or it is impossible to be
present.  Due to the sorting rules of tree entries .gitattributes
should be among the first or second entries in the tree so very few
entries will need to be considered.

Waiting to find the .gitattributes file by native ordering may miss
attrs for files like .config, which sorts before .gitattributes.
Starting from the front of the tree on demand ensures the attributes
are parsed as early as necessary to process any entry in the tree.

Due to TreeWalk recursively processing up the tree of iterators we
cannot just reset the current CanonicalTreeParser to the start as
parent parsers share the same path buffer as their children.
Resetting a parent to look for .gitattributes may overwrite path
buffer data used by a child iterator.  Work around this by building a
new temporary CanonicalTreeParser instance.

Change-Id: Ife950253b687be325340d27e9915c9a40df2641c

8 years agoDirCache: Fix bad code formatting 17/61517/1
Shawn Pearce [Sat, 28 Nov 2015 17:21:31 +0000 (09:21 -0800)]
DirCache: Fix bad code formatting

Line breaking before , is ugly to read.  Most formatters and humans
expect line break after , so update a few offensive locations.

Use String.format() for the construction of the error message when
a bad DirCachEntry is being failed on. This simplifies the code and
its not a performance critical section.

Change-Id: I5d990389e7ba24ef0861cf8ec0026ed030d4aeda

8 years agoDirCacheEntry: Speed up creation by avoiding string cast 16/61516/1
Shawn Pearce [Sat, 28 Nov 2015 16:58:15 +0000 (08:58 -0800)]
DirCacheEntry: Speed up creation by avoiding string cast

The checkPath function is available as a byte[] form, in fact the
String form just converts to byte[] to run the algorithm.

Having DirCacheEntry take a byte[] -> String -> byte[] to check if
each path is valid is a huge waste of CPU time. On some systems it
can double the time required to read 38,999 files from trees to the
DirCache. This slows down any operation using a DirCache.

Expose the byte[] form and use it for DirCacheEntry creation.

Change-Id: I6db7bc793ece99ff3c356338d793c07c061aeac7

8 years agoDirCache: Fix getEntriesWithin("") to not include null entries 13/61513/1
Shawn Pearce [Sat, 28 Nov 2015 05:34:16 +0000 (21:34 -0800)]
DirCache: Fix getEntriesWithin("") to not include null entries

The internal array may be longer than entryCnt, in this case the tail
of the array is padded with null entries. Do not return those to the
caller of getEntriesWithin().

Change-Id: I19efb05e103fab6b739ced407f6e28155a48dba6

8 years agoFix performance regression in CanonicalTreeParser 12/61512/1
Shawn Pearce [Sat, 28 Nov 2015 07:21:33 +0000 (23:21 -0800)]
Fix performance regression in CanonicalTreeParser

Change-Id: I14046559fddb9656d890d3099010117e84cd9439

8 years agoAdd support for smudge filters 19/59319/16
Christian Halstrick [Thu, 29 Oct 2015 13:15:08 +0000 (14:15 +0100)]
Add support for smudge filters

If defined in .gitattributes call smudge filter during checkout.

To support checkout where current HEAD,index do not contain attributes
we need to also consider attributes from the tree we checkout. Therefore
CanonicalTreeParser has to learn how to provide attributes.

Change-Id: I168fdb81a8e1a9f991587b3e95a36550ea845f0a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd support for clean filters 72/50372/25
Christian Halstrick [Wed, 28 Oct 2015 12:25:09 +0000 (13:25 +0100)]
Add support for clean filters

When filters are defined for certain paths in gitattributes make
sure that clean filters are processed when adding new content to the
object database.

Change-Id: Iffd72914cec5b434ba4d0de232e285b7492db868
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd the new class Attributes holding multiple Attribute(s) 01/60601/10
Ivan Motsch [Tue, 17 Nov 2015 12:32:20 +0000 (13:32 +0100)]
Add the new class Attributes holding multiple Attribute(s)

Attributes represents a semantic collector of Attribute(s) and replaces
the anonymous Map<String,Attribute>. This class will be returned by
TreeWalk.getAttributes(). It offers convenient access to the attributes
wrapped in the Attributes object. Adds preparations for a future
Attribute Macro Expansion

Change-Id: I8348c8c457a2a7f1f0c48050e10399b0fa1cdbe1
Signed-off-by: Ivan Motsch <ivan.motsch@bsiag.com>
8 years agoFix unit tests on Windows 03/61203/2
Christian Halstrick [Tue, 24 Nov 2015 14:16:42 +0000 (15:16 +0100)]
Fix unit tests on Windows

PushCommandTest and RunExternalScriptTest didn't succeed on Windows.
Fix this by expecting a simple line-feed as line ending (instead of the
platform dependent line separator. Additionally correct the computation
of expected URLs in PushCommandTest.

Change-Id: Idcdc41cd7e535ff88df33ea0a249333ed8fc91b0
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd missing @since tags and missing javadoc 00/61300/2
Matthias Sohn [Wed, 25 Nov 2015 23:32:37 +0000 (00:32 +0100)]
Add missing @since tags and missing javadoc

Change-Id: I8575797127fc96abea8af56f019ca39f5897486f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix HookTest when running on Win32_Cygwin 18/60918/3
Christian Halstrick [Fri, 20 Nov 2015 13:38:24 +0000 (14:38 +0100)]
Fix HookTest when running on Win32_Cygwin

This test expected that the test scripts emit a platform-dependent
newline (crlf on windows, lf on linux). But that's not true. Expected
result should always be a trailing "\n" because the test scripts
explicitly echo a "\n" in the end.

Change-Id: I604e08cda8cebe276b5214ba0f618b6112c3441f

8 years agoFix FS.runProcess() to close the InputStream 65/61165/2
Christian Halstrick [Tue, 24 Nov 2015 10:18:59 +0000 (11:18 +0100)]
Fix FS.runProcess() to close the InputStream

When FS.runProcess was called and an InputStream was given the method
tried to pump the whole InputStream to the process. When the method
ended the InputStream was not giving any data anymore. Consequently
close the InputStream inside the method.

Change-Id: I0ed738a775e5c977b21447d195acee1ecf5e2cb9

8 years agorepo: Do not use search path to find refs/remotes/origin/<branch> 53/60853/5
Jonathan Nieder [Thu, 19 Nov 2015 20:47:18 +0000 (12:47 -0800)]
repo: Do not use search path to find refs/remotes/origin/<branch>

When running from a non-bare repository, "jgit repo" checks whether
the rev passed in is a sha1 or branch name and in the latter case will
check out origin/<branch>.

We are expecting refs/remotes/origin/<branch>, but as a side effect of
using getRef we also end up looking for refs/origin/<branch>,
refs/heads/origin/<branch>, and so on.  Avoid that by using exactRef
instead.

Signed-off-by: Jonathan Nieder <jrn@google.com>
Change-Id: I670b2e48a88138a1f2104ea201baa958e9edbddb

8 years agoRepository: Introduce exactRef and findRef, deprecate getRef 74/49574/7
Jonathan Nieder [Fri, 5 Jun 2015 22:20:24 +0000 (15:20 -0700)]
Repository: Introduce exactRef and findRef, deprecate getRef

The Repository class provides only one method to look up a ref by
name, getRef.  If I request refs/heads/master and that ref does not
exist, getRef will look further in the search path:

 ref/refs/heads/master
 refs/heads/refs/heads/master
 refs/remotes/refs/heads/master

This behavior is counterintuitive, needlessly inexpensive, and usually
not what the caller expects.

Allow callers to specify whether to use the search path by providing
two separate methods:

- exactRef, which looks up a ref when its exact name is known
- findRef, which looks for a ref along the search path

For backward compatibility, keep getRef as a deprecated synonym for
findRef.

This change introduces findRef and exactRef but does not update
callers outside tests to use them yet.

Change-Id: I35375d942baeb3ded15520388f8ebb9c0cc86f8c
Signed-off-by: Jonathan Nieder <jrn@google.com>
8 years agoNull-annotated RefDatabase class 90/61290/1
Andrey Loskutov [Wed, 25 Nov 2015 20:19:05 +0000 (21:19 +0100)]
Null-annotated RefDatabase class

No other code changes except adding nullness annotations.

Change-Id: If2606fb208f6690bd4fd7ad953e709a3ebd6398c
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoNull-annotated Repository class and fixed related compiler errors 42/60442/7
Andrey Loskutov [Sun, 15 Nov 2015 22:59:41 +0000 (23:59 +0100)]
Null-annotated Repository class and fixed related compiler errors

org.eclipse.jgit.lib.Repository class is an example of the API which
should be written with Java 8 java.util.Optional<T> type. Unfortunately
this API is already released and widely used. The good clients are
currently doing their best with checking return values for null and bad
clients do not know how bad their code is.

I've tried not to change any logic and to be as less intrusive as
possible. Most of the JGit code was well prepared to this, only few
classes needed some smaller fixes.

This change fixes all compiler errors in JGit and replaces possible
NPE's with either appropriate exceptions, avoiding multiple "Nullable
return" method calls or early returning from the method.

Because annotating getDirectory() and getFS() as Nullable would cause
lot of additional changes in JGit and EGit they are postponed.

Change-Id: Ie8369d2c9c5fac5ce83b3b1b9bc217d7b55502a3
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoRaise error if FileNotFoundException is caught for an existing file 39/60939/5
Matthias Sohn [Fri, 20 Nov 2015 13:40:41 +0000 (14:40 +0100)]
Raise error if FileNotFoundException is caught for an existing file

File, FileInputStream and friends may throw FileNotFoundException even
if the file is existing e.g. when file permissions don't allow to access
the file content. In most cases this is a severe error we should not
suppress hence rethrow the FileNotFoundException in this case.

This may also fix bug 451508.

Bug: 451508
Change-Id: If4a94217fb5b7cfd4c04d881902f3e86193c7008
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "RefDirectory.getRef: Treat fake missing symrefs like real ones"
Jonathan Nieder [Tue, 24 Nov 2015 20:43:05 +0000 (15:43 -0500)]
Merge "RefDirectory.getRef: Treat fake missing symrefs like real ones"

8 years agoLet FS_Win32_Cygwin detect symlink support by creating temporary symlink 17/60917/2
Christian Halstrick [Fri, 20 Nov 2015 13:33:15 +0000 (14:33 +0100)]
Let FS_Win32_Cygwin detect symlink support by creating temporary symlink

The class FS_Win32 was always trying out to create a temporary symlink
in order to find out whether symlinks are supported. FS_Win32_Cygwin was
overwriting this method and always returned true. But when the user
running JGit does not have administrative rights then the creation of
symlinks is forbidden even if he is running on FS_Win32_Cygwin. A lot of
tests failed only on the Windows platform because of this. It was
correctly detected that FS_Win32_Cygwin is the filesystem abstraction to
be used but creation of symlinks always failed because of lacking
privileges of the user running the tests.

This fix teaches FS_Win32_Cygwin to behave like FS_Win32 and to test
whether symlinks can be created in order to find out whether symlinks
are supported.

Change-Id: Ie2394631ffc4c489bd37c3ec142ed44bbfcac726
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix classpath of test launch configurations 62/60762/3
Matthias Sohn [Wed, 18 Nov 2015 23:47:05 +0000 (00:47 +0100)]
Fix classpath of test launch configurations

Remove references to the bundle org.eclipse.jgit.java7 which was removed
in 4.0.

Change-Id: I85527eb2a34bb94979fdab1311043ae77a2b5ecd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAvoid UnknownHostException in WalkEncryptionTest 87/60187/4
Matthias Sohn [Thu, 12 Nov 2015 10:28:01 +0000 (11:28 +0100)]
Avoid UnknownHostException in WalkEncryptionTest

Prevent that WalkEncryptionTest fails when it can't determine the public
IP address using http://checkip.amazonws.com. Also set timeouts when
determining IP address in order to prevent long wait times during tests.

Change-Id: I1d2fe09f99df2a5f75f8077811a72fb2271cdddb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRemove no longer needed outdated API warning filter 57/60957/2
Matthias Sohn [Fri, 20 Nov 2015 23:18:14 +0000 (00:18 +0100)]
Remove no longer needed outdated API warning filter

This fixes a warning saying this filter isn't needed anymore.

Change-Id: If77056378befe86c1773950dbe48a82c833fd532
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRefDirectory.getRef: Treat fake missing symrefs like real ones 07/60107/3
Jonathan Nieder [Wed, 11 Nov 2015 00:34:00 +0000 (16:34 -0800)]
RefDirectory.getRef: Treat fake missing symrefs like real ones

getRef() loops over its search path to find a ref:

Ref ref = null;
for (String prefix : SEARCH_PATH) {
ref = readRef(prefix + needle, packed);
if (ref != null) {
ref = resolve(ref, 0, null, null, packed);
break;
}
}
fireRefsChanged();
return ref;

If readRef returns null (indicating that the ref does not exist), the
loop continues so we can find the ref later in the search path.  And
resolve should never return null, so if we return null it should mean
we exhausted the entire search path and didn't find the ref.

... except that resolve can return null: it does so when it has
followed too many symrefs and concluded that there is a symref loop:

if (MAX_SYMBOLIC_REF_DEPTH <= depth)
return null; // claim it doesn't exist

Continue the loop instead of returning null immediately.  This makes
the behavior more consistent.

Arguably getRef should throw an exception when a symref loop is
detected.  That would be a more invasive change, so if it's a good
idea it will have to wait for another patch.

Change-Id: Icb1c7fafd4f1e34c9b43538e27ab5bbc17ad9eef
Signed-off-by: Jonathan Nieder <jrn@google.com>
8 years agoMerge "git rev-parse: Add --verify option"
Jonathan Nieder [Thu, 19 Nov 2015 22:49:17 +0000 (17:49 -0500)]
Merge "git rev-parse: Add --verify option"

8 years agogit rev-parse: Add --verify option 36/60836/4
Thomas Meyer [Thu, 19 Nov 2015 22:14:03 +0000 (23:14 +0100)]
git rev-parse: Add --verify option

Add the --verify option to be more compatible with git

Change-Id: I225a36ecc4711fd2eb9af67ca8fb79681d94c587
Signed-off-by: Thomas Meyer <thomas.mey@web.de>
8 years agoThrow IndexReadException if existing index can't be read 99/60799/2
Christian Halstrick [Thu, 19 Nov 2015 16:21:46 +0000 (17:21 +0100)]
Throw IndexReadException if existing index can't be read

If the index file exists but can't be read for example because of wrong
filesystem permissions we should throw a specific exception. This allows
EGit to handle this error situation.

Bug: 482607
Change-Id: I50bfcb719c45caac3cb5550a8b16307c2ea9def4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix pre-push hook to not set null remoteName as first argument 32/60632/3
Matthias Sohn [Tue, 17 Nov 2015 16:26:53 +0000 (17:26 +0100)]
Fix pre-push hook to not set null remoteName as first argument

According to [1] the pre-push hook expects two parameters which provide
the name and location of the destination remote, if a named remote is
not being used both values should be the same.

We did set the first parameter to null in that case which caused
ProcessBuilder to throw a NullPointerException since its start() method
doesn't accept null arguments.

[1] https://git-scm.com/docs/githooks#_pre_push

Bug: 482393
Change-Id: Idb9b0a48cefac01abfcfdf00f6d173f8fa1d9a7b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoIntroduce FS.execute() to execute a command defined by a ProcessBuilder 02/59102/13
Christian Halstrick [Wed, 28 Oct 2015 12:24:28 +0000 (13:24 +0100)]
Introduce FS.execute() to execute a command defined by a ProcessBuilder

Change-Id: I2ad2c71ad30b969455bdea89637b8e996b1dad8c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd an attribute accessor to CanonicalTreeParser and use it in Treewalk 68/60068/6
Christian Halstrick [Tue, 10 Nov 2015 15:21:00 +0000 (16:21 +0100)]
Add an attribute accessor to CanonicalTreeParser and use it in Treewalk

When checking out a branch we need to access the attributes stored
in the tree to be checked out. E.g. directly after a clone we checkout
the remote HEAD. In this case index and workingtree are still empty.
So we have to search the tree to be checked out for attributes.

Change-Id: I6d96f5d095ed2e3c259d4b12124e404f5215bd9f

8 years agoAdds the git attributes computation on the treewalk 77/35377/22
Arthur Daussy [Fri, 31 Oct 2014 16:46:36 +0000 (17:46 +0100)]
Adds the git attributes computation on the treewalk

Adds the getAttributes feature to the tree walk. The computation of
attributes needs to be done by the TreeWalk since it needs both a
WorkingTreeIterator and a DirCacheIterator.

Bug: 342372
CQ: 9120
Change-Id: I5e33257fd8c9895869a128bad3fd1e720409d361
Signed-off-by: Arthur Daussy <arthur.daussy@obeo.fr>
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
8 years agoMake jgit annotations accessible to other plugins 38/60638/2
Andrey Loskutov [Mon, 16 Nov 2015 22:41:38 +0000 (23:41 +0100)]
Make jgit annotations accessible to other plugins

Other plugins which want to use JGit nullness annotations in their code
cannot do this if the annotations aren't part of the published API.

Unfortunately it looks like although Eclipse JDT allows to use custom
nullness annotation types per project, it does not understand if those
annotations are used mixed with other nullness annotations in other
projects. E.g. EGit can either configure JGit annotations for NPE
analysis and so "understand" nullness from JGit API but so it loses the
ability to use any other nullness annotations to annotate its own code.

Change-Id: Ieeeb578c2fe35223a7561d668dce8e767dc89ef0
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoFixed typo in preferences: NonByDefault -> NonNullByDefault 39/60439/3
Andrey Loskutov [Sun, 15 Nov 2015 21:59:14 +0000 (22:59 +0100)]
Fixed typo in preferences: NonByDefault -> NonNullByDefault

Change-Id: I6ef5fbdb57e7cba010ad23cb3f6af02891e7fe78
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoAdded jgit own NonNull annotation type 37/60437/4
Andrey Loskutov [Sun, 15 Nov 2015 21:55:58 +0000 (22:55 +0100)]
Added jgit own NonNull annotation type

The annotation is required for example in Repository case (patch
follows), where almost all non-void return methods return Nullable
except few returning NonNull. I definitely do not favor this style, but
it is a nightmare to clients to guess if the null check is needed or
not.

Change-Id: Ib2a778a246c6d84b7c32565f54df2385b59f6498
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
8 years agoMerge "Fix MissingObjectException in RenameDetector"
Christian Halstrick [Tue, 17 Nov 2015 08:27:53 +0000 (03:27 -0500)]
Merge "Fix MissingObjectException in RenameDetector"

8 years agoHandle InternalError during symlink support detection on Windows 38/60438/1
Matthias Sohn [Sun, 15 Nov 2015 21:56:55 +0000 (22:56 +0100)]
Handle InternalError during symlink support detection on Windows

When JGit tries to detect symlink support the attempt to create a
symlink may fail with a java.lang.InternalError. This was reported for a
case where the application using JGit runs in Windows XP compatibility
mode using Oracle JDK 1.8. Handle this by assuming symlinks are not
supported in this case.

Bug: 471027
Change-Id: I978288754dea0c6fffd3457fad7d4d971e27c6c2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'stable-4.1' 08/60408/1
Matthias Sohn [Fri, 13 Nov 2015 23:59:36 +0000 (00:59 +0100)]
Merge branch 'stable-4.1'

* stable-4.1:
  Prepare 4.1.2-SNAPSHOT builds
  JGit v4.1.1.201511131810-r
  Fallback exactRef: Do not ignore symrefs to unborn branch
  RefDirectory.exactRef: Do not ignore symrefs to unborn branch

Change-Id: I66afb303f355aad8a7eaa7a6dff06de70ae9c490
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPrepare 4.1.2-SNAPSHOT builds 06/60406/1
Matthias Sohn [Fri, 13 Nov 2015 23:53:45 +0000 (00:53 +0100)]
Prepare 4.1.2-SNAPSHOT builds

Change-Id: I1d1c4d918f2260c866c4392c1abea1e40a1de962
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.1.1.201511131810-r 91/60391/1 v4.1.1.201511131810-r
Matthias Sohn [Fri, 13 Nov 2015 23:09:54 +0000 (00:09 +0100)]
JGit v4.1.1.201511131810-r

Change-Id: If0246daab39fa279c30874549b198e7aa917bc62
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFallback exactRef: Do not ignore symrefs to unborn branch 50/60150/2
Jonathan Nieder [Wed, 11 Nov 2015 18:42:46 +0000 (10:42 -0800)]
Fallback exactRef: Do not ignore symrefs to unborn branch

When asked to read a symref pointing to a branch-yet-to-be-born (such
as HEAD in a newly initialized repository), getRef and getRefs provide
different results.

getRef: SymbolicRef[HEAD -> refs/heads/master=00000000]
getRefs and getAdditionalRefs: nothing

exactRef should match the getRef behavior: it is meant to be a
simpler, faster version of getRef that lets you search for a ref
without resolving it using the search path without other semantic
changes.  But the fallback implementation of exactRef relies on getRefs
and produces null for this case.

Luckily the in-tree RefDatabase implementations override exactRef and
get the correct behavior.  But any out-of-tree storage backend that
doesn't inherit from DfsRefDatabase or RefDirectory would still return
null when it shouldn't.

Let the fallback implementation use getRef instead to avoid this.
This means that exactRef would waste some effort traversing the ref
search path when the named ref is not found --- but subclasses tend to
override exactRef for performance already, so in the default
implementation correctness is more important.

Bug: 478865
Change-Id: I60f04e3ce3bf4731640ffd2433d329e621330029

8 years agoFix MissingObjectException in RenameDetector 26/60226/2
Rüdiger Herrmann [Thu, 12 Nov 2015 14:54:13 +0000 (15:54 +0100)]
Fix MissingObjectException in RenameDetector

When attempting to determine the size of a blob that does not exist,
the RenameDetector throws a MissingObjectException.

The fix is to return a size of zero if the size is requested for a blob
id that doesn't exist.

Bug: 481577
Change-Id: I4e86276039c630617610cc51d0eefa56d7d3952f
Signed-off-by: Rüdiger Herrmann <ruediger.herrmann@gmx.de>
8 years agoMerge "Merge branch 'stable-4.2'"
Matthias Sohn [Thu, 12 Nov 2015 10:38:03 +0000 (05:38 -0500)]
Merge "Merge branch 'stable-4.2'"

8 years agoMerge branch 'stable-4.2' 86/60186/1
Matthias Sohn [Thu, 12 Nov 2015 07:52:41 +0000 (08:52 +0100)]
Merge branch 'stable-4.2'

* stable-4.2:
  Prepare post 4.2-m1 builds
  JGit v4.2.0.201511101648-m1

Change-Id: Idef8f81a82e2625e4b46141fae74975227f3ab7d

8 years agoRefDirectory.exactRef: Do not ignore symrefs to unborn branch 06/60106/2
Jonathan Nieder [Tue, 10 Nov 2015 23:11:04 +0000 (15:11 -0800)]
RefDirectory.exactRef: Do not ignore symrefs to unborn branch

When asked to read a symref pointing to a branch-yet-to-be-born (such
as HEAD in a newly initialized repository), DfsRepository and
FileRepository return different results.

FileRepository:

exactRef("HEAD") => null

DfsRepository:

exactRef("HEAD") => SymbolicRef[HEAD -> refs/heads/master=00000000]

getRef("HEAD") returns the same as DfsRepository's exactRef in both
backends.

The intended behavior is the DfsRepository one: exactRef() is supposed
to be like getRef(), but more exact because it doesn't need to
traverse the search path.

The discrepancy is because DfsRefDatabase implements exactRef()
directly with the intended semantics, while RefDirectory uses a
fallback implementation built on top of getRefs().  getRefs() skips
symrefs to an unborn branch.

Override the fallback implementation with a correct implementation
that is similar to getRef() to avoid this.  A followup change will fix
the fallback.

Change-Id: Ic138a5564a099ebf32248d86b93e2de9ab3c94ee
Reported-by: David Pursehouse <david.pursehouse@sonymobile.com>
Improved-by: Christian Halstrick <christian.halstrick@sap.com>
Bug: 478865

8 years agoMerge "Revert "Remove PackWriter.Statistics and other deprecated classes""
Jonathan Nieder [Wed, 11 Nov 2015 01:20:43 +0000 (20:20 -0500)]
Merge "Revert "Remove PackWriter.Statistics and other deprecated classes""

8 years agoRevert "Remove PackWriter.Statistics and other deprecated classes" 11/60111/1
Jonathan Nieder [Wed, 11 Nov 2015 01:14:01 +0000 (20:14 -0500)]
Revert "Remove PackWriter.Statistics and other deprecated classes"

This reverts commit bbcbcab8d39dd4bdf194cdba02c97a9eb70b2379.
These classes were part of the public API and should not be removed
until JGit 5.0.

Change-Id: Ife4bee69f82151de6ef8ea1a4c6c146d91bbf0d5

8 years agoPrepare post 4.2-m1 builds 05/60105/1
Matthias Sohn [Tue, 10 Nov 2015 23:30:53 +0000 (00:30 +0100)]
Prepare post 4.2-m1 builds

Change-Id: I20e5eadc243ea375948ceca8c99441605c45ad95
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.2.0.201511101648-m1 97/60097/1 v4.2.0.201511101648-m1
Matthias Sohn [Tue, 10 Nov 2015 21:48:00 +0000 (22:48 +0100)]
JGit v4.2.0.201511101648-m1

Change-Id: I659e9e95a96797f78f23669cfc5946c6b2d9c088
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Remove PackWriter.Statistics and other deprecated classes"
Jonathan Nieder [Tue, 10 Nov 2015 20:57:29 +0000 (15:57 -0500)]
Merge "Remove PackWriter.Statistics and other deprecated classes"

8 years agoRemove PackWriter.Statistics and other deprecated classes 03/60003/1
Terry Parker [Tue, 10 Nov 2015 02:55:18 +0000 (18:55 -0800)]
Remove PackWriter.Statistics and other deprecated classes

These classes make improper use of internal classes in the public API
and were replaced by corresponding classes in the JGit 4.1 release.

Change-Id: I3d474210e49089aa788314b4e08f505f0d26619b
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoSilence API errors for new methods added to BitmapBuilder 00/60000/1
Matthias Sohn [Mon, 9 Nov 2015 23:59:40 +0000 (00:59 +0100)]
Silence API errors for new methods added to BitmapBuilder

These API changes were introduced in f523f21e and 73474466.

BitmapBuilder is an interface to be implemented by implementors of this
interface. According to OSGi semantic versioning rules breaking API
changes require update of the minor version only if implementors of the
API have to be adapted and the changes do not affect clients of the API.

Change-Id: If45d204181ea9bc788b6b57693ca17b1847564c7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd missing javadoc to bitmap index classes 99/59999/1
Matthias Sohn [Mon, 9 Nov 2015 23:50:55 +0000 (00:50 +0100)]
Add missing javadoc to bitmap index classes

Change-Id: Ib9fd230c9465a719df53cfcb314d8b5015743928
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge changes from topic 'nullable'
Jonathan Nieder [Mon, 9 Nov 2015 23:04:22 +0000 (18:04 -0500)]
Merge changes from topic 'nullable'

* changes:
  Update dependencies to use the JGit-internal @Nullable
  Use the JGit-internal @Nullable annotation
  Add a JGit-internal Nullable type

8 years agoMake BitmapIndexImpl.CompressedBitmap public 14/59914/6
Jonathan Nieder [Mon, 9 Nov 2015 16:48:46 +0000 (08:48 -0800)]
Make BitmapIndexImpl.CompressedBitmap public

PackWriterBitmapPreparer (which is in another package) is already well
aware of the mapping between EWAHCompressedBitmaps and the
higher-level CompressedBitmap objects of the BitmapIndexImpl API.
Making the CompressedBitmap type public makes the translation more
obvious and wouldn't break any abstractions that aren't already
broken.  So expose it.

This is all under org.eclipse.jgit.internal so there are no API
stability guarantees --- we can change the API if internals change
(for example if some day there are bitmaps spanning multiple packs).

In particular this means the confusing toBitmap helper can be removed.

Change-Id: Ifb2e8804a6d5ee46e82a76d276c4f8507eaa2a4c

8 years agoUpdate dependencies to use the JGit-internal @Nullable 95/59995/2
Terry Parker [Mon, 9 Nov 2015 22:19:11 +0000 (14:19 -0800)]
Update dependencies to use the JGit-internal @Nullable

Update the project-specific Eclipse settings to replace the use of the
org.eclipse.jdt.annotation.Nullable class the new JGit-specific
@Nullable annotation. I verified that Eclipse reports errors when the
return value of a method annotated with
@org.eclipse.jgit.annotations.Nullable is dereferenced without a null
check.

Also remove the Maven and MANIFEST.MF dependencies on
org.eclipse.jdt.annotation.

Eclipse null analysis uses three annotations: @Nullable, @NonNull and
@NonNullByDefault. All three are updated in this patch because it is
invalid to set the Eclipse preferences to empty values. So far only
@Nullable has been introduced in org.eclipse.jgit.annotations.

My personal preference is to follow the advice in Effective Java and
avoid the null-return idiom, and to avoid passing null values in
general. This sets the expectation is that arguments and return types
are assumed non-null unless otherwise documented. If that is the
expectation, then consistent application of @NonNull is redundant and
hurts readability by cluttering the code, obscuring the occasional
@Nullable annotation that really requires attention.

If the JGit community decides there is value in using the @NonNull and
@NonNullByDefault annotations we can add them--this change configures
Eclipse to use them.

Change-Id: I9af1b786d1b44b9b0d9c609480dc842df79bf698
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoUse the JGit-internal @Nullable annotation 94/59994/2
Terry Parker [Mon, 9 Nov 2015 21:42:20 +0000 (13:42 -0800)]
Use the JGit-internal @Nullable annotation

Update existing @Nullable uses to use the JGit-internal version of the
annotation.

Change-Id: I95234ffad4c3110f9597fbd3a2760f653e22ecf7
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoAdd a JGit-internal Nullable type 93/59993/2
Terry Parker [Mon, 9 Nov 2015 21:40:39 +0000 (13:40 -0800)]
Add a JGit-internal Nullable type

Commit 847b3d1 enabled annotation-based NPE analysis to JGit.

In so doing, it introduced a new dependency on the org.eclipse.jdt that
is undesirable. Follow Gerrit's lead by adding an internal Nullable type
(see
https://gerrit.googlesource.com/gerrit/+/stable-2.11/gerrit-common/src/main/java/com/google/gerrit/common/Nullable.java).

The javax.annotations.Nullable class uses a retention policy of RUNTIME,
whereas the org.eclipse.jdt.annotation.Nullable class used a policy of
CLASS. Since I'm not aware of tools that make use of the annotation at
runtime I chose the CLASS policy. If in the future there is a benefit to
retaining the annotations in the running binary we can update this
class.

Change-Id: I63dc8f9a6dc46b517cbde211bb5e2f8521a54d04
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoMake BitmapIndexImpl.CompressedBitmap, CompressedBitmapBuilder static 89/59989/3
Jonathan Nieder [Mon, 9 Nov 2015 21:14:13 +0000 (13:14 -0800)]
Make BitmapIndexImpl.CompressedBitmap, CompressedBitmapBuilder static

A CompressedBitmap represents a pair (EWAH bit vector, PackIndex
assigning bit positions to git objects).  The bit vector is a member
field and the PackIndex is implicit via the 'this' reference to the
outer class.

Make this clearer by making CompressedBitmap a static class and
replacing the 'this' reference by an explicit field.

Likewise for CompressedBitmapBuilder.

Change-Id: Id85659fc4fc3ad82034db3370cce4cdbe0c5492c
Suggested-by: Terry Parker <tparker@google.com>