]> source.dussan.org Git - jgit.git/log
jgit.git
8 years agoJGit v4.4.1.201607150455-r 78/77378/1 v4.4.1.201607150455-r
Matthias Sohn [Fri, 15 Jul 2016 08:54:36 +0000 (10:54 +0200)]
JGit v4.4.1.201607150455-r

Change-Id: I61dbc29a962c8185fb356fe1ca30a1e673166d47
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "RefDirectory: remove ref lock file for following ref dir removal" into stable-4.4
Christian Halstrick [Fri, 15 Jul 2016 08:43:50 +0000 (04:43 -0400)]
Merge "RefDirectory: remove ref lock file for following ref dir removal" into stable-4.4

8 years agoLog if Repository.useCnt becomes negative 65/76865/3
Matthias Sohn [Thu, 7 Jul 2016 14:57:49 +0000 (16:57 +0200)]
Log if Repository.useCnt becomes negative

We observe in Gerrit 2.12 that useCnt can become negative in rare cases.
Log this to help finding the bug.

Change-Id: Ie91c7f9d190a5d7cf4733d4bf84124d119ca20f7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoTime based eviction strategy for repository cache 04/74904/9
Christian Halstrick [Mon, 30 May 2016 14:09:58 +0000 (16:09 +0200)]
Time based eviction strategy for repository cache

When Repository.close() decrements the useCount to 0 currently the cache
immediately evicts the repository from WindowCache and RepositoryCache.
This leads to I/O overhead on busy repositories because pack files and
references are inserted and deleted from the cache frequently.

This commit defers the eviction of a repository from the caches until
last use of the repository is older than time to live. The eviction is
handled by a background task running periodically.

Add two new configuration parameters:
* core.repositoryCacheExpireAfter: cache entries are evicted if the
cache entry wasn't accessed longer than this time in milliseconds
* core.repositoryCacheCleanupDelay: defines the interval in milliseconds
for running a background task evicting expired cache entries. If set to
-1 the delay is set to min(repositoryCacheExpireAfter, 10 minutes). If
set to 0 the time based eviction is switched off and no background task
is started. If time based eviction is switched off the JVM can still
evict cache entries if heap memory is running low.

Change-Id: I4a0214ad8b4a193985dda6a0ade63b70bdb948d7
Also-by: Matthias Sohn <matthias.sohn@sap.com>
Also-by: Hugo Arès <hugo.ares@ericsson.com>
Also-by: Sasa Zivkov <sasa.zivkov@sap.com>
8 years agoAdd method to read time unit from config 64/76864/3
Hugo Arès [Fri, 3 Jun 2016 13:11:58 +0000 (09:11 -0400)]
Add method to read time unit from config

Time units supported:

-milliseconds (1 ms, 2 milliseconds)
-seconds (1 s, 1 sec, 1 second, 2 seconds)
-minutes (1 m, 1 min, 1 minute, 2 minutes)
-hours (1 h, 1 hr, 1 hour, 2 hours)
-days (1 d, 1 day, 2 days)
-weeks (1 w, 1 week, 2 weeks)
-months (1 mon, 1 month, 2 months)
-years (1 y, 1 year, 2 years)

This functionality is implemented in Gerrit ConfigUtil class. Add it to
JGit so it can eventually be remove from Gerrit.

Change-Id: I2d6564ff656b6ab9424a9360624061c94fd5f413
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAlign include.path max depth with native git 47/75347/3
Hugo Arès [Wed, 15 Jun 2016 19:14:06 +0000 (15:14 -0400)]
Align include.path max depth with native git

Change-Id: I52f059816e1d94b2d60d096e3013bf4095cd0fc4
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
8 years agoConfig load should not fail on unsupported or nonexistent include path 46/75346/4
Hugo Arès [Wed, 15 Jun 2016 18:40:05 +0000 (14:40 -0400)]
Config load should not fail on unsupported or nonexistent include path

1f86350 added initial support for include.path. Relative path and path
with tilde are not yet supported but config load was failing if one of
those 2 unsupported options was encountered. Another problem was that
config load was failing if the include.path file did not exist.

Change the behavior to be consistent with native git. Ignore unsupported
or nonexistent include.path.

Bug: 495505
Bug: 496732
Change-Id: I7285d0e7abb6389ba6983e9c46021bea4344af68
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
8 years agoMerge "Extract work queue to allow reusing it" into stable-4.4
Matthias Sohn [Tue, 21 Jun 2016 15:59:15 +0000 (11:59 -0400)]
Merge "Extract work queue to allow reusing it" into stable-4.4

8 years agoAllow using JDK 7 bootclasspath when compiling JGit using Java 8 29/75529/3
Matthias Sohn [Sun, 19 Jun 2016 10:45:37 +0000 (12:45 +0200)]
Allow using JDK 7 bootclasspath when compiling JGit using Java 8

