summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHan-Wen Nienhuys <hanwen@google.com>2019-11-19 19:55:06 -0800
committerMatthias Sohn <matthias.sohn@sap.com>2019-11-26 01:57:19 +0100
commite0744891fe233f1b78b55ea14675d5766d3ac321 (patch)
tree0a740be210a2bed416b1b74a4c14a98f0d029b02
parenta48b77d7826bbc939185ee021906d82b6f4cb93e (diff)
downloadjgit-e0744891fe233f1b78b55ea14675d5766d3ac321.tar.gz
jgit-e0744891fe233f1b78b55ea14675d5766d3ac321.zip
FileRepository: cleanup refs outside refs/ on reftable conversion
Change-Id: Iab7d3a08906e826e26572f534512a09d3a5876b0 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java5
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java13
2 files changed, 18 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
index bb68ef185a..e0e20fb4dd 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
@@ -123,6 +123,11 @@ public class FileReftableTest extends SampleDataRepositoryTestCase {
}
@Test
+ public void additionalRefsAreRemoved() {
+ assertFalse(new File(db.getDirectory(), Constants.HEAD).exists());
+ }
+
+ @Test
public void testCompactFully() throws Exception {
ObjectId c1 = db.resolve("master^^");
ObjectId c2 = db.resolve("master^");
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java
index cb00fc4ef5..2f6ef51133 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java
@@ -46,6 +46,8 @@
package org.eclipse.jgit.internal.storage.file;
+import static java.util.stream.Collectors.toList;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -740,6 +742,10 @@ public class FileRepository extends Repository {
File packedRefs = new File(getDirectory(), Constants.PACKED_REFS);
File logsDir = new File(getDirectory(), Constants.LOGS);
+
+ List<String> additional = getRefDatabase().getAdditionalRefs().stream()
+ .map(Ref::getName).collect(toList());
+ additional.add(Constants.HEAD);
if (backup) {
FileUtils.rename(refsFile, new File(getDirectory(), "refs.old"));
if (packedRefs.exists()) {
@@ -750,10 +756,17 @@ public class FileRepository extends Repository {
FileUtils.rename(logsDir,
new File(getDirectory(), Constants.LOGS + ".old"));
}
+ for (String r : additional) {
+ FileUtils.rename(new File(getDirectory(), r),
+ new File(getDirectory(), r + ".old"));
+ }
} else {
packedRefs.delete(); // ignore return value.
FileUtils.delete(logsDir, FileUtils.RECURSIVE);
FileUtils.delete(refsFile, FileUtils.RECURSIVE);
+ for (String r : additional) {
+ new File(getDirectory(), r).delete();
+ }
}
// Put new data.