(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <'Break and then rename\n'> <'\n'> 
                <'We have two very different files, file0 and file1, registered in a tree.\n'> <'\n'> <'We update file1 so drastically that it is more similar to file0, and\n'> 
                <'then remove file0.  With -B, changes to file1 should be broken into\n'> <'separate delete and create, resulting in removal of file0, removal of\n'> 
                <'original file1 and creation of completely rewritten file1.  The latter\n'> <'two are then merged back into a single "complete rewrite".\n'> <'\n'> 
                <'Further, with -B and -M together, these three modifications should\n'> <'turn into rename-edit of file0 into file1.\n'> <'\n'> 
                <'Starting from the same two files in the tree, we swap file0 and file1.\n'> <'With -B, this should be detected as two complete rewrites.\n'> <'\n'> 
                <'Further, with -B and -M together, these should turn into two renames.\n'>
              )
            }
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (Sentence
      child: (C {(.)} {(DQ ($ VSub_Name '$TEST_DIRECTORY')) (/diff-lib.sh)})
      terminator: <Op_Semi ';'>
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <'\n'> <'\tcat "$TEST_DIRECTORY"/diff-lib/README >file0 &&\n'> 
          <'\tcat "$TEST_DIRECTORY"/diff-lib/COPYING >file1 &&\n'> <'\tgit update-index --add file0 file1 &&\n'> <'\tgit tag reference $(git write-tree)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'change file1 with copy-edit of file0 and remove file0'>)} 
      {
        (SQ <'\n'> <'\tsed -e "s/git/GIT/" file0 >file1 &&\n'> <'\trm -f file0 &&\n'> 
          <'\tgit update-index --remove file0 file1\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B (#1)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B --cached reference >current &&\n'> 
          <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 000000 548142c327a6790ff8821d67c2ee1eff7a656b52 0000000000000000000000000000000000000000 D\tfile0\n'
          > 
          <
'\t:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 2fbedd0b5d4b8126e4750c3bee305e8ff79f80ec M100\tfile1\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B and -M (#2)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B -M reference >current &&\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 100644 548142c327a6790ff8821d67c2ee1eff7a656b52 2fbedd0b5d4b8126e4750c3bee305e8ff79f80ec R100\tfile0\tfile1\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'swap file0 and file1'>)} 
      {
        (SQ <'\n'> <'\trm -f file0 file1 &&\n'> <'\tgit read-tree -m reference &&\n'> 
          <'\tgit checkout-index -f -u -a &&\n'> <'\tmv file0 tmp &&\n'> <'\tmv file1 file0 &&\n'> <'\tmv tmp file1 &&\n'> 
          <'\tgit update-index file0 file1\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B (#3)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B reference >current &&\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 100644 548142c327a6790ff8821d67c2ee1eff7a656b52 6ff87c4664981e4397625791c8ea3bbb5f2279a3 M100\tfile0\n'
          > 
          <
'\t:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 548142c327a6790ff8821d67c2ee1eff7a656b52 M100\tfile1\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B and -M (#4)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B -M reference >current &&\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 6ff87c4664981e4397625791c8ea3bbb5f2279a3 R100\tfile1\tfile0\n'
          > 
          <
'\t:100644 100644 548142c327a6790ff8821d67c2ee1eff7a656b52 548142c327a6790ff8821d67c2ee1eff7a656b52 R100\tfile0\tfile1\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'make file0 into something completely different'>)} 
      {
        (SQ <'\n'> <'\trm -f file0 &&\n'> <'\ttest_ln_s_add frotz file0 &&\n'> 
          <'\tgit update-index file1\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B (#5)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B reference >current &&\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 120000 548142c327a6790ff8821d67c2ee1eff7a656b52 67be421f88824578857624f7b3dc75e99a8a1481 T\tfile0\n'
          > 
          <
'\t:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 548142c327a6790ff8821d67c2ee1eff7a656b52 M100\tfile1\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B -M (#6)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B -M reference >current &&\n'> <'\n'> 
          <'\t# file0 changed from regular to symlink.  file1 is the same as the preimage\n'> <'\t# of file0.  Because the change does not make file0 disappear, file1 is\n'> 
          <'\t# denoted as a copy of file0\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 120000 548142c327a6790ff8821d67c2ee1eff7a656b52 67be421f88824578857624f7b3dc75e99a8a1481 T\tfile0\n'
          > 
          <
'\t:100644 100644 548142c327a6790ff8821d67c2ee1eff7a656b52 548142c327a6790ff8821d67c2ee1eff7a656b52 C\tfile0\tfile1\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -M (#7)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -M reference >current &&\n'> <'\n'> 
          <'\t# This should not mistake file0 as the copy source of new file1\n'> <'\t# due to type differences.\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 120000 548142c327a6790ff8821d67c2ee1eff7a656b52 67be421f88824578857624f7b3dc75e99a8a1481 T\tfile0\n'
          > 
          <
'\t:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 548142c327a6790ff8821d67c2ee1eff7a656b52 M\tfile1\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'file1 edited to look like file0 and file0 rename-edited to file2'>)} 
      {
        (SQ <'\n'> <'\trm -f file0 file1 &&\n'> <'\tgit read-tree -m reference &&\n'> 
          <'\tgit checkout-index -f -u -a &&\n'> <'\tsed -e "s/git/GIT/" file0 >file1 &&\n'> <'\tsed -e "s/git/GET/" file0 >file2 &&\n'> 
          <'\trm -f file0 &&\n'> <'\tgit update-index --add --remove file0 file1 file2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B (#8)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B reference >current &&\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 000000 548142c327a6790ff8821d67c2ee1eff7a656b52 0000000000000000000000000000000000000000 D\tfile0\n'
          > 
          <
'\t:100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 2fbedd0b5d4b8126e4750c3bee305e8ff79f80ec M100\tfile1\n'
          > 
          <
'\t:000000 100644 0000000000000000000000000000000000000000 69a939f651686f56322566e2fd76715947a24162 A\tfile2\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'run diff with -B -C (#9)'>)} 
      {
        (SQ <'\n'> <'\tgit diff-index -B -C reference >current &&\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <
'\t:100644 100644 548142c327a6790ff8821d67c2ee1eff7a656b52 2fbedd0b5d4b8126e4750c3bee305e8ff79f80ec C095\tfile0\tfile1\n'
          > 
          <
'\t:100644 100644 548142c327a6790ff8821d67c2ee1eff7a656b52 69a939f651686f56322566e2fd76715947a24162 R095\tfile0\tfile2\n'
          > <'\tEOF\n'> <'\tcompare_diff_raw expect current\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)