aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | Assume GC_REST and GC_TXN also attempted deltas during packingShawn Pearce2017-02-081-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In a DFS repository the DfsGarbageCollector will typically attempt delta compression while creating the three main pack files: GC, GC_REST and GC_TXN. Include all of these in the wasDeltaAttempted() decision so that future packers can bypass delta compression of non-delta objects. Change-Id: Ic2330c69fab0c494b920b4df0a290f3c2e1a03d7
* | | | Prefer smaller GC files during DFS garbage collectionShawn Pearce2017-02-083-1/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 8ac65d33ed7a94f77cb066271669feebf9b882fc PackWriter changed its behavior to always prefer the last object representation presented to it by the ObjectReuseAsIs implementation. This was a fix to avoid delta chain cycles. Unfortunately it can lead to suboptimal compression when concurrent GCs are run on the same repository. One case is automatic GC running (with default settings) in parallel to a manual GC that has disabled delta reuse in order to generate new smaller deltas for the entire history of the repository. Running GC with no-reuse generally requires more CPU time, which also translates to a longer running time. This can lead to a race where the automatic GC completes before the no-reuse GC, leaving the repository in a state such as: no-reuse GC: size 1 GiB, mtime = 18:45 auto GC: size 8 GiB, mtime = 17:30 With the default sort ordering, the smaller no-reuse GC pack is sorted earlier in the pack list, due to its more recent mtime. During object reuse in a future GC, these smaller representations are considered first by PackWriter, but are all discarded when the auto GC file from 17:30 is examined second (due to its older mtime). Work around this in two ways. Well formed DFS repositories should have at most 1 GC pack. If 2 or more GC packs exist, break the sorting tie by selecting the smaller file earlier in the pack list. This allows all normal read code paths to favor the smaller file, which places less pressure on the DfsBlockCache. If any GC race happens, readers serving clone requests will prefer the file that is smaller. During object reuse, flip this ordering so that the smaller file is last. This allows PackWriter to see smaller deltas last, replacing larger representations that were previously considered from other pack files. Change-Id: I0b7dc8bb9711c82abd6bd16643f518cfccc6d31a
* | | | Fix missing deltas near type boundariesShawn Pearce2017-02-082-17/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Delta search was discarding discovered deltas if an object appeared near a type boundary in the delta search window. This has caused JGit to produce larger pack files than other implementations of the packing algorithm. Delta search works by pushing prior objects into a search window, an ordered list of objects to attempt to delta compress the next object against. (The window size is bounded, avoiding O(N^2) behavior.) For implementation reasons multiple object types can appear in the input list, and the window. PackWriter commonly passes both trees and blobs in the input list handed to the DeltaWindow algorithm. The pack file format requires an object to only delta compress against the same type, so the DeltaWindow algorithm must stop doing comparisions if a blob would be compared to a tree. Because the input list is sorted by object type and the window is recently considered prior objects, once a wrong type is discovered in the window the search algorithm stops and uses the current result. Unfortunately the termination condition was discarding any found delta by setting deltaBase and deltaBuf to null when it was trying to break the window search. When this bug occurs, the state of the DeltaWindow looks like this: current | \ / input list: tree0 tree1 blob1 blob2 window: blob1 tree1 tree0 / \ | res.prev As the loop iterates to the right across the window, it first finds that blob1 is a suitable delta base for blob2, and temporarily holds this in the bestDelta/deltaBuf fields. It then considers tree1, but tree1 has the wrong type (blob != tree), so the window loop must give up and fall through the remaining code. Moving the condition up and discarding the window contents allows the bestDelta/deltaBuf to be kept, letting the final file delta compress blob1 against blob0. The impact of this bug (and its fix) on real world repositories is likely minimal. The boundary from blob to tree happens approximately once in the search, as the input list is sorted by type. Only the first window size worth of blobs (e.g. 10 or 250) were failing to produce a delta in the final file. This bug fix does produce significantly different results for small test repositories created in the unit test suite, such as when a pack may contains 6 objects (2 commits, 2 trees, 2 blobs). Packing test cases can now better sample different output pack file sizes depending on delta compression and object reuse flags in PackConfig. Change-Id: Ibec09398d0305d4dbc0c66fce1daaf38eb71148f
* | | | Merge "Reintroduce garbage pack coalescing when ttl > 0."Shawn Pearce2017-02-082-19/+139
|\ \ \ \
| * | | | Reintroduce garbage pack coalescing when ttl > 0.Thirumala Reddy Mutchukota2017-02-072-19/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Disabling the garbage pack coalescing when garbageTtl > 0 can result in lot of garbage packs if they are created within the garbageTtl time. To avoid a large number of garbage packs, re-introducing garbage pack coalescing for the packs that are created within a single calendar day when the garbageTtl is more than one day or one third of the garbageTtl. Change-Id: If969716aeb55fb4fd0ff71d75f41a07638cd5a69 Signed-off-by: Thirumala Reddy Mutchukota <thirumala@google.com>
* | | | | Merge "Branch normalizer should not normalize already valid branch names"David Pursehouse2017-02-072-5/+25
|\ \ \ \ \
| * | | | | Branch normalizer should not normalize already valid branch namesMatthias Sohn2017-02-072-5/+25
| |/ / / / | | | | | | | | | | | | | | | Change-Id: Ib746655e32a37c4ad323f1d12ac0817de8fa56cf Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* / / / / [infer] Fix ObjectWalk leak in PackWriter.preparePack()Matthias Sohn2017-02-071-7/+8
|/ / / / | | | | | | | | | | | | Change-Id: I5d2455404e507faa717e9d916e9b6cd80aa91473 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | Follow redirects in transportBo Zhang2017-02-025-15/+174
| | | | | | | | | | | | | | | | | | | | | | | | Bug: 465167 Change-Id: I6da19c8106201c2a1ac69002bd633b7387f25d96 Signed-off-by: Bo Zhang <zhangbodut@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | Merge branch 'stable-4.6'Matthias Sohn2017-02-021-31/+41
|\ \ \ \ | | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | * stable-4.6: GC: delete empty directories after purging loose objects GC.prune(Set<ObjectId>): return early if objects directory is empty Change-Id: I3d6cacf80d3b4c69ba108e970855963bd9f6ee78 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * | | GC: delete empty directories after purging loose objectsMatthias Sohn2017-02-011-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to limit the number of directories we check for emptiness only consider fanout directories which contained unreferenced loose objects we deleted in the same gc run. Change-Id: Idf8d512867ee1c8ed40bd55752122ce83a98ffa2 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * | | GC.prune(Set<ObjectId>): return early if objects directory is emptyMatthias Sohn2017-01-301-30/+33
| | | | | | | | | | | | | | | | Change-Id: Id56b102604c4e0437230e3e7c59c0a3a1b676256 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | Organize importsDavid Pursehouse2017-02-012-3/+1
| | | | | | | | | | | | | | | | | | | | Change-Id: I97044f69d220fc2d3f9fe890fdfec542454f02d2 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | Detect stale-file-handle error in causal chainHongkai Liu2017-01-304-2/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Cover the case where the exception is wrapped up as a cause, e.g., PackIndex#open(File). Change-Id: I0df5b1e9c2ff886bdd84dee3658b6a50866699d1 Signed-off-by: Hongkai Liu <hongkai.liu@ericsson.com>
* | | | Merge branch 'stable-4.6'David Pursehouse2017-01-312-0/+172
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.6: Clean up orphan files in GC Change-Id: I4fb6b4cd03d032535a9c04ede784bea880b4536b Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
| * | | Clean up orphan files in GCHongkai Liu2017-01-302-0/+172
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An orphan file is either a bitmap or an idx file in pack folder, and its corresponding pack file is missing. Change-Id: I3c4cb1f7aa99dd7b398bdb8d513f528d7761edff Signed-off-by: Hongkai Liu <hongkai.liu@ericsson.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | Merge "Don't rely on default locale when using toUpperCase() and toLowerCase()"David Pursehouse2017-01-3018-25/+52
|\ \ \ \
| * | | | Don't rely on default locale when using toUpperCase() and toLowerCase()Matthias Sohn2017-01-2818-25/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Otherwise these methods may produce unexpected results if used for strings that are intended to be interpreted locale independently. Examples are programming language identifiers, protocol keys, and HTML tags. For instance, "TITLE".toLowerCase() in a Turkish locale returns "t\u0131tle", where '\u0131' is the LATIN SMALL LETTER DOTLESS I character. See https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toLowerCase-- http://blog.thetaphi.de/2012/07/default-locales-default-charsets-and.html Bug: 511238 Change-Id: Id8d8f37d84d62239c918b81f8d883ed798d87656 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | | Merge FileTreeIteratorJava7Test into FileTreeIteratorTestDavid Pursehouse2017-01-302-208/+154
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JGit now requires Java 8, so it is no longer necessary to have a separate class for Java 7 specific tests. Remove it and merge its tests into the existing FileTreeIteratorTest. FileTreeIteratorTest has an @Before annotated method that sets up some files in the git, which breaks the tests which have assumptions on the file names. Add adjustments. Change-Id: I14f88d8e079e1677c8dfbc1fcbf4444ea8265365 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | | Rename FileUtilTest to FileUtilsTest and merge in FileUtils7TestHongkai Liu2017-01-302-100/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rename the test class to match the name of the class under test. JGit now requires Java 8 so it is no longer necessary to have a separate class (FileUtils7Test) for Java 7 tests. Merge those into FileUtilsTest. Change-Id: I39dd7e76a2e4ce97319c7d52261b0a1546879788 Signed-off-by: Hongkai Liu <hongkai.liu@ericsson.com> Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | Make GC cancellable when called programmaticallyHector Caballero2017-01-292-6/+103
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sometimes, it is necessary to cancel a garbage collection operation. When GC is called using the standalone executable, i.e., from a command line, Control-Cing the process does the trick. When calling GC programmatically, though, there is no mechanism to do it. Add checks in the GC process so that a custom cancellable progress monitor could be passed in order to cancel the operation at specific points. In this case, the calling process set the cancel flag in the progress monitor and the GC process will throw an exception that can be caught and handled by the caller accordingly. Change-Id: Ieaecf3dbdf244539ec734939c065735f6785aacf Signed-off-by: Hector Caballero <hector.caballero@ericsson.com>
* | | | | RepositoryCacheTest: avoid to close already closed repositoryMatthias Sohn2017-01-282-17/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The tearDown() of the superclass closed the repository once more which led to a negative use count warning logged by Repository.close(). Change-Id: I331f85a540c68264a53456276c32f72b79113d61 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | | RefUpdateTest: Don't call createBareRepository in try-with-resourceDavid Pursehouse2017-01-281-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | createBareRepository adds the created repo to the list of repos to be closed in the superclass's teardown. Wrapping it in try-with-resource causes it to be closed too many times, resulting in a corrupt use count. Change-Id: I4c70630bf6008544324dda453deb141f4f89472c Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | ReceivePackAdvertiseRefsHookTest: Don't close repositories in teardownDavid Pursehouse2017-01-281-10/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The repositories get added to the "toClose" set by createBareRepository, and are then closed in the superclass's tearDown method. Explicitly closing them in this test class's teardown causes the use count to go negative when subsequently closed again by the superclass. Change-Id: Idcbb16b4cf4bf0640d7e4ac15d1926d8a27c1251 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | RepoCommand#readFile: Don't call Git#getRepository() in try-with-resourceDavid Pursehouse2017-01-281-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using try-with-resource means that close() will automatically be called on the Repository object. However, according to the javadoc of Git#close(): If the repository was opened by a static factory method in this class, then this method calls Repository#close() on the underlying repository instance. This means that Repository#close() is called twice, by Git.close() and in the outer try-with-resource, leading to a corrupt use count. Change-Id: I37ba517eb2cc67d1cd36813598772c70208d0bc9 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | RepoCommandTest: Don't wrap create{Bare,Work}Directory in t-w-rDavid Pursehouse2017-01-281-362/+321
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These methods add the created Repository into "toClose", and they are then closed by LocalDiskRepositoryTestCase's tearDown method. Calling them in try-with-resource causes them to first be closed in the test method, and then again in tearDown, which results in the use count going negative and a log message on the console. While this is not a serious problem, having so many false positives in the logs will potentially drown out real cases of Repository being closed too many times. Change-Id: Ib374445e101dc11cb840957b8b19ee1caf777392 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | LocalDiskRepositoryTestCase: Only add to toClose through access methodDavid Pursehouse2017-01-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Only using the access method means we only have one place where the toClose set is modified, making it easier to debug either by adding log statements or by setting a breakpoint. Change-Id: I4f9f1774d5f2e10bcab381edfd84bb6ee0499a11 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | GitConstructionTest: Remove unnecessary calls to Repository.close()David Pursehouse2017-01-281-10/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The repositories are already closed in the superclass teardown due to being added to the "toClose" set. Change-Id: I768ba8a02fc585907687caf37e2e283434016c04 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | Merge "LocalDiskRepositoryTestCase: Prevent duplicates in list of repos to ↵Matthias Sohn2017-01-281-1/+3
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | close"
| * | | | | LocalDiskRepositoryTestCase: Prevent duplicates in list of repos to closeDavid Pursehouse2017-01-271-1/+3
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change the "toClose" list to a set, which will not allow duplicate entries. This reduces the number of false positive logs about corrupt use count due to the same repository being closed more than once during teardown. Change-Id: I5ab0ff8b56e7f2b2c7aab5274d957708d26f42c5 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | Merge "Remove unused org.apache.http.impl.client.cache requirement"Andrey Loskutov2017-01-281-1/+0
|\ \ \ \ \ | |/ / / / |/| | | |
| * | | | Remove unused org.apache.http.impl.client.cache requirementAndrey Loskutov2017-01-261-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The package is not used by the plugin and seems to be missing in the platform anyway under some conditions, see bug 508321 (newer org.apache.httpcomponents.httpclient_4.5.2 does NOT include the package, org.apache.httpcomponents.httpclient_4.3.6 does). Change-Id: Ida5d926a611812b5177af651b3cf22f1b2519e02 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* | | | | Repository: Include repository name when logging corrupt use countDavid Pursehouse2017-01-272-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Logging the repository name makes it easier to track down what is incorrectly closing a repository. Change-Id: I42a8bdf766c0e67f100adbf76d9616584e367ac2 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | Record the estimated size of the pack files.Thirumala Reddy Mutchukota2017-01-266-8/+482
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Compacter and Garbage Collector will record the estimated size of the newly going to be created compact, gc or garbage packs. This information can be used by the clients to better make a call on how to actually store the pack based on the approximated expected size. Added a new protected method DfsObjDatabase.newPack(PackSource packSource, long estimatedPackSize), so that the clients can override this method to make use of the estimatedPackSize while creating a new PackDescription object. The default implementation of this method is equivalent to newPack(packSource).setEstimatedPackSize(estimatedPackSize). I didn't make it abstract because that would force all the existing sub classes of DfsObjDatabase to implement this method. Due to this default implementation, the estimatedPackSize is added to DfsPackDescription using a setter instead of a constructor parameter (even though constructor parameter would be a better choice as this value is set only during the object creation). Change-Id: Iade1122633ea774c2e842178a6a6cbb4a57b598b Signed-off-by: Thirumala Reddy Mutchukota <thirumala@google.com>
* | | | Merge branch 'stable-4.6'David Pursehouse2017-01-267-19/+21
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.6: Update Orbit to S20170120205402 and com.jcraft.jsch to 0.1.54 Fix preparation of 4.6.1-SNAPSHOT builds Change-Id: Ifd1f81cb199a0b5bd35e8652cac116e377136b2d Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
| * | | Update Orbit to S20170120205402 and com.jcraft.jsch to 0.1.54Matthias Sohn2017-01-237-19/+21
| | | | | | | | | | | | | | | | | | | | CQ: 12553 Change-Id: Ie72b48d00f363e3dc05b9733018a6ddca32c3e6e Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * | | Fix preparation of 4.6.1-SNAPSHOT buildsMatthias Sohn2017-01-231-2/+2
| | | | | | | | | | | | | | | | Change-Id: Ib241c4f45192672712526599898c0bd0bd356436 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | Fixes Javadoc error in org.eclipse.jgit created with I59539acLars Vogel2017-01-252-6/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds the param information to the private method. These are generated via tooltip to resolve the compile errors. Bug: 511043 Change-Id: I9ba551978eab750326d1a067b296e3ae93925871 Signed-off-by: Lars Vogel <Lars.Vogel@vogella.com>
* | | | Remove @since tags from internal packagesJonathan Nieder2017-01-2419-43/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These packages don't use @since tags because they are not part of the stable public API. Some @since tags snuck in, though. Remove them to make the convention easier to find for new contributors and the expectations clearer for users. Change-Id: I6c17d3cfc93657f1b33cf5c5708f2b1c712b0d31
* | | | gc: loosen unreferenced objectsDavid Turner2017-01-243-10/+88
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An unreferenced object might appear in a pack. This could only happen because it was previously referenced, and then later that reference was removed. When we gc, we copy the referenced objects into a new pack, and delete the old pack. This would remove the unreferenced object. Now we first create a loose object from any unreferenced object in the doomed pack. This kicks off the two-week grace period for that object, after which it will be collected if it's not referenced. This matches the behavior of regular git. Change-Id: I59539aca1d0d83622c41aa9bfbdd72fa868ee9fb Signed-off-by: David Turner <dturner@twosigma.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* | | | [infer] Mark ManifestParse.getFilteredProjects non-nullMatthias Sohn2017-01-231-1/+2
| | | | | | | | | | | | | | | | Change-Id: I05653df7a0337443d2c8e53f47f4e95ec9ca1a9c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | [infer] Fix potential NPE in DiffFormatterMatthias Sohn2017-01-231-1/+1
| | | | | | | | | | | | | | | | Change-Id: Ia33e2af9ce3393d9173ca0dc7efefd86c965d8c8 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | [infer] Fix potential NPE in CloneCommandMatthias Sohn2017-01-231-6/+18
| | | | | | | | | | | | | | | | Change-Id: Ie7eeba3ae719ff207c7535d535a9e0bd6c9e99e6 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | Implement Bazel build for http-apache, lfs, lfs-serverDavid Pursehouse2017-01-224-0/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Test plan: $ bazel build all $ unzip -t bazel-genfiles/all.zip Archive: bazel-genfiles/all.zip testing: libhttp-apache.jar OK testing: libjgit-archive.jar OK testing: libjgit-lfs-server.jar OK testing: libjgit-lfs.jar OK testing: libjgit-servlet.jar OK testing: libjgit.jar OK testing: libjunit.jar OK No errors detected in compressed data of bazel-genfiles/all.zip. Change-Id: I9e6c60898ccc6d2a4557ec7544c297442a9702b4 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | Format Bazel files with buildifierDavid Pursehouse2017-01-226-113/+123
| | | | | | | | | | | | | | | | | | | | Change-Id: I934114315d2c7cab917f1011b8e55c52367d429f Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | Change StreamGobbler to Runnable to avoid unused FutureShawn Pearce2017-01-211-12/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It can be considered a programming error to create a Future<T> but do nothing with that object. There is an async computation happening and without holding and checking the Future for done or exception the caller has no idea if it has completed. FS doesn't really care about these StreamGobblers finishing. Instead use Runnable with execute(Runnable), which doesn't return a Future. Change-Id: I93b66d1f6c869e66be5c1169d8edafe781e601f6
* | | | Add missing @since tags on new API constantsMatthias Sohn2017-01-191-2/+2
| | | | | | | | | | | | | | | | Change-Id: Ia8b861da07fba99644ccc9eb5578a46cc39600a1 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | gc: Add options to preserve and prune old pack filesJames Melvin2017-01-197-7/+215
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new --preserve-oldpacks option moves old pack files into the preserved subdirectory instead of deleting them after repacking. The new --prune-preserved option prunes old pack files from the preserved subdirectory after repacking, but before potentially moving the latest old packfiles to this subdirectory. These options are designed to prevent stale file handle exceptions during git operations which can happen on users of NFS repos when repacking is done on them. The strategy is to preserve old pack files around until the next repack with the hopes that they will become unreferenced by then and not cause any exceptions to running processes when they are finally deleted (pruned). Change-Id: If3f729f0d9ce920ee2c3e6acdde46f2068be61d2 Signed-off-by: James Melvin <jmelvin@codeaurora.org>
* | | | Make ObjectDownloadListener publicDavid Pursehouse2017-01-191-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The same was already done for ObjectUploadListener in I5b0fb1220. Change-Id: Ie8a79f715fe69bed9331962fb478f7e35acf8680 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | Implement initial framework of Bazel buildDavid Ostrovsky2017-01-189-0/+207
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The initial implementation only builds the packages consumed by Gerrit Code Review. Test build and execution is not implemented. We prefer to consume maven_jar custom rule from bazlets repository, for the same reasons as in the Gerrit project: * Caching artifacts across different clones and projects * Exposing source classifiers and neverlink artifact TEST PLAN: $ bazel build :all $ unzip -t bazel-genfiles/all.zip Archive: bazel-genfiles/all.zip testing: libjgit-archive.jar OK testing: libjgit-servlet.jar OK testing: libjgit.jar OK testing: libjunit.jar OK No errors detected in compressed data of bazel-genfiles/all.zip. Change-Id: Ia837ce95d9829fe2515f37b7a04a71a4598672a0 Signed-off-by: David Ostrovsky <david@ostrovsky.org> Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>