#!/bin/sh global test_description := ''typechange rename detection'' source ./test-lib.sh test_expect_success setup ' rm -f foo bar && cat "$TEST_DIRECTORY"/../COPYING >foo && test_ln_s_add linklink bar && git add foo && git commit -a -m Initial && git tag one && git rm -f foo bar && cat "$TEST_DIRECTORY"/../COPYING >bar && test_ln_s_add linklink foo && git add bar && git commit -a -m Second && git tag two && git rm -f foo bar && cat "$TEST_DIRECTORY"/../COPYING >foo && git add foo && git commit -a -m Third && git tag three && mv foo bar && test_ln_s_add linklink foo && git add bar && git commit -a -m Fourth && git tag four && # This is purely for sanity check git rm -f foo bar && cat "$TEST_DIRECTORY"/../COPYING >foo && cat "$TEST_DIRECTORY"/../Makefile >bar && git add foo bar && git commit -a -m Fifth && git tag five && git rm -f foo bar && cat "$TEST_DIRECTORY"/../Makefile >foo && cat "$TEST_DIRECTORY"/../COPYING >bar && git add foo bar && git commit -a -m Sixth && git tag six ' test_expect_success 'cross renames to be detected for regular files' ' git diff-tree five six -r --name-status -B -M | sort >actual && { echo "R100 foo bar" echo "R100 bar foo" } | sort >expect && test_cmp expect actual ' test_expect_success 'cross renames to be detected for typechange' ' git diff-tree one two -r --name-status -B -M | sort >actual && { echo "R100 foo bar" echo "R100 bar foo" } | sort >expect && test_cmp expect actual ' test_expect_success 'moves and renames' ' git diff-tree three four -r --name-status -B -M | sort >actual && { # see -B -M (#6) in t4008 echo "C100 foo bar" echo "T100 foo" } | sort >expect && test_cmp expect actual ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"typechange rename detection">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\n"> <"\trm -f foo bar &&\n"> <"\tcat \"$TEST_DIRECTORY\"/../COPYING >foo &&\n"> <"\ttest_ln_s_add linklink bar &&\n"> <"\tgit add foo &&\n"> <"\tgit commit -a -m Initial &&\n"> <"\tgit tag one &&\n"> <"\n"> <"\tgit rm -f foo bar &&\n"> <"\tcat \"$TEST_DIRECTORY\"/../COPYING >bar &&\n"> <"\ttest_ln_s_add linklink foo &&\n"> <"\tgit add bar &&\n"> <"\tgit commit -a -m Second &&\n"> <"\tgit tag two &&\n"> <"\n"> <"\tgit rm -f foo bar &&\n"> <"\tcat \"$TEST_DIRECTORY\"/../COPYING >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit -a -m Third &&\n"> <"\tgit tag three &&\n"> <"\n"> <"\tmv foo bar &&\n"> <"\ttest_ln_s_add linklink foo &&\n"> <"\tgit add bar &&\n"> <"\tgit commit -a -m Fourth &&\n"> <"\tgit tag four &&\n"> <"\n"> <"\t# This is purely for sanity check\n"> <"\n"> <"\tgit rm -f foo bar &&\n"> <"\tcat \"$TEST_DIRECTORY\"/../COPYING >foo &&\n"> <"\tcat \"$TEST_DIRECTORY\"/../Makefile >bar &&\n"> <"\tgit add foo bar &&\n"> <"\tgit commit -a -m Fifth &&\n"> <"\tgit tag five &&\n"> <"\n"> <"\tgit rm -f foo bar &&\n"> <"\tcat \"$TEST_DIRECTORY\"/../Makefile >foo &&\n"> <"\tcat \"$TEST_DIRECTORY\"/../COPYING >bar &&\n"> <"\tgit add foo bar &&\n"> <"\tgit commit -a -m Sixth &&\n"> <"\tgit tag six\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"cross renames to be detected for regular files">)} { (SQ <"\n"> <"\n"> <"\tgit diff-tree five six -r --name-status -B -M | sort >actual &&\n"> <"\t{\n"> <"\t\techo \"R100\tfoo\tbar\"\n"> <"\t\techo \"R100\tbar\tfoo\"\n"> <"\t} | sort >expect &&\n"> <"\ttest_cmp expect actual\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"cross renames to be detected for typechange">)} { (SQ <"\n"> <"\n"> <"\tgit diff-tree one two -r --name-status -B -M | sort >actual &&\n"> <"\t{\n"> <"\t\techo \"R100\tfoo\tbar\"\n"> <"\t\techo \"R100\tbar\tfoo\"\n"> <"\t} | sort >expect &&\n"> <"\ttest_cmp expect actual\n"> <"\n"> ) } ) (C {(test_expect_success)} {(SQ <"moves and renames">)} { (SQ <"\n"> <"\n"> <"\tgit diff-tree three four -r --name-status -B -M | sort >actual &&\n"> <"\t{\n"> <"\t\t# see -B -M (#6) in t4008\n"> <"\t\techo \"C100\tfoo\tbar\"\n"> <"\t\techo \"T100\tfoo\"\n"> <"\t} | sort >expect &&\n"> <"\ttest_cmp expect actual\n"> <"\n"> ) } ) (C {(test_done)}) ] )