diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2023-08-03 01:17:17 +0200 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2023-08-03 01:17:17 +0200 |
commit | c7849fbb193476c15b5023ced586616529c6b9d1 (patch) | |
tree | 99886408100ef58f921298d0863ad9decf0d5881 /org.eclipse.jgit/src/org/eclipse | |
parent | a22c62cb6dde1d54a258b672288f11b35baa04a7 (diff) | |
parent | 88ca88a32bba8d5a59bae1901990f3bc643545eb (diff) | |
download | jgit-c7849fbb193476c15b5023ced586616529c6b9d1.tar.gz jgit-c7849fbb193476c15b5023ced586616529c6b9d1.zip |
Merge branch 'stable-5.13' into stable-6.0
* stable-5.13:
Add verification in GcKeepFilesTest that bitmaps are generated
Express the explicit intention of creating bitmaps in GC
GC: prune all packfiles after the loosen phase
Prepare 5.13.3-SNAPSHOT builds
JGit v5.13.2.202306221912-r
Change-Id: I1f50995d9d9c592ec0e02a04e0e409440b49f9f3
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java | 13 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java | 24 |
2 files changed, 31 insertions, 6 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java index fef8a35d3d..b261cb162c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java @@ -345,6 +345,7 @@ public class GC { prunePreserved(); long packExpireDate = getPackExpireDate(); + List<PackFile> packFilesToPrune = new ArrayList<>(); oldPackLoop: for (Pack oldPack : oldPacks) { checkCancelled(); String oldName = oldPack.getPackName(); @@ -362,9 +363,10 @@ public class GC { loosen(inserter, reader, oldPack, ids); } oldPack.close(); - prunePack(oldPack.getPackFile()); + packFilesToPrune.add(oldPack.getPackFile()); } } + packFilesToPrune.forEach(this::prunePack); // close the complete object database. That's my only chance to force // rescanning and to detect that certain pack files are now deleted. @@ -858,7 +860,7 @@ public class GC { Pack heads = null; if (!allHeadsAndTags.isEmpty()) { heads = writePack(allHeadsAndTags, PackWriter.NONE, allTags, - refsToExcludeFromBitmap, tagTargets, excluded); + refsToExcludeFromBitmap, tagTargets, excluded, true); if (heads != null) { ret.add(heads); excluded.add(0, heads.getIndex()); @@ -866,13 +868,13 @@ public class GC { } if (!nonHeads.isEmpty()) { Pack rest = writePack(nonHeads, allHeadsAndTags, PackWriter.NONE, - PackWriter.NONE, tagTargets, excluded); + PackWriter.NONE, tagTargets, excluded, false); if (rest != null) ret.add(rest); } if (!txnHeads.isEmpty()) { Pack txn = writePack(txnHeads, PackWriter.NONE, PackWriter.NONE, - PackWriter.NONE, null, excluded); + PackWriter.NONE, null, excluded, false); if (txn != null) ret.add(txn); } @@ -1142,7 +1144,7 @@ public class GC { private Pack writePack(@NonNull Set<? extends ObjectId> want, @NonNull Set<? extends ObjectId> have, @NonNull Set<ObjectId> tags, @NonNull Set<ObjectId> excludedRefsTips, - Set<ObjectId> tagTargets, List<ObjectIdSet> excludeObjects) + Set<ObjectId> tagTargets, List<ObjectIdSet> excludeObjects, boolean createBitmap) throws IOException { checkCancelled(); File tmpPack = null; @@ -1173,6 +1175,7 @@ public class GC { if (excludeObjects != null) for (ObjectIdSet idx : excludeObjects) pw.excludeObjects(idx); + pw.setCreateBitmaps(createBitmap); pw.preparePack(pm, want, have, PackWriter.NONE, union(tags, excludedRefsTips)); if (pw.getObjectCount() == 0) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java index 59aa5c908e..cd3f536445 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java @@ -254,6 +254,8 @@ public class PackWriter implements AutoCloseable { private boolean useBitmaps; + private boolean createBitmaps = true; + private boolean ignoreMissingUninteresting = true; private boolean pruneCurrentObjectList; @@ -575,6 +577,26 @@ public class PackWriter implements AutoCloseable { } /** + * Whether to generate bitmaps. + * + * @param createBitmaps + * if set to true, bitmaps will be generated when creating a pack. + */ + public void setCreateBitmaps(boolean createBitmaps) { + this.createBitmaps = createBitmaps; + } + + /** + * Whether the bitmap file is to be created by this PackWriter. + * + * @return {@code true} if the bitmap file is to be created by this + * PackWriter. + */ + public boolean isCreateBitmaps() { + return createBitmaps; + } + + /** * Whether the index file cannot be created by this PackWriter. * * @return {@code true} if the index file cannot be created by this @@ -1910,7 +1932,7 @@ public class PackWriter implements AutoCloseable { canBuildBitmaps = config.isBuildBitmaps() && !shallowPack && have.isEmpty() - && (excludeInPacks == null || excludeInPacks.length == 0); + && createBitmaps; if (!shallowPack && useBitmaps) { BitmapIndex bitmapIndex = reader.getBitmapIndex(); if (bitmapIndex != null) { |