]> source.dussan.org Git - jgit.git/commitdiff
Merge branch 'master' into stable-4.2 98/64898/1
authorMatthias Sohn <matthias.sohn@sap.com>
Thu, 21 Jan 2016 16:03:20 +0000 (17:03 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Thu, 21 Jan 2016 16:07:31 +0000 (17:07 +0100)
Change-Id: Ieec4f51aedadf5734ae0e3f4e8713248a3c4fc52
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
1  2 
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java

index d4bd68e68681ac08e437c35cfc46151f27f5099b,29fc3c3a02e7f83a06a33883b8fbd49261a6e2d9..4fefdfddab6dbf59c0166b83986f4cc62243b4d3
@@@ -772,38 -753,132 +773,133 @@@ public class AddCommandTest extends Rep
  
        @Test
        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));
 +              try (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));
 +              }
        }
  
+       @Test
+       public void testReplaceFileWithDirectory()
+                       throws IOException, NoFilepatternException, GitAPIException {
+               try (Git git = new Git(db)) {
+                       writeTrashFile("df", "before replacement");
+                       git.add().addFilepattern("df").call();
+                       assertEquals("[df, mode:100644, content:before replacement]",
+                                       indexState(CONTENT));
+                       FileUtils.delete(new File(db.getWorkTree(), "df"));
+                       writeTrashFile("df/f", "after replacement");
+                       git.add().addFilepattern("df").call();
+                       assertEquals("[df/f, mode:100644, content:after replacement]",
+                                       indexState(CONTENT));
+               }
+       }
+       @Test
+       public void testReplaceDirectoryWithFile()
+                       throws IOException, NoFilepatternException, GitAPIException {
+               try (Git git = new Git(db)) {
+                       writeTrashFile("df/f", "before replacement");
+                       git.add().addFilepattern("df").call();
+                       assertEquals("[df/f, mode:100644, content:before replacement]",
+                                       indexState(CONTENT));
+                       FileUtils.delete(new File(db.getWorkTree(), "df"), RECURSIVE);
+                       writeTrashFile("df", "after replacement");
+                       git.add().addFilepattern("df").call();
+                       assertEquals("[df, mode:100644, content:after replacement]",
+                                       indexState(CONTENT));
+               }
+       }
+       @Test
+       public void testReplaceFileByPartOfDirectory()
+                       throws IOException, NoFilepatternException, GitAPIException {
+               try (Git git = new Git(db)) {
+                       writeTrashFile("src/main", "df", "before replacement");
+                       writeTrashFile("src/main", "z", "z");
+                       writeTrashFile("z", "z2");
+                       git.add().addFilepattern("src/main/df")
+                               .addFilepattern("src/main/z")
+                               .addFilepattern("z")
+                               .call();
+                       assertEquals(
+                                       "[src/main/df, mode:100644, content:before replacement]" +
+                                       "[src/main/z, mode:100644, content:z]" +
+                                       "[z, mode:100644, content:z2]",
+                                       indexState(CONTENT));
+                       FileUtils.delete(new File(db.getWorkTree(), "src/main/df"));
+                       writeTrashFile("src/main/df", "a", "after replacement");
+                       writeTrashFile("src/main/df", "b", "unrelated file");
+                       git.add().addFilepattern("src/main/df/a").call();
+                       assertEquals(
+                                       "[src/main/df/a, mode:100644, content:after replacement]" +
+                                       "[src/main/z, mode:100644, content:z]" +
+                                       "[z, mode:100644, content:z2]",
+                                       indexState(CONTENT));
+               }
+       }
+       @Test
+       public void testReplaceDirectoryConflictsWithFile()
+                       throws IOException, NoFilepatternException, GitAPIException {
+               DirCache dc = db.lockDirCache();
+               try (ObjectInserter oi = db.newObjectInserter()) {
+                       DirCacheBuilder builder = dc.builder();
+                       File f = writeTrashFile("a", "df", "content");
+                       addEntryToBuilder("a", f, oi, builder, 1);
+                       f = writeTrashFile("a", "df", "other content");
+                       addEntryToBuilder("a/df", f, oi, builder, 3);
+                       f = writeTrashFile("a", "df", "our content");
+                       addEntryToBuilder("a/df", f, oi, builder, 2);
+                       f = writeTrashFile("z", "z");
+                       addEntryToBuilder("z", f, oi, builder, 0);
+                       builder.commit();
+               }
+               assertEquals(
+                               "[a, mode:100644, stage:1, content:content]" +
+                               "[a/df, mode:100644, stage:2, content:our content]" +
+                               "[a/df, mode:100644, stage:3, content:other content]" +
+                               "[z, mode:100644, content:z]",
+                               indexState(CONTENT));
+               try (Git git = new Git(db)) {
+                       FileUtils.delete(new File(db.getWorkTree(), "a"), RECURSIVE);
+                       writeTrashFile("a", "merged");
+                       git.add().addFilepattern("a").call();
+                       assertEquals("[a, mode:100644, content:merged]" +
+                                       "[z, mode:100644, content:z]",
+                                       indexState(CONTENT));
+               }
+       }
        @Test
        public void testExecutableRetention() throws Exception {
                StoredConfig config = db.getConfig();