Merge "Added MERGING_RESOLVED repository state"
This commit is contained in:
commit
541ad72ac6
|
@ -186,10 +186,30 @@ public void testBuildThenClear() throws Exception {
|
|||
for (int i = 0; i < ents.length; i++)
|
||||
b.add(ents[i]);
|
||||
b.finish();
|
||||
assertFalse(dc.hasUnmergedPaths());
|
||||
|
||||
assertEquals(paths.length, dc.getEntryCount());
|
||||
dc.clear();
|
||||
assertEquals(0, dc.getEntryCount());
|
||||
assertFalse(dc.hasUnmergedPaths());
|
||||
}
|
||||
|
||||
public void testDetectUnmergedPaths() throws Exception {
|
||||
final DirCache dc = DirCache.read(db);
|
||||
final DirCacheEntry[] ents = new DirCacheEntry[3];
|
||||
|
||||
ents[0] = new DirCacheEntry("a", 1);
|
||||
ents[0].setFileMode(FileMode.REGULAR_FILE);
|
||||
ents[1] = new DirCacheEntry("a", 2);
|
||||
ents[1].setFileMode(FileMode.REGULAR_FILE);
|
||||
ents[2] = new DirCacheEntry("a", 3);
|
||||
ents[2].setFileMode(FileMode.REGULAR_FILE);
|
||||
|
||||
final DirCacheBuilder b = dc.builder();
|
||||
for (int i = 0; i < ents.length; i++)
|
||||
b.add(ents[i]);
|
||||
b.finish();
|
||||
assertTrue(dc.hasUnmergedPaths());
|
||||
}
|
||||
|
||||
public void testFindOnEmpty() throws Exception {
|
||||
|
|
|
@ -784,4 +784,20 @@ public ObjectId writeTree(final ObjectWriter ow)
|
|||
throws UnmergedPathException, IOException {
|
||||
return getCacheTree(true).writeTree(sortedEntries, 0, 0, ow);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells whether this index contains unmerged paths.
|
||||
*
|
||||
* @return {@code true} if this index contains unmerged paths. Means: at
|
||||
* least one entry is of a stage different from 0. {@code false}
|
||||
* will be returned if all entries are of stage 0.
|
||||
*/
|
||||
public boolean hasUnmergedPaths() {
|
||||
for (int i = 0; i < entryCnt; i++) {
|
||||
if (sortedEntries[i].getStage() > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
import java.util.Vector;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.eclipse.jgit.dircache.DirCache;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
|
||||
import org.eclipse.jgit.errors.RevisionSyntaxException;
|
||||
|
@ -1117,8 +1118,22 @@ public RepositoryState getRepositoryState() {
|
|||
return RepositoryState.REBASING_MERGE;
|
||||
|
||||
// Both versions
|
||||
if (new File(gitDir,"MERGE_HEAD").exists())
|
||||
if (new File(gitDir, "MERGE_HEAD").exists()) {
|
||||
// we are merging - now check whether we have unmerged paths
|
||||
try {
|
||||
if (!DirCache.read(this).hasUnmergedPaths()) {
|
||||
// no unmerged paths -> return the MERGING_RESOLVED state
|
||||
return RepositoryState.MERGING_RESOLVED;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// Can't decide whether unmerged paths exists. Return
|
||||
// MERGING state to be on the safe side (in state MERGING
|
||||
// you are not allow to do anything)
|
||||
e.printStackTrace();
|
||||
}
|
||||
return RepositoryState.MERGING;
|
||||
}
|
||||
|
||||
if (new File(gitDir,"BISECT_LOG").exists())
|
||||
return RepositoryState.BISECTING;
|
||||
|
||||
|
|
|
@ -73,6 +73,17 @@ public enum RepositoryState {
|
|||
public String getDescription() { return "Conflicts"; }
|
||||
},
|
||||
|
||||
/**
|
||||
* An merge where all conflicts have been resolved. The index does not
|
||||
* contain any unmerged paths.
|
||||
*/
|
||||
MERGING_RESOLVED {
|
||||
public boolean canCheckout() { return true; }
|
||||
public boolean canResetHead() { return true; }
|
||||
public boolean canCommit() { return true; }
|
||||
public String getDescription() { return "Merged"; }
|
||||
},
|
||||
|
||||
/**
|
||||
* An unfinished rebase or am. Must resolve, skip or abort before normal work can take place
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue