{"thread":{"id":"11907","subject":"[EGIT Patches] Sort order from hell fixes","startedAt":"2008-02-05T23:46:04Z","lastAt":"2008-02-10T21:11:09Z","messageCount":7,"participants":["Robin Rosenberg","David Watson"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"67580","messageId":"1202255166-4581-1-git-send-email-robin.rosenberg@dewire.com","threadId":"11907","inReplyTo":null,"subject":"[EGIT Patches] Sort order from hell fixes","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-02-05T23:46:04Z","receivedAt":"2008-02-05T23:46:04Z","isPatch":false,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"This fixes conflict detection in checkout that yielded false conflicts\nand, according to a user, a problem where checkin did not find anything\nto check in.\n\n-- robin\n"},{"id":"67582","messageId":"1202255166-4581-2-git-send-email-robin.rosenberg@dewire.com","threadId":"11907","inReplyTo":"1202255166-4581-1-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 1/2] Fix git sort order compare bug","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-02-05T23:46:05Z","receivedAt":"2008-02-05T23:46:05Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../tst/org/spearce/jgit/lib/T0002_Tree.java       |   44 ++++++++++++++++++++\n .../src/org/spearce/jgit/lib/Tree.java             |   10 ++++-\n 2 files changed, 52 insertions(+), 2 deletions(-)\n\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0002_Tree.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0002_Tree.java\nindex 24b368f..7c7f6c0 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0002_Tree.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0002_Tree.java\n@@ -17,6 +17,7 @@\n package org.spearce.jgit.lib;\n \n import java.io.IOException;\n+import java.io.UnsupportedEncodingException;\n import java.util.ArrayList;\n import java.util.List;\n \n@@ -24,6 +25,49 @@ public class T0002_Tree extends RepositoryTestCase {\n \tprivate static final ObjectId SOME_FAKE_ID = new ObjectId(\n \t\t\t\"0123456789abcdef0123456789abcdef01234567\");\n \n+\tprivate int compareNamesUsingSpecialCompare(String a,String b) throws UnsupportedEncodingException {\n+\t\tchar lasta = '\\0';\n+\t\tbyte[] abytes;\n+\t\tif (a.length() > 0 && a.charAt(a.length()-1) == '/') {\n+\t\t\tlasta = '/';\n+\t\t\ta = a.substring(0, a.length() - 1);\n+\t\t}\n+\t\tabytes = a.getBytes(\"ISO-8859-1\");\n+\t\tchar lastb = '\\0';\n+\t\tbyte[] bbytes;\n+\t\tif (b.length() > 0 && b.charAt(b.length()-1) == '/') {\n+\t\t\tlastb = '/';\n+\t\t\tb = b.substring(0, b.length() - 1);\n+\t\t}\n+\t\tbbytes = b.getBytes(\"ISO-8859-1\");\n+\t\treturn Tree.compareNames(abytes, bbytes, lasta, lastb);\n+\t}\n+\n+\tpublic void test000_sort_01() throws UnsupportedEncodingException {\n+\t\tassertEquals(0, compareNamesUsingSpecialCompare(\"a\",\"a\"));\n+\t}\n+\tpublic void test000_sort_02() throws UnsupportedEncodingException {\n+\t\tassertEquals(-1, compareNamesUsingSpecialCompare(\"a\",\"b\"));\n+\t\tassertEquals(1, compareNamesUsingSpecialCompare(\"b\",\"a\"));\n+\t}\n+\tpublic void test000_sort_03() throws UnsupportedEncodingException {\n+\t\tassertEquals(1, compareNamesUsingSpecialCompare(\"a:\",\"a\"));\n+\t\tassertEquals(1, compareNamesUsingSpecialCompare(\"a/\",\"a\"));\n+\t\tassertEquals(-1, compareNamesUsingSpecialCompare(\"a\",\"a/\"));\n+\t\tassertEquals(-1, compareNamesUsingSpecialCompare(\"a\",\"a:\"));\n+\t\tassertEquals(1, compareNamesUsingSpecialCompare(\"a:\",\"a/\"));\n+\t\tassertEquals(-1, compareNamesUsingSpecialCompare(\"a/\",\"a:\"));\n+\t}\n+\tpublic void test000_sort_04() throws UnsupportedEncodingException {\n+\t\tassertEquals(-1, compareNamesUsingSpecialCompare(\"a.a\",\"a/a\"));\n+\t\tassertEquals(1, compareNamesUsingSpecialCompare(\"a/a\",\"a.a\"));\n+\t}\n+\tpublic void test000_sort_05() throws UnsupportedEncodingException {\n+\t\tassertEquals(-1, compareNamesUsingSpecialCompare(\"a.\",\"a/\"));\n+\t\tassertEquals(1, compareNamesUsingSpecialCompare(\"a/\",\"a.\"));\n+\n+\t}\n+\n \tpublic void test001_createEmpty() throws IOException {\n \t\tfinal Tree t = new Tree(db);\n \t\tassertTrue(\"isLoaded\", t.isLoaded());\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java\nindex ab83917..5d8e0e0 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java\n@@ -65,7 +65,10 @@ public class Tree extends TreeEntry implements Treeish {\n \t\t\telse if (aj > lastb)\n \t\t\t\treturn 1;\n \t\t\telse\n-\t\t\t\treturn 0;\n+\t\t\t\tif (j == a.length - 1)\n+\t\t\t\t\treturn 0;\n+\t\t\t\telse\n+\t\t\t\t\treturn -1;\n \t\t}\n \t\tif (k < nameEnd) {\n \t\t\tint bk = nameUTF8[k] & 0xff;\n@@ -74,7 +77,10 @@ public class Tree extends TreeEntry implements Treeish {\n \t\t\telse if (lasta > bk)\n \t\t\t\treturn 1;\n \t\t\telse\n-\t\t\t\treturn 0;\n+\t\t\t\tif (k == nameEnd - 1)\n+\t\t\t\t\treturn 0;\n+\t\t\t\telse\n+\t\t\t\t\treturn 1;\n \t\t}\n \t\tif (lasta < lastb)\n \t\t\treturn -1;\n-- \n1.5.4.rc4.25.g81cc\n"},{"id":"67581","messageId":"1202255166-4581-3-git-send-email-robin.rosenberg@dewire.com","threadId":"11907","inReplyTo":"1202255166-4581-2-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 2/2] Resort entries in \"normal\" order before looking for conflicts","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-02-05T23:46:06Z","receivedAt":"2008-02-05T23:46:06Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"When checking out another branch we get a problem if our version contains\na tree name that is longer, but has another tree as a prefix.\n\n        Our tree\n          a/a\n          a.a/b\n\n        Other tree\n          a/a\n\nThe conflict comes from names not being compared properly in git\norder.\n\nDirectory/File conflicts are not easy to handle. This solution\nis cheating, but solved a real user's problem.\n\nThis commit adds test cases for the particular problem plus one\nsimilar test that didn't fail before either.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../tst/org/spearce/jgit/lib/ReadTreeTest.java     |   16 ++++++++-\n .../src/org/spearce/jgit/lib/IndexTreeWalker.java  |   35 ++++++++++++--------\n 2 files changed, 36 insertions(+), 15 deletions(-)\n\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReadTreeTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReadTreeTest.java\nindex 7ac48c9..6faedc7 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReadTreeTest.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReadTreeTest.java\n@@ -477,7 +477,21 @@ public class ReadTreeTest extends RepositoryTestCase {\n \t\t\n \t\tassertNoConflicts();\n \t}\n-\t\n+\n+\tpublic void testCloseNameConflictsX0() throws IOException {\n+\t\tsetupCase(mkmap(\"a/a\", \"a/a-c\"), mkmap(\"a/a\",\"a/a\", \"b.b/b.b\",\"b.b/b.bs\"), mkmap(\"a/a\", \"a/a-c\") );\n+\t\tcheckout();\n+\t\tgo();\n+\t\tassertNoConflicts();\n+\t}\n+\n+\tpublic void testCloseNameConflicts1() throws IOException {\n+\t\tsetupCase(mkmap(\"a/a\", \"a/a-c\"), mkmap(\"a/a\",\"a/a\", \"a.a/a.a\",\"a.a/a.a\"), mkmap(\"a/a\", \"a/a-c\") );\n+\t\tcheckout();\n+\t\tgo();\n+\t\tassertNoConflicts();\n+\t}\n+\n \tprivate void checkout() throws IOException {\n \t\treadTree = new WorkDirCheckout(db, trash, head, index, merge);\n \t\treadTree.checkout();\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/IndexTreeWalker.java b/org.spearce.jgit/src/org/spearce/jgit/lib/IndexTreeWalker.java\nindex 93d5bb2..bc2fb23 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/IndexTreeWalker.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/IndexTreeWalker.java\n@@ -19,6 +19,8 @@ package org.spearce.jgit.lib;\n \n import java.io.File;\n import java.io.IOException;\n+import java.util.Arrays;\n+import java.util.Comparator;\n \n import org.spearce.jgit.lib.GitIndex.Entry;\n \n@@ -85,9 +87,28 @@ public class IndexTreeWalker {\n \t\twalk(mainTree, newTree, \"/\");\n \t}\n \n+\tstatic Comparator<TreeEntry> treeEntryPlainComparator() {\n+\t\treturn new Comparator<TreeEntry>() {\n+\t\t\tpublic int compare(TreeEntry o1, TreeEntry o2) {\n+\t\t\t\treturn o1.getName().compareTo(o2.getName());\n+\t\t\t}\n+\t\t};\n+\t}\n+\n+\tstatic Comparator<Entry> indexEntryPlainComparator() {\n+\t\treturn new Comparator<Entry>() {\n+\t\t\tpublic int compare(Entry o1, Entry o2) {\n+\t\t\t\treturn o1.getName().compareTo(o2.getName());\n+\t\t\t}\n+\t\t};\n+\t}\n+\n \tprivate void walk(Tree tree, Tree auxTree, String curDir) throws IOException {\n \t\tTreeEntry[] treeMembers = tree == null ? new TreeEntry[0] : tree.members();\n \t\tTreeEntry[] auxTreeMembers = auxTree == null ? new TreeEntry[0] : auxTree.members();\n+\t\tArrays.sort(treeMembers, treeEntryPlainComparator());\n+\t\tArrays.sort(auxTreeMembers, treeEntryPlainComparator());\n+\t\tArrays.sort(indexMembers, indexEntryPlainComparator());\n \t\tint treeCounter = 0;\n \t\tint auxTreeCounter = 0;\n \t\t\n@@ -308,18 +329,4 @@ public class IndexTreeWalker {\n \t\t}\n \t\treturn t1.getName().compareTo(t2.getName());\n \t}\n-\t\n-\tstatic int compare(byte[] name1, byte[] name2) {\n-\t\tfor (int i = 0; i < name1.length && i < name2.length; i++) {\n-\t\t\tif (name1[i] < name2[i])\n-\t\t\t\treturn -1;\n-\t\t\tif (name1[i] > name2[i])\n-\t\t\t\treturn 1;\n-\t\t}\n-\t\tif (name1.length < name2.length)\n-\t\t\treturn -1;\n-\t\tif (name2.length < name1.length)\n-\t\t\treturn 1;\n-\t\treturn 0;\n-\t}\n }\n-- \n1.5.4.rc4.25.g81cc\n"},{"id":"67591","messageId":"200802060150.37222.robin.rosenberg@dewire.com","threadId":"11907","inReplyTo":"1202255166-4581-3-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 2/2] Resort entries in \"normal\" order before looking for conflicts","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-02-06T00:50:35Z","receivedAt":"2008-02-06T00:50:35Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"\nForget this one, it just causes other problems.\n\n-- robin\n"},{"id":"68254","messageId":"200802102113.50578.robin.rosenberg.lists@dewire.com","threadId":"11907","inReplyTo":"200802060150.37222.robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 2/2] Resort entries in \"normal\" order before looking for conflicts","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-02-10T20:13:49Z","receivedAt":"2008-02-10T20:13:49Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":">From 39d5e19cd2e16f476501fda71d6551e51225ed2d Mon Sep 17 00:00:00 2001\nFrom: Robin Rosenberg <robin.rosenberg@dewire.com>\nDate: Sun, 10 Feb 2008 20:03:06 +0100\nSubject: [PATCH] Extend IndexDiffTest with more tests\n\nIn order to fix a bug where everything is marked as modified, or in some cases\nnot modified the unit tests. The fixes here continue to work, but I want to\nemphasize the tests. Comments?\n\n---\n .../tst/org/spearce/jgit/lib/IndexDiffTest.java    |   67 ++++++++++++++++++++\n 1 files changed, 67 insertions(+), 0 deletions(-)\n\nOne more to come (that fails).\n\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java \nb/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\nindex 629c06c..4692fa2 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\n@@ -93,4 +93,71 @@ public class IndexDiffTest extends RepositoryTestCase {\n \t\tassertEquals(0, diff.getMissing().size());\n \t}\n \n+\tpublic void testUnchangedSimple() throws IOException {\n+\t\tGitIndex index = new GitIndex(db);\n+\n+\t\tindex.add(trash, writeTrashFile(\"a.b\", \"a.b\"));\n+\t\tindex.add(trash, writeTrashFile(\"a.c\", \"a.c\"));\n+\t\tindex.add(trash, writeTrashFile(\"a=c\", \"a=c\"));\n+\t\tindex.add(trash, writeTrashFile(\"a=d\", \"a=d\"));\n+\n+\t\tTree tree = new Tree(db);\n+\t\t// got the hash id'd from the data using echo -n a.b|git hash-object -t blob --stdin\n+\t\ttree.addFile(\"a.b\").setId(new ObjectId(\"f6f28df96c2b40c951164286e08be7c38ec74851\"));\n+\t\ttree.addFile(\"a.c\").setId(new ObjectId(\"6bc0e647512d2a0bef4f26111e484dc87df7f5ca\"));\n+\t\ttree.addFile(\"a=c\").setId(new ObjectId(\"06022365ddbd7fb126761319633bf73517770714\"));\n+\t\ttree.addFile(\"a=d\").setId(new ObjectId(\"fa6414df3da87840700e9eeb7fc261dd77ccd5c2\"));\n+\n+\t\ttree.setId(new ObjectWriter(db).writeTree(tree));\n+\n+\t\tIndexDiff diff = new IndexDiff(tree, index);\n+\t\tdiff.diff();\n+\t\tassertEquals(0, diff.getChanged().size());\n+\t\tassertEquals(0, diff.getAdded().size());\n+\t\tassertEquals(0, diff.getRemoved().size());\n+\t\tassertEquals(0, diff.getMissing().size());\n+\t\tassertEquals(0, diff.getModified().size());\n+\t}\n+\n+\t/**\n+\t * This test has both files and directories that involve\n+\t * the tricky ordering used by Git.\n+\t *\n+\t * @throws IOException\n+\t */\n+\tpublic void testUnchangedComplex() throws IOException {\n+\t\tGitIndex index = new GitIndex(db);\n+\n+\t\tindex.add(trash, writeTrashFile(\"a.b\", \"a.b\"));\n+\t\tindex.add(trash, writeTrashFile(\"a.c\", \"a.c\"));\n+\t\tindex.add(trash, writeTrashFile(\"a/b.b/b\", \"a/b.b/b\"));\n+\t\tindex.add(trash, writeTrashFile(\"a/b\", \"a/b\"));\n+\t\tindex.add(trash, writeTrashFile(\"a/c\", \"a/c\"));\n+\t\tindex.add(trash, writeTrashFile(\"a=c\", \"a=c\"));\n+\t\tindex.add(trash, writeTrashFile(\"a=d\", \"a=d\"));\n+\n+\t\tTree tree = new Tree(db);\n+\t\t// got the hash id'd from the data using echo -n a.b|git hash-object -t blob --stdin\n+\t\ttree.addFile(\"a.b\").setId(new ObjectId(\"f6f28df96c2b40c951164286e08be7c38ec74851\"));\n+\t\ttree.addFile(\"a.c\").setId(new ObjectId(\"6bc0e647512d2a0bef4f26111e484dc87df7f5ca\"));\n+\t\ttree.addFile(\"a/b.b/b\").setId(new ObjectId(\"8d840bd4e2f3a48ff417c8e927d94996849933fd\"));\n+\t\ttree.addFile(\"a/b\").setId(new ObjectId(\"db89c972fc57862eae378f45b74aca228037d415\"));\n+\t\ttree.addFile(\"a/c\").setId(new ObjectId(\"52ad142a008aeb39694bafff8e8f1be75ed7f007\"));\n+\t\ttree.addFile(\"a=c\").setId(new ObjectId(\"06022365ddbd7fb126761319633bf73517770714\"));\n+\t\ttree.addFile(\"a=d\").setId(new ObjectId(\"fa6414df3da87840700e9eeb7fc261dd77ccd5c2\"));\n+\n+\t\tTree tree3 = (Tree) tree.findTreeMember(\"a/b.b\");\n+\t\ttree3.setId(new ObjectWriter(db).writeTree(tree3));\n+\t\tTree tree2 = (Tree) tree.findTreeMember(\"a\");\n+\t\ttree2.setId(new ObjectWriter(db).writeTree(tree2));\n+\t\ttree.setId(new ObjectWriter(db).writeTree(tree));\n+\n+\t\tIndexDiff diff = new IndexDiff(tree, index);\n+\t\tdiff.diff();\n+\t\tassertEquals(0, diff.getChanged().size());\n+\t\tassertEquals(0, diff.getAdded().size());\n+\t\tassertEquals(0, diff.getRemoved().size());\n+\t\tassertEquals(0, diff.getMissing().size());\n+\t\tassertEquals(0, diff.getModified().size());\n+\t}\n }\n-- \n1.5.4.rc4.25.g81cc\n"},{"id":"68256","messageId":"200802102118.29647.robin.rosenberg.lists@dewire.com","threadId":"11907","inReplyTo":"200802102113.50578.robin.rosenberg.lists@dewire.com","subject":"Re: [EGIT PATCH 2/2] Resort entries in \"normal\" order before looking for conflicts","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-02-10T20:18:29Z","receivedAt":"2008-02-10T20:18:29Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"söndagen den 10 februari 2008 skrev Robin Rosenberg:\n> In order to fix a bug where everything is marked as modified, or in some cases\n> not modified the unit tests. The fixes here continue to work, but I want to\n> emphasize the tests. Comments?\n\nActually the reverse. This the extension that works, the previous mail contains\nthe test that fails, i.e. testUnchangedComplex().\n\nYou need this patch first though. \n\n-- robin\n\nFrom 6d169c4e682359d8832047662591e341e91d186d Mon Sep 17 00:00:00 2001\nFrom: Robin Rosenberg <robin.rosenberg@dewire.com>\nDate: Sun, 10 Feb 2008 20:01:53 +0100\nSubject: [PATCH] Tighten IndexDiffTest to make it test better what it claims to test\n\n---\n .../tst/org/spearce/jgit/lib/IndexDiffTest.java    |   22 ++++++++++++++++++++\n 1 files changed, 22 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java \nb/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\nindex ba5d8d7..629c06c 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\n@@ -31,8 +31,12 @@ public class IndexDiffTest extends RepositoryTestCase {\n \t\tindex.add(trash, new File(trash, \"dir/subfile\"));\n \t\tIndexDiff diff = new IndexDiff(tree, index);\n \t\tdiff.diff();\n+\t\tassertEquals(2, diff.getAdded().size());\n \t\tassertTrue(diff.getAdded().contains(\"file1\"));\n \t\tassertTrue(diff.getAdded().contains(\"dir/subfile\"));\n+\t\tassertEquals(0, diff.getChanged().size());\n+\t\tassertEquals(0, diff.getModified().size());\n+\t\tassertEquals(0, diff.getRemoved().size());\n \t}\n \n \tpublic void testRemoved() throws IOException {\n@@ -44,11 +48,20 @@ public class IndexDiffTest extends RepositoryTestCase {\n \t\ttree.addFile(\"file2\");\n \t\ttree.addFile(\"dir/file3\");\n \t\tassertEquals(2, tree.memberCount());\n+\t\ttree.findBlobMember(\"file2\").setId(new ObjectId(\"30d67d4672d5c05833b7192cc77a79eaafb5c7ad\"));\n+\t\tTree tree2 = (Tree) tree.findTreeMember(\"dir\");\n+\t\ttree2.findBlobMember(\"file3\").setId(new ObjectId(\"873fb8d667d05436d728c52b1d7a09528e6eb59b\"));\n+\t\ttree2.setId(new ObjectWriter(db).writeTree(tree2));\n+\t\ttree.setId(new ObjectWriter(db).writeTree(tree));\n \n \t\tIndexDiff diff = new IndexDiff(tree, index);\n \t\tdiff.diff();\n+\t\tassertEquals(2, diff.getRemoved().size());\n \t\tassertTrue(diff.getRemoved().contains(\"file2\"));\n \t\tassertTrue(diff.getRemoved().contains(\"dir/file3\"));\n+\t\tassertEquals(0, diff.getChanged().size());\n+\t\tassertEquals(0, diff.getModified().size());\n+\t\tassertEquals(0, diff.getAdded().size());\n \t}\n \n \tpublic void testModified() throws IOException {\n@@ -65,10 +78,19 @@ public class IndexDiffTest extends RepositoryTestCase {\n \t\ttree.addFile(\"dir/file3\").setId(new ObjectId(\"0123456789012345678901234567890123456789\"));\n \t\tassertEquals(2, tree.memberCount());\n \n+\t\tTree tree2 = (Tree) tree.findTreeMember(\"dir\");\n+\t\ttree2.setId(new ObjectWriter(db).writeTree(tree2));\n+\t\ttree.setId(new ObjectWriter(db).writeTree(tree));\n \t\tIndexDiff diff = new IndexDiff(tree, index);\n \t\tdiff.diff();\n+\t\tassertEquals(2, diff.getChanged().size());\n \t\tassertTrue(diff.getChanged().contains(\"file2\"));\n \t\tassertTrue(diff.getChanged().contains(\"dir/file3\"));\n+\t\tassertEquals(1, diff.getModified().size());\n \t\tassertTrue(diff.getModified().contains(\"dir/file3\"));\n+\t\tassertEquals(0, diff.getAdded().size());\n+\t\tassertEquals(0, diff.getRemoved().size());\n+\t\tassertEquals(0, diff.getMissing().size());\n \t}\n+\n }\n-- \n1.5.4.rc4.25.g81cc\n"},{"id":"68276","messageId":"20080210211108.GB2026@mimvista.com","threadId":"11907","inReplyTo":"200802102118.29647.robin.rosenberg.lists@dewire.com","subject":"Re: [EGIT PATCH 2/2] Resort entries in \"normal\" order before looking for conflicts","fromName":"David Watson","fromEmail":"dwatson@mimvista.com","sentAt":"2008-02-10T21:11:09Z","receivedAt":"2008-02-10T21:11:09Z","isPatch":true,"sender":{"key":"dwatson@mimvista.com","avatar":null},"body":"Looks reasonable enough to me. \n\nOn Sun, Feb 10, 2008 at 09:18:29PM +0100, Robin Rosenberg wrote:\n> söndagen den 10 februari 2008 skrev Robin Rosenberg:\n> > In order to fix a bug where everything is marked as modified, or in some cases\n> > not modified the unit tests. The fixes here continue to work, but I want to\n> > emphasize the tests. Comments?\n> \n> Actually the reverse. This the extension that works, the previous mail contains\n> the test that fails, i.e. testUnchangedComplex().\n> \n> You need this patch first though. \n> \n> -- robin\n> \n> From 6d169c4e682359d8832047662591e341e91d186d Mon Sep 17 00:00:00 2001\n> From: Robin Rosenberg <robin.rosenberg@dewire.com>\n> Date: Sun, 10 Feb 2008 20:01:53 +0100\n> Subject: [PATCH] Tighten IndexDiffTest to make it test better what it claims to test\n> \n> ---\n>  .../tst/org/spearce/jgit/lib/IndexDiffTest.java    |   22 ++++++++++++++++++++\n>  1 files changed, 22 insertions(+), 0 deletions(-)\n> \n> diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java \n> b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\n> index ba5d8d7..629c06c 100644\n> --- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\n> +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/IndexDiffTest.java\n> @@ -31,8 +31,12 @@ public class IndexDiffTest extends RepositoryTestCase {\n>  \t\tindex.add(trash, new File(trash, \"dir/subfile\"));\n>  \t\tIndexDiff diff = new IndexDiff(tree, index);\n>  \t\tdiff.diff();\n> +\t\tassertEquals(2, diff.getAdded().size());\n>  \t\tassertTrue(diff.getAdded().contains(\"file1\"));\n>  \t\tassertTrue(diff.getAdded().contains(\"dir/subfile\"));\n> +\t\tassertEquals(0, diff.getChanged().size());\n> +\t\tassertEquals(0, diff.getModified().size());\n> +\t\tassertEquals(0, diff.getRemoved().size());\n>  \t}\n>  \n>  \tpublic void testRemoved() throws IOException {\n> @@ -44,11 +48,20 @@ public class IndexDiffTest extends RepositoryTestCase {\n>  \t\ttree.addFile(\"file2\");\n>  \t\ttree.addFile(\"dir/file3\");\n>  \t\tassertEquals(2, tree.memberCount());\n> +\t\ttree.findBlobMember(\"file2\").setId(new ObjectId(\"30d67d4672d5c05833b7192cc77a79eaafb5c7ad\"));\n> +\t\tTree tree2 = (Tree) tree.findTreeMember(\"dir\");\n> +\t\ttree2.findBlobMember(\"file3\").setId(new ObjectId(\"873fb8d667d05436d728c52b1d7a09528e6eb59b\"));\n> +\t\ttree2.setId(new ObjectWriter(db).writeTree(tree2));\n> +\t\ttree.setId(new ObjectWriter(db).writeTree(tree));\n>  \n>  \t\tIndexDiff diff = new IndexDiff(tree, index);\n>  \t\tdiff.diff();\n> +\t\tassertEquals(2, diff.getRemoved().size());\n>  \t\tassertTrue(diff.getRemoved().contains(\"file2\"));\n>  \t\tassertTrue(diff.getRemoved().contains(\"dir/file3\"));\n> +\t\tassertEquals(0, diff.getChanged().size());\n> +\t\tassertEquals(0, diff.getModified().size());\n> +\t\tassertEquals(0, diff.getAdded().size());\n>  \t}\n>  \n>  \tpublic void testModified() throws IOException {\n> @@ -65,10 +78,19 @@ public class IndexDiffTest extends RepositoryTestCase {\n>  \t\ttree.addFile(\"dir/file3\").setId(new ObjectId(\"0123456789012345678901234567890123456789\"));\n>  \t\tassertEquals(2, tree.memberCount());\n>  \n> +\t\tTree tree2 = (Tree) tree.findTreeMember(\"dir\");\n> +\t\ttree2.setId(new ObjectWriter(db).writeTree(tree2));\n> +\t\ttree.setId(new ObjectWriter(db).writeTree(tree));\n>  \t\tIndexDiff diff = new IndexDiff(tree, index);\n>  \t\tdiff.diff();\n> +\t\tassertEquals(2, diff.getChanged().size());\n>  \t\tassertTrue(diff.getChanged().contains(\"file2\"));\n>  \t\tassertTrue(diff.getChanged().contains(\"dir/file3\"));\n> +\t\tassertEquals(1, diff.getModified().size());\n>  \t\tassertTrue(diff.getModified().contains(\"dir/file3\"));\n> +\t\tassertEquals(0, diff.getAdded().size());\n> +\t\tassertEquals(0, diff.getRemoved().size());\n> +\t\tassertEquals(0, diff.getMissing().size());\n>  \t}\n> +\n>  }\n> -- \n> 1.5.4.rc4.25.g81cc\n> \n\n-- \nDave Watson\nSoftware Engineer\nMIMvista Corp\n"}]}