Browse Source

Merge "Added MERGING_RESOLVED repository state"

tags/v0.8.1
Robin Rosenberg 14 years ago
parent
commit
541ad72ac6

+ 20
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheBasicTest.java View File

@@ -186,10 +186,30 @@ public class DirCacheBasicTest extends RepositoryTestCase {
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 {

+ 16
- 0
org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java View File

@@ -784,4 +784,20 @@ public class DirCache {
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;
}
}

+ 16
- 1
org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java View File

@@ -60,6 +60,7 @@ import java.util.Set;
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 class Repository {
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;


+ 11
- 0
org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryState.java View File

@@ -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…
Cancel
Save