From 875bfc5ffcdd21fca616d4f88444d4dcf6fd69ac Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Sun, 25 Mar 2012 21:26:48 -0700 Subject: [PATCH] Fix error in tree iterator when popping up trees There was an error in the tree iterator where it would delete two tree levels instead of just one when popping up a tree level. Unfortunately the test data for the tree iterator did not have any deep trees with subtrees in the middle of the tree items, so this problem went unnoticed. This contains the 1-line fix plus new test data and tests that reveal the issue. --- src/iterator.c | 1 - tests-clar/diff/iterator.c | 48 +++++++++++++++++- tests/resources/attr/.gitted/index | Bin 1376 -> 1856 bytes tests/resources/attr/.gitted/logs/HEAD | Bin 1020 -> 1368 bytes .../attr/.gitted/logs/refs/heads/master | Bin 1020 -> 1368 bytes .../21/7878ab49e1314388ea2e32dc6fdb58a1b969e0 | Bin 0 -> 167 bytes .../24/fa9a9fc4e202313e24b648087495441dab432b | Bin 0 -> 180 bytes .../45/5a314fa848d52ae1f11d254da4f60858fc97f4 | Bin 0 -> 446 bytes .../45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 | Bin 0 -> 18 bytes .../4e/49ba8c5b6c32ff28cd9dcb60be34df50fcc485 | Bin 0 -> 81 bytes .../93/61f40bb97239cf55811892e14de2e344168ba1 | Bin 0 -> 45 bytes .../9e/5bdc47d6a80f2be0ea3049ad74231b94609242 | Bin 0 -> 20 bytes .../ce/39a97a7fb1fa90bcf5e711249c1e507476ae0e | Bin 0 -> 446 bytes .../ec/b97df2a174987475ac816e3847fc8e9f6c596b | Bin 0 -> 171 bytes .../resources/attr/.gitted/refs/heads/master | Bin 41 -> 41 bytes 15 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 tests/resources/attr/.gitted/objects/21/7878ab49e1314388ea2e32dc6fdb58a1b969e0 create mode 100644 tests/resources/attr/.gitted/objects/24/fa9a9fc4e202313e24b648087495441dab432b create mode 100644 tests/resources/attr/.gitted/objects/45/5a314fa848d52ae1f11d254da4f60858fc97f4 create mode 100644 tests/resources/attr/.gitted/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 create mode 100644 tests/resources/attr/.gitted/objects/4e/49ba8c5b6c32ff28cd9dcb60be34df50fcc485 create mode 100644 tests/resources/attr/.gitted/objects/93/61f40bb97239cf55811892e14de2e344168ba1 create mode 100644 tests/resources/attr/.gitted/objects/9e/5bdc47d6a80f2be0ea3049ad74231b94609242 create mode 100644 tests/resources/attr/.gitted/objects/ce/39a97a7fb1fa90bcf5e711249c1e507476ae0e create mode 100644 tests/resources/attr/.gitted/objects/ec/b97df2a174987475ac816e3847fc8e9f6c596b diff --git a/src/iterator.c b/src/iterator.c index 001bee7b0..aa73d3182 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -121,7 +121,6 @@ static int tree_iterator__advance( break; tree_iterator__pop_frame(ti); - git_buf_rtruncate_at_char(&ti->path, '/'); } if (te && entry_is_tree(te)) diff --git a/tests-clar/diff/iterator.c b/tests-clar/diff/iterator.c index 3953fd83f..60f416fad 100644 --- a/tests-clar/diff/iterator.c +++ b/tests-clar/diff/iterator.c @@ -139,6 +139,40 @@ void test_diff_iterator__tree_3(void) tree_iterator_test("status", "0017bd4ab1e", 8, expected_tree_3); } +/* $ git ls-tree -r --name-only 24fa9a9fc4e202313e24b648087495441dab432b */ +const char *expected_tree_4[] = { + "attr0", + "attr1", + "attr2", + "attr3", + "binfile", + "gitattributes", + "macro_bad", + "macro_test", + "root_test1", + "root_test2", + "root_test3", + "root_test4.txt", + "sub/abc", + "sub/file", + "sub/sub/file", + "sub/sub/subsub.txt", + "sub/subdir_test1", + "sub/subdir_test2.txt", + "subdir/.gitattributes", + "subdir/abc", + "subdir/subdir_test1", + "subdir/subdir_test2.txt", + "subdir2/subdir2_test1", + NULL +}; + +void test_diff_iterator__tree_4(void) +{ + tree_iterator_test( + "attr", "24fa9a9fc4e202313e24b648087495441dab432b", + 23, expected_tree_4); +} /* -- INDEX ITERATOR TESTS -- */ @@ -188,6 +222,12 @@ static const char *expected_index_0[] = { "root_test2", "root_test3", "root_test4.txt", + "sub/abc", + "sub/file", + "sub/sub/file", + "sub/sub/subsub.txt", + "sub/subdir_test1", + "sub/subdir_test2.txt", "subdir/.gitattributes", "subdir/abc", "subdir/subdir_test1", @@ -208,6 +248,12 @@ static const char *expected_index_oids_0[] = { "4d713dc48e6b1bd75b0d61ad078ba9ca3a56745d", "108bb4e7fd7b16490dc33ff7d972151e73d7166e", "fe773770c5a6cc7185580c9204b1ff18a33ff3fc", + "3e42ffc54a663f9401cc25843d6c0e71a33e4249", + "45b983be36b73c0788dc9cbcb76cbb80fc7bb057", + "45b983be36b73c0788dc9cbcb76cbb80fc7bb057", + "9e5bdc47d6a80f2be0ea3049ad74231b94609242", + "e563cf4758f0d646f1b14b76016aa17fa9e549a4", + "fb5067b1aef3ac1ada4b379dbcb7d17255df7d78", "99eae476896f4907224978b88e5ecaa6c5bb67a9", "3e42ffc54a663f9401cc25843d6c0e71a33e4249", "e563cf4758f0d646f1b14b76016aa17fa9e549a4", @@ -217,7 +263,7 @@ static const char *expected_index_oids_0[] = { void test_diff_iterator__index_0(void) { - index_iterator_test("attr", 17, expected_index_0, expected_index_oids_0); + index_iterator_test("attr", 23, expected_index_0, expected_index_oids_0); } static const char *expected_index_1[] = { diff --git a/tests/resources/attr/.gitted/index b/tests/resources/attr/.gitted/index index 19fa99d5b20eb89465b2e1561d69b4ec0ae0d252..1d60eab8fae80006d0f7b493ab1c815fadcd417d 100644 GIT binary patch delta 719 zcmaFBb%0OB#WTp6fq{Vuh{gT0r>FsG1{lr9z`()~?5;df#ZVl(l*+^$TvDnNx8Rae zoA?Kpl=@^B#zq{L=}o@Fh)bXTWECb$9Qq6CT)q3{g(j@)Fq-3N3MN?Bc-GrR6=-eAO2wg~<}A zPZ`s?=;p~KKslY3^I$nB4fdP3#;VCjfO3Y5e}LtnG+0j3e)41yW?cH#Oip38n0$p* geDh@1nT#S9bp;Om&7qnSi{85)VNKtY@;dWB0EbsdTL1t6 diff --git a/tests/resources/attr/.gitted/logs/HEAD b/tests/resources/attr/.gitted/logs/HEAD index 68fcff2c5c2f92240447401ec7775ca352d6a040..73f00f3450c6ca3392251ab847cee623ed9dfd5a 100644 GIT binary patch delta 251 zcma*hu?@m75QX6)1tL>ig`hy#=Syr;u>vF5@fleni4-R_GawdW9EM3jC=m@$`rD^( zUcJiaTs*kgZBc5Yjq_w#DoM&1cE}1tQ^(*dWpO`mZVI&`DZJWj; zxDYr%Ojpj3I>?hhES3L015$L>+1L=HKqVC;`I?L{nruZR!@^VO7sBa7sFwW_Qg?y2 TANUIbu^(U@m?4jDoO1aF^lVAm delta 7 Ocmcb?^@n}KA7%g#J_D5i diff --git a/tests/resources/attr/.gitted/logs/refs/heads/master b/tests/resources/attr/.gitted/logs/refs/heads/master index 68fcff2c5c2f92240447401ec7775ca352d6a040..73f00f3450c6ca3392251ab847cee623ed9dfd5a 100644 GIT binary patch delta 251 zcma*hu?@m75QX6)1tL>ig`hy#=Syr;u>vF5@fleni4-R_GawdW9EM3jC=m@$`rD^( zUcJiaTs*kgZBc5Yjq_w#DoM&1cE}1tQ^(*dWpO`mZVI&`DZJWj; zxDYr%Ojpj3I>?hhES3L015$L>+1L=HKqVC;`I?L{nruZR!@^VO7sBa7sFwW_Qg?y2 TANUIbu^(U@m?4jDoO1aF^lVAm delta 7 Ocmcb?^@n}KA7%g#J_D5i diff --git a/tests/resources/attr/.gitted/objects/21/7878ab49e1314388ea2e32dc6fdb58a1b969e0 b/tests/resources/attr/.gitted/objects/21/7878ab49e1314388ea2e32dc6fdb58a1b969e0 new file mode 100644 index 0000000000000000000000000000000000000000..b537899f2867f88a6ad4664e9e7e0928351aa786 GIT binary patch literal 167 zcmV;Y09gNc0iBLf3c@fDME%Yw_5$i|lh_1A#3OivZFYl&)=HAz-+(vpV|XyUfl1rC z&J6||53Q(z^PVla%)tfm11n`B8N3sA`GUcRoZ^_B`Eb#91CC=#NHKU4htwq!jFhHG zOg=OP%&%omn%OS0EgRb~JH literal 0 HcmV?d00001 diff --git a/tests/resources/attr/.gitted/objects/24/fa9a9fc4e202313e24b648087495441dab432b b/tests/resources/attr/.gitted/objects/24/fa9a9fc4e202313e24b648087495441dab432b new file mode 100644 index 0000000000000000000000000000000000000000..e7099bbaa476b5da9cd9a8dbad59e73d705a83a6 GIT binary patch literal 180 zcmV;l089UP0iBQAX#_D8L-Xw_ZUb5T7|*p~2_YqH2iG2XGcb=}d-{*rbP)Xrgbqmg z-1oJU_59W=Kp8GdWZ{xbk*HHH9&C)AVm9!aC!Pfw>PIS$0U8b*Bux>8He)a}FfcPQQAjK)DKcOP&F^Wd?(mk!9N4*WOR^9COxTOtMRg|A! z5)V>j$lxj>Rk^&v>FBIvr76rxTz=lq{cO=y88P@4+8*i4mcAa%o4A&}d*vysu##AG zRmKbg-CLgjtrqj-J#7E|W|62|@pZ90bX6vLB^4zM|H{n^jxIY>*c!nziDlz|iN*Gx z|Cks6fkJU<62s)gFWfteEYF8FN=$m_`{=QYSocD>Y)WPk!~8AWX{C3cafeM`e{S8x oZMhSAm~J8~Fk;Zuyr-e_a^}mx=5@D@xyl;1gwF8>0Ji4Z{~yNdr~m)} literal 0 HcmV?d00001 diff --git a/tests/resources/attr/.gitted/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 b/tests/resources/attr/.gitted/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 new file mode 100644 index 0000000000000000000000000000000000000000..7ca4ceed50400af7e36b25ff200a7be95f0bc61f GIT binary patch literal 18 acmbAU@$Z=Ff%bxNXyJgWpLfuyw7aA4SUC(IeWI}>~8o|y&)Vb nUtF35M0zC^B@FYT@3>!E!LR+`m4WBl5@qQr36q=vdCDH$Y{(@5 literal 0 HcmV?d00001 diff --git a/tests/resources/attr/.gitted/objects/93/61f40bb97239cf55811892e14de2e344168ba1 b/tests/resources/attr/.gitted/objects/93/61f40bb97239cf55811892e14de2e344168ba1 new file mode 100644 index 0000000000000000000000000000000000000000..4b57836cd2415320e671db485adc3710da4c6398 GIT binary patch literal 45 zcmV+|0Mh?>0V^p=O;s>9U@$QN0)^tzBnCgvT|Ln`M*lU=&OM#5&*Xl8He)a}FfcPQQAjK)DKcOP&F^Wd?(mk!9N4*WOR^9COxTOtMRg|A! z5)V>j$lxj>Rk^&v>FBIvr76rxTz=lq{cO=y88P@4+8*i4mcAa%o4A&}d*vysu##AG zRmKbg-CLgjtrqj-J#7E|W|62|@pZ90bX6vLB^4zM|H{n^jxIY>*c!nziDlz|iN*Gx z|Cks6fkJU<62qIFwVxK2%qS^c)0k)B{-oJxWlHeKeuk; ow%iFlOgE7g7%^yS-qX-|IrC*;^SWEdTxE@0Lg#n`01lbk{pJ7H)k+3FfcPQQAkWmX0UVmf7C0@ehT9m)fU?vzQVi6uy@>O5_b5~Dvj?sUOvvW@;>@&F^ z@aIS?R5wsMC9^2LB(=E2kl|_adH0A9*W5mC^e$t}T3EmGspk?*bw+w66(tP61JXCH Z`@BZ#mbdxbJ=-r9h2F2N0071zOs-2+R7n5; literal 0 HcmV?d00001 diff --git a/tests/resources/attr/.gitted/refs/heads/master b/tests/resources/attr/.gitted/refs/heads/master index 7f8bbe3e7794b461fa6a55d881f975dd34acd0cf..8768776b33adada802c16b3120cd2aa263905460 100644 GIT binary patch literal 41 ucmV~$K>+|D2m`>sX<$r+IH1@+f_LD{$asehfvGiEi!Qzylhm6