(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ 
                (Token
                  id: Id.Lit_Chars
                  val: 'push to a repository that borrows from elsewhere'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token id:Id.Lit_Chars val:'\tmkdir alice-pub &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\t(\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\t\tcd alice-pub &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\t\tGIT_DIR=. git init\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tmkdir alice-work &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:27) (Token id:Id.Lit_Chars val:'\t\tcd alice-work &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\t\t>file &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\t\tgit add . &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\t\tgit commit -m initial &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\t\tgit push ../alice-pub master\n' span_id:33) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\n' span_id:35) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Project Bob is a fork of project Alice\n'
            span_id: 36
          ) (Token id:Id.Lit_Chars val:'\tmkdir bob-pub &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:38) (Token id:Id.Lit_Chars val:'\t\tcd bob-pub &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\t\tGIT_DIR=. git init &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\t\tmkdir -p objects/info &&\n' span_id:41) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo ../../alice-pub/objects >objects/info/alternates\n'
            span_id: 42
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tgit clone alice-pub bob-work &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\t(\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\t\tcd bob-work &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\t\tgit push ../bob-pub master\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:48)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'alice works and pushes' span_id:55))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) (Token id:Id.Lit_Chars val:'\t(\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\t\tcd alice-work &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\t\techo more >file &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m second &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\t\tgit push ../alice-pub :\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:65)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bob fetches from alice, works and pushes' span_id:72))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:76) (Token id:Id.Lit_Chars val:'\t(\n' span_id:77) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Bob acquires what Alice did in his work tree first.\n'
            span_id: 78
          ) (Token id:Id.Lit_Chars val:'\t\t# Even though these objects are not directly in\n' span_id:79) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# the public repository of Bob, this push does not\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\t\t# need to send the commit Bob received from Alice\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# to his public repository, as all the object Alice\n'
            span_id: 82
          ) (Token id:Id.Lit_Chars val:'\t\t# has at her public repository are available to it\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t\t# via its alternates.\n' span_id:84) (Token id:Id.Lit_Chars val:'\t\tcd bob-work &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull ../alice-pub master &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\t\techo more bob >file &&\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m third &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\t\tgit push ../bob-pub :\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\n' span_id:91) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Check that the second commit by Alice is not sent\n'
            span_id: 92
          ) (Token id:Id.Lit_Chars val:'\t# to ../bob-pub\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:94) (Token id:Id.Lit_Chars val:'\t\tcd bob-pub &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\t\tsecond=$(git rev-parse HEAD^) &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\t\trm -f objects/info/alternates &&\n' span_id:97) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git cat-file -t $second &&\n'
            span_id: 98
          ) (Token id:Id.Lit_Chars val:'\t\techo ../../alice-pub/objects >objects/info/alternates\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:100)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clean-up in case the previous failed' span_id:107))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:112) (Token id:Id.Lit_Chars val:'\t\tcd bob-pub &&\n' span_id:113) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo ../../alice-pub/objects >objects/info/alternates\n'
            span_id: 114
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:115)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'alice works and pushes again' span_id:122))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:127) (Token id:Id.Lit_Chars val:'\t\t# Alice does not care what Bob does.  She does not\n' span_id:128) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# even have to be aware of his existence.  She just\n'
            span_id: 129
          ) (Token id:Id.Lit_Chars val:'\t\t# keeps working and pushing\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\t\tcd alice-work &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\t\techo more alice >file &&\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m fourth &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\t\tgit push ../alice-pub :\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:135)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bob works and pushes' span_id:142))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:147) (Token id:Id.Lit_Chars val:'\t\t# This time Bob does not pull from Alice, and\n' span_id:148) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# the master branch at her public repository points\n'
            span_id: 149
          ) (Token id:Id.Lit_Chars val:'\t\t# at a commit Bob does not know about.  This should\n' span_id:150) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# not prevent the push by Bob from succeeding.\n'
            span_id: 151
          ) (Token id:Id.Lit_Chars val:'\t\tcd bob-work &&\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\t\techo yet more bob >file &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m fifth &&\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\t\tgit push ../bob-pub :\n' span_id:155) (Token id:Id.Lit_Chars val:'\t)\n' span_id:156)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'alice works and pushes yet again' span_id:163))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\t# Alice does not care what Bob does.  She does not\n' span_id:169) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# even have to be aware of his existence.  She just\n'
            span_id: 170
          ) (Token id:Id.Lit_Chars val:'\t\t# keeps working and pushing\n' span_id:171) 
          (Token id:Id.Lit_Chars val:'\t\tcd alice-work &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\t\techo more and more alice >file &&\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m sixth.1 &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\t\techo more and more alice >>file &&\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m sixth.2 &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\t\techo more and more alice >>file &&\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m sixth.3 &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\t\tgit push ../alice-pub :\n' span_id:179) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:180)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bob works and pushes again' span_id:187))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:192) (Token id:Id.Lit_Chars val:'\t\tcd alice-pub &&\n' span_id:193) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit cat-file commit master >../bob-work/commit\n'
            span_id: 194
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\t(\n' span_id:196) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# This time Bob does not pull from Alice, and\n'
            span_id: 197
          ) (Token id:Id.Lit_Chars val:'\t\t# the master branch at her public repository points\n' span_id:198) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# at a commit Bob does not fully know about, but\n'
            span_id: 199
          ) (Token id:Id.Lit_Chars val:'\t\t# he happens to have the commit object (but not the\n' span_id:200) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# necessary tree) in his repository from Alice.\n'
            span_id: 201
          ) (Token id:Id.Lit_Chars val:'\t\t# This should not prevent the push by Bob from\n' span_id:202) 
          (Token id:Id.Lit_Chars val:'\t\t# succeeding.\n' span_id:203) (Token id:Id.Lit_Chars val:'\t\tcd bob-work &&\n' span_id:204) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit hash-object -t commit -w commit &&\n'
            span_id: 205
          ) (Token id:Id.Lit_Chars val:'\t\techo even more bob >file &&\n' span_id:206) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m seventh &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\t\tgit push ../bob-pub :\n' span_id:208) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:209)
        )
      }
    )
    (C {(test_done)})
  ]
)