Merge "Allow deletion of HEAD ref if the repository is bare."
This commit is contained in:
commit
621b0740b3
|
@ -104,9 +104,14 @@ private void delete(final RefUpdate ref, final Result expected)
|
||||||
|
|
||||||
private void delete(final RefUpdate ref, final Result expected,
|
private void delete(final RefUpdate ref, final Result expected,
|
||||||
final boolean exists, final boolean removed) throws IOException {
|
final boolean exists, final boolean removed) throws IOException {
|
||||||
assertEquals(exists, db.getAllRefs().containsKey(ref.getName()));
|
delete(db, ref, expected, exists, removed);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void delete(Repository repo, final RefUpdate ref, final Result expected,
|
||||||
|
final boolean exists, final boolean removed) throws IOException {
|
||||||
|
assertEquals(exists, repo.getAllRefs().containsKey(ref.getName()));
|
||||||
assertEquals(expected, ref.delete());
|
assertEquals(expected, ref.delete());
|
||||||
assertEquals(!removed, db.getAllRefs().containsKey(ref.getName()));
|
assertEquals(!removed, repo.getAllRefs().containsKey(ref.getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -232,6 +237,17 @@ public void testDeleteHead() throws IOException {
|
||||||
assertEquals(0, db.getReflogReader("HEAD").getReverseEntries().size());
|
assertEquals(0, db.getReflogReader("HEAD").getReverseEntries().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteHeadInBareRepo() throws IOException {
|
||||||
|
try (Repository bareRepo = createBareRepository()) {
|
||||||
|
RefUpdate ref = bareRepo.updateRef(Constants.HEAD);
|
||||||
|
ref.setNewObjectId(ObjectId.fromString("0123456789012345678901234567890123456789"));
|
||||||
|
// Create the HEAD ref so we can delete it.
|
||||||
|
assertEquals(Result.NEW, ref.update());
|
||||||
|
ref = bareRepo.updateRef(Constants.HEAD);
|
||||||
|
delete(bareRepo, ref, Result.NO_CHANGE, true, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Delete a loose ref and make sure the directory in refs is deleted too,
|
* Delete a loose ref and make sure the directory in refs is deleted too,
|
||||||
* and the reflog dir too
|
* and the reflog dir too
|
||||||
|
|
|
@ -552,7 +552,8 @@ public Result delete() throws IOException {
|
||||||
*/
|
*/
|
||||||
public Result delete(final RevWalk walk) throws IOException {
|
public Result delete(final RevWalk walk) throws IOException {
|
||||||
final String myName = getRef().getLeaf().getName();
|
final String myName = getRef().getLeaf().getName();
|
||||||
if (myName.startsWith(Constants.R_HEADS)) {
|
if (myName.startsWith(Constants.R_HEADS) && !getRepository().isBare()) {
|
||||||
|
// Don't allow the currently checked out branch to be deleted.
|
||||||
Ref head = getRefDatabase().getRef(Constants.HEAD);
|
Ref head = getRefDatabase().getRef(Constants.HEAD);
|
||||||
while (head != null && head.isSymbolic()) {
|
while (head != null && head.isSymbolic()) {
|
||||||
head = head.getTarget();
|
head = head.getTarget();
|
||||||
|
|
Loading…
Reference in New Issue