When compiling jgit using Java 8 set system property JDK_HOME to
JAVA_HOME path of JDK7 installation to compile against JDK 7 class
libraries. Otherwise jgit may hit runtime exceptions when running on
Java 7 (e.g. return type of ConcurrentHashMap.keySet() in JDK 8 class
library doesn't exist in JDK 7).

Example:
$ mvn clean install -DJDK_HOME=/.../jdk1.7.0_80.jdk/Contents/Home

Bug: 496262
Change-Id: Ib6abe5e544e0492e08b342e1a34b182caf25f94f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRefDirectory: remove ref lock file for following ref dir removal 45/73745/4
Marco Miller [Wed, 25 May 2016 20:45:13 +0000 (16:45 -0400)]
RefDirectory: remove ref lock file for following ref dir removal

Before this fix, ref directory removal did not work. That was because
the ref lock file was still in the leaf directory at deletion time.
Hence no deep ref directories were ever deleted, which negatively
impacted performance under large directory structure circumstances.

This fix removes the ref lock file before attempting to delete the ref
directory (which includes it). The other deep parent directories are
therefore now successfully deleted in turn, since leaf's content
(lock file) gets removed first.

So, given a structure such as refs/any/directory[/**], this fix now
deletes all empty directories up to -and including- 'directory'. The
'any' directory (e.g.) does not get deleted even if empty, as before.

The ref lock file is still also removed in the calling block's finally
clause, just in case, as before. Such double-unlock brought by this
fix is harmless (a no-op).

A new (private) RefDirectory#delete method is introduced to support
this #pack-specific case; other RefDirectory#delete callers remain
untouched.

Change-Id: I47ba1eeb9bcf0cb93d2ed105d84fea2dac756a5a
Signed-off-by: Marco Miller <marco.miller@ericsson.com>
8 years agoExtract work queue to allow reusing it 03/74903/1
Matthias Sohn [Thu, 2 Jun 2016 23:04:51 +0000 (01:04 +0200)]
Extract work queue to allow reusing it

Change-Id: I28f7800030a3b9db48e315061509af0746feffcc
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPrepare 4.4.1-SNAPSHOT builds 00/74800/1
Matthias Sohn [Tue, 7 Jun 2016 15:30:33 +0000 (17:30 +0200)]
Prepare 4.4.1-SNAPSHOT builds

Change-Id: I4fe1c84b1418126f5b245b8a4f72bb7e37f48eae
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.4.0.201606070830-r 64/74764/1 v4.4.0.201606070830-r
Matthias Sohn [Tue, 7 Jun 2016 11:51:02 +0000 (13:51 +0200)]
JGit v4.4.0.201606070830-r

Change-Id: I5c771a62ac0420424a655a4025c62a4bc28dc44e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPrepare 4.4.0-SNAPSHOT builds 15/74315/1
Matthias Sohn [Wed, 1 Jun 2016 20:36:21 +0000 (22:36 +0200)]
Prepare 4.4.0-SNAPSHOT builds

Change-Id: Ib41dfe4103f013ba87a1ce62ee24bc9e10300eff
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.4.0.201606011500-rc2 98/74298/1 v4.4.0.201606011500-rc2
Matthias Sohn [Wed, 1 Jun 2016 18:37:53 +0000 (20:37 +0200)]
JGit v4.4.0.201606011500-rc2

Change-Id: Ifd7b7baba7d676a630e2f742d369c4186ea450a6
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'master' into stable-4.4 39/74239/1
Matthias Sohn [Wed, 1 Jun 2016 14:09:40 +0000 (16:09 +0200)]
Merge branch 'master' into stable-4.4

* master:
  Fix javadoc errors and unused imports introduced by ddd0fe25
  RepoCommand: record manifest shallow recommendation in .gitmodules
  RepoCommand: record manifest groups as submodule labels
  Remove the deprecated TestRepository.getClock() method
  Replace use of deprecated method Repository.getRef()
  [findBugs] Prevent potential NPE in
    FileLfsRepository.getOutputStream()
  Better report on client side if push failed due to too large object
  [findBugs] Prevent potential NPE in CloneCommand.init()
  RepoCommand: remove --record-remote-branches
  RepoCommandTest: Improve assertion message for remote branch recording

Change-Id: I4fbce4f84925a933fcc9a48058ed6793f5821b97
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix javadoc errors and unused imports introduced by ddd0fe25 85/74185/2
Matthias Sohn [Wed, 1 Jun 2016 08:16:00 +0000 (10:16 +0200)]
Fix javadoc errors and unused imports introduced by ddd0fe25

Change-Id: I2d17115843e453c71febd4a58527effe658b48fd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRepoCommand: record manifest shallow recommendation in .gitmodules 40/73840/7
Stefan Beller [Tue, 31 May 2016 22:19:52 +0000 (15:19 -0700)]
RepoCommand: record manifest shallow recommendation in .gitmodules

Git core learned about the submodule.<name>.shallow option in
.gitmodules files, which is a recommendation to clone a submodule
shallow. A repo manifest may record a clone depth recommendation as
an optional field, which contains more information than a binary
shallow/nonshallow recommendation, so any attempted conversion may be
lossy. In practice the clone depth recommendation is either '1' or doesn't
exist, which is the binary behavior we have in Git core.

Change-Id: I51aa9cb6d1d9660dae6ab6d21ad7bae9bc5325e6
Signed-off-by: Stefan Beller <sbeller@google.com>
8 years agoRepoCommand: record manifest groups as submodule labels 53/71653/12
Stefan Beller [Tue, 31 May 2016 22:18:20 +0000 (15:18 -0700)]
RepoCommand: record manifest groups as submodule labels

Git core learned about attributes in pathspecs:

    pathspec: allow querying for attributes

    The pathspec mechanism is extended via the new
    ":(attr:eol=input)pattern/to/match" syntax to filter paths so that it
    requires paths to not just match the given pattern but also have the
    specified attrs attached for them to be chosen.

(177161a5f7, 2016-05-20)

We intend to use these pathspec attribute patterns for submodule
grouping, similar to the grouping in repo. So the RepoCommand which
translates repo manifest files into submodules should propagate this
information along. This requires writing information to the
.gitattributes file instead of the .gitmodules file. For now we just
overwrite any existing .gitattributes file and do not care about prior
attributes set. If this becomes an issue we need to figure out how to
correctly amend the grouping information to an existing .gitattributes
file.

Change-Id: I0f55b45786b6b8fc3d5be62d7f6aab9ac00ed60e
Signed-off-by: Stefan Beller <sbeller@google.com>
8 years agoRemove the deprecated TestRepository.getClock() method 90/74090/1
Terry Parker [Tue, 31 May 2016 17:14:55 +0000 (10:14 -0700)]
Remove the deprecated TestRepository.getClock() method

Gitles was the holdout and TestRepository.getClock() was removed via:
https://gerrit.googlesource.com/gitiles/+/f10481d8384d1695e6981b805c4e5e462e4b71ea

Change-Id: I90c0fc17be4891545b097a49763b0f0c202cc004
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoReplace use of deprecated method Repository.getRef() 53/73253/2
Matthias Sohn [Fri, 20 May 2016 09:28:21 +0000 (11:28 +0200)]
Replace use of deprecated method Repository.getRef()

Change-Id: Iecf2b8deafc4991cc3333702fb9fa0638be7b914
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years ago[findBugs] Prevent potential NPE in FileLfsRepository.getOutputStream() 71/73171/3
Matthias Sohn [Thu, 19 May 2016 13:31:51 +0000 (15:31 +0200)]
[findBugs] Prevent potential NPE in FileLfsRepository.getOutputStream()

Change-Id: I6f91997e8a976e5f4ace91c082d8b9adf1451adc
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoBetter report on client side if push failed due to too large object 33/73433/3
Matthias Sohn [Mon, 23 May 2016 23:12:20 +0000 (01:12 +0200)]
Better report on client side if push failed due to too large object

JGits PushCommand and BasePackPushConnection were throwing a generic
exception when the pushed pack-file was rejected by the server since it
contained too large objects. Teach JGit to better analyze the server's
response to detect this situation and throw a more specific exception.

Detect this situation by parsing the status line sent by the server.
This change only recognizes the response sent by a JGit based server.
All other servers which report such problems in a different way still
lead to a generic TransportExceptions.

Also see https://git.eclipse.org/r/#/c/46348/

Change-Id: I8d6d65e4585ebb3846f7207e7d1a2f82fa9cbd86
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years ago[findBugs] Prevent potential NPE in CloneCommand.init() 68/73168/3
Matthias Sohn [Thu, 19 May 2016 13:25:02 +0000 (15:25 +0200)]
[findBugs] Prevent potential NPE in CloneCommand.init()

File.listFiles() returns null if the File is not a directory, improve
validation of directory and gitDir to fix this.

Change-Id: I763d08835faf96a0beb8e706992df0908526bd2c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "RepoCommandTest: Improve assertion message for remote branch recording"
Terry Parker [Thu, 26 May 2016 22:10:25 +0000 (18:10 -0400)]
Merge "RepoCommandTest: Improve assertion message for remote branch recording"

8 years agoRepoCommand: remove --record-remote-branches 57/71657/5
Stefan Beller [Fri, 29 Apr 2016 00:27:57 +0000 (17:27 -0700)]
RepoCommand: remove --record-remote-branches

This function only works in bare mode, and the command line works in
non-bare mode, so there's no point in pretending to support it here.

Change-Id: Ia017aded93d072bdb9947ec08c424256c3abe438
Signed-off-by: Stefan Beller <sbeller@google.com>
8 years agoRepoCommandTest: Improve assertion message for remote branch recording 36/71936/3
Stefan Beller [Tue, 3 May 2016 18:27:13 +0000 (11:27 -0700)]
RepoCommandTest: Improve assertion message for remote branch recording

Change-Id: Ic14e9f9c4bf007b464e463f5047ec5a8d0b9236c
Signed-off-by: Stefan Beller <sbeller@google.com>
8 years agoPrepare 4.4.0-SNAPSHOT builds 68/73668/1
Matthias Sohn [Wed, 25 May 2016 21:30:21 +0000 (23:30 +0200)]
Prepare 4.4.0-SNAPSHOT builds

Change-Id: Iba6e423294d3315465648d19087a674a73b5ef28
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.4.0.201605250940-rc1 01/73601/1 v4.4.0.201605250940-rc1
Matthias Sohn [Wed, 25 May 2016 13:14:46 +0000 (15:14 +0200)]
JGit v4.4.0.201605250940-rc1

Change-Id: Idd8e1664730b979cfbd9a2196081a48a1efa3330
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoUpdate Orbit repository for Neon to R20160520211859 95/73595/1
Matthias Sohn [Wed, 25 May 2016 13:03:04 +0000 (15:03 +0200)]
Update Orbit repository for Neon to R20160520211859

Change-Id: I5e051a652848d8aae0d10c9e1bd42f6b320145f9
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'master' into stable-4.4 92/73492/1
Matthias Sohn [Tue, 24 May 2016 14:59:15 +0000 (16:59 +0200)]
Merge branch 'master' into stable-4.4

* master:
  JGit CLI: allow to call git init with specific directory
  Redirect all Show output to outs
  Support git config [include] section with absolute path(s)
  Added filter for merge and non-merges commits.
  [findBugs] Prevent potential NPE in FS_POSIX.readUmask()
  [findBugs] Fix calculation of host header in SignerV4
  Update Orbit repository to S20160518051658 for Neon RC2
  Fix StashApply regarding handling of untracked files
  GC should not pack objects only referenced by ORIG_HEAD,...
  Make sure to overwrite files when "reset --hard" detects conflicts
  Allow setting FileMode to executable when applying patches in
    ApplyCommand
  Fix config value get to return last instead of 1st just like git
  Remove UTF-8 checking duplication in Config lib subclasses
  Update Maven plugins
  Fix type parameter in javadoc in TestRepository.delete(String ref)
  TestRepository: Add delete() method
  Make BaseReceivePack.setAtomic public
  ReceivePack: Pass atomic setting from client to BatchRefUpdate

Change-Id: I5c9c5b7ccb23fb48b44b3da10b2c5d876d043d24
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'stable-4.3' into stable-4.4 91/73491/1
Matthias Sohn [Tue, 24 May 2016 14:44:03 +0000 (16:44 +0200)]
Merge branch 'stable-4.3' into stable-4.4

* stable-4.3:
  Fix computation of id in WorkingTreeIterator with autocrlf and
    smudging
  Prepare 4.3.2-SNAPSHOT builds
  JGit v4.3.1.201605051710-r
  Scan loose ref before packed in case gc about to remove the loose
  Fix possible NPEs when reporting transport errors
  Fix calling of clean/smudge filters from Checkout,MergeCommands
  Fix ApplyCommand when result of patch is an empty file

Change-Id: I829f06699f6670e519d04c927bdba4b82df29199
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix computation of id in WorkingTreeIterator with autocrlf and smudging 91/73291/2
Christian Halstrick [Wed, 18 May 2016 13:03:51 +0000 (15:03 +0200)]
Fix computation of id in WorkingTreeIterator with autocrlf and smudging

JGit failed to do checkouts when the index contained smudged entries and
autocrlf was on. In such cases the WorkingTreeIterator calculated the
SHA1 sometimes on content which was not correctly filtered. The SHA1 was
computed on content which two times went through a lf->crlf conversion.

We used to tell the treewalk whether it is a checkin or checkout
operation and always use the related filters when reading any content.
If on windows and autocrlf is true and we do a checkout operation then
we always used a lf->crlf conversion on any text content. That's not
correct. Even during a checkout we sometimes need the crlf->lf
conversion. E.g. when calculating the content-id for working-tree
content we need to use crlf->lf filtering although the overall operation
type is checkout.

Often this bug does not have effects because we seldom compute the
content-id of filesystem content during a checkout. But we do need to
know whether a file is dirty or not before we overwrite it during a
checkout. And if the index entries are smudged we don't trust the index
and compute filesystem-content-sha1's explicitly.

This caused EGit not to be able to switch branches anymore on Windows
when autocrlf was true. EGit denied the checkout because it thought
workingtree files are dirty because content-sha1 are computed on wrongly
filtered content.

Bug: 493360
Change-Id: I1072a57b4c529ba3aaa50b7b02d2b816bb64a9b8
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit CLI: allow to call git init with specific directory 51/73351/2
Rüdiger Herrmann [Sat, 21 May 2016 13:11:29 +0000 (15:11 +0200)]
JGit CLI: allow to call git init with specific directory

With this change it is possible to initialize repositories with
'git init /path/to/new/repo'

Change-Id: Ia9b288b4fb34887e8f5e2f3f270e521c44d41b6a
Signed-off-by: Rüdiger Herrmann <ruediger.herrmann@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRedirect all Show output to outs 75/73275/2
Rüdiger Herrmann [Fri, 20 May 2016 12:06:08 +0000 (14:06 +0200)]
Redirect all Show output to outs

The Show command wrote all diffs to System.out instead of 'outs.

Bug: 494143
Change-Id: Ibc78e9a058b7a32d536e03e294c1d933b6c26ba7
Signed-off-by: Rüdiger Herrmann <ruediger.herrmann@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoSupport git config [include] section with absolute path(s) 44/72444/5
Marco Miller [Fri, 6 May 2016 17:18:38 +0000 (13:18 -0400)]
Support git config [include] section with absolute path(s)

As per [1], but limited to absolute paths indeed. No support yet for
tilde or $HOME expansion. Support for the --[no-]includes options
([1]) is not part of this commit scope either, but those options'
defaults are in effect as described in [1].

[1] https://git-scm.com/docs/git-config

Included path can be a config file that includes other path-s in turn.
An exception is thrown if too many recursions (circular includes)
happen because of ill-specified config files.

Change-Id: I700bd7b7e1625eb7de0180f220c707d8e7b0930b
Signed-off-by: Marco Miller <marco.miller@ericsson.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdded filter for merge and non-merges commits. 07/70507/4
Alcemir Santos [Tue, 12 Apr 2016 18:11:32 +0000 (20:11 +0200)]
Added filter for merge and non-merges commits.

Added the option to retrieve either merge or non-merge commits in the
LogCommand.

Change-Id: Ie0e1c515a823f2392783f1a47d385c31230e8167
Signed-off-by: Alcemir Santos <alcemir.santos@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years ago[findBugs] Prevent potential NPE in FS_POSIX.readUmask() 63/73163/1
Matthias Sohn [Thu, 19 May 2016 13:04:46 +0000 (15:04 +0200)]
[findBugs] Prevent potential NPE in FS_POSIX.readUmask()

BufferedReader.readLine() returns null if the end of the stream has been
reached.

Change-Id: I83102bbfb1316407247e0f29023077af9e8d9606
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years ago[findBugs] Fix calculation of host header in SignerV4 61/73161/2
Matthias Sohn [Thu, 19 May 2016 12:50:12 +0000 (14:50 +0200)]
[findBugs] Fix calculation of host header in SignerV4

We ignored the returned concatenation of host name and port number. Fix
this and use a StringBuilder to avoid creation of unnecessary String
objects.

Change-Id: I61fac639d4a4c95412eb41a0f9131d0c38aca794
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPrepare 4.3.2-SNAPSHOT builds 36/73136/1
Matthias Sohn [Thu, 19 May 2016 08:17:39 +0000 (10:17 +0200)]
Prepare 4.3.2-SNAPSHOT builds

Change-Id: I71997a8be83841765111cb7b55506bd8edd8adad
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoUpdate Orbit repository to S20160518051658 for Neon RC2 06/73106/1
Matthias Sohn [Wed, 18 May 2016 22:55:24 +0000 (00:55 +0200)]
Update Orbit repository to S20160518051658 for Neon RC2

Change-Id: If1bc2001108091770bccee7fa59b0e7f5e3974d7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix StashApply regarding handling of untracked files 12/71712/3
Christian Halstrick [Fri, 29 Apr 2016 14:54:23 +0000 (16:54 +0200)]
Fix StashApply regarding handling of untracked files

There was a bug regarding how JGit handled untracked files when applying
a stash. Problem was that untracked files are applied by doing a merge
of HEAD and untrackedFiles commit with a merge base of the stashed HEAD.
That's wrong because the untrackedFiles commit has no parent and
contains only the untracked files. Using stashed HEAD as merge base
leads to unneccessary conflicts on files not event included in the
untrackedFiles commit.

Imagine this graph directly before you want to apply a stash which was
based on 0. You want to apply the stash on current HEAD commit 5.

  5 (HEAD,master)
 /
0---+
 \   \
  1---3 (WIP on master)
     /
    2 (untracked files on master)

Imagine for a specific (tracked) file f
- commit 0 contains X
- HEAD contains Y
- commit 2 (the untracked files) does not contain file f

A merge of 2 and 5 with a merge base of 0 leads to a conflict. The 5
commit wants to modify the file and the 2 commit wants to delete the
file -> conflict.

If no merge base is set then the semantic is correct.

Thanks to Bow for finding this bug and providing the test case.

Bug: 485467
Change-Id: I453fa6ec337f81b2a52c4f51f23044faeec409e6
Also-by: Bow Ruggeri <bow@bow.net>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoGC should not pack objects only referenced by ORIG_HEAD,... 69/72569/2
Christian Halstrick [Wed, 11 May 2016 20:36:10 +0000 (22:36 +0200)]
GC should not pack objects only referenced by ORIG_HEAD,...

There are references which are returned by
RefDatabase.getAdditionalRefs() which are allowed to point to
non-existing objects. These refs should not save objects from being
garbage collected. Examples for these references are ORIG_HEAD,
MERGE_HEAD, FETCH_HEAD and CHERRY_PICK_HEAD. Native git will not take
these references into account when doing a gc and therefore these
references may point to non-existing objects after a gc. Teach JGit's
GC to behave the same: ignore additional refs if they don't start with
"refs/". Examples for refs returned by getAdditionalRefs() which do
start with "refs/" are the bootstrap refs when using reftree's (see
commit 115f1ad3974d1162b33d1c8eff466019d1f249f3). See also
http://article.gmane.org/gmane.comp.version-control.git/294126.

Bug: 479697
Change-Id: I10e40589f13e72aacdd9f86f3b44696fd1cd068a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMake sure to overwrite files when "reset --hard" detects conflicts 99/57799/6
Christian Halstrick [Fri, 9 Oct 2015 14:14:10 +0000 (16:14 +0200)]
Make sure to overwrite files when "reset --hard" detects conflicts

When performing a "reset --hard" a checkout is done. The pathes are
checked for potential checkout conflicts. But in the end for all
remaining conflicts these files are simply deleted from the working
tree. That's not the right strategy to handle checkout conflicts during
"reset --hard". Instead for every conflict we should simply checkout the
merge commit's content.

This is different from native gits behavior which reports errors when
during a "checkout --hard" a file shows up where a folder was expected.

  "warning: unable to unlink d/c.txt: Not a directory"

Why it is like that in native git was asked in
http://permalink.gmane.org/gmane.comp.version-control.git/279482. Unless
it is explained why native git why this error is reported JGit should
overwrite the files.

Bug: 474842
Change-Id: I08e23822a577aaf22120c5137eb169b6bd08447b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAllow setting FileMode to executable when applying patches in ApplyCommand 58/71758/3
Nadav Cohen [Mon, 2 May 2016 02:06:39 +0000 (19:06 -0700)]
Allow setting FileMode to executable when applying patches in ApplyCommand

git-apply allows modifying file modes in patched files using either
"new mode" or "new file mode" headers. This patch adds support for
setting files as executables and vice-versa.

Change-Id: I24848966b46f686f540a8efa8150b42e0d9c3ad1
Signed-off-by: Nadav Cohen <nadavcoh@gmail.com>
8 years agoFix config value get to return last instead of 1st just like git 96/72296/4
Marco Miller [Fri, 6 May 2016 20:19:42 +0000 (16:19 -0400)]
Fix config value get to return last instead of 1st just like git

Before this fix, getting the value of 'key' below used to return
value1. This fix makes it so that value3 gets returned instead,
just like native git's get.

[section]
  key = value1
  key = value2
  key = value3

Change-Id: Iccb24de9b63c3ad8646c909494ca3f8c9ed6e29c
Signed-off-by: Marco Miller <marco.miller@ericsson.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRemove UTF-8 checking duplication in Config lib subclasses 15/72315/2
Marco Miller [Mon, 9 May 2016 16:36:00 +0000 (12:36 -0400)]
Remove UTF-8 checking duplication in Config lib subclasses

Change-Id: Ib9f0ae8207000a36c5bf1a92fcc2c32efc4c0984
Signed-off-by: Marco Miller <marco.miller@ericsson.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoUpdate Maven plugins 65/72365/1
Matthias Sohn [Sat, 7 May 2016 21:43:23 +0000 (23:43 +0200)]
Update Maven plugins

to the following versions:
build-helper-maven-plugin 1.10
eclipse-jarsigner-plugin 1.1.3
findbugs-maven-plugin 3.0.3
jacoco-maven-plugin 0.7.6.201602180812
maven-clean-plugin 3.0.0
maven-compiler-plugin 3.5.1
maven-javadoc-plugin 2.10.3
maven-pmd-plugin 3.6
maven-project-info-reports-plugin 2.9
maven-resources-plugin 2.7
maven-shade-plugin 2.4.3
maven-site-plugin 3.5.1
maven-source-plugin 3.0.0
maven-surefire-plugin 2.19.1
maven-surefire-report-plugin 2.19.1
tycho 0.25
tycho-extras 0.25
wagon-ssh 2.10

Change-Id: I4dc57de77ab7838964e8fe3de1d50f28d67fcf4b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.3.1.201605051710-r 68/72168/1 v4.3.1.201605051710-r
Matthias Sohn [Thu, 5 May 2016 21:08:18 +0000 (23:08 +0200)]
JGit v4.3.1.201605051710-r

Change-Id: I25fb72cc17d7a27b0b69746d907dac9ccd4d7997
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix type parameter in javadoc in TestRepository.delete(String ref) 66/72166/1
Matthias Sohn [Thu, 5 May 2016 20:51:14 +0000 (22:51 +0200)]
Fix type parameter in javadoc in TestRepository.delete(String ref)

Type parameter T extends AnyObjectId in signature of update(String, T)

Change-Id: I9c13ddc572b8e94d5c7854f4de1f8206cb5e99ca
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'stable-4.3' 12/72112/2
Matthias Sohn [Wed, 4 May 2016 23:13:35 +0000 (01:13 +0200)]
Merge branch 'stable-4.3'

* stable-4.3:
  Scan loose ref before packed in case gc about to remove the loose
  Fix possible NPEs when reporting transport errors
  Fix calling of clean/smudge filters from Checkout,MergeCommands
  Fix ApplyCommand when result of patch is an empty file

Change-Id: I0dc76b7a8c87ce8e0386a1b9e0fa92a3aa62abf7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoScan loose ref before packed in case gc about to remove the loose 40/71240/4
Marco Miller [Wed, 20 Apr 2016 21:42:34 +0000 (17:42 -0400)]
Scan loose ref before packed in case gc about to remove the loose

Before this change, jgit used to read packed-refs before scanning
loose refs. That was not a problem if gc didn't run concurrently. When
gc did run concurrently with such refs reading, that order sometimes
broke the latter. This lead to reading an older version of a ref's
tip, which meant "losing" the real tip or commit. The specific
read-Vs-gc concurrency scenario which broke reading that way follows:

1. let ref R be in packed-refs and R' be in loose
2. jgit starts reading packed-refs
3. gc also starts its business around that very time
4. jgit still has the time to read R from packed-refs
5. as gc is not done yet updating packed-refs with R'
6. jgit then starts scanning loose refs (or is about to)
7. gc quickly ends up being done moving loose R' to packed-refs
8. so gc (quickly) removes loose refs
9. -while jgit is scanning loose refs, now gone
10. so jgit assumes no loose to consider => packed-refs winning
11. so jgit wrongfully returns R (from 4.) as the tip, instead of R'.

This fix switches the order so loose refs are scanned (secured) before
taking the time to read packed-refs. This way, knowledge of the
likelier tip is guaranteed for ref reading to return the true tip
- despite concurrent gc. If there is no loose ref to scan, jgit reads
packed-refs and lands on R' (or S), which it then returns, as
expected. The gerrit issue [1] should be solved by this fix.

[1] https://code.google.com/p/gerrit/issues/detail?id=2302

Change-Id: Ibd120120a361a3a6ed565f3836afc1db706fbcdd
Signed-off-by: Marco Miller <marco.miller@ericsson.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoTestRepository: Add delete() method 11/72111/2
Jonathan Nieder [Wed, 4 May 2016 22:48:36 +0000 (15:48 -0700)]
TestRepository: Add delete() method

Change-Id: Ib4841397ceab44bd38cf2f154314ac36ded73ae0

8 years agoMake BaseReceivePack.setAtomic public 09/72109/1
Jonathan Nieder [Wed, 4 May 2016 22:01:47 +0000 (15:01 -0700)]
Make BaseReceivePack.setAtomic public

This makes atomic more consistent with other properties like
allowNonFastForwards.

Change-Id: Ie3b41f14ffba1d0b206ffecc697377417daa6973

8 years agoReceivePack: Pass atomic setting from client to BatchRefUpdate 93/72093/1
Jonathan Nieder [Wed, 4 May 2016 21:00:42 +0000 (14:00 -0700)]
ReceivePack: Pass atomic setting from client to BatchRefUpdate

Change-Id: I0e4e6cef693e8138562f5ca345e0db61a8abef9c

8 years agoPrepare 4.4.0-SNAPSHOT builds 88/72088/1
Matthias Sohn [Wed, 4 May 2016 20:00:12 +0000 (22:00 +0200)]
Prepare 4.4.0-SNAPSHOT builds

Change-Id: Ib95be1300b1b95cc7e8153170d509282bdc4e328
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.4.0.201605041135-m1 48/72048/1 v4.4.0.201605041135-m1
Matthias Sohn [Wed, 4 May 2016 15:35:15 +0000 (17:35 +0200)]
JGit v4.4.0.201605041135-m1

Change-Id: Ic9b6d7dae293887c3ac3a11f92e153501abad1dc
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRun Maven build in release.sh concurrently to speedup release 47/72047/1
Matthias Sohn [Wed, 4 May 2016 15:33:40 +0000 (17:33 +0200)]
Run Maven build in release.sh concurrently to speedup release

Change-Id: Iad8696825bb81becab945cd9ed2c33bea3778e17
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPersonIdent: Make appendSanitized public 50/71950/2
Dave Borowitz [Tue, 3 May 2016 20:18:52 +0000 (16:18 -0400)]
PersonIdent: Make appendSanitized public

Change-Id: I337c90fff3c013819a42a7622ac6bacc72828c07

8 years agoConfig: Improve documentation for setStringList 52/71652/2
Stefan Beller [Thu, 28 Apr 2016 22:18:35 +0000 (15:18 -0700)]
Config: Improve documentation for setStringList

Change-Id: Idccfa0dfd6db324236f7cb26ab28bdbd80581a8b
Signed-off-by: Stefan Beller <sbeller@google.com>
8 years agoPrepare Neon target platform 64/69964/5
Matthias Sohn [Mon, 4 Apr 2016 09:12:21 +0000 (11:12 +0200)]
Prepare Neon target platform

also use the Neon target platform as the default target platform.

Neon Eclipse platform requires BREE 8 so we have to use Java 8 at least
for the JGit packaging build (for the compiler settings we still stick
to source and target 1.7 since we want to still support Java 7)
otherwise unpacking platform pack200 archives will fail since they are
built using Java 8 and hence cannot be unpacked using Java 7's
unpack200.

Update org.junit from 4.11 to 4.11 and org.apache.ant from from 1.9.2 to
1.9.6 since the older versions are not available in Neon orbit version

Ignore a couple of tests in ResourceUtilTest which now fail [1] since
bug 476585 was fixed in Neon M6.

CQ: 10694
CQ: 11308
Change-Id: I1a99a3ac2148693e21c57df5aeb848035b52b97b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPersonIdent: Strip some special chars from external strings 11/71711/2
Dave Borowitz [Fri, 29 Apr 2016 15:10:36 +0000 (11:10 -0400)]
PersonIdent: Strip some special chars from external strings

The special characters <> and '\n' interfere with parsing of
identities. C git strips these special characters, so we should too.

Rather than allocating extra strings by calling String#trim(), add a
few lines to our sanitization method to perform the same trimming as
described in String's Javadoc.

Change-Id: I96edcb93a2fc194ee354d60566d352299742a52f

8 years agoPersonIdent: Document that name and email aren't trimmed 10/71710/2
Dave Borowitz [Fri, 29 Apr 2016 14:47:17 +0000 (10:47 -0400)]
PersonIdent: Document that name and email aren't trimmed

This might be somewhat surprising behavior to users who might
naturally assume the following invariant:
  ident.equals(parseIdent(ident.toExternalString()))

This invariant does not hold since whitespace is only trimmed during
serialization. We don't want to mess with the strings during
initialization, as this is called during the highly-optimized commit
parsing codepath.

Change-Id: I081a603f0ac0e33167462244779b0ff3ad51e80c

8 years agoFix possible NPEs when reporting transport errors 98/71498/1
Christian Halstrick [Wed, 27 Apr 2016 07:47:28 +0000 (09:47 +0200)]
Fix possible NPEs when reporting transport errors

There was a bug in JGit which caused NPEs being thrown when Transport
errors should be reported. Avoid the NPE to let the original error show
up.

Change-Id: I9e1e2b0195bd61b7e531a09d0fc7bce109bd6515

8 years agoExpose the ObjectInserter that created an ObjectReader 59/71359/4
Dave Borowitz [Mon, 25 Apr 2016 17:36:46 +0000 (13:36 -0400)]
Expose the ObjectInserter that created an ObjectReader

We've found in Gerrit Code Review that it is common to pass around
both an ObjectReader (or more commonly a RevWalk wrapping one) and an
ObjectInserter. These code paths often assume that the ObjectReader
can read back any objects created by the ObjectInserter without
flushing. However, we previously had no way to enforce that constraint
programmatically, leading to hard-to-spot problems.

Provide a solution by exposing the ObjectInserter that created an
ObjectReader, when known. Callers can either continue passing both
objects and check:
  reader.getCreatedFromInserter() == inserter
or they can just pass around ObjectReader and extract the inserter
when it's needed (checking that it's not null at usage time).

Change-Id: Ibbf5d1968b506f6b47030ab1b046ffccb47352ea

8 years agoAdd ObjectReader.Filter, like in ObjectInserter 58/71358/2
Dave Borowitz [Mon, 25 Apr 2016 17:28:43 +0000 (13:28 -0400)]
Add ObjectReader.Filter, like in ObjectInserter

Change-Id: If34ad8185dc8192435e622995fdca598b86add7e

8 years agoFix calling of clean/smudge filters from Checkout,MergeCommands 33/70833/3
Christian Halstrick [Tue, 12 Apr 2016 12:38:37 +0000 (14:38 +0200)]
Fix calling of clean/smudge filters from Checkout,MergeCommands

When CheckoutCommand or MergeCommand is called then not in all situation
the treewalks have been prepared to support clean/smudge filters. Fix
this

Bug: 491505
Change-Id: Iab5608049221c46d06812552ab97299e44d59e64

8 years agoUpdate buck to e64a2e2ada022f81e42be750b774024469551398 19/71119/1
David Pursehouse [Thu, 21 Apr 2016 07:31:24 +0000 (16:31 +0900)]
Update buck to e64a2e2ada022f81e42be750b774024469551398

To align with the version used in Gerrit's master build.

Change-Id: I3b6e21bf367ad1fb3598dc06b968aee6187d5aed
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
8 years agoSupport per-BatchRefUpdate atomic transactions 62/70962/2
Dave Borowitz [Tue, 19 Apr 2016 13:24:18 +0000 (09:24 -0400)]
Support per-BatchRefUpdate atomic transactions

Repurpose RefDatabase#performsAtomicTransactions() slightly, to
indicate that the backend _supports_ atomic transactions, rather than
the current definition, which is that the backend always _uses_ atomic
transactions regardless of whether or not the caller actually wants
them. Allow BatchRefUpdate callers to turn off atomic transactions by
calling setAtomic(false). Defaulting to true means this is backwards
compatible.

Change-Id: I6df78d7df65ab147b4cce7764bd3101db985491c

8 years agoAdd .buckd to .gitignore 61/70961/1
Dave Borowitz [Tue, 19 Apr 2016 13:40:06 +0000 (09:40 -0400)]
Add .buckd to .gitignore

Change-Id: I527923e282808c905ae9acd128ecc8a5b33d34c7

8 years agoFix ApplyCommand when result of patch is an empty file 19/70819/1
Jon Schneider [Fri, 15 Apr 2016 21:37:32 +0000 (14:37 -0700)]
Fix ApplyCommand when result of patch is an empty file

Such hunks are identifiable by a zero value for "new start line". Prior
to the fix, JGit throws and ArrayIndexOutOfBoundsException on such
patches.

Change-Id: I4f3deb5e5f41a08af965fcc178d678c77270cddb
Signed-off-by: Jonathan Schneider <jkschneider@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix RefsUnreadableInMemoryRepository 14/70814/2
Matthias Sohn [Sat, 16 Apr 2016 13:57:23 +0000 (15:57 +0200)]
Fix RefsUnreadableInMemoryRepository

- fix classpath for Eclipse
- add missing license header
- remove unused import

Change-Id: If491fe60678f050f86319388170ac789085fcf5f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix Buck build broken by 4812fda. 20/70720/2
Mike Edgar [Wed, 13 Apr 2016 02:23:08 +0000 (22:23 -0400)]
Fix Buck build broken by 4812fda.

Creates a source directory under org.eclipse.jgit.http.test
for the new support class.

Signed-off-by: Michael Edgar <adgar@google.com>
Change-Id: Ie49492c2bbe5c1db96ceb0dc06fa7cb9f927431a

8 years agoMake UploadPack observe exceptions reading refs 01/70701/3
Mike Edgar [Wed, 13 Apr 2016 02:23:08 +0000 (22:23 -0400)]
Make UploadPack observe exceptions reading refs

Now if refs are unreadable when serving an upload pack the handler
will fail due to the actual underlying failure. Previously all wants
would be rejected as invalid because Repository.getAllRefs() returned
an empty map.

Testing this required a new subclass of InMemoryRepository so that
an IOException could be injected at the correct time.

Signed-off-by: Michael Edgar <adgar@google.com>
Change-Id: Iac708b1db9d0ccce08c4ef5ace599ea0b57afdc0

8 years agoExpose conflicting files in CheckoutConflictException 04/68104/3
Ned Twigg [Sat, 28 Jun 2014 03:22:03 +0000 (20:22 -0700)]
Expose conflicting files in CheckoutConflictException

Change-Id: I5b3b7b0633354d5ccf0c6c320c0df9c93fdf8eeb
Signed-off-by: Ned Twigg <ned.twigg@diffplug.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Fix CommitCommand to be able to skip writing to RefLog"
Matthias Sohn [Mon, 11 Apr 2016 20:50:10 +0000 (16:50 -0400)]
Merge "Fix CommitCommand to be able to skip writing to RefLog"

8 years agoFix CommitCommand to be able to skip writing to RefLog 41/70241/3
Christian Halstrick [Fri, 8 Apr 2016 14:04:17 +0000 (16:04 +0200)]
Fix CommitCommand to be able to skip writing to RefLog

CommitCommand already provided a method to set the comment which should
be written into the reflog. The underlying RefUpdate class supported to
skip writing a reflog entry. But through the CommitCommand API it was
not possible to prevent writing a reflog entry. Fix this and allow
creating commits which don't occur in the reflog.

Change-Id: I193c53de71fb5958ea749c4bfa8360a51acc9b58

8 years agoPrepare 4.4.0-SNAPSHOT builds 67/70267/2
Matthias Sohn [Fri, 8 Apr 2016 15:47:29 +0000 (17:47 +0200)]
Prepare 4.4.0-SNAPSHOT builds

Change-Id: If3162f4cc4ae6319b9f1e3293549485b039cfe7f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'stable-4.3' 61/70261/1
Matthias Sohn [Fri, 8 Apr 2016 15:30:28 +0000 (17:30 +0200)]
Merge branch 'stable-4.3'

* stable-4.3:
  Add lfs libraries to scripts for upload to Maven central
  Prepare 4.3.1-SNAPSHOT versions

Change-Id: Ieba46a2b12c893d6c626194310ab8dde5a2f1e6a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoAdd lfs libraries to scripts for upload to Maven central 55/70255/2
Matthias Sohn [Fri, 8 Apr 2016 15:10:16 +0000 (17:10 +0200)]
Add lfs libraries to scripts for upload to Maven central

Change-Id: I13d78fd57421cca32a965af37cc9571e77448e31
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPrepare 4.3.1-SNAPSHOT versions 59/70259/1
Matthias Sohn [Thu, 7 Apr 2016 22:56:43 +0000 (00:56 +0200)]
Prepare 4.3.1-SNAPSHOT versions

Change-Id: I985828fd379e4596ae7f1c30a87e55df06a7924e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Prepare 4.3.1-SNAPSHOT versions"
Matthias Sohn [Fri, 8 Apr 2016 15:01:17 +0000 (11:01 -0400)]
Merge "Prepare 4.3.1-SNAPSHOT versions"

8 years agoFilter corrupt objects from DfsReader.selectObjectRepresentation() 95/70195/1
Terry Parker [Thu, 7 Apr 2016 23:24:10 +0000 (16:24 -0700)]
Filter corrupt objects from DfsReader.selectObjectRepresentation()

PackWriter.writeObject() can get into an infinite loop when corrupt
packs are present. When it finds a pack file with an object that can be
reused it calls DfsPackFile.copyAsIs(). If that method sees an invalid
CRC, it adds the object to the DfsPackFile's corrupt object list and
throws a CorruptObjectException, which it later catches as an
IOException and wraps in a
StoredObjectRepresentationNotAvailableException.
PackWriter.writeObjectImpl() catches that SORNAE and retries the
operation by calling DfsReader.selectObjectRepresentation(). But
currently that method returns the same object which was just seen to
be corrupt.

Change DfsPackFile.isCorrupt() from private to package private, and use
that method in DfsReader.selectObjectRepresentation() to filter out
corrupt objects.

The stack traces that show the problem are:
  org.eclipse.jgit.errors.CorruptObjectException.<init>(CorruptObjectException.java:113)
  org.eclipse.jgit.internal.storage.dfs.DfsPackFile.copyAsIs(DfsPackFile.java:624)
  org.eclipse.jgit.internal.storage.dfs.DfsReader.copyObjectAsIs(DfsReader.java:491)
  org.eclipse.jgit.internal.storage.pack.PackWriter.writeObjectImpl(PackWriter.java:1478)
  org.eclipse.jgit.internal.storage.pack.PackWriter.writeObject(PackWriter.java:1455)

  org.eclipse.jgit.internal.storage.dfs.DfsPackFile.getPackIndex(DfsPackFile.java:228)
  org.eclipse.jgit.internal.storage.dfs.DfsReader.findAllFromPack(DfsReader.java:476)
  org.eclipse.jgit.internal.storage.dfs.DfsReader.selectObjectRepresentation(DfsReader.java:455)
  org.eclipse.jgit.internal.storage.pack.PackWriter.writeObjectImpl(PackWriter.java:1492)
  org.eclipse.jgit.internal.storage.pack.PackWriter.writeObject(PackWriter.java:1455)

Change-Id: Iad7bbcaed1f11a6aa3b4f5af911a73a34c0fabfd
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoPrepare 4.3.1-SNAPSHOT versions 44/70244/1
Matthias Sohn [Thu, 7 Apr 2016 22:56:43 +0000 (00:56 +0200)]
Prepare 4.3.1-SNAPSHOT versions

Change-Id: I52c98ba8fb3a303269a1f9380af114b6dd8c5009
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.3.0.201604071810-r 86/70186/1 v4.3.0.201604071810-r
Matthias Sohn [Thu, 7 Apr 2016 22:10:10 +0000 (00:10 +0200)]
JGit v4.3.0.201604071810-r

Change-Id: I902cdf1ff92ce8c6e9d80c4965d8d5bd8b9ac6c1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoJGit v4.3.0.201604071045-r 43/70143/1
Matthias Sohn [Thu, 7 Apr 2016 14:41:24 +0000 (16:41 +0200)]
JGit v4.3.0.201604071045-r

Change-Id: Iafab78d6be34d31a13f979b7be67611135c0f8bd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge branch 'master' into stable-4.3 00/70100/1
Matthias Sohn [Thu, 7 Apr 2016 11:06:14 +0000 (13:06 +0200)]
Merge branch 'master' into stable-4.3

* master:
  Remove repository from cache when it's closed
  Fix RefDirectory not closing resources
  Fix repository cache never closing repository

Change-Id: I9dc9d017806cba25125f69b53812cc3e062ef975
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoRemove repository from cache when it's closed 81/56281/3
Hugo Arès [Fri, 18 Sep 2015 18:05:23 +0000 (14:05 -0400)]
Remove repository from cache when it's closed

RepositoryCache has 2 methods to remove a repository from the cache but
they are never called when a repository is closed. Users of the cache
were expected to call one of those 2 methods but how could they have
called them at proper time without having visibility of the repository
usage count.

Ideally, I would have reworked the RepositoryCache to wrap any
repository it opens in a class that would be responsible to unregister
them from the cache when it's really closed, i.e. when usage counter
reaches 0. The problem preventing the wrapping solution is the
RepositoryCache.register method that allows to register an already
opened repository in the cache. Such repositories cannot be wrapped
because callers are still holding a reference on the unwrapped
repository.

Document that RepositoryCache.close method is removing the repository
from the cache as well as closing it and rework
RepositoryCache.unregister method to only remove the repository from the
cache. Use the latter to unregister repository when Repository.doClose
is getting executed.

Change-Id: Ia364816e4da8d7b6cfa72f10758ca31aa8a1f9db
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoFix RefDirectory not closing resources 02/55902/5
Hugo Arès [Tue, 8 Sep 2015 13:21:31 +0000 (09:21 -0400)]
Fix RefDirectory not closing resources

When repositories are opened using the RepositoryCache, they are kept in
memory and when the repository usage counter reaches 0, the
Repository.close method is called which then calls close method on its
reference and object databases.

The problem is that RefDirectory.close method was a no-op and the
reference database was kept in memory. This problem is only happening
when opening a repository using the RepositoryCache because it never
evicts repositories, it's just calling the close method.

Change-Id: Iacb961de8e8b1f5b37824bf0d1a4caf4c6f1233f
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
8 years agoFix repository cache never closing repository 98/55898/6
Hugo Arès [Fri, 4 Sep 2015 19:32:28 +0000 (15:32 -0400)]
Fix repository cache never closing repository

Repository has a usage counter that is initialized to 1 at
instantiation and this counter is decremented when Repository.close
method is called. There is also a Repository.incrementOpen method that
RepositoryCache uses to increment the usage count when it's returning a
repository that is already opened.

The problem was that RepositoryCache was incrementing the usage count
for repositories that it just opened or registered. The usage count was
2 when it should have been 1.

Incrementing usage count is now only be done for repository that are
served from the cache.

This bug is causing slow memory increase of our Gerrit server until the
server become slow. Even if the RepositoryCache is using SoftReference,
it seems that the JVM is not garbage collecting the repositories because
it's not yet on the edge of being out of memory.

To test this change, I replicated all repositories(11k) from Gerrit
master to one slave. The Gerrit master used memory after this test was
10GB without this change and 3.5GB with.

Change-Id: I86c7b36174e384f106b51fe92f306018fd1dbdf0
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
8 years agoMerge branch 'master' into stable-4.3 36/70036/1
Matthias Sohn [Wed, 6 Apr 2016 14:04:57 +0000 (16:04 +0200)]
Merge branch 'master' into stable-4.3

* master:
  Add config parameter gc.prunePackExpire for packfile expiration
  In TestRepository, use a consistent clock

Change-Id: I7ac568e650fbd191e48a8f1a4068af72deb242e8
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoEnable calling of smudge filters when checking out paths 21/69921/3
Christian Halstrick [Tue, 5 Apr 2016 14:04:39 +0000 (16:04 +0200)]
Enable calling of smudge filters when checking out paths

When checking out commits/branches JGit was triggering correctly
configured smudge filters. But when checking out paths (either from
index or from commits) JGit was not triggering smudge filters. Fix
CheckoutCommand to properly call filters.

Bug: 486560
Also-by: Pascal Krause <pascal.krausek@sap.com>
Change-Id: I5ff893054defe57ab12e201d901fe74e1376efea
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoPrepare 4.3-SNAPSHOT builds 61/69961/1
Matthias Sohn [Tue, 5 Apr 2016 21:09:29 +0000 (23:09 +0200)]
Prepare 4.3-SNAPSHOT builds

Change-Id: Ib831f8870938113bd5338763f90a07d5c108b1de
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoImplement DIR_NO_GITLINKS 82/69882/1
Preben Ingvaldsen [Tue, 1 Mar 2016 19:37:54 +0000 (11:37 -0800)]
Implement DIR_NO_GITLINKS

Implement the DIR_NO_GITLINKS setting with the same functionality
it provides in cGit.

Bug: 436200
Change-Id: I8304e42df2d7e8d7925f515805e075a92ff6ce28
Signed-off-by: Preben Ingvaldsen <preben@puppetlabs.com>
8 years agoAdd config parameter gc.prunePackExpire for packfile expiration 28/69628/1
Christian Halstrick [Tue, 29 Mar 2016 14:41:07 +0000 (16:41 +0200)]
Add config parameter gc.prunePackExpire for packfile expiration

JGit's Garbage Collector is repacking relevant objects into new
packfiles and is afterwards deleting the now obsolete packfiles. But to
prevent problems caused by race conditions JGit was not deleting
packfiles when they are too young. The same mechanism as for loose
objects and the config parameter gc.pruneExpire was used.
But JGit was reusing the parameter gc.pruneExpire also for packfiles
which may cause a lot of filesystem consumption if gc.pruneExpire was
set to the default of 2 weeks. Only two weeks after packfile creation gc
was allowed to delete this packfile.

This change introduces a new config paramter gc.prunePackExpire with a
default of "1.hour". This parameter is used when packfiles are deleted.
Only packfiles older than the specified time can be deleted.

For loose objects the behaviour is not changed and only the old
parameter gc.pruneExpire is relevant.

Change-Id: I6209efb05678b15153bd22479dc13486907a44f8

8 years agoIn TestRepository, use a consistent clock 40/69340/2
Terry Parker [Fri, 25 Mar 2016 20:55:48 +0000 (13:55 -0700)]
In TestRepository, use a consistent clock

The default author and committer objects in TestRepository were
initialized statically and did not use the MockSystemReader passed into
the TestRepository ctor. Make these fields non-static and initialize
them with a consistent clock.

Also make the author and commiter name and email strings public for
tests that want to verify against them.

Change-Id: I88b444b96e22743001b32824d8e4e03c2239aa86
Signed-off-by: Terry Parker <tparker@google.com>
8 years agoJGit v4.3.0.201603230630-rc1 15/69115/1 v4.3.0.201603230630-rc1
Matthias Sohn [Wed, 23 Mar 2016 10:27:04 +0000 (11:27 +0100)]
JGit v4.3.0.201603230630-rc1

Change-Id: I10835e5aa3618e5033424595942cc1649152cb24
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Make the FileLfsRepository thread safe"
Matthias Sohn [Tue, 22 Mar 2016 23:11:06 +0000 (19:11 -0400)]
Merge "Make the FileLfsRepository thread safe"

8 years agoMake the FileLfsRepository thread safe 53/69053/1
Saša Živkov [Tue, 22 Mar 2016 16:23:53 +0000 (17:23 +0100)]
Make the FileLfsRepository thread safe

The FileLfsRepository.out member could have been accessed from multiple
threads which would corrupt the content.

Don't store the AtomicObjectOutputStream in the FileLfsRepository.out but
move it to the ObjectUploadListener which is instantiated per-request.

Add a parallel upload test.

Change-Id: I62298630e99c46b500d376843ffcde934436215b
Signed-off-by: Saša Živkov <sasa.zivkov@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
8 years agoMerge "Add missing @Deprecated annotation"
Jonathan Nieder [Fri, 11 Mar 2016 22:58:11 +0000 (17:58 -0500)]
Merge "Add missing @Deprecated annotation"