Merge "Add the parameter "update" to the Add command"
This commit is contained in:
commit
ad4274abcc
|
@ -44,15 +44,17 @@
|
||||||
package org.eclipse.jgit.api;
|
package org.eclipse.jgit.api;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
|
||||||
import org.eclipse.jgit.dircache.DirCache;
|
import org.eclipse.jgit.dircache.DirCache;
|
||||||
import org.eclipse.jgit.dircache.DirCacheBuilder;
|
import org.eclipse.jgit.dircache.DirCacheBuilder;
|
||||||
import org.eclipse.jgit.dircache.DirCacheEntry;
|
import org.eclipse.jgit.dircache.DirCacheEntry;
|
||||||
|
import org.eclipse.jgit.lib.Constants;
|
||||||
import org.eclipse.jgit.lib.FileMode;
|
import org.eclipse.jgit.lib.FileMode;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.ObjectWriter;
|
import org.eclipse.jgit.lib.ObjectInserter;
|
||||||
import org.eclipse.jgit.lib.RepositoryTestCase;
|
import org.eclipse.jgit.lib.RepositoryTestCase;
|
||||||
|
|
||||||
public class AddCommandTest extends RepositoryTestCase {
|
public class AddCommandTest extends RepositoryTestCase {
|
||||||
|
@ -86,15 +88,11 @@ public void testAddExistingSingleFile() throws IOException, NoFilepatternExcepti
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
|
|
||||||
DirCache dc = git.add().addFilepattern("a.txt").call();
|
git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
assertEquals(1, dc.getEntryCount());
|
assertEquals(
|
||||||
assertEquals("a.txt", dc.getEntry(0).getPathString());
|
"[a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]",
|
||||||
assertNotNull(dc.getEntry(0).getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(file.lastModified(), dc.getEntry(0).getLastModified());
|
|
||||||
assertEquals(file.length(), dc.getEntry(0).getLength());
|
|
||||||
assertEquals(FileMode.REGULAR_FILE, dc.getEntry(0).getFileMode());
|
|
||||||
assertEquals(0, dc.getEntry(0).getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddExistingSingleFileInSubDir() throws IOException, NoFilepatternException {
|
public void testAddExistingSingleFileInSubDir() throws IOException, NoFilepatternException {
|
||||||
|
@ -107,15 +105,11 @@ public void testAddExistingSingleFileInSubDir() throws IOException, NoFilepatter
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
|
|
||||||
DirCache dc = git.add().addFilepattern("sub/a.txt").call();
|
git.add().addFilepattern("sub/a.txt").call();
|
||||||
|
|
||||||
assertEquals(1, dc.getEntryCount());
|
assertEquals(
|
||||||
assertEquals("sub/a.txt", dc.getEntry(0).getPathString());
|
"[sub/a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]",
|
||||||
assertNotNull(dc.getEntry(0).getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(file.lastModified(), dc.getEntry(0).getLastModified());
|
|
||||||
assertEquals(file.length(), dc.getEntry(0).getLength());
|
|
||||||
assertEquals(FileMode.REGULAR_FILE, dc.getEntry(0).getFileMode());
|
|
||||||
assertEquals(0, dc.getEntry(0).getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddExistingSingleFileTwice() throws IOException, NoFilepatternException {
|
public void testAddExistingSingleFileTwice() throws IOException, NoFilepatternException {
|
||||||
|
@ -128,7 +122,7 @@ public void testAddExistingSingleFileTwice() throws IOException, NoFilepatternEx
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
DirCache dc = git.add().addFilepattern("a.txt").call();
|
DirCache dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
ObjectId id1 = dc.getEntry(0).getObjectId();
|
dc.getEntry(0).getObjectId();
|
||||||
|
|
||||||
writer = new PrintWriter(file);
|
writer = new PrintWriter(file);
|
||||||
writer.print("other content");
|
writer.print("other content");
|
||||||
|
@ -136,10 +130,9 @@ public void testAddExistingSingleFileTwice() throws IOException, NoFilepatternEx
|
||||||
|
|
||||||
dc = git.add().addFilepattern("a.txt").call();
|
dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
assertEquals(1, dc.getEntryCount());
|
assertEquals(
|
||||||
assertEquals("a.txt", dc.getEntry(0).getPathString());
|
"[a.txt, mode:100644, sha1:4f41554f6e0045ef53848fc0c3f33b6a9abc24a9]",
|
||||||
assertNotSame(id1, dc.getEntry(0).getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(0, dc.getEntry(0).getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddExistingSingleFileTwiceWithCommit() throws Exception {
|
public void testAddExistingSingleFileTwiceWithCommit() throws Exception {
|
||||||
|
@ -152,7 +145,7 @@ public void testAddExistingSingleFileTwiceWithCommit() throws Exception {
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
DirCache dc = git.add().addFilepattern("a.txt").call();
|
DirCache dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
ObjectId id1 = dc.getEntry(0).getObjectId();
|
dc.getEntry(0).getObjectId();
|
||||||
|
|
||||||
git.commit().setMessage("commit a.txt").call();
|
git.commit().setMessage("commit a.txt").call();
|
||||||
|
|
||||||
|
@ -162,10 +155,9 @@ public void testAddExistingSingleFileTwiceWithCommit() throws Exception {
|
||||||
|
|
||||||
dc = git.add().addFilepattern("a.txt").call();
|
dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
assertEquals(1, dc.getEntryCount());
|
assertEquals(
|
||||||
assertEquals("a.txt", dc.getEntry(0).getPathString());
|
"[a.txt, mode:100644, sha1:4f41554f6e0045ef53848fc0c3f33b6a9abc24a9]",
|
||||||
assertNotSame(id1, dc.getEntry(0).getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(0, dc.getEntry(0).getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddRemovedFile() throws Exception {
|
public void testAddRemovedFile() throws Exception {
|
||||||
|
@ -178,16 +170,15 @@ public void testAddRemovedFile() throws Exception {
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
DirCache dc = git.add().addFilepattern("a.txt").call();
|
DirCache dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
ObjectId id1 = dc.getEntry(0).getObjectId();
|
dc.getEntry(0).getObjectId();
|
||||||
file.delete();
|
file.delete();
|
||||||
|
|
||||||
// is supposed to do nothing
|
// is supposed to do nothing
|
||||||
dc = git.add().addFilepattern("a.txt").call();
|
dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
assertEquals(1, dc.getEntryCount());
|
assertEquals(
|
||||||
assertEquals("a.txt", dc.getEntry(0).getPathString());
|
"[a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]",
|
||||||
assertEquals(id1, dc.getEntry(0).getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(0, dc.getEntry(0).getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddRemovedCommittedFile() throws Exception {
|
public void testAddRemovedCommittedFile() throws Exception {
|
||||||
|
@ -202,16 +193,15 @@ public void testAddRemovedCommittedFile() throws Exception {
|
||||||
|
|
||||||
git.commit().setMessage("commit a.txt").call();
|
git.commit().setMessage("commit a.txt").call();
|
||||||
|
|
||||||
ObjectId id1 = dc.getEntry(0).getObjectId();
|
dc.getEntry(0).getObjectId();
|
||||||
file.delete();
|
file.delete();
|
||||||
|
|
||||||
// is supposed to do nothing
|
// is supposed to do nothing
|
||||||
dc = git.add().addFilepattern("a.txt").call();
|
dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
assertEquals(1, dc.getEntryCount());
|
assertEquals(
|
||||||
assertEquals("a.txt", dc.getEntry(0).getPathString());
|
"[a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]",
|
||||||
assertEquals(id1, dc.getEntry(0).getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(0, dc.getEntry(0).getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddWithConflicts() throws Exception {
|
public void testAddWithConflicts() throws Exception {
|
||||||
|
@ -229,38 +219,42 @@ public void testAddWithConflicts() throws Exception {
|
||||||
writer.print("content b");
|
writer.print("content b");
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
ObjectWriter ow = new ObjectWriter(db);
|
ObjectInserter newObjectInserter = db.newObjectInserter();
|
||||||
DirCache dc = db.lockDirCache();
|
DirCache dc = db.lockDirCache();
|
||||||
DirCacheBuilder builder = dc.builder();
|
DirCacheBuilder builder = dc.builder();
|
||||||
|
|
||||||
addEntryToBuilder("b.txt", file2, ow, builder, 0);
|
addEntryToBuilder("b.txt", file2, newObjectInserter, builder, 0);
|
||||||
addEntryToBuilder("a.txt", file, ow, builder, 1);
|
addEntryToBuilder("a.txt", file, newObjectInserter, builder, 1);
|
||||||
|
|
||||||
writer = new PrintWriter(file);
|
writer = new PrintWriter(file);
|
||||||
writer.print("other content");
|
writer.print("other content");
|
||||||
writer.close();
|
writer.close();
|
||||||
addEntryToBuilder("a.txt", file, ow, builder, 3);
|
addEntryToBuilder("a.txt", file, newObjectInserter, builder, 3);
|
||||||
|
|
||||||
writer = new PrintWriter(file);
|
writer = new PrintWriter(file);
|
||||||
writer.print("our content");
|
writer.print("our content");
|
||||||
writer.close();
|
writer.close();
|
||||||
ObjectId id1 = addEntryToBuilder("a.txt", file, ow, builder, 2)
|
addEntryToBuilder("a.txt", file, newObjectInserter, builder, 2)
|
||||||
.getObjectId();
|
.getObjectId();
|
||||||
|
|
||||||
builder.commit();
|
builder.commit();
|
||||||
|
|
||||||
assertEquals(4, dc.getEntryCount());
|
assertEquals(
|
||||||
|
"[a.txt, mode:100644, stage:1, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]" +
|
||||||
|
"[a.txt, mode:100644, stage:2, sha1:b9f89ff733bdaf49e02711535867bb821f9db55e]" +
|
||||||
|
"[a.txt, mode:100644, stage:3, sha1:4f41554f6e0045ef53848fc0c3f33b6a9abc24a9]" +
|
||||||
|
"[b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]",
|
||||||
|
indexState(CONTENT_ID));
|
||||||
|
|
||||||
// now the test begins
|
// now the test begins
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
dc = git.add().addFilepattern("a.txt").call();
|
dc = git.add().addFilepattern("a.txt").call();
|
||||||
|
|
||||||
assertEquals(2, dc.getEntryCount());
|
assertEquals(
|
||||||
assertEquals("a.txt", dc.getEntry("a.txt").getPathString());
|
"[a.txt, mode:100644, sha1:b9f89ff733bdaf49e02711535867bb821f9db55e]" +
|
||||||
assertEquals(id1, dc.getEntry("a.txt").getObjectId());
|
"[b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]",
|
||||||
assertEquals(0, dc.getEntry("a.txt").getStage());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(0, dc.getEntry("b.txt").getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddTwoFiles() throws Exception {
|
public void testAddTwoFiles() throws Exception {
|
||||||
|
@ -277,13 +271,11 @@ public void testAddTwoFiles() throws Exception {
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
DirCache dc = git.add().addFilepattern("a.txt").addFilepattern("b.txt").call();
|
git.add().addFilepattern("a.txt").addFilepattern("b.txt").call();
|
||||||
assertEquals("a.txt", dc.getEntry("a.txt").getPathString());
|
assertEquals(
|
||||||
assertEquals("b.txt", dc.getEntry("b.txt").getPathString());
|
"[a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]" +
|
||||||
assertNotNull(dc.getEntry("a.txt").getObjectId());
|
"[b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]",
|
||||||
assertNotNull(dc.getEntry("b.txt").getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(0, dc.getEntry("a.txt").getStage());
|
|
||||||
assertEquals(0, dc.getEntry("b.txt").getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddFolder() throws Exception {
|
public void testAddFolder() throws Exception {
|
||||||
|
@ -301,13 +293,11 @@ public void testAddFolder() throws Exception {
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
DirCache dc = git.add().addFilepattern("sub").call();
|
git.add().addFilepattern("sub").call();
|
||||||
assertEquals("sub/a.txt", dc.getEntry("sub/a.txt").getPathString());
|
assertEquals(
|
||||||
assertEquals("sub/b.txt", dc.getEntry("sub/b.txt").getPathString());
|
"[sub/a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]" +
|
||||||
assertNotNull(dc.getEntry("sub/a.txt").getObjectId());
|
"[sub/b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]",
|
||||||
assertNotNull(dc.getEntry("sub/b.txt").getObjectId());
|
indexState(CONTENT_ID));
|
||||||
assertEquals(0, dc.getEntry("sub/a.txt").getStage());
|
|
||||||
assertEquals(0, dc.getEntry("sub/b.txt").getStage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddIgnoredFile() throws Exception {
|
public void testAddIgnoredFile() throws Exception {
|
||||||
|
@ -331,11 +321,11 @@ public void testAddIgnoredFile() throws Exception {
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
DirCache dc = git.add().addFilepattern("sub").call();
|
git.add().addFilepattern("sub").call();
|
||||||
assertEquals("sub/a.txt", dc.getEntry("sub/a.txt").getPathString());
|
|
||||||
assertNull(dc.getEntry("sub/b.txt"));
|
assertEquals(
|
||||||
assertNotNull(dc.getEntry("sub/a.txt").getObjectId());
|
"[sub/a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]",
|
||||||
assertEquals(0, dc.getEntry("sub/a.txt").getStage());
|
indexState(CONTENT_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddWholeRepo() throws Exception {
|
public void testAddWholeRepo() throws Exception {
|
||||||
|
@ -353,15 +343,125 @@ public void testAddWholeRepo() throws Exception {
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
DirCache dc = git.add().addFilepattern(".").call();
|
git.add().addFilepattern(".").call();
|
||||||
assertEquals("sub/a.txt", dc.getEntry("sub/a.txt").getPathString());
|
assertEquals(
|
||||||
assertEquals("sub/b.txt", dc.getEntry("sub/b.txt").getPathString());
|
"[sub/a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]" +
|
||||||
|
"[sub/b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]",
|
||||||
|
indexState(CONTENT_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
// the same three cases as in testAddWithParameterUpdate
|
||||||
|
// file a exists in workdir and in index -> added
|
||||||
|
// file b exists not in workdir but in index -> unchanged
|
||||||
|
// file c exists in workdir but not in index -> added
|
||||||
|
public void testAddWithoutParameterUpdate() throws Exception {
|
||||||
|
new File(db.getWorkTree(), "sub").mkdir();
|
||||||
|
File file = new File(db.getWorkTree(), "sub/a.txt");
|
||||||
|
file.createNewFile();
|
||||||
|
PrintWriter writer = new PrintWriter(file);
|
||||||
|
writer.print("content");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
File file2 = new File(db.getWorkTree(), "sub/b.txt");
|
||||||
|
file2.createNewFile();
|
||||||
|
writer = new PrintWriter(file2);
|
||||||
|
writer.print("content b");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
Git git = new Git(db);
|
||||||
|
git.add().addFilepattern("sub").call();
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
"[sub/a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]" +
|
||||||
|
"[sub/b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]",
|
||||||
|
indexState(CONTENT_ID));
|
||||||
|
|
||||||
|
git.commit().setMessage("commit").call();
|
||||||
|
|
||||||
|
// new unstaged file sub/c.txt
|
||||||
|
File file3 = new File(db.getWorkTree(), "sub/c.txt");
|
||||||
|
file3.createNewFile();
|
||||||
|
writer = new PrintWriter(file3);
|
||||||
|
writer.print("content c");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
// file sub/a.txt is modified
|
||||||
|
writer = new PrintWriter(file);
|
||||||
|
writer.print("modified content");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
// file sub/b.txt is deleted
|
||||||
|
file2.delete();
|
||||||
|
|
||||||
|
git.add().addFilepattern("sub").call();
|
||||||
|
// change in sub/a.txt is staged
|
||||||
|
// deletion of sub/b.txt is not staged
|
||||||
|
// sub/c.txt is staged
|
||||||
|
assertEquals(
|
||||||
|
"[sub/a.txt, mode:100644, sha1:268af4e306cfcf6e79edd50fed9c553d211f68e3]" +
|
||||||
|
"[sub/b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]" +
|
||||||
|
"[sub/c.txt, mode:100644, sha1:fa08654474ae2ddc4f61ee3a43d017ba65a439c3]",
|
||||||
|
indexState(CONTENT_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
// file a exists in workdir and in index -> added
|
||||||
|
// file b exists not in workdir but in index -> deleted
|
||||||
|
// file c exists in workdir but not in index -> unchanged
|
||||||
|
public void testAddWithParameterUpdate() throws Exception {
|
||||||
|
new File(db.getWorkTree(), "sub").mkdir();
|
||||||
|
File file = new File(db.getWorkTree(), "sub/a.txt");
|
||||||
|
file.createNewFile();
|
||||||
|
PrintWriter writer = new PrintWriter(file);
|
||||||
|
writer.print("content");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
File file2 = new File(db.getWorkTree(), "sub/b.txt");
|
||||||
|
file2.createNewFile();
|
||||||
|
writer = new PrintWriter(file2);
|
||||||
|
writer.print("content b");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
Git git = new Git(db);
|
||||||
|
git.add().addFilepattern("sub").call();
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
"[sub/a.txt, mode:100644, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]" +
|
||||||
|
"[sub/b.txt, mode:100644, sha1:50e9cdb03f9719261dd39d7f2920b906db3711a3]",
|
||||||
|
indexState(CONTENT_ID));
|
||||||
|
|
||||||
|
git.commit().setMessage("commit").call();
|
||||||
|
|
||||||
|
// new unstaged file sub/c.txt
|
||||||
|
File file3 = new File(db.getWorkTree(), "sub/c.txt");
|
||||||
|
file3.createNewFile();
|
||||||
|
writer = new PrintWriter(file3);
|
||||||
|
writer.print("content c");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
// file sub/a.txt is modified
|
||||||
|
writer = new PrintWriter(file);
|
||||||
|
writer.print("modified content");
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
file2.delete();
|
||||||
|
|
||||||
|
// change in sub/a.txt is staged
|
||||||
|
// deletion of sub/b.txt is staged
|
||||||
|
// sub/c.txt is not staged
|
||||||
|
git.add().addFilepattern("sub").setUpdate(true).call();
|
||||||
|
// change in sub/a.txt is staged
|
||||||
|
assertEquals(
|
||||||
|
"[sub/a.txt, mode:100644, sha1:268af4e306cfcf6e79edd50fed9c553d211f68e3]",
|
||||||
|
indexState(CONTENT_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DirCacheEntry addEntryToBuilder(String path, File file,
|
private DirCacheEntry addEntryToBuilder(String path, File file,
|
||||||
ObjectWriter ow, DirCacheBuilder builder, int stage)
|
ObjectInserter newObjectInserter, DirCacheBuilder builder, int stage)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
ObjectId id = ow.writeBlob(file);
|
FileInputStream inputStream = new FileInputStream(file);
|
||||||
|
ObjectId id = newObjectInserter.insert(
|
||||||
|
Constants.OBJ_BLOB, file.length(), inputStream);
|
||||||
|
inputStream.close();
|
||||||
DirCacheEntry entry = new DirCacheEntry(path, stage);
|
DirCacheEntry entry = new DirCacheEntry(path, stage);
|
||||||
entry.setObjectId(id);
|
entry.setObjectId(id);
|
||||||
entry.setFileMode(FileMode.REGULAR_FILE);
|
entry.setFileMode(FileMode.REGULAR_FILE);
|
||||||
|
|
|
@ -175,6 +175,7 @@ public String indexState(int includedOptions)
|
||||||
|
|
||||||
// iterate again, now produce the result string
|
// iterate again, now produce the result string
|
||||||
NameConflictTreeWalk tw = new NameConflictTreeWalk(db);
|
NameConflictTreeWalk tw = new NameConflictTreeWalk(db);
|
||||||
|
tw.setRecursive(true);
|
||||||
tw.reset();
|
tw.reset();
|
||||||
tw.addTree(new DirCacheIterator(dc));
|
tw.addTree(new DirCacheIterator(dc));
|
||||||
while (tw.next()) {
|
while (tw.next()) {
|
||||||
|
|
|
@ -76,6 +76,8 @@ public class AddCommand extends GitCommand<DirCache> {
|
||||||
|
|
||||||
private WorkingTreeIterator workingTreeIterator;
|
private WorkingTreeIterator workingTreeIterator;
|
||||||
|
|
||||||
|
private boolean update = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param repo
|
* @param repo
|
||||||
|
@ -158,18 +160,20 @@ public DirCache call() throws NoFilepatternException {
|
||||||
// this path, we however want to add only one
|
// this path, we however want to add only one
|
||||||
// new DirCacheEntry per path.
|
// new DirCacheEntry per path.
|
||||||
else if (!(path.equals(lastAddedFile))) {
|
else if (!(path.equals(lastAddedFile))) {
|
||||||
if (f != null) { // the file exists
|
if (!(update && tw.getTree(0, DirCacheIterator.class) == null)) {
|
||||||
DirCacheEntry entry = new DirCacheEntry(path);
|
if (f != null) { // the file exists
|
||||||
entry.setLength((int)f.getEntryLength());
|
DirCacheEntry entry = new DirCacheEntry(path);
|
||||||
entry.setLastModified(f.getEntryLastModified());
|
entry.setLength((int)f.getEntryLength());
|
||||||
entry.setFileMode(f.getEntryFileMode());
|
entry.setLastModified(f.getEntryLastModified());
|
||||||
entry.setObjectId(ow.writeBlob(file));
|
entry.setFileMode(f.getEntryFileMode());
|
||||||
|
entry.setObjectId(ow.writeBlob(file));
|
||||||
|
|
||||||
builder.add(entry);
|
builder.add(entry);
|
||||||
lastAddedFile = path;
|
lastAddedFile = path;
|
||||||
} else {
|
} else if (!update){
|
||||||
c = tw.getTree(0, DirCacheIterator.class);
|
c = tw.getTree(0, DirCacheIterator.class);
|
||||||
builder.add(c.getDirCacheEntry());
|
builder.add(c.getDirCacheEntry());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,4 +190,29 @@ else if (!(path.equals(lastAddedFile))) {
|
||||||
return dc;
|
return dc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param update
|
||||||
|
* If set to true, the command only matches {@code filepattern}
|
||||||
|
* against already tracked files in the index rather than the
|
||||||
|
* working tree. That means that it will never stage new files,
|
||||||
|
* but that it will stage modified new contents of tracked files
|
||||||
|
* and that it will remove files from the index if the
|
||||||
|
* corresponding files in the working tree have been removed.
|
||||||
|
* In contrast to the git command line a {@code filepattern} must
|
||||||
|
* exist also if update is set to true as there is no
|
||||||
|
* concept of a working directory here.
|
||||||
|
*
|
||||||
|
* @return {@code this}
|
||||||
|
*/
|
||||||
|
public AddCommand setUpdate(boolean update) {
|
||||||
|
this.update = update;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return is the parameter update is set
|
||||||
|
*/
|
||||||
|
public boolean isUpdate() {
|
||||||
|
return update;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue