Browse Source

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>
stable-5.6
Han-Wen Nienhuys 5 years ago committed by Matthias Sohn
parent
commit
e0744891fe
  1. 5
      org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java
  2. 13
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java

5
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java

@ -122,6 +122,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^^");

13
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.

Loading…
Cancel
Save