Browse Source

Merge "Added MERGING_RESOLVED repository state"

stable-0.8
Robin Rosenberg 15 years ago committed by Code Review
parent
commit
541ad72ac6
  1. 20
      org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheBasicTest.java
  2. 16
      org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java
  3. 17
      org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
  4. 11
      org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryState.java

20
org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheBasicTest.java vendored

@ -186,10 +186,30 @@ public class DirCacheBasicTest extends RepositoryTestCase {
for (int i = 0; i < ents.length; i++) for (int i = 0; i < ents.length; i++)
b.add(ents[i]); b.add(ents[i]);
b.finish(); b.finish();
assertFalse(dc.hasUnmergedPaths());
assertEquals(paths.length, dc.getEntryCount()); assertEquals(paths.length, dc.getEntryCount());
dc.clear(); dc.clear();
assertEquals(0, dc.getEntryCount()); 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 { public void testFindOnEmpty() throws Exception {

16
org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java vendored

@ -784,4 +784,20 @@ public class DirCache {
throws UnmergedPathException, IOException { throws UnmergedPathException, IOException {
return getCacheTree(true).writeTree(sortedEntries, 0, 0, ow); 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;
}
} }

17
org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java

@ -60,6 +60,7 @@ import java.util.Set;
import java.util.Vector; import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.RevisionSyntaxException; import org.eclipse.jgit.errors.RevisionSyntaxException;
@ -1117,8 +1118,22 @@ public class Repository {
return RepositoryState.REBASING_MERGE; return RepositoryState.REBASING_MERGE;
// Both versions // 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; return RepositoryState.MERGING;
}
if (new File(gitDir,"BISECT_LOG").exists()) if (new File(gitDir,"BISECT_LOG").exists())
return RepositoryState.BISECTING; return RepositoryState.BISECTING;

11
org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryState.java

@ -73,6 +73,17 @@ public enum RepositoryState {
public String getDescription() { return "Conflicts"; } 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 * An unfinished rebase or am. Must resolve, skip or abort before normal work can take place
*/ */

Loading…
Cancel
Save