{"thread":{"id":"17256","subject":"[JGIT PATCH] Fix TreeWalk.idEqual when both trees are missing the path","startedAt":"2009-01-19T17:52:36Z","lastAt":"2009-01-20T23:50:30Z","messageCount":2,"participants":["Shawn O. Pearce","Robin Rosenberg"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"101153","messageId":"1232387556-10289-1-git-send-email-spearce@spearce.org","threadId":"17256","inReplyTo":null,"subject":"[JGIT PATCH] Fix TreeWalk.idEqual when both trees are missing the path","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2009-01-19T17:52:36Z","receivedAt":"2009-01-19T17:52:36Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"The Javadoc of idEqual() says its simply a faster form of\ngetObjectId(nthA).equals(getObjectId(nthB)), but its code\ndidn't match that definition when both trees didn't exist\nat the current path.\n\nIf a tree doesn't exist for the current path getObjectId() returns\nObjectId.zero(), indicating the \"magic\" 0{40} SHA-1 for the current\npath.  If both tree entries don't exist for the current path, we\nshould be doing a compare of ObjectId.zero() against ObjectId.zero(),\nwhich must be true as the values are the same.\n\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n .../src/org/spearce/jgit/treewalk/TreeWalk.java    |   11 ++++++++++-\n 1 files changed, 10 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java\nindex ecf8851..414587c 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java\n@@ -616,7 +616,16 @@ public boolean idEqual(final int nthA, final int nthB) {\n \t\tfinal AbstractTreeIterator ch = currentHead;\n \t\tfinal AbstractTreeIterator a = trees[nthA];\n \t\tfinal AbstractTreeIterator b = trees[nthB];\n-\t\treturn a.matches == ch && b.matches == ch && a.idEqual(b);\n+\t\tif (a.matches == ch && b.matches == ch)\n+\t\t\treturn a.idEqual(b);\n+\t\tif (a.matches != ch && b.matches != ch) {\n+\t\t\t// If neither tree matches the current path node then neither\n+\t\t\t// tree has this entry. In such case the ObjectId is zero(),\n+\t\t\t// and zero() is always equal to zero().\n+\t\t\t//\n+\t\t\treturn true;\n+\t\t}\n+\t\treturn false;\n \t}\n \n \t/**\n-- \n1.6.1.331.g9c367\n"},{"id":"101317","messageId":"200901210050.31131.robin.rosenberg.lists@dewire.com","threadId":"17256","inReplyTo":"1232387556-10289-1-git-send-email-spearce@spearce.org","subject":"Re: [JGIT PATCH] Fix TreeWalk.idEqual when both trees are missing the path","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2009-01-20T23:50:30Z","receivedAt":"2009-01-20T23:50:30Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"måndag 19 januari 2009 18:52:36 skrev Shawn O. Pearce:\n> The Javadoc of idEqual() says its simply a faster form of\n> getObjectId(nthA).equals(getObjectId(nthB)), but its code\n> didn't match that definition when both trees didn't exist\n> at the current path.\n\nGreat. I think we're almost ready for merge. First a few test\ncases below. If you think they are ok, I'll add them after the\n(simple) merge implementation, or maybe squash.\n\nHowever there is a conflict with the CanonicalTreeParsers here and\nin master. Shawn: Could you resolve that and resubmit patch 5 rebased on main?\n\n-- robin\n\nFrom 7e8fd54d304bac1fcf08e29c9b8a208c9d0be743 Mon Sep 17 00:00:00 2001\nFrom: Robin Rosenberg <robin.rosenberg@dewire.com>\nDate: Mon, 19 Jan 2009 23:09:09 +0100\nSubject: [JGIT PATCH] Add a few simple merge test cases\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../spearce/jgit/test/resources/create-second-pack |   13 +++-\n ...ck-3280af9c07ee18a87705ef50b0cc4cd20266cf12.idx |  Bin 0 -> 1296 bytes\n ...k-3280af9c07ee18a87705ef50b0cc4cd20266cf12.pack |  Bin 0 -> 562 bytes\n ...ck-9fb5b411fe6dfa89cc2e6b89d2bd8e5de02b5745.idx |  Bin 1088 -> 1100 bytes\n ...ck-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idx |  Bin 2696 -> 2976 bytes\n ...k-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.pack |  Bin 5956 -> 5901 bytes\n .../org/spearce/jgit/test/resources/packed-refs    |    6 +-\n .../org/spearce/jgit/lib/RepositoryTestCase.java   |    3 +-\n .../org/spearce/jgit/merge/SimpleMergeTest.java    |   86 ++++++++++++++++++++\n 9 files changed, 103 insertions(+), 5 deletions(-)\n create mode 100644 org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.idx\n create mode 100644 org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.pack\n create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/merge/SimpleMergeTest.java\n\ndiff --git a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/create-second-pack b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/create-second-pack\nindex 052877d..5501a67 100755\n--- a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/create-second-pack\n+++ b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/create-second-pack\n@@ -138,7 +138,18 @@ done\n \n git repack -d\n \n+git checkout -b f a\n+mkdir f\n+echo \"an eff\" >f/f\n+git add f/f\n+git commit -m \"An eff\"\n+git checkout -b g a\n+mkdir f\n+echo \"an F\" >f/f\n+git add f/f\n+git commit -m \"An F\"\n+git repack -d\n git pack-refs --all\n \n \n-qgit --all master\n+gitk --all master\ndiff --git a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.idx b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.idx\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..300c0cea48c6c4eda2b870b3631355c2137cebb0\nGIT binary patch\nliteral 1296\nzcmexg;-AdGz`z8=xBw$if)Wfen|Y98R-n6x!E8Wvw8HE_v#E_afM$;3(J&x74Y2LV\nz)Q$1iT(-xv{o%d?ezP~d30WlO{o~}bSuv7YXEk0%y}!Bi+NY5F;<3>Ud#7h~`1YT>\nzpf~%nNr$-eG+Xt8#O{s4dXa}k?k(2XVRih3k&*4s=J(gu+%LX=d`sY>$NY6y^vccL\nzFK5=6yT6d|<2_P&W-sI8NG8+rIE_yi-_5-HB{Hf?{<GXKDS;Zn=f$-%{*{*K-dyoz\nz&(nux&wt#UJNGfeC6_5O>cO{}3Ii^?mL8a&y=G5Sv+Zu7cmBCoC&;S-%NRy4AT9!?\nz`vpMy1+YjH0J3?2>?R=nM4az|fajV^sv(TevSnRfJoL#bbLi`ut*5^~(=3sT{r8l`\nLdIkBjci#j6ga?3q\n\nliteral 0\nHcmV?d00001\n\ndiff --git a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.pack b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.pack\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..fca3460ed2d263db153ef11a3e559aa47be9efa1\nGIT binary patch\nliteral 562\nzcmWG=boORoU|<4bj+wj_bLMu(avd@dV7p)3wYNd_w#iMsjvLl57%x5H=K9t?sp<Ik\nzy-ohcJU(|Bgw!K{Gkv_Y)iV2yx4Bxy1{RN(o3pO*q+i>SxK8BLij_wrj#O`T2rS%|\nzUidH}#Dz~P_m$6`*V#8S7O30$?L3y2f3D=Xx!-Gc->7BMhQ+Jj+_2mgvGJNrY1Q>E\nz`!M4(EkS4a)5PtqUNAR^RLt3ZvSM!F_9Ysop$AQ_o=`fgan!){>Lnvp)w4&gTr#<6\nzbJ0Ne><t4`-HQenFC4JBdBNan&7yZ)YUX+jzt0Q2UdLK7$Jmg8snw;eQ&#wAvg(}L\nzl3h94ac_R_Q2Cq@G><bvueUMReOX@5{%4zP=e_0sF8g8j-j}{7l$@EFjfI6<?;LqF\nz>59_cNnJv1%X-D5F2%7O*}gP)y~fA+sX;sDEEi;$xJmWcT1KEPCI$w^hJhZ*0-ygC\nze!96v!gK9rDgDLw?#EQU4L(uJFlPtvbn}Wi-e-b6e7zqtF>ux~X%pkRgJF9WHdZg*\nz5cec;Vs*D^S%j>8VoFLzLPA>7q6xDjVkSi`2@eW9bYaU!C+}OQ8-8rt@>W#!-)0}K\nz>7PxQ7@WVWFrc_@!{3{K{@t4O`{?)ne9o9JGxophirXp4u;mKxJX5gi3V?27nZf8F\nZ&i6pTbIm2y5XNWOvMw(k`ec<k001O50^|Sy\n\nliteral 0\nHcmV?d00001\n\ndiff --git a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-9fb5b411fe6dfa89cc2e6b89d2bd8e5de02b5745.idx b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-9fb5b411fe6dfa89cc2e6b89d2bd8e5de02b5745.idx\nindex cf58d5baa11824217bb0c5eab7444fb406219885..58b712f6c58e3b99abd536c17c306ef2c37c5238 100644\nGIT binary patch\ndelta 89\nzcmV-f0H*)I2+Rlw|8!4d00002kpW(@UZMj;7j}SvqA`rvo4QPkhl4}`;t5v+%)Fm1\nv0000CGYgnnQ2?6FEimT$X76fU(jBSR$3y!oeS1unZtru#oQ%-R@OV6B4p%0y\n\nliteral 1088\nzcmZQzpebMknm&q0!(cQG4Bj-rBVN|fu*k6I#_U}_-R;dTjE^|OnT@$;L<KU;I;(5&\nj?04Gxtk_GkE3duSzFw<E`CW}`!gtH2lI+N+ZF^b)CtDqp\n\ndiff --git a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idx b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idx\nindex 2579301b8447e4d55480f65ae6c27fe1eb99bf4d..3ff542377406158d8155129ae66fc0b51cba76b8 100644\nGIT binary patch\ndelta 1975\n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\n\ndelta 1424\nzcmXAodpOg39LK-zhS}CORBqiywTvYvt=owdD#N2mgzBt@5IKe;vS>-U{M=6D3@eXI\nzwN+-U$n|h4?YM<bxg?b9L8d%7UpxPPp6C1ezTfZ9=grgQ67$uSEdjtNDOOS2&*wP<\nz#X22l#6LK^By6P^01bB(lW#e;PSHzLL5MFsS6EYh-&h0yQGl2$6OI9ZKBloRJmlyt\nze{7J*6yMO*Ws-V3^%|UaVwI)u%1Ddz=JW!~7IC7T8e?rc0NP}1uY1NtV?1EdM|xcy\nzgI!z%v|#|0)+4e111pF>z6?7n@9SSOnEb{qIZ)#f`EwHh*c_ej;~>xNV#BVv(5gKK\nzGHOTeXgvgSjNWxdEc$&~PT%n|m&~@bksg~d1VHB`B9#NNuB0%%<Zc$b^ZD@*9P8Ew\nzy+^cpcK}e;WJ_dMg)B>rEZf>JD?t&)MIT!LSi>jR&k;TD^m-mx-|W?&ouuH_{8}FZ\nz-y+5;tCm&xhlWNPKdTMk$0Te8p}))9gs9&J003I{)a}CPJ+D*kz9(f#+0Il`$?Qw0\nzkY?Yw;CwJJR#~hg*2M(rebOEcuY~h7Bv=mAtZ=WkJ0)S@(kBj|l{)UaN7@kN5(t25\nz?Wtft+>61=n|DpPyQhqcuO{EfXaj%{?!BetTj&TcofUDT*hIXupNqG<0{?GCUdn;E\nzgtJ1=d%exBQxfnkb<^B+!D-d*r%<`(`LiS4iZ+?T<G(r&j^hR;(~&9-(3(a7r&!9%\nz9sYY`n#GCso`HF7>tz81x*}NBRm<vkE>+fz$=p&VzlW;pT7_!l<+FJ3q2lR4LYQ$N\nz1BYpytK4L46JVGfQn(Q+-x?EVYF)6L<ujY`O7iMJTI2Gyk20v-0r8OoiLyBJIgWY1\nzidUXyV?j~4-uwq-vlwQQA19PvXMUl3Con76SDfxzUM|vt=d@-aZqbY#8kTdV0c*_D\nzsQQ}wQ(`0$09+{|kOP$+IUI+`rIK}Pd``w+n17g}sC0AwJOFC5oVID3^>140mdLtd\nzQvz*x(y2NYDyfeTtW$p!@UU#lgLh7Ah1;J*ZeHFD&#Wj-ZPl^1K|*U&d35X&UkNOt\nznGwI-udioN;NhRU?MK-*{iHI8iteI_dQyYh?4x@Cz-K4ZtB4(l>$Sa2gNoUJjMfzt\nzPr_owA#^zq-IVF-i#MYXZ~pd2*PkZU<zeQG`b6jeotfwuP;$%dL2P!vz4wc}up;T1\nzA8_tlz-@cIf25mo)GYW>RM5mTp7jS5OkzL6lLLtue*b6m5UVVZ(q}fRr#|D_S&<AI\nzrfE=i^{Q<x_srsvZJiEmYBaN^VSEY#yUU~-F{-km_w=u)3l2^9O>B)ac?{=n$g~`Y\nzU#`3n!<nnA(%RR(Nb&bp=9T;#pAM_}v`XZEbiryOL+f|^iFu|?kRTGpgVz44&N;l3\nz##Eqv)DI<0HDXG8p5|VHJs3j{s;_3Kvr-$C_eDxK8h`ksUZlm37dm-WXTuB`wQ(_O\nz1B5!2Bmek?WV&;M`Q;)q%rL2?>2VDE`4M|`&Hgy@%xv9p#}r?<iwYz~4pb<W;vB?f\nzRR2=*PY)P8>o9g>{$nm&vPZj-hfjy<sD<>TxNOVrP9j!o#|#A8c2o+Dnt|V}z;ouA\nzFE)I_FDFS2R-c6Q%Yo?9Ud)}Ib;%TrY80)HMDp_FCoMoFI)y_knjx=H>F;I5y(En>\nzJN<jy?d351@!^^kPXmnh8#>YD*&aiDH%NSL0i&2i%u$4cun_t(TE+z<DpRM+f7>Fh\nz?~SAtr)g`O&$8&1U0h1vT~cU;GC=Re9<sOUyT0Rzlyn)1V7VEdU<8k4y$JXZTkul8\n\ndiff --git a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.pack b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.pack\nindex bb47c90d93b0b2276fc36b96bc8734085bde6007..ef56d7e941828561e9f6e2cbc46e2d6c9c8d76bf 100644\nGIT binary patch\ndelta 55\nzcmV-70LcHuE{!g*s{sV$1%N=4!2w$X;R0W?G6I+l180Cov)>O<2NYiZCg!fo8+@2=\nNzv)s5^+^m_Both>71IC!\n\ndelta 110\nzcmV-!0FnQVF2pXds{t1D1;B8vj0l7bffm|^TP<Z-I%~PjDwD4PTNd#G&=E?wtTJn>\nzFyp3IpgDDT#i6f=vkd~64Hb6+x-!#bo>2e-!WL1JYjAg}b^oces1H#G6hxtEG1~WN\nQ{ggPWqc#a04LlG+NkNq^UjP6A\n\ndiff --git a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/packed-refs b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/packed-refs\nindex 746bd6b..fd735fe 100644\n--- a/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/packed-refs\n+++ b/org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/packed-refs\n@@ -4,8 +4,10 @@\n 6e1475206e57110fcef4b92320436c1e9872a322 refs/heads/c\n f73b95671f326616d66b2afb3bdfcdbbce110b44 refs/heads/d\n d0114ab8ac326bab30e3a657a0397578c5a1af88 refs/heads/e\n-d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864 refs/heads/pa\n+47d3697c3747e8184e0dc479ccbd01e359023577 refs/heads/f\n+175d5b80bd9768884d8fced02e9bd33488174396 refs/heads/g\n 49322bb17d3acc9146f98c97d078513228bbf3c0 refs/heads/master\n+d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864 refs/heads/pa\n 6db9c2ebf75590eef973081736730a9ea169a0c4 refs/tags/A\n 17768080a2318cd89bba4c8b87834401e2095703 refs/tags/B\n ^d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864\n@@ -27,5 +29,3 @@ bf5123bb77c7b5a379f7de9c1293558e3e24dfb8 refs/tags/B8th\n ^d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864\n dd144af286452bfd6a1ea02b0d3745bcdb555e9d refs/tags/B9th\n ^d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864\n-8bbde7aacf771a9afb6992434f1ae413e010c6d8 refs/tags/spearce-gpg-pub\n-^fd608fbe625a2b456d9f15c2b1dc41f252057dd7\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java\nindex 9e48fde..20348f1 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java\n@@ -236,7 +236,8 @@ public void run() {\n \t\t\t\t\"pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371\",\n \t\t\t\t\"pack-9fb5b411fe6dfa89cc2e6b89d2bd8e5de02b5745\",\n \t\t\t\t\"pack-546ff360fe3488adb20860ce3436a2d6373d2796\",\n-\t\t\t\t\"pack-e6d07037cbcf13376308a0a995d1fa48f8f76aaa\"\n+\t\t\t\t\"pack-e6d07037cbcf13376308a0a995d1fa48f8f76aaa\",\n+\t\t\t\t\"pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12\"\n \t\t};\n \t\tfinal File packDir = new File(db.getObjectsDirectory(), \"pack\");\n \t\tfor (int k = 0; k < packs.length; k++) {\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/merge/SimpleMergeTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/merge/SimpleMergeTest.java\nnew file mode 100644\nindex 0000000..96064f5\n--- /dev/null\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/merge/SimpleMergeTest.java\n@@ -0,0 +1,86 @@\n+/*\n+ * Copyright (C) 2008, Robin Rosenberg\n+ *\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or\n+ * without modification, are permitted provided that the following\n+ * conditions are met:\n+ *\n+ * - Redistributions of source code must retain the above copyright\n+ *   notice, this list of conditions and the following disclaimer.\n+ *\n+ * - Redistributions in binary form must reproduce the above\n+ *   copyright notice, this list of conditions and the following\n+ *   disclaimer in the documentation and/or other materials provided\n+ *   with the distribution.\n+ *\n+ * - Neither the name of the Git Development Community nor the\n+ *   names of its contributors may be used to endorse or promote\n+ *   products derived from this software without specific prior\n+ *   written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n+ * CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+package org.spearce.jgit.merge;\n+\n+import java.io.IOException;\n+\n+import org.spearce.jgit.lib.ObjectId;\n+import org.spearce.jgit.lib.RepositoryTestCase;\n+\n+public class SimpleMergeTest extends RepositoryTestCase {\n+\n+\tpublic void testOurs() throws IOException {\n+\t\tMerger ourMerger = MergeStrategy.OURS.newMerger(db);\n+\t\tboolean merge = ourMerger.merge(new ObjectId[] { db.resolve(\"a\"), db.resolve(\"c\") });\n+\t\tassertTrue(merge);\n+\t\tassertEquals(db.mapTree(\"a\").getId(), ourMerger.getResultTreeId());\n+\t}\n+\n+\tpublic void testTheirs() throws IOException {\n+\t\tMerger ourMerger = MergeStrategy.THEIRS.newMerger(db);\n+\t\tboolean merge = ourMerger.merge(new ObjectId[] { db.resolve(\"a\"), db.resolve(\"c\") });\n+\t\tassertTrue(merge);\n+\t\tassertEquals(db.mapTree(\"c\").getId(), ourMerger.getResultTreeId());\n+\t}\n+\n+\tpublic void testTrivialTwoWay() throws IOException {\n+\t\tMerger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db);\n+\t\tboolean merge = ourMerger.merge(new ObjectId[] { db.resolve(\"a\"), db.resolve(\"c\") });\n+\t\tassertTrue(merge);\n+\t\tassertEquals(\"02ba32d3649e510002c21651936b7077aa75ffa9\",ourMerger.getResultTreeId().name());\n+\t}\n+\n+\tpublic void testTrivialTwoWay_disjointhistories() throws IOException {\n+\t\tMerger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db);\n+\t\tboolean merge = ourMerger.merge(new ObjectId[] { db.resolve(\"a\"), db.resolve(\"c~4\") });\n+\t\tassertTrue(merge);\n+\t\tassertEquals(\"86265c33b19b2be71bdd7b8cb95823f2743d03a8\",ourMerger.getResultTreeId().name());\n+\t}\n+\n+\tpublic void testTrivialTwoWay_ok() throws IOException {\n+\t\tMerger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db);\n+\t\tboolean merge = ourMerger.merge(new ObjectId[] { db.resolve(\"a^0^0^0\"), db.resolve(\"a^0^0^1\") });\n+\t\tassertTrue(merge);\n+\t\tassertEquals(db.mapTree(\"a^0^0\").getId(), ourMerger.getResultTreeId());\n+\t}\n+\n+\tpublic void testTrivialTwoWay_conflict() throws IOException {\n+\t\tMerger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db);\n+\t\tboolean merge = ourMerger.merge(new ObjectId[] { db.resolve(\"f\"), db.resolve(\"g\") });\n+\t\tassertFalse(merge);\n+\t}\n+}\n-- \n1.6.1.rc3.56.gd0306\n"}]}