{"thread":{"id":"41493","subject":"[PATCH v3 0/3] Tests for merge-recursive rename-options","startedAt":"2016-02-24T01:41:28Z","lastAt":"2016-02-24T18:38:44Z","messageCount":6,"participants":["Felipe Gonçalves Assis","Junio C Hamano"],"isPatch":true,"patchVersion":3,"patchTotal":3},"messages":[{"id":"279106","messageId":"1456278091-6564-1-git-send-email-felipegassis@gmail.com","threadId":"41493","inReplyTo":null,"subject":"[PATCH v3 0/3] Tests for merge-recursive rename-options","fromName":"Felipe Gonçalves Assis","fromEmail":"felipeg.assis@gmail.com","sentAt":"2016-02-24T01:41:28Z","receivedAt":"2016-02-24T01:41:28Z","isPatch":true,"sender":{"key":"felipeg.assis@gmail.com","avatar":null},"body":"Just a quick update incorporating Eric's latest comments.\n\nStill based on\nc443d39 (merge-recursive: find-renames resets threshold, 2016-02-21).\n\nFelipe Gonçalves Assis (3):\n  t3034: add rename threshold tests\n  t3034: test option to disable renames\n  t3034: test deprecated interface\n\n ...s.sh => t3032-merge-recursive-space-options.sh} |   2 +-\n t/t3034-merge-recursive-rename-options.sh          | 312 +++++++++++++++++++++\n 2 files changed, 313 insertions(+), 1 deletion(-)\n rename t/{t3032-merge-recursive-options.sh => t3032-merge-recursive-space-options.sh} (99%)\n create mode 100755 t/t3034-merge-recursive-rename-options.sh\n\n-- \n2.7.1.492.gd821b20\n"},{"id":"279107","messageId":"1456278091-6564-2-git-send-email-felipegassis@gmail.com","threadId":"41493","inReplyTo":"1456278091-6564-1-git-send-email-felipegassis@gmail.com","subject":"[PATCH v3 1/3] t3034: add rename threshold tests","fromName":"Felipe Gonçalves Assis","fromEmail":"felipeg.assis@gmail.com","sentAt":"2016-02-24T01:41:29Z","receivedAt":"2016-02-24T01:41:29Z","isPatch":true,"sender":{"key":"felipeg.assis@gmail.com","avatar":null},"body":"From: Felipe Gonçalves Assis <felipeg.assis@gmail.com>\n\n10ae752 (merge-recursive: option to specify rename threshold,\n2010-09-27) introduced this feature but did not include any tests.\n\nThe tests use the new option --find-renames, which replaces the then\nintroduced and now deprecated option --rename-threshold.\n\nAlso update name and description of t3032 for consistency:\n\"merge-recursive options\" -> \"merge-recursive space options\"\n\nSigned-off-by: Felipe Gonçalves Assis <felipegassis@gmail.com>\n---\n ...s.sh => t3032-merge-recursive-space-options.sh} |   2 +-\n t/t3034-merge-recursive-rename-options.sh          | 238 +++++++++++++++++++++\n 2 files changed, 239 insertions(+), 1 deletion(-)\n rename t/{t3032-merge-recursive-options.sh => t3032-merge-recursive-space-options.sh} (99%)\n create mode 100755 t/t3034-merge-recursive-rename-options.sh\n\ndiff --git a/t/t3032-merge-recursive-options.sh b/t/t3032-merge-recursive-space-options.sh\nsimilarity index 99%\nrename from t/t3032-merge-recursive-options.sh\nrename to t/t3032-merge-recursive-space-options.sh\nindex 4029c9c..b56180e 100755\n--- a/t/t3032-merge-recursive-options.sh\n+++ b/t/t3032-merge-recursive-space-options.sh\n@@ -1,6 +1,6 @@\n #!/bin/sh\n \n-test_description='merge-recursive options\n+test_description='merge-recursive space options\n \n * [master] Clarify\n  ! [remote] Remove cruft\ndiff --git a/t/t3034-merge-recursive-rename-options.sh b/t/t3034-merge-recursive-rename-options.sh\nnew file mode 100755\nindex 0000000..51c2f87\n--- /dev/null\n+++ b/t/t3034-merge-recursive-rename-options.sh\n@@ -0,0 +1,238 @@\n+#!/bin/sh\n+\n+test_description='merge-recursive rename options\n+\n+Test rename detection by examining rename/delete conflicts.\n+\n+* (HEAD -> rename) rename\n+| * (master) delete\n+|/\n+* base\n+\n+git diff --name-status base master\n+D\t0-old\n+D\t1-old\n+D\t2-old\n+D\t3-old\n+\n+git diff --name-status -M01 base rename\n+R025    0-old   0-new\n+R050    1-old   1-new\n+R075    2-old   2-new\n+R100    3-old   3-new\n+\n+Actual similarity indices are parsed from diff output. We rely on the fact that\n+they are rounded down (see, e.g., Documentation/diff-generate-patch.txt, which\n+mentions this in a different context).\n+'\n+\n+. ./test-lib.sh\n+\n+get_expected_stages () {\n+\tgit checkout rename -- $1-new &&\n+\tgit ls-files --stage $1-new >expected-stages-undetected-$1 &&\n+\tsed \"s/ 0\t/ 2\t/\" <expected-stages-undetected-$1 \\\n+\t\t>expected-stages-detected-$1 &&\n+\tgit read-tree -u --reset HEAD\n+}\n+\n+rename_detected () {\n+\tgit ls-files --stage $1-old $1-new >stages-actual-$1 &&\n+\ttest_cmp expected-stages-detected-$1 stages-actual-$1\n+}\n+\n+rename_undetected () {\n+\tgit ls-files --stage $1-old $1-new >stages-actual-$1 &&\n+\ttest_cmp expected-stages-undetected-$1 stages-actual-$1\n+}\n+\n+check_common () {\n+\tgit ls-files --stage >stages-actual &&\n+\ttest_line_count = 4 stages-actual\n+}\n+\n+check_threshold_0 () {\n+\tcheck_common &&\n+\trename_detected 0 &&\n+\trename_detected 1 &&\n+\trename_detected 2 &&\n+\trename_detected 3\n+}\n+\n+check_threshold_1 () {\n+\tcheck_common &&\n+\trename_undetected 0 &&\n+\trename_detected 1 &&\n+\trename_detected 2 &&\n+\trename_detected 3\n+}\n+\n+check_threshold_2 () {\n+\tcheck_common &&\n+\trename_undetected 0 &&\n+\trename_undetected 1 &&\n+\trename_detected 2 &&\n+\trename_detected 3\n+}\n+\n+check_exact_renames () {\n+\tcheck_common &&\n+\trename_undetected 0 &&\n+\trename_undetected 1 &&\n+\trename_undetected 2 &&\n+\trename_detected 3\n+}\n+\n+test_expect_success 'setup repo' '\n+\tcat <<-\\EOF >3-old &&\n+\t33a\n+\t33b\n+\t33c\n+\t33d\n+\tEOF\n+\tsed s/33/22/ <3-old >2-old &&\n+\tsed s/33/11/ <3-old >1-old &&\n+\tsed s/33/00/ <3-old >0-old &&\n+\tgit add [0-3]-old &&\n+\tgit commit -m base &&\n+\tgit rm [0-3]-old &&\n+\tgit commit -m delete &&\n+\tgit checkout -b rename HEAD^ &&\n+\tcp 3-old 3-new &&\n+\tsed 1,1s/./x/ <2-old >2-new &&\n+\tsed 1,2s/./x/ <1-old >1-new &&\n+\tsed 1,3s/./x/ <0-old >0-new &&\n+\tgit add [0-3]-new &&\n+\tgit rm [0-3]-old &&\n+\tgit commit -m rename &&\n+\tget_expected_stages 0 &&\n+\tget_expected_stages 1 &&\n+\tget_expected_stages 2 &&\n+\tget_expected_stages 3 &&\n+\tcheck_50=\"false\" &&\n+\ttail=\"HEAD^ -- HEAD master\"\n+'\n+\n+test_expect_success 'setup thresholds' '\n+\tgit diff --name-status -M01 HEAD^ HEAD >diff-output &&\n+\ttest_debug \"cat diff-output\" &&\n+\ttest_line_count = 4 diff-output &&\n+\tgrep \"R[0-9][0-9][0-9]\t\\([0-3]\\)-old\t\\1-new\" diff-output \\\n+\t\t>grep-output &&\n+\ttest_cmp diff-output grep-output &&\n+\tth0=$(sed -n \"s/R\\(...\\)\t0-old\t0-new/\\1/p\" <diff-output) &&\n+\tth1=$(sed -n \"s/R\\(...\\)\t1-old\t1-new/\\1/p\" <diff-output) &&\n+\tth2=$(sed -n \"s/R\\(...\\)\t2-old\t2-new/\\1/p\" <diff-output) &&\n+\tth3=$(sed -n \"s/R\\(...\\)\t3-old\t3-new/\\1/p\" <diff-output) &&\n+\ttest \"$th0\" -lt \"$th1\" &&\n+\ttest \"$th1\" -lt \"$th2\" &&\n+\ttest \"$th2\" -lt \"$th3\" &&\n+\ttest \"$th3\" = 100 &&\n+\tif test 50 -le \"$th0\"\n+\tthen\n+\t\tcheck_50=check_threshold_0\n+\telif test 50 -le \"$th1\"\n+\tthen\n+\t\tcheck_50=check_threshold_1\n+\telif test 50 -le \"$th2\"\n+\tthen\n+\t\tcheck_50=check_threshold_2\n+\tfi &&\n+\tth0=\"$th0%\" &&\n+\tth1=\"$th1%\" &&\n+\tth2=\"$th2%\" &&\n+\tth3=\"$th3%\"\n+'\n+\n+test_expect_success 'assumption for tests: rename detection with diff' '\n+\tgit diff --name-status -M$th0 --diff-filter=R HEAD^ HEAD \\\n+\t\t>diff-output-0 &&\n+\tgit diff --name-status -M$th1 --diff-filter=R HEAD^ HEAD \\\n+\t\t>diff-output-1 &&\n+\tgit diff --name-status -M$th2 --diff-filter=R HEAD^ HEAD \\\n+\t\t>diff-output-2 &&\n+\tgit diff --name-status -M100% --diff-filter=R HEAD^ HEAD \\\n+\t\t>diff-output-3 &&\n+\ttest_line_count = 4 diff-output-0 &&\n+\ttest_line_count = 3 diff-output-1 &&\n+\ttest_line_count = 2 diff-output-2 &&\n+\ttest_line_count = 1 diff-output-3\n+'\n+\n+test_expect_success 'default similarity threshold is 50%' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive $tail &&\n+\t$check_50\n+'\n+\n+test_expect_success 'low rename threshold' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --find-renames=$th0 $tail &&\n+\tcheck_threshold_0\n+'\n+\n+test_expect_success 'medium rename threshold' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --find-renames=$th1 $tail &&\n+\tcheck_threshold_1\n+'\n+\n+test_expect_success 'high rename threshold' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --find-renames=$th2 $tail &&\n+\tcheck_threshold_2\n+'\n+\n+test_expect_success 'exact renames only' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --find-renames=100% $tail &&\n+\tcheck_exact_renames\n+'\n+\n+test_expect_success 'rename threshold is truncated' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --find-renames=200% $tail &&\n+\tcheck_exact_renames\n+'\n+\n+test_expect_success 'last wins in --find-renames=<m> --find-renames=<n>' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive \\\n+\t\t--find-renames=$th0 --find-renames=$th2 $tail &&\n+\tcheck_threshold_2\n+'\n+\n+test_expect_success '--find-renames resets threshold' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive \\\n+\t\t--find-renames=$th0 --find-renames $tail &&\n+\t$check_50\n+'\n+\n+test_expect_success 'assumption for further tests: trivial merge succeeds' '\n+\tgit read-tree --reset -u HEAD &&\n+\tgit merge-recursive HEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached &&\n+\tgit merge-recursive --find-renames=$th0 HEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached &&\n+\tgit merge-recursive --find-renames=$th2 HEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached &&\n+\tgit merge-recursive --find-renames=100% HEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached\n+'\n+\n+test_expect_success '--find-renames rejects negative argument' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --find-renames=-25 \\\n+\t\tHEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached\n+'\n+\n+test_expect_success '--find-renames rejects non-numbers' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --find-renames=0xf \\\n+\t\tHEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached\n+'\n+\n+test_done\n-- \n2.7.1.492.gd821b20\n"},{"id":"279108","messageId":"1456278091-6564-3-git-send-email-felipegassis@gmail.com","threadId":"41493","inReplyTo":"1456278091-6564-1-git-send-email-felipegassis@gmail.com","subject":"[PATCH v3 2/3] t3034: test option to disable renames","fromName":"Felipe Gonçalves Assis","fromEmail":"felipeg.assis@gmail.com","sentAt":"2016-02-24T01:41:30Z","receivedAt":"2016-02-24T01:41:30Z","isPatch":true,"sender":{"key":"felipeg.assis@gmail.com","avatar":null},"body":"From: Felipe Gonçalves Assis <felipeg.assis@gmail.com>\n\nSigned-off-by: Felipe Gonçalves Assis <felipegassis@gmail.com>\n---\n t/t3034-merge-recursive-rename-options.sh | 28 ++++++++++++++++++++++++++++\n 1 file changed, 28 insertions(+)\n\ndiff --git a/t/t3034-merge-recursive-rename-options.sh b/t/t3034-merge-recursive-rename-options.sh\nindex 51c2f87..2479910 100755\n--- a/t/t3034-merge-recursive-rename-options.sh\n+++ b/t/t3034-merge-recursive-rename-options.sh\n@@ -83,6 +83,14 @@ check_exact_renames () {\n \trename_detected 3\n }\n \n+check_no_renames () {\n+\tcheck_common &&\n+\trename_undetected 0 &&\n+\trename_undetected 1 &&\n+\trename_undetected 2 &&\n+\trename_undetected 3\n+}\n+\n test_expect_success 'setup repo' '\n \tcat <<-\\EOF >3-old &&\n \t33a\n@@ -195,6 +203,12 @@ test_expect_success 'rename threshold is truncated' '\n \tcheck_exact_renames\n '\n \n+test_expect_success 'disabled rename detection' '\n+\tgit read-tree --reset -u HEAD &&\n+\tgit merge-recursive --no-renames $tail &&\n+\tcheck_no_renames\n+'\n+\n test_expect_success 'last wins in --find-renames=<m> --find-renames=<n>' '\n \tgit read-tree --reset -u HEAD &&\n \ttest_must_fail git merge-recursive \\\n@@ -209,6 +223,18 @@ test_expect_success '--find-renames resets threshold' '\n \t$check_50\n '\n \n+test_expect_success 'last wins in --no-renames --find-renames' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --no-renames --find-renames $tail &&\n+\t$check_50\n+'\n+\n+test_expect_success 'last wins in --find-renames --no-renames' '\n+\tgit read-tree --reset -u HEAD &&\n+\tgit merge-recursive --find-renames --no-renames $tail &&\n+\tcheck_no_renames\n+'\n+\n test_expect_success 'assumption for further tests: trivial merge succeeds' '\n \tgit read-tree --reset -u HEAD &&\n \tgit merge-recursive HEAD -- HEAD HEAD &&\n@@ -218,6 +244,8 @@ test_expect_success 'assumption for further tests: trivial merge succeeds' '\n \tgit merge-recursive --find-renames=$th2 HEAD -- HEAD HEAD &&\n \tgit diff --quiet --cached &&\n \tgit merge-recursive --find-renames=100% HEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached &&\n+\tgit merge-recursive --no-renames HEAD -- HEAD HEAD &&\n \tgit diff --quiet --cached\n '\n \n-- \n2.7.1.492.gd821b20\n"},{"id":"279109","messageId":"1456278091-6564-4-git-send-email-felipegassis@gmail.com","threadId":"41493","inReplyTo":"1456278091-6564-1-git-send-email-felipegassis@gmail.com","subject":"[PATCH v3 3/3] t3034: test deprecated interface","fromName":"Felipe Gonçalves Assis","fromEmail":"felipeg.assis@gmail.com","sentAt":"2016-02-24T01:41:31Z","receivedAt":"2016-02-24T01:41:31Z","isPatch":true,"sender":{"key":"felipeg.assis@gmail.com","avatar":null},"body":"From: Felipe Gonçalves Assis <felipeg.assis@gmail.com>\n\n--find-renames= and --rename-threshold= should be aliases.\n\nSigned-off-by: Felipe Gonçalves Assis <felipegassis@gmail.com>\n---\n t/t3034-merge-recursive-rename-options.sh | 46 +++++++++++++++++++++++++++++++\n 1 file changed, 46 insertions(+)\n\ndiff --git a/t/t3034-merge-recursive-rename-options.sh b/t/t3034-merge-recursive-rename-options.sh\nindex 2479910..b9c4028 100755\n--- a/t/t3034-merge-recursive-rename-options.sh\n+++ b/t/t3034-merge-recursive-rename-options.sh\n@@ -263,4 +263,50 @@ test_expect_success '--find-renames rejects non-numbers' '\n \tgit diff --quiet --cached\n '\n \n+test_expect_success 'rename-threshold=<n> is a synonym for find-renames=<n>' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --rename-threshold=$th0 $tail &&\n+\tcheck_threshold_0\n+'\n+\n+test_expect_success 'last wins in --no-renames --rename-threshold=<n>' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --no-renames --rename-threshold=$th0 $tail &&\n+\tcheck_threshold_0\n+'\n+\n+test_expect_success 'last wins in --rename-threshold=<n> --no-renames' '\n+\tgit read-tree --reset -u HEAD &&\n+\tgit merge-recursive --rename-threshold=$th0 --no-renames $tail &&\n+\tcheck_no_renames\n+'\n+\n+test_expect_success '--rename-threshold=<n> rejects negative argument' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --rename-threshold=-25 \\\n+\t\tHEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached\n+'\n+\n+test_expect_success '--rename-threshold=<n> rejects non-numbers' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive --rename-threshold=0xf \\\n+\t\tHEAD -- HEAD HEAD &&\n+\tgit diff --quiet --cached\n+'\n+\n+test_expect_success 'last wins in --rename-threshold=<m> --find-renames=<n>' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive \\\n+\t\t--rename-threshold=$th0 --find-renames=$th2 $tail &&\n+\tcheck_threshold_2\n+'\n+\n+test_expect_success 'last wins in --find-renames=<m> --rename-threshold=<n>' '\n+\tgit read-tree --reset -u HEAD &&\n+\ttest_must_fail git merge-recursive \\\n+\t\t--find-renames=$th2 --rename-threshold=$th0 $tail &&\n+\tcheck_threshold_0\n+'\n+\n test_done\n-- \n2.7.1.492.gd821b20\n"},{"id":"279159","messageId":"CALMa68rbsfLK36cemQrybw5Pk3kqvqWLa7kPyCuqs65m49rkuw@mail.gmail.com","threadId":"41493","inReplyTo":"1456278091-6564-1-git-send-email-felipegassis@gmail.com","subject":"Re: [PATCH v3 0/3] Tests for merge-recursive rename-options","fromName":"Felipe Gonçalves Assis","fromEmail":"felipeg.assis@gmail.com","sentAt":"2016-02-24T13:42:26Z","receivedAt":"2016-02-24T13:42:26Z","isPatch":true,"sender":{"key":"felipeg.assis@gmail.com","avatar":null},"body":"On 23 February 2016 at 22:41, Felipe Gonçalves Assis\n<felipeg.assis@gmail.com> wrote:\n> Just a quick update incorporating Eric's latest comments.\n>\n> Still based on\n> c443d39 (merge-recursive: find-renames resets threshold, 2016-02-21).\n>\n\nOne thing I just noticed is that the description of c443d39 still has\na line saying \"Add corresponding test.\", even though it does not\ninclude any tests. Could you remove that?\n\nThanks,\nFelipe\n"},{"id":"279163","messageId":"xmqqpovmt0ln.fsf@gitster.mtv.corp.google.com","threadId":"41493","inReplyTo":"CALMa68rbsfLK36cemQrybw5Pk3kqvqWLa7kPyCuqs65m49rkuw@mail.gmail.com","subject":"Re: [PATCH v3 0/3] Tests for merge-recursive rename-options","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-02-24T18:38:44Z","receivedAt":"2016-02-24T18:38:44Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Felipe Gonçalves Assis <felipeg.assis@gmail.com> writes:\n\n> On 23 February 2016 at 22:41, Felipe Gonçalves Assis\n> <felipeg.assis@gmail.com> wrote:\n>> Just a quick update incorporating Eric's latest comments.\n>>\n>> Still based on\n>> c443d39 (merge-recursive: find-renames resets threshold, 2016-02-21).\n>>\n>\n> One thing I just noticed is that the description of c443d39 still has\n> a line saying \"Add corresponding test.\", even though it does not\n> include any tests. Could you remove that?\n\nThanks for sharp eyes.\n"}]}