aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | Merge branch 'stable-7.1'Matthias Sohn2024-11-130-0/+0
|\ \ \ \ \ | |/ / / / |/| | | / | | |_|/ | |/| | | | | | | | | | | | | | * stable-7.1: Prepare 7.1.0-SNAPSHOT builds JGit v7.1.0.202411121450-m3 Change-Id: Ib507d052f37695f9e8235ef1711f4e8eaa113cd0
| * | | Prepare 7.1.0-SNAPSHOT buildsMatthias Sohn2024-11-1389-123/+123
| | | | | | | | | | | | | | | | Change-Id: Id5379361dd8673e91c998b56f2ee61e041da6113
| * | | JGit v7.1.0.202411121450-m3v7.1.0.202411121450-m3Matthias Sohn2024-11-1289-123/+123
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Change-Id: I5850cdc569eb5d13763f81e9b8332fe70207a4fd
| * | | Merge branch 'master' into stable-7.1Matthias Sohn2024-11-1273-2435/+977
| |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * master: errorprone: Disable javadoc checks in tests Rename numberOfPackFilesAfterBitmap to numberOfPackFilesSinceBitmap Replace custom encoder Constants#encodeASCII by JDK implementation Replace custom encoder `Constants#encode` by JDK implementation DfsGarbageCollector: #setReflogExpire with Instant instead of Date ssh: Minor simplification in SerialRangeSet DfsBlockCacheConfig: propagate hotmap configs to pack ext cache configs SystemReader: Offer methods with java.time API Add `numberOfPackFilesAfterBitmap` to RepoStatistics Enhance CommitBuilder#parent to tolerate null parent GPG: use BC PGP secret key parsing out of the box [errorprone] bc: Remove unused SExprParser#parseSecretKey Update bouncycastle to 1.79 Update bytebuddy to 1.15.10 DfsPackCompactor: write object size index [errorprone] BaseRepositoryBuilder: Use #split(sep, limit) [errorprone] Remove deprecated security manager [errorprone] RefDatabase: #getConflictingNames immutable return DfsGarbageCollector: Add setter for reflog expiration time. [errorprone] SeparateClassloadertTestRunner: use #split(String,int) [errorprone] HttpConnection: Add missing summary in java [errorprone] PackWriter: Fix javadoc tag in new #writeIndex method [errorprone] ByteArraySet: Add summary fragment to javadoc [errorprone] util.Stats: Add summary fragment to javadoc DfsInserter: Read minBytesForObjectSizeIndex only from repo config PackWriter: make PackWriter.writeIndex() take a PackIndexWriter dfs: update getBlockCacheStats to return a List of BlockCacheStats Update mockito to 5.14.2 Update bytebuddy to 1.15.7 Remove unnecessary argument handler in MergeBase.java Replace custom encoder Constants#encodeASCII by JDK implementation Change-Id: I0f84a69af152936f66bbcd2c8d9190ad159e7878
* | | | | Don't fail when trying to prune pack which is already goneJacek Centkowski2024-11-122-79/+5
| |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update the TestRepository.prunePacked so that it doesn't fail if a pack to be pruned is already gone. It is especially handy when prunePacked function is called in `TestRepository.packAndPrune` function after repo moves on after the GC was performed. Change-Id: I01b4ddbaddec1fdc24cfbb967e0edfe0de6c4b7c
* | | | Merge branch 'stable-7.0'Matthias Sohn2024-11-122-6/+11
|\ \ \ \ | | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-7.0: Replace custom encoder Constants#encodeASCII by JDK implementation Replace custom encoder `Constants#encode` by JDK implementation Add `numberOfPackFilesAfterBitmap` to RepoStatistics Enhance CommitBuilder#parent to tolerate null parent Change-Id: I46f961144f2e3c4c57ef0f63a9c8954fee8133e9
| * | | Merge branch 'stable-6.10' into stable-7.0Matthias Sohn2024-11-114-23/+206
| |\ \ \ | | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-6.10: Replace custom encoder Constants#encodeASCII by JDK implementation Replace custom encoder `Constants#encode` by JDK implementation Add `numberOfPackFilesAfterBitmap` to RepoStatistics Enhance CommitBuilder#parent to tolerate null parent Change-Id: If05b0d474c728b54cab9af2b7416be30b2754d1b
| | * | Replace custom encoder Constants#encodeASCII by JDK implementationMatthias Sohn2024-11-091-7/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ensure that the method still throws an IllegalArgumentException for malformed input or if the String contains unmappable characters. Change-Id: I6a340aa1af60c315272ff13b6bf2041ba30c94ca (cherry picked from commit 0fd76114e3436ac635641d06371fd8833179312d)
| | * | Replace custom encoder `Constants#encode` by JDK implementationMatthias Sohn2024-11-091-12/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using the implementation provided in the JDK since Java 1.6 by `String#getBytes(Charset)` reduces JGit maintenance effort and improves performance. The method Constants#encode was implemented when JGit still used Java 1.5. See [1]. Kudos to Marcin for proposing to use this improvement in RefWriter [2]. I think it should be used generally. [1] https://repo.or.cz/jgit.git?a=commit;h=bfa3da225f198b19061158499b1135aff07d85b3 [2] https://eclipse.gerrithub.io/c/eclipse-jgit/jgit/+/1195180 Also-By: Marcin Czech <maczech@gmail.com> Change-Id: I361ed6286b98351a315b8a8ffc3cb845831d35b2 (cherry picked from commit e5d2898997462e0f2409c09497ab62c6cda2dbaf)
| | * | Add `numberOfPackFilesAfterBitmap` to RepoStatisticsJacek Centkowski2024-11-072-1/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce a `numberOfPackFilesAfterBitmap` that contains the number of packfiles created since the latest bitmap generation. Notes: * the `repo.getObjectDatabase().getPacks()` that obtains the list of packs (in the existing `getStatistics` function) uses `PackDirectory.scanPacks` that boils down to call `PackDirectory.scanPacksImpl` which is sorting packs prior returning them therefore the `numberOfPackFilesAfterBitmap` is just all packs before the one that has bitmap attached * the improved version of `packAndPrune` function (one that skips non-existent packfiles) was introduced for testing Change-Id: I608011462f104fc002ac527aa405f492a8a4b0c2
| | * | Enhance CommitBuilder#parent to tolerate null parentMatthias Sohn2024-11-071-3/+7
| | | | | | | | | | | | | | | | Change-Id: Ifdeafd040bca8331804c3e7568da0bee5cbd01df
* | | | Merge "DfsBlockCacheConfig: propagate hotmap configs to pack ext cache configs"Ivan Frade2024-11-112-0/+93
|\ \ \ \
| * | | | DfsBlockCacheConfig: propagate hotmap configs to pack ext cache configsLaura Hamelin2024-11-082-0/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CacheHotMap is currently only set on the base DfsBlockCacheConfig and is not propagated down to PackExt specific caches. Because CacheHotMap is set from a method call rather than from Configs, this change sets per-PackExt CacheHotMap configs on PackExt cache configs both when DfsBlockCacheConfig#setCacheHotMap(...) is called, and when DfsBlockCacheConfig#configure(...) is called after setCacheHotMap. The outer DfsBlockCacheConfig keeps the full CacheHotMap for the same reason that the CacheHotMap config is propagated in both setCacheHotMap and configure: the order of operations setting the configuration from Configs and calling setCacheHotMap is not guaranteed. Change-Id: Id9dc32fedca99ecc83c9dc90c24d9616873a202e
* | | | | Merge "ssh: Minor simplification in SerialRangeSet"Matthias Sohn2024-11-111-19/+12
|\ \ \ \ \
| * | | | | ssh: Minor simplification in SerialRangeSetThomas Wolf2024-11-081-19/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of set.headMap(x).lastKey() use set.floorKey(x) and instead of set.tailMap(x).firstKey() use set.ceilingKey(x). Change-Id: I22f44cbe82b9ead06d6ff517d609dfdbc89a758c
* | | | | | Merge "Rename numberOfPackFilesAfterBitmap to numberOfPackFilesSinceBitmap"Matthias Sohn2024-11-112-11/+11
|\ \ \ \ \ \
| * | | | | | Rename numberOfPackFilesAfterBitmap to numberOfPackFilesSinceBitmapJacek Centkowski2024-11-112-11/+11
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As sugested in I608011462f1. Change-Id: If66226dd7b08ae768413fa614df5dcb6b44dc118
* | | | | | errorprone: Disable javadoc checks in testsIvan Frade2024-11-111-13/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Errorprone finds many problems in the tests javadocs. This is noisy in the logs, but fixing them also disturbs the project history and can complicate merges. Disable the javadoc checks in the tests packages. We can fix those javadocs if some other modification happen in the file (as we fix older coding style). Change-Id: Ic221b60afe77ed9c207adbefd9117d2e26107792
* | | | | | DfsGarbageCollector: #setReflogExpire with Instant instead of DateIvan Frade2024-11-082-6/+8
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Date API is full of major design flaws and pitfalls and should be avoided at all costs. Prefer the java.time APIs, specifically, java.time.Instant (for physical time) and java.time.LocalDate[Time] (for civil time). [1] Replace the Date with Instant in the DfsGarbageCollector#setReflogExpire method. [1] https://errorprone.info/bugpattern/JavaUtilDate Change-Id: Ie98e426e63621e8bef96c31bca56aec0c8eef5a6
* | | | | Merge "SystemReader: Offer methods with java.time API"Ivan Frade2024-11-083-0/+93
|\ \ \ \ \
| * | | | | SystemReader: Offer methods with java.time APIIvan Frade2024-11-083-0/+93
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Error prone explains: The Date API is full of major design flaws and pitfalls and should be avoided at all costs. Prefer the java.time APIs, specifically, java.time.Instant (for physical time) and java.time.LocalDate[Time] (for civil time). Add to SystemReader methods to get the time and timezone in the new java.time classes (Instant/ZoneId) and mark as deprecated their old counterparts. The mapping of methods is: * #getCurrentTime -> #now (returns Instant instead of int) * #getTimezone -> #getTimeZoneAt (returns ZoneOffset intead of int) * #getTimeZone -> #getTimeZoneId (return ZoneId instead of TimeZone) Change-Id: Ic55b2f442a40046ff0ed24f61f566fc7416471be
* | | | | Merge "Remove unnecessary argument handler in MergeBase.java"Matthias Sohn2024-11-081-5/+0
|\ \ \ \ \ | |/ / / / |/| | | |
| * | | | Remove unnecessary argument handler in MergeBase.javaKamil Musin2024-10-081-5/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the parsing of command line arguments always results in an error. ``` fatal: Argument "commit-ish" is required ``` This is caused by the fact that the first method (commit_0) is invoked twice. (As if the multiValued = true). I couldn't figure out, why that would be the case, as it's defaults to false and RevCommit handler doesn't seem to have a logic that would override that either. In any case, defining Arguments like this is unnecessary as it's sufficient to define a single ArrayList @Argument that will accumulate all commits. Change-Id: Ifd1278b3059f86618db05bfe264dd5c00879d82b
* | | | | GPG: use BC PGP secret key parsing out of the boxThomas Wolf2024-11-0611-1585/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove the custom S-expression parsing; BC has gotten many improvements in 1.79 regarding PGP ed25519 keys, AES/OCB encryption, and generally parsing key files. It now can do all we need. Change-Id: I392443e040cce150a9575d18795a7cb8195a3515 Signed-off-by: Thomas Wolf <twolf@apache.org>
* | | | | [errorprone] bc: Remove unused SExprParser#parseSecretKeyIvan Frade2024-11-051-148/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | errorprone complains about using Date in the SExprParser class. All the usages are in a variant of the parseSecretKey method that doesn't have any callers. Remove the unused method. Change-Id: I80f5aa58877b9da31729cb90b0219e45d96144a8
* | | | | Update bouncycastle to 1.79Matthias Sohn2024-11-0522-104/+111
| | | | | | | | | | | | | | | | | | | | Change-Id: Ib81d73075ebc9dcdc73aacf30fa02ad56a502d51
* | | | | Update bytebuddy to 1.15.10Matthias Sohn2024-11-0521-60/+60
| | | | | | | | | | | | | | | | | | | | Change-Id: I49cd5bedd86601380a26f7a7213fc78ebd091393
* | | | | Merge branch 'stable-7.1'Matthias Sohn2024-11-058-5/+479
|\ \ \ \ \ | | |_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-7.1: Add missing @since 7.1 to UploadPack#implies ResolveMerger: Allow setting the TreeWalk AttributesNodeProvider Add Union merge strategy support Change-Id: Ib1c1725578e522c88f80f050d221a517bf012017
| * | | | Add missing @since 7.1 to UploadPack#impliesMatthias Sohn2024-11-051-1/+3
| | | | | | | | | | | | | | | | | | | | Change-Id: Iabbe1f18a5022b4669a3352493c6fd35920ef25f
| * | | | Merge branch 'stable-7.0' into stable-7.1Matthias Sohn2024-11-057-4/+476
| |\ \ \ \ | | | |/ / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-7.0: ResolveMerger: Allow setting the TreeWalk AttributesNodeProvider Add Union merge strategy support Change-Id: I15674134f4c73ac2de514d4fac4a36fca7ed7b07
| | * | | Merge branch 'stable-6.10' into stable-7.0Matthias Sohn2024-11-059-4/+440
| | |\ \ \ | | | | |/ | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | * stable-6.10: ResolveMerger: Allow setting the TreeWalk AttributesNodeProvider Add Union merge strategy support Change-Id: I0d768d793effd1deabb4807446a4f8c10a82ad74
| | | * | ResolveMerger: Allow setting the TreeWalk AttributesNodeProviderNasser Grainawi2024-11-052-0/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a merger is created without a Repository, no AttributesNodeProvider is created in the TreeWalk. Since mergers are often created with a custom ObjectInserter and no repo, they skip any lookups of attributes from any of the gitattributes files (within a tree, in the repo info/ dir, or user/global). Since there are potentially merge-affecting attributes in those files, callers might want to use both a custom ObjectInserter and an AttributesNodeProvider. Change-Id: I7997309003bbb598e1002261b3be7f2cc52066c8
| | | * | Add Union merge strategy supportNasser Grainawi2024-11-047-4/+430
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow users to specify the `union` strategy in their .gitattributes file in order to keep lines from both versions of a conflict [1]. [1] https://git-scm.com/docs/gitattributes.html#Documentation/gitattributes.txt-union Change-Id: I74cecceb2db819a8551b95fb10dfe7c2b160b709
* | | | | Merge "DfsPackCompactor: write object size index"Ivan Frade2024-11-042-0/+61
|\ \ \ \ \
| * | | | | DfsPackCompactor: write object size indexIvan Frade2024-11-012-0/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the compactor is not writing the object size index for packs. As it is using PackWriter to generate the packs, it needs to explicitely call the writes of each extension. Invoke writeObjectSizeIndex in the compactor. The pack writer will write one if the configuration says so. Change-Id: I8d6bbbb5bd67bfc7dd511aa76463512b1e86a45d
* | | | | | [errorprone] BaseRepositoryBuilder: Use #split(sep, limit)Ivan Frade2024-11-011-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | String.split(String) and Pattern.split(CharSequence) have surprising behaviour [1]. We use one of the recommended replacements: #split(sep, limit). [1] https://errorprone.info/bugpattern/StringSplitter Change-Id: Ie1cf7590bd8660d21c79c5c3c1bc2765e5d9462b
* | | | | | [errorprone] Remove deprecated security managerIvan Frade2024-11-019-362/+7
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Errorprone warns about this deprecated classes. The recommendation is stop using SecurityManager all together. The Security Manager is deprecated and subject to removal in a future release. There is no replacement for the Security Manager. See JEP 411 [1] for discussion and alternatives. [1] https://openjdk.org/jeps/411 Change-Id: I3c67136e97d13cf24b85e41d94408631c26e8be8
* | | | | [errorprone] RefDatabase: #getConflictingNames immutable returnIvan Frade2024-10-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Errorprone reports that: This method returns both mutable and immutable collections or maps from different paths. This may be confusing for users of the method. Return always an immutable collection. Change-Id: Id48f3645fd06c8bc72212af180d7d02c7e0b7632
* | | | | Merge "DfsGarbageCollector: Add setter for reflog expiration time."Ivan Frade2024-10-312-0/+119
|\ \ \ \ \
| * | | | | DfsGarbageCollector: Add setter for reflog expiration time.Saril Sudhakaran2024-10-312-0/+119
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JGit reftable writer/compator knows how to prune the history, but the DfsGarbageCollector doesn't expose the time limit. Add a method to DfsGarbageCollector to set the reflog time limit. This value is then passed to the reftable compactor. Callers usually pass here the value from gc.reflogExpire. The reflog block length is stored in 24 bits [1], limiting the size to 16MB. I have observed that in repositories with frequent commits, reflogs hit that size in 6-12 months. [1] https://git-scm.com/docs/reftable Bug: jgit-96 Change-Id: I8b32d6d2b2e1d8af8fb7d9f86225d75f1877eb2f
* | | | | | Merge "[errorprone] HttpConnection: Add missing summary in java"Ivan Frade2024-10-311-0/+16
|\ \ \ \ \ \
| * | | | | | [errorprone] HttpConnection: Add missing summary in javaIvan Frade2024-10-301-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The constants don't have summary and errorprone complains about it. Change-Id: Id1470ed9fd54cf7fd684045c5631acc1a8d450c2
* | | | | | | Merge "[errorprone] PackWriter: Fix javadoc tag in new #writeIndex method"Ivan Frade2024-10-301-2/+2
|\| | | | | |
| * | | | | | [errorprone] PackWriter: Fix javadoc tag in new #writeIndex methodIvan Frade2024-10-301-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We introduced this method recently and the javadoc is not correct: error: [InvalidInlineTag] This tag is invalid. @code{PackIndexWriter} instance to write the index Change-Id: I34ed3d8b5a121fea9b8163627b46ae4a289c9462
* | | | | | | Merge "[errorprone] SeparateClassloadertTestRunner: use #split(String,int)"Ivan Frade2024-10-301-1/+1
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | |
| * | | | | | [errorprone] SeparateClassloadertTestRunner: use #split(String,int)Ivan Frade2024-10-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Errorprone recommends to use String.split(String, int) as it has a less surprising behaviour with empty entries. https://errorprone.info/bugpattern/StringSplitter Change-Id: I48a01ee18d66bbb4a177aee576629dc5132d4a38
* | | | | | | [errorprone] ByteArraySet: Add summary fragment to javadocIvan Frade2024-10-301-3/+9
|/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reported by error prone. Change-Id: Icaa69c37d0cde19fc605cb3f3c5f9ed9abfb37d3
* | | | | | [errorprone] util.Stats: Add summary fragment to javadocIvan Frade2024-10-301-7/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Errorprone complains about missing summary in these javadocs. [MissingSummary] A summary fragment is required; consider using the value of the @return b lock as a summary fragment instead. * @return variance of the added values ^ (see https://google.github.io/styleguide/javaguide.html#s7.2-summary-fragment) Did you mean '*Returns variance of the added values.'? Change-Id: I29d633ec95c18b17cc92b069dd1a94fbb2a75c94
* | | | | | Merge "PackWriter: make PackWriter.writeIndex() take a PackIndexWriter"Ivan Frade2024-10-294-24/+57
|\ \ \ \ \ \
| * | | | | | PackWriter: make PackWriter.writeIndex() take a PackIndexWriterSam Delmerico2024-10-284-24/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, the PackWriter implementation required that indexes and their extensions be writable to an OutputStream with a fixed binary format. To support more general index storage formats, allow PackWriter to accept an PackIndexWriter interface which accepts only the objects to store. This allows implementors to choose their storage format. The implementation will be provided by the DfsObjectDatabase. The DfsObjectDatabase is already responsible for providing the OutputStream that was previously used to write indexes. Having it provide a writing interface would be a natural generalization. This idea was previously implemented for PackBitmapIndex writing in https://gerrithub.io/c/eclipse-jgit/jgit/+/1177722. Change-Id: I582d2f3d25d6adb2da243d6d0d7bc405a97d6183