From a1a247c7fa4333860a0c629c32598048b8101c02 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Thu, 22 Jan 2009 15:28:10 -0800 Subject: [PATCH] Add a few simple merge test cases Signed-off-by: Robin Rosenberg Signed-off-by: Shawn O. Pearce --- .../spearce/jgit/test/resources/create-second-pack | 13 +++- ...ck-3280af9c07ee18a87705ef50b0cc4cd20266cf12.idx | Bin 0 -> 1296 bytes ...k-3280af9c07ee18a87705ef50b0cc4cd20266cf12.pack | Bin 0 -> 562 bytes ...ck-9fb5b411fe6dfa89cc2e6b89d2bd8e5de02b5745.idx | Bin 1088 -> 1100 bytes ...ck-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idx | Bin 2696 -> 2976 bytes ...k-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.pack | Bin 5956 -> 5901 bytes .../org/spearce/jgit/test/resources/packed-refs | 4 +- .../org/spearce/jgit/lib/RepositoryTestCase.java | 3 +- .../org/spearce/jgit/merge/SimpleMergeTest.java | 86 +++++++++++++++++++++ .../org/spearce/jgit/transport/TransportTest.java | 2 +- 10 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.idx create mode 100644 org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12.pack rewrite org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.idx (66%) create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/merge/SimpleMergeTest.java diff --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 index 052877d3..5501a67c 100755 --- 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 @@ -138,7 +138,18 @@ done git repack -d +git checkout -b f a +mkdir f +echo "an eff" >f/f +git add f/f +git commit -m "An eff" +git checkout -b g a +mkdir f +echo "an F" >f/f +git add f/f +git commit -m "An F" +git repack -d git pack-refs --all -qgit --all master +gitk --all master diff --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 new file mode 100644 index 0000000000000000000000000000000000000000..300c0cea48c6c4eda2b870b3631355c2137cebb0 GIT binary patch literal 1296 zcwYNo;-AdGz`(?S8!%FcL1r@#Qp`#uW}_iyrvc^|#iN)M%(f#_H^yIc*&fgKhx-or z&EE7TWRaNnkCV@4#Yk$M)p!~8{^rtapF-}7$3{2oou1L*+kftY-t5aJ9pcW@Y}E@A zyEh8!MIIKpw^(C`)$tQXMz%kj-(OpEzxe*~ErE+3^VeO`D>rk$oLOV;{zAf!_ekZL zy^N0|nM}*$G(KH?H}me7$fzp$&vL({1Zo7I7uU}CS6ZTbbH$fEPal>&|8aBf+{X-; zT&BpV2j6BY47luCdSHI`nmtX;w!4Mi`R87pAg=~2V;H@FxCrQ%1wi@*u-Fj*vUz~) yCLsMpobQ2v=bB5ZA&k$mWnEr8^vNo7=SxK8BLij_wrj#O`T2rS%| zUidH}#Dz~P_m$6`*V#8S7O30$?L3y2f3D=Xx!-Gc->7BMhQ+Jj+_2mgvGJNrY1Q>E z`!M4(EkS4a)5PtqUNAR^RLt3ZvSM!F_9Ysop$AQ_o=`fgan!){>Lnvp)w4&gTr#<6 zbJ0Ne>59_cNnJv1%X-D5F2%7O*}gP)y~fA+sX;sDEEi;$xJmWcT1KEPCI$w^hJhZ*0-ygC ze!96v!gK9rDgDLw?#EQU4L(uJFlPtvbn}Wi-e-b6e7zqtF>ux~X%pkRgJF9WHdZg* z5cec;Vs*D^S%j>8VoFLzLPA>7q6xDjVkSi`2@eW9bYaU!C+}OQ8-8rt@>W#!-)0}K z>7PxQ7@WVWFrc_@!{3{K{@t4O`{?)ne9o9JGxophirXp4u;mKxJX5gi3V?27nZf8F Z&i6pTbIm2y5XNWOvMw(k`ecnTfjJqNAV~gyjZ-fp<$6>&yCr;e7f74T^Jv6hBKepGhY`d$79Sr sBPx(#)>&PHXTQ_lXT@HUU3u-e^Kb3iYM*I&?~4!3>A7(FLxoK$03Qk?4FCWD literal 1088 zcwS>*pebM+#iMu>4{FRKUe?gC$gt|H+H?aeNXk2u4bjk#w;1v1P!t84J=ciQ`` e*h{i2uf5p5UaLjiUlNBQ@xh8XZX%|Q75Q-VjND>ulSg@_&y*95g(;{K znYx3VYzXiYJx$@;d$o8X3qJqlCvZA=6Z=cJTbNfw5c28!rt}-S^usHds;jwag@fn! zS8qfuunGdNq*dwi%%Cu*yRWo>jXdr3 z6wX<(v4{SC3u6eoBJPRHuJ1n~-?w~;6YU70RtZ?l`BxOJe3O$yQO4`c1`0C!9^A-bc4mTX$Bn+nyvFuTzbuMG0ln zofVa_Xv*eWh7K>8D@Y+OxtymFACsb;Zz_6s6KQMpGh*P2x z%27#^OUM6a+4}cayIYGz&CXG&j&VP#_wMmIm3ncr?ixZkebb*h_{C1Gzo+d7PKBqZ zXf?m=%uh@WYm=xCsjJ<8_qDSs*Wf{%&aMs(OYt`2mKrRmy(MQgoz`BBwidoe8+g%> zkobcw40dFRR|4*|w|g382N~&qdC(MYDm!Y_IGz_ih))>Lb!k=_X1FK){^C8N1mI*< zI91De^gMY2+U__m!^N#D&%cs&@7FU#JcGj8ZA-P)4464)EJ}Fs_D)k8g}UC>EMq;kV-$Q|gjM}DwV=5% z_}I5Yp9^KKqfTxT?ZP>6k}Q7dUuITBA*)ICD8-dd`I_;E%+O~Mby*TAGD*r4w6g~S zyexy8`t_fa%a#N#nxE>vw>QeLQ@PFre#!G>iugOlHc^LvgCdJg(<9gojkul{_bC+8 z69>F(>mSLu)wQ-0PSJH8KcypkB@5ncRZU=}KH96_q#HEM zxBm3rCok9UqU83-QUf&xGM<>MR`)V4C58qdSe8{266V7V(zoQctO_q`ni7>qgY|c; zruth3kkWtR1%_Q7n&w~us~__9)|NEra+0;p|EDD5x~h#dgPA>b>D4-#;)Gq>2)Om; zC2i5-Qs|itym7H^$-c$DtN9JvzN+O$Twg0&`nQv2$@&Auk>uq*xAD!f@qcim;RdFh zLfeAS+>ZdA*u*!ZgK}+DCT0ksb@vC2=f<9yy(gNkYH3K) zOziCCA8z3FEF;fH4z4*R)XPK68OCKk!$nlyoMV??=#U*P zd1l{D@BH-~wiLU_;hu2WOsS4@L5+XRsR#3Vt1mefM%%CO+Doafhws1rdP-CkQ&T<| zc5i-n?*k?xbdKrk^XwQwPSfH68UVRT0Hn+SP`UzutS(#>4m8E#SF{O5J^%{-P@e-p zSrhKn0g${7z@AX3O8^k1z&}d{o-4xzJ!!~`F#%9K0_`dQkj?;z%){^@s0{&-2!y$Z zAR_`96!f3Lxp%$>fQgIBn zhYS+>NDat!0U(?M**mb$FQ8# tIo)0Ce0{H4d`WoglAGiPUdBsD(Nnqf$%y01fxIk6k#j3%Ow8X>?tj#hbMOEF delta 1424 zcwQybdpy%?90%~n-7wqQhRUtmsFtzhq;)%yLS=Yq5}`V)Aw-Vhh%8!CEvt^L%-_Tw=buvLyf*CB-Ug`}sU) zpjfBljQ9tKmxQep1EArKV)8A=)+u_4DhTnV=L&18?;DE%APNw3Wx_E4(8o0Pg@+uy z<&O;#nc^F|x=d1Ur(T2gPOP%@T^VU{-ke@w*&hfHn+((t0HJf3Sl1#&gaKNaI9M! z^d8aX-2p&VlP!^56|yWfvTSR^tOP|E7kz92U=5#KKS%Vq)9ZO)eY018c9Mcy^J{$w zzD0~xRzVg1p`nq+&uRnsF$r5i=~@3H_craoL23A3X^M|KReQ`Xp<>C{;TugIBrlf9jVd)Thj>O6ia!z z!+&o~vpCV-Gcd1hy)1yBD}q&B1=a6ds;nE6xur~g4^`K-3f0KVXYt@c#nXX=FylZ5 z4%0eUxyjfjz%VTB*#iIGIuX(=L*gUXH^jzi>9$+|T@C*v>7KTJ_nx;cLy0JT|8+qBL4H!XEbWL>c- zfi^tpR2>VG)W-+bsXq#MShnTCJEyh6?N1^%FK>pwr6^5p)zdaeXl*Kwj$Ps_fkiYk z;+OmN^$ZFOe(ts(W!vS5Q0& z7b^~-%RzKgrmHXBj6%Hm+aFzjnpBsEnKSAWVF&2UM8|-VTW$|xv-|D6U*v@qNzeR% zb>9MR+w1)!-ISwd!H=SXCZ6%EKcL_w_9HwwNW}2_Kck0OWr37Fvr#?u8Q0E=WVm6P z24z>T+SYQAhi@^5@PT+OFdBLAZcRudUozvEBLGi`zdktiN)?XT*b!#inA z1=>gbP{LFrrnKj2?j^VfW5_}ERZwT8HY)Fnlx{Ts@JGE!iytp^@~X~;$r-hAF=_*Z zI+Y{;_=RM;bA$QiA~Fn+)Y9}ghW-4AJ-TLp9C>E8?zm%$FMNv%Bt;G?luB_9;xej# zsrjb|44!ouyD|SU7e2B_yOD=ahw7+>^rX0K%kEAhR%^!$1Z_Jig+|T5Z&u(r^UN0; zKH-;>qy|@?g!IcnbZIZ-W_W@TJeKt$;6GdNQoaBH diff --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 index bb47c90d93b0b2276fc36b96bc8734085bde6007..ef56d7e941828561e9f6e2cbc46e2d6c9c8d76bf 100644 GIT binary patch delta 55 zcwPZF0LcHuE{!g*s{sV$1%N=4!2w$X;R0W?G6I+l180Cov)>O<2NYiZCg!fo8+@2= Nzv)s5^+^m_Both>71IC! delta 110 zcwPZ+0FnQVF2pXds{t1D1;B8vj0l7bffm|^TP zFyp3IpgDDT#i6f=vkd~64Hb6+x-!#bo>2e-!WL1JYjAg}b^oces1H#G6hxtEG1~WN Q{ggPWqc#a04LlG+NkNq^UjP6A diff --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 index 746bd6bc..38a70ec5 100644 --- 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 @@ -4,8 +4,10 @@ 6e1475206e57110fcef4b92320436c1e9872a322 refs/heads/c f73b95671f326616d66b2afb3bdfcdbbce110b44 refs/heads/d d0114ab8ac326bab30e3a657a0397578c5a1af88 refs/heads/e -d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864 refs/heads/pa +47d3697c3747e8184e0dc479ccbd01e359023577 refs/heads/f +175d5b80bd9768884d8fced02e9bd33488174396 refs/heads/g 49322bb17d3acc9146f98c97d078513228bbf3c0 refs/heads/master +d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864 refs/heads/pa 6db9c2ebf75590eef973081736730a9ea169a0c4 refs/tags/A 17768080a2318cd89bba4c8b87834401e2095703 refs/tags/B ^d86a2aada2f5e7ccf6f11880bfb9ab404e8a8864 diff --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 index 9e48fdef..20348f19 100644 --- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java @@ -236,7 +236,8 @@ public abstract class RepositoryTestCase extends TestCase { "pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371", "pack-9fb5b411fe6dfa89cc2e6b89d2bd8e5de02b5745", "pack-546ff360fe3488adb20860ce3436a2d6373d2796", - "pack-e6d07037cbcf13376308a0a995d1fa48f8f76aaa" + "pack-e6d07037cbcf13376308a0a995d1fa48f8f76aaa", + "pack-3280af9c07ee18a87705ef50b0cc4cd20266cf12" }; final File packDir = new File(db.getObjectsDirectory(), "pack"); for (int k = 0; k < packs.length; k++) { diff --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 new file mode 100644 index 00000000..96064f5e --- /dev/null +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/merge/SimpleMergeTest.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2008, Robin Rosenberg + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Git Development Community nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.spearce.jgit.merge; + +import java.io.IOException; + +import org.spearce.jgit.lib.ObjectId; +import org.spearce.jgit.lib.RepositoryTestCase; + +public class SimpleMergeTest extends RepositoryTestCase { + + public void testOurs() throws IOException { + Merger ourMerger = MergeStrategy.OURS.newMerger(db); + boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("a"), db.resolve("c") }); + assertTrue(merge); + assertEquals(db.mapTree("a").getId(), ourMerger.getResultTreeId()); + } + + public void testTheirs() throws IOException { + Merger ourMerger = MergeStrategy.THEIRS.newMerger(db); + boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("a"), db.resolve("c") }); + assertTrue(merge); + assertEquals(db.mapTree("c").getId(), ourMerger.getResultTreeId()); + } + + public void testTrivialTwoWay() throws IOException { + Merger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db); + boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("a"), db.resolve("c") }); + assertTrue(merge); + assertEquals("02ba32d3649e510002c21651936b7077aa75ffa9",ourMerger.getResultTreeId().name()); + } + + public void testTrivialTwoWay_disjointhistories() throws IOException { + Merger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db); + boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("a"), db.resolve("c~4") }); + assertTrue(merge); + assertEquals("86265c33b19b2be71bdd7b8cb95823f2743d03a8",ourMerger.getResultTreeId().name()); + } + + public void testTrivialTwoWay_ok() throws IOException { + Merger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db); + boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("a^0^0^0"), db.resolve("a^0^0^1") }); + assertTrue(merge); + assertEquals(db.mapTree("a^0^0").getId(), ourMerger.getResultTreeId()); + } + + public void testTrivialTwoWay_conflict() throws IOException { + Merger ourMerger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(db); + boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("f"), db.resolve("g") }); + assertFalse(merge); + } +} diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/TransportTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/transport/TransportTest.java index dc1cb219..c6e3335e 100644 --- a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/TransportTest.java +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/transport/TransportTest.java @@ -123,7 +123,7 @@ public class TransportTest extends RepositoryTestCase { .findRemoteRefUpdatesFor(Collections.nCopies(1, new RefSpec( "+refs/heads/*:refs/heads/test/*"))); - assertEquals(7, result.size()); + assertEquals(9, result.size()); boolean foundA = false; boolean foundB = false; for (final RemoteRefUpdate rru : result) { -- 2.11.4.GIT