aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
Commit message (Collapse)AuthorAgeFilesLines
* Enhance ResetCommand to allow disabling reflog updateMatthias Sohn2016-08-171-2/+28
| | | | | | | This will be used by EGit for implementing commit amend in the staging view (see Idcd1efeeee8b3065bae36e285bfc0af24ab1e88f). Change-Id: Ice9ebbb1c0c3314c679f4db40cdd3664f61c27c3 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Merge "BaseReceivePack: null and IllegalStateException cases for getPushOptions"Jonathan Nieder2016-08-151-3/+19
|\
| * BaseReceivePack: null and IllegalStateException cases for getPushOptionsDan Wang2016-08-101-3/+19
| | | | | | | | | | Change-Id: I5c6790719991931d615d821c900bfd90a20e540b Signed-off-by: Dan Wang <dwwang@google.com>
* | RepoCommand: Avoid group lists shadowing groups stringsJonathan Nieder2016-08-082-10/+10
| | | | | | | | | | | | Reported-by: David Pursehouse <david.pursehouse@gmail.com> Change-Id: I9e9b021d335bda4d58b6bcc30f59b81ac5b37724 Signed-off-by: Jonathan Nieder <jrn@google.com>
* | PackWriter: Fix Javadoc tag for thrown exception in preparePackDavid Pursehouse2016-08-091-1/+1
| | | | | | | | | | | | | | Use @throws instead of @param Change-Id: Ic9419d254c617e60a9b10e49205b11069442eb27 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | Merge "Document new PackWriter#preparePack variant's parameters and exceptions"Jonathan Nieder2016-08-081-0/+20
|\ \
| * | Document new PackWriter#preparePack variant's parameters and exceptionsJonathan Nieder2016-08-081-0/+20
| | | | | | | | | | | | Change-Id: Id4fa272c611a855bf4ef1bf5399f3e4305664103
* | | Add missing @since tags for new APIMatthias Sohn2016-08-091-0/+3
| | | | | | | | | | | | Change-Id: I8db29a0313fbc476152cef47f2eaa76954f1e280 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | Merge "Require-Bundle com.jcraft.jsch replaced by Import-Package statement"Matthias Sohn2016-08-081-1/+1
|\ \ \ | |/ / |/| |
| * | Require-Bundle com.jcraft.jsch replaced by Import-Package statementJens Offenbach2016-08-091-1/+1
| | | | | | | | | | | | | | | | | | Bug: 359288 Change-Id: Ifbbf953f5389c6bd3ba960b598c0e92656b522e3 Signed-off-by: Jens Offenbach <wolle5050@gmx.de> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | Merge changes Ib0d8c294,Idfb83482Jonathan Nieder2016-08-082-6/+30
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | * changes: Shallow fetch: Pass along "shallow"s in unparsed-wants case, too Shallow fetch: Pass a DepthWalk to PackWriter Change-Id: I7d1c3b4d0b7ebc254b53404d1618522b0174ac23
| * | Shallow fetch: Pass along "shallow"s in unparsed-wants case, tooJonathan Nieder2016-08-082-3/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 84d2738ff21c (Don't skip want validation when the client sends no haves, 2013-06-21), this branch is not taken. Process the "shallow"s anyway as a defensive measure in case the code path gets revived. Change-Id: Idfb834825d77f51e17191c1635c9d78c78738cfd Signed-off-by: Jonathan Nieder <jrn@google.com>
| * | Shallow fetch: Pass a DepthWalk to PackWriterJonathan Nieder2016-08-081-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | d385a7a5e5ca (Shallow fetch: Respect "shallow" lines, 2016-08-03) forgot that UploadPack wasn't passing a DepthWalk to PackWriter in the first place. As a result, shallow clones fail: java.lang.IllegalArgumentException: Shallow packs require a DepthWalk at org.eclipse.jgit.internal.storage.pack.PackWriter.preparePack(PackWriter.java:756) at org.eclipse.jgit.transport.UploadPack.sendPack(UploadPack.java:1497) at org.eclipse.jgit.transport.UploadPack.sendPack(UploadPack.java:1381) at org.eclipse.jgit.transport.UploadPack.service(UploadPack.java:774) at org.eclipse.jgit.transport.UploadPack.upload(UploadPack.java:667) at org.eclipse.jgit.http.server.UploadPackServlet.doPost(UploadPackServlet.java:191) Change-Id: Ib0d8c2946eebfea910a2b767fb92e23da15d4749
* | | Merge "Skip cleaning inner repositories by default in CleanCommand"Christian Halstrick2016-08-071-11/+73
|\ \ \
| * | | Skip cleaning inner repositories by default in CleanCommandMatthaus Owens2016-08-041-11/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously jgit would attempt to clean git repositories that had not been committed by calling a non-recursive delete on them, which would fail as they are directories. This commit addresses that issue in the following ways. Repositories are skipped in a default clean, similarly to cgit and only cleaned when the force flag is applied. When the force flag is applied repositories are deleted using a recursive delete call. The force flag and setForce method are added here to CleanCommand to support this change. Bug: 498367 Change-Id: Ib6cfff65a033d0d0f76395060bf76719e13fc467 Signed-off-by: Matthaus Owens <matthaus@puppetlabs.com>
* | | | Shallow fetch/clone: Make --depth mean the total history depthTerry Parker2016-08-054-6/+18
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | cgit changed the --depth parameter to mean the total depth of history rather than the depth of ancestors to be returned [1]. JGit still uses the latter meaning, so update it to match cgit. depth=0 still means a non-shallow clone. depth=1 now means only the wants rather than the wants and their direct parents. This is accomplished by changing the semantic meaning of "depth" in UploadPack and PackWriter to mean the total depth of history desired, while keeping "depth" in DepthWalk.{RevWalk,ObjectWalk} to mean the depth of traversal. Thus UploadPack and PackWriter always initialize their DepthWalks with "depth-1". [1] upload-pack: fix off-by-one depth calculation in shallow clone https://code.googlesource.com/git/+/682c7d2f1a2d1a5443777237450505738af2ff1a Change-Id: I87ed3c0f56c37e3491e367a41f5e555c4207ff44 Signed-off-by: Terry Parker <tparker@google.com>
* | | Shallow fetch: Respect "shallow" linesTerry Parker2016-08-054-2/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When fetching from a shallow clone, the client sends "have" lines to tell the server about objects it already has and "shallow" lines to tell where its local history terminates. In some circumstances, the server fails to honor the shallow lines and fails to return objects that the client needs. UploadPack passes the "have" lines to PackWriter so PackWriter can omit them from the generated pack. UploadPack processes "shallow" lines by calling RevWalk.assumeShallow() with the set of shallow commits. RevWalk creates and caches RevCommits for these shallow commits, clearing out their parents. That way, walks correctly terminate at the shallow commits instead of assuming the client has history going back behind them. UploadPack converts its RevWalk to an ObjectWalk, maintaining the cached RevCommits, and passes it to PackWriter. Unfortunately, to support shallow fetches the PackWriter does the following: if (shallowPack && !(walk instanceof DepthWalk.ObjectWalk)) walk = new DepthWalk.ObjectWalk(reader, depth); That is, when the client sends a "deepen" line (fetch --depth=<n>) and the caller has not passed in a DepthWalk.ObjectWalk, PackWriter throws away the RevWalk that was passed in and makes a new one. The cleared parent lists prepared by RevWalk.assumeShallow() are lost. Fortunately UploadPack intends to pass in a DepthWalk.ObjectWalk. It tries to create it by calling toObjectWalkWithSameObjects() on a DepthWalk.RevWalk. But it doesn't work: because DepthWalk.RevWalk does not override the standard RevWalk#toObjectWalkWithSameObjects implementation, the result is a plain ObjectWalk instead of an instance of DepthWalk.ObjectWalk. The result is that the "shallow" information is thrown away and objects reachable from the shallow commits can be omitted from the pack sent when fetching with --depth from a shallow clone. Multiple factors collude to limit the circumstances under which this bug can be observed: 1. Commits with depth != 0 don't enter DepthGenerator's pending queue. That means a "have" cannot have any effect on DepthGenerator unless it is also a "want". 2. DepthGenerator#next() doesn't call carryFlagsImpl(), so the uninteresting flag is not propagated to ancestors there even if a "have" is also a "want". 3. JGit treats a depth of 1 as "1 past the wants". Because of (2), the only place the UNINTERESTING flag can leak to a shallow commit's parents is in the carryFlags() call from markUninteresting(). carryFlags() only traverses commits that have already been parsed: commits yet to be parsed are supposed to inherit correct flags from their parent in PendingGenerator#next (which doesn't happen here --- that is (2)). So the list of commits that have already been parsed becomes relevant. When we hit the markUninteresting() call, all "want"s, "have"s, and commits to be unshallowed have been parsed. carryFlags() only affects the parsed commits. If the "want" is a direct parent of a "have", then it carryFlags() marks it as uninteresting. If the "have" was also a "shallow", then its parent pointer should have been null and the "want" shouldn't have been marked, so we see the bug. If the "want" is a more distant ancestor then (2) keeps the uninteresting state from propagating to the "want" and we don't see the bug. If the "shallow" is not also a "have" then the shallow commit isn't parsed so (2) keeps the uninteresting state from propagating to the "want so we don't see the bug. Here is a reproduction case (time flowing left to right, arrows pointing to parents). "C" must be a commit that the client reports as a "have" during negotiation. That can only happen if the server reports it as an existing branch or tag in the first round of negotiation: A <-- B <-- C <-- D First do git clone --depth 1 <repo> which yields D as a "have" and C as a "shallow" commit. Then try git fetch --depth 1 <repo> B:refs/heads/B Negotiation sets up: have D, shallow C, have C, want B. But due to this bug B is marked as uninteresting and is not sent. Change-Id: I6e14b57b2f85e52d28cdcf356df647870f475440 Signed-off-by: Terry Parker <tparker@google.com>
* | | Merge changes from topic 'shallowClone'Jonathan Nieder2016-08-042-3/+19
|\ \ \ | | | | | | | | | | | | | | | | | | | | * changes: RevWalk: Make fields available to DepthWalk Shallow fetch: avoid sending unneeded blobs
| * | | RevWalk: Make fields available to DepthWalkTerry Parker2016-08-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DepthWalk needs to override toObjectWalkWithSameObjects() and thus needs to be able to directly set the objects and freeFlags fields, so make them package private. Change-Id: I24561b82c54ba3d6522582ca25105b204d777074 Signed-off-by: Terry Parker <tparker@google.com>
| * | | Shallow fetch: avoid sending unneeded blobsTerry Parker2016-08-041-2/+18
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When doing an incremental fetch from JGit, "have" commits are marked as "uninteresting". In a non-shallow fetch, when the RevWalk hits an "uninteresting" commit it marks the commit's corresponding tree as uninteresting. That has the effect of dropping those trees and all the trees and blobs they reference out of the thin pack returned to the client. However, shallow fetches use a DepthWalk to limit the RevWalk, which nearly always causes the RevWalk to terminate before encountering the "have" commits. As a result the pack created for the incremental fetch never encounters "uninteresting" tree objects and thus includes duplicate objects that it knows the client already has. Change-Id: I7b1f7c3b0d83e04d34cd2fa676f1ad4fec904c05 Signed-off-by: Terry Parker <tparker@google.com>
* / / DiffFormatter: Support setting a reader without a repoDave Borowitz2016-08-033-25/+42
|/ / | | | | | | Change-Id: I575cdb9c0a9a341b79ef5e3c7a35e68cde142540
* | Merge "RefSpec: Make WildcardMode public"Jonathan Nieder2016-07-281-2/+20
|\ \
| * | RefSpec: Make WildcardMode publicStefan Beller2016-07-281-2/+20
| | | | | | | | | | | | | | | | | | | | | | | | We have to be able to access the enum from outside the package as part of the API. Change-Id: I4bdc6bd53a14237c5f4fb9397ae850f9a24c4cfb Signed-off-by: Stefan Beller <sbeller@google.com>
* | | MergeFormatter: Suppress warning about unchecked conversionDavid Pursehouse2016-07-261-0/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | The warning can be fixed by adding a type to the argument, but doing so breaks the API and previous attempts to fix it in that way [1, 2] were reverted [3, 4]. [1] https://git.eclipse.org/r/#/c/45709/ [2] https://git.eclipse.org/r/#/c/66602/ [3] https://git.eclipse.org/r/#/c/49400/ [4] https://git.eclipse.org/r/#/c/66659/ Change-Id: I01dd52e09da24f70d408ffa96e21c129a79041ea Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | Repository: Log negative useCnt message together with stack traceDavid Pursehouse2016-07-261-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | The message "close() called when useCnt is already zero" is logged with level warning, and then if debug logging is enabled, the stack trace is logged separately with level debug. Log the message and the stack trace in the same call, so that they always appear together in the output rather than potentially interleaved with other log statements. Change-Id: I1b5c1557ddc2d19f3f5b29baec96e62bc467d88a Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | Ignore 'The value of exception parameter is not used' warningDavid Pursehouse2016-07-261-0/+1
| | | | | | | | | | Change-Id: I50407e4a33e35b718ca40503fdd436f1f9f70fba Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | Merge branch 'stable-4.4'David Pursehouse2016-07-261-4/+15
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.4: JGit v4.4.1.201607150455-r RefDirectory: remove ref lock file for following ref dir removal Change-Id: Ifc8a782efd7f2f991e70ad2a3691a8dba66c7554 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
| * | JGit v4.4.1.201607150455-rv4.4.1.201607150455-rMatthias Sohn2016-07-153-4/+4
| | | | | | | | | | | | | | | Change-Id: I61dbc29a962c8185fb356fe1ca30a1e673166d47 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * | Merge "RefDirectory: remove ref lock file for following ref dir removal" ↵Christian Halstrick2016-07-151-4/+15
| |\ \ | | | | | | | | | | | | into stable-4.4
| | * | RefDirectory: remove ref lock file for following ref dir removalMarco Miller2016-06-101-4/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | | | RefSpecs: allow construction of weird wildcarded RefSpecsStefan Beller2016-07-253-9/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Gerrit's superproject subscription feature uses RefSpecs to formalize the ACLs of when the superproject subscription feature is allowed. As this is a slightly different use case than describing a local/remote pair of refs, we need to be more permissive. Specifically we want to allow: refs/heads/* refs/heads/*:refs/heads/master refs/heads/master:refs/heads/* Introduce a new constructor, that allows constructing these RefSpecs. Change-Id: I46c0bea9d876e61eb2c8d50f404b905792bc72b3 Signed-off-by: Stefan Beller <sbeller@google.com>
* | | | RefSpec: reject refs ending in '/'Stefan Beller2016-07-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We had a case in Gerrits superproject subscriptions where 'refs/heads/' was configured with the intention to mean 'refs/heads/*'. The first expression lacks the '*', which is why it is not considered a wildcard but it was considered valid and so was not found early to be a typo. Refs are not allowed to end with '/' anyway, so add a check for that. Change-Id: I3ffdd9002146382acafb4fbc310a64af4cc1b7a9 Signed-off-by: Stefan Beller <sbeller@google.com>
* | | | Merge "Push implementation of option strings"Terry Parker2016-07-2210-6/+244
|\ \ \ \ | | |_|/ | |/| |
| * | | Push implementation of option stringsDan Wang2016-07-2210-6/+244
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Example usage: $ ./jgit push \ --push-option "Reviewer=j.doe@example.org" \ --push-option "<arbitrary string>" \ origin HEAD:refs/for/master Stefan Beller has also made an equivalent change to CGit: http://thread.gmane.org/gmane.comp.version-control.git/299872 Change-Id: I6797e50681054dce3bd179e80b731aef5e200d77 Signed-off-by: Dan Wang <dwwang@google.com>
* | | | DfsObjDatabase: Add lazy last modified method to PackListDave Borowitz2016-07-191-0/+14
| | | | | | | | | | | | | | | | Change-Id: Id045f162fa584ea14da29a9df58a42c53a78dc15
* | | | Merge changes I159e9154,I06c722b2Dave Borowitz2016-07-193-43/+188
|\ \ \ \ | |/ / / |/| | | | | | | | | | | | | | | * changes: DfsObjectDatabase: Expose PackList and move markDirty there Invalidate DfsObjDatabase pack list when refs are updated
| * | | DfsObjectDatabase: Expose PackList and move markDirty thereDave Borowitz2016-07-182-20/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What's invalidated when an object database is "dirty" is not the whole database, but rather a specific list of packs. If there is a race between getting the pack list and setting the volatile dirty flag where the packs are rescanned, we don't need to mark the new pack list as dirty. This is a fine point that only really applies if the decision of whether or not to mark dirty actually requires introspecting the pack list (say, its timestamps). The general operation of "take whatever is the current pack list and mark it dirty" may still be inherently racy, but the cost is not so high. Change-Id: I159e9154bd8b2d348b4e383627a503e85462dcc6
| * | | Invalidate DfsObjDatabase pack list when refs are updatedDave Borowitz2016-07-143-40/+168
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, there is a race where a user of a DfsRepository in a single thread may get unexpected MissingObjectExceptions trying to look up an object that appears as the current value of a ref: 1. Thread A scans packs before scanning refs, for example by reading an object by SHA-1. 2. Thread B flushes an object and updates a ref to point to that object. 3. Thread A looks up the ref updated in (2). Since it is scanning refs for the first time, it sees the new object SHA-1. 4. Thread A tries to read the object it found in (3), using the cached pack list it got from (1). The object appears missing. Allow implementations to work around this by marking the object database's current pack list as "dirty." A dirty pack list means that DfsReader will rescan packs and try again if a requested object is missing. Implementations should mark objects as dirty any time the ref database reads or scans refs that might be newer than a previously cached pack list. Change-Id: I06c722b20c859ed1475628ec6a2f6d3d6d580700
* | | | BatchRefUpdate: Remove unused namesToCheck variableDan Wang2016-07-151-2/+0
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This variable has been populated and never used since it was introduced in commit 5cf53fdacf28d5cabe7ad1ed154fe7f4971225a9 (Speed up clone/fetch with large number of refs, 2013-02-18). Noted by FindBugs: "BatchRefUpdate.java:359, UC_USELESS_OBJECT, Priority: Normal" Change-Id: I7aacb49540aaee4a83db3d38b15633bb6c4773d0 Signed-off-by: Dan Wang <dwwang@google.com>
* | | Merge branch 'stable-4.4'Matthias Sohn2016-07-128-61/+375
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.4: Log if Repository.useCnt becomes negative Time based eviction strategy for repository cache Add method to read time unit from config Align include.path max depth with native git Config load should not fail on unsupported or nonexistent include path Allow using JDK 7 bootclasspath when compiling JGit using Java 8 Extract work queue to allow reusing it Change-Id: I6aeedb1cb8b0c3068af344a719c80a03ae68fc23 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * | Log if Repository.useCnt becomes negativeMatthias Sohn2016-07-123-1/+19
| | | | | | | | | | | | | | | | | | | | | 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>
| * | Time based eviction strategy for repository cacheChristian Halstrick2016-07-123-9/+244
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * | Add method to read time unit from configHugo Arès2016-07-124-0/+132
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * | Align include.path max depth with native gitHugo Arès2016-06-271-1/+1
| | | | | | | | | | | | | | | Change-Id: I52f059816e1d94b2d60d096e3013bf4095cd0fc4 Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
| * | Config load should not fail on unsupported or nonexistent include pathHugo Arès2016-06-273-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * | Extract work queue to allow reusing itMatthias Sohn2016-06-082-46/+102
| |/ | | | | | | | | Change-Id: I28f7800030a3b9db48e315061509af0746feffcc Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | DfsGarbageCollector: avoid closing idx and bitmap streams twiceJonathan Nieder2016-07-071-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | These try-with-resources blocks close the underlying output stream twice: once when closing the CountingOutputStream wrapper, then again when closing the DfsOutputStream out. Simplify by only closing the CountingOutputStream. In practice this shouldn't matter because the close() method of a Closable is required to be idempotent, but avoiding the redundant extra close makes the code simpler to read and understand. Change-Id: I1778c4fc8ba075a2c6cd2129528bb272cb3a1af7
* | ReceivePack: report protocol parsing failures on channel 3Shawn Pearce2016-07-052-1/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the client sent a well-formed enough request to see it wants to use side-band-64k for status reporting (meaning its a modern client), but any other command record was somehow invalid (e.g. corrupt SHA-1) report the parsing exception using channel 3. This allows clients to see the failure and know the server will not be continuing. git-core and JGit clients send all commands and then start a sideband demux before sending the pack. By consuming all commands first we get the client into a state where it can see and respond to the channel 3 server failure. This behavior is useful on HTTPS connections when the client is buggy and sent a corrupt command, but still managed to request side-band-64k in the first line. Change-Id: If385b91ceb9f024ccae2d1645caf15bc6b206130
* | ReceivePack: catch InvalidObjectIdException while parsing shallowShawn Pearce2016-07-051-1/+11
| | | | | | | | | | | | | | | | The "shallow $id" parsing can also throw InvalidObjectIdException, just like parseCommand. Move it into its own method with a proper try-catch block to convert to the checked PackProtocolException. Change-Id: I6839b95f0bc4fbf4d2c213331ebb9bd24ab2af65
* | ReceivePack: remove unnecessary try-catch around parseCommandShawn Pearce2016-07-051-7/+1
| | | | | | | | | | | | This exception is already handled in the outer catch block. Change-Id: Ifc04b8e138732a97b9c0ee323af923b8e52a7f8e