aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse
diff options
context:
space:
mode:
authorMatthias Sohn <matthias.sohn@sap.com>2023-08-03 01:17:17 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2023-08-03 01:17:17 +0200
commitc7849fbb193476c15b5023ced586616529c6b9d1 (patch)
tree99886408100ef58f921298d0863ad9decf0d5881 /org.eclipse.jgit/src/org/eclipse
parenta22c62cb6dde1d54a258b672288f11b35baa04a7 (diff)
parent88ca88a32bba8d5a59bae1901990f3bc643545eb (diff)
downloadjgit-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.java13
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java24
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) {