Browse Source

Merge "Check assume unchanged flag in Add command"

stable-0.10
Shawn Pearce 14 years ago committed by Code Review
parent
commit
a115b64f4b
  1. 42
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
  2. 5
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java
  3. 32
      org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java

42
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java

@ -456,6 +456,38 @@ public class AddCommandTest extends RepositoryTestCase {
indexState(CONTENT));
}
public void testAssumeUnchanged() throws Exception {
Git git = new Git(db);
String path = "a.txt";
writeTrashFile(path, "content");
git.add().addFilepattern(path).call();
String path2 = "b.txt";
writeTrashFile(path2, "content");
git.add().addFilepattern(path2).call();
git.commit().setMessage("commit").call();
assertEquals("[a.txt, mode:100644, content:"
+ "content, assume-unchanged:false]"
+ "[b.txt, mode:100644, content:content, "
+ "assume-unchanged:false]", indexState(CONTENT
| ASSUME_UNCHANGED));
assumeUnchanged(path2);
assertEquals("[a.txt, mode:100644, content:content, "
+ "assume-unchanged:false][b.txt, mode:100644, "
+ "content:content, assume-unchanged:true]", indexState(CONTENT
| ASSUME_UNCHANGED));
writeTrashFile(path, "more content");
writeTrashFile(path2, "more content");
git.add().addFilepattern(".").call();
assertEquals("[a.txt, mode:100644, content:more content,"
+ " assume-unchanged:false][b.txt, mode:100644,"
+ "" + ""
+ " content:content, assume-unchanged:true]",
indexState(CONTENT
| ASSUME_UNCHANGED));
}
private DirCacheEntry addEntryToBuilder(String path, File file,
ObjectInserter newObjectInserter, DirCacheBuilder builder, int stage)
throws IOException {
@ -473,4 +505,14 @@ public class AddCommandTest extends RepositoryTestCase {
return entry;
}
private void assumeUnchanged(String path) throws IOException {
final DirCache dirc = db.lockDirCache();
final DirCacheEntry ent = dirc.getEntry(path);
if (ent != null)
ent.setAssumeValid(true);
dirc.write();
if (!dirc.commit())
throw new IOException("could not commit");
}
}

5
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java

@ -138,6 +138,8 @@ public abstract class RepositoryTestCase extends LocalDiskRepositoryTestCase {
public static final int CONTENT = 16;
public static final int ASSUME_UNCHANGED = 32;
/**
* Represent the state of the index in one String. This representation is
* useful when writing tests which do assertions on the state of the index.
@ -209,6 +211,9 @@ public abstract class RepositoryTestCase extends LocalDiskRepositoryTestCase {
+ new String(db.open(entry.getObjectId(),
Constants.OBJ_BLOB).getCachedBytes(), "UTF-8"));
}
if (0 != (includedOptions & ASSUME_UNCHANGED))
sb.append(", assume-unchanged:"
+ Boolean.toString(entry.isAssumeValid()));
sb.append("]");
}
return sb.toString();

32
org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java

@ -163,25 +163,31 @@ public class AddCommand extends GitCommand<DirCache> {
// new DirCacheEntry per path.
else if (!(path.equals(lastAddedFile))) {
if (!(update && tw.getTree(0, DirCacheIterator.class) == null)) {
c = tw.getTree(0, DirCacheIterator.class);
if (f != null) { // the file exists
long sz = f.getEntryLength();
DirCacheEntry entry = new DirCacheEntry(path);
entry.setLength(sz);
entry.setLastModified(f.getEntryLastModified());
entry.setFileMode(f.getEntryFileMode());
InputStream in = f.openEntryStream();
try {
entry.setObjectId(inserter.insert(
Constants.OBJ_BLOB, sz, in));
} finally {
in.close();
if (c == null || c.getDirCacheEntry() == null
|| !c.getDirCacheEntry().isAssumeValid()) {
entry.setLength(sz);
entry.setLastModified(f.getEntryLastModified());
entry.setFileMode(f.getEntryFileMode());
InputStream in = f.openEntryStream();
try {
entry.setObjectId(inserter.insert(
Constants.OBJ_BLOB, sz, in));
} finally {
in.close();
}
builder.add(entry);
lastAddedFile = path;
} else {
builder.add(c.getDirCacheEntry());
}
builder.add(entry);
lastAddedFile = path;
} else if (!update){
c = tw.getTree(0, DirCacheIterator.class);
builder.add(c.getDirCacheEntry());
}
}

Loading…
Cancel
Save