(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"compare & swap push force/delete safety">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: setup_srcdst_basic
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(rm)} {(-fr)} {(src)} {(dst)})
                (AndOr
                  children: [
                    (C {(git)} {(clone)} {(--no-local)} {(.)} {(src)})
                    (AndOr
                      children: [
                        (C {(git)} {(clone)} {(--no-local)} {(src)} {(dst)})
                        (Subshell
                          child: 
                            (AndOr
                              children: [
                                (C {(cd)} {(src)})
                                (C {(git)} {(checkout)} {(HEAD) (Lit_Other "^") (0)})
                              ]
                              op_id: Op_DAmp
                            )
                          spids: [60 78]
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [20]
        )
      spids: [15 19]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\t# create template repository\n"> <"\ttest_commit A &&\n"> 
          <"\ttest_commit B &&\n"> <"\ttest_commit C\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to update (protected)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\ttest_commit D &&\n"> 
          <"\t\ttest_must_fail git push --force-with-lease=master:master origin master 2>err &&\n"> <"\t\tgrep \"stale info\" err\n"> <"\t) &&\n"> <"\tgit ls-remote . refs/heads/master >expect &&\n"> 
          <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to update (protected, forced)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\ttest_commit D &&\n"> 
          <"\t\tgit push --force --force-with-lease=master:master origin master 2>err &&\n"> <"\t\tgrep \"forced update\" err\n"> <"\t) &&\n"> 
          <"\tgit ls-remote dst refs/heads/master >expect &&\n"> <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to update (protected, tracking)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd src &&\n"> 
          <"\t\tgit checkout master &&\n"> <"\t\ttest_commit D &&\n"> <"\t\tgit checkout HEAD^0\n"> <"\t) &&\n"> 
          <"\tgit ls-remote src refs/heads/master >expect &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\ttest_commit E &&\n"> 
          <"\t\tgit ls-remote . refs/remotes/origin/master >expect &&\n"> <"\t\ttest_must_fail git push --force-with-lease=master origin master &&\n"> 
          <"\t\tgit ls-remote . refs/remotes/origin/master >actual &&\n"> <"\t\ttest_cmp expect actual\n"> <"\t) &&\n"> <"\tgit ls-remote src refs/heads/master >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to update (protected, tracking, forced)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd src &&\n"> 
          <"\t\tgit checkout master &&\n"> <"\t\ttest_commit D &&\n"> <"\t\tgit checkout HEAD^0\n"> <"\t) &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\ttest_commit E &&\n"> <"\t\tgit ls-remote . refs/remotes/origin/master >expect &&\n"> 
          <"\t\tgit push --force --force-with-lease=master origin master\n"> <"\t) &&\n"> <"\tgit ls-remote dst refs/heads/master >expect &&\n"> 
          <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to update (allowed)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\ttest_commit D &&\n"> 
          <"\t\tgit push --force-with-lease=master:master^ origin master\n"> <"\t) &&\n"> <"\tgit ls-remote dst refs/heads/master >expect &&\n"> 
          <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to update (allowed, tracking)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\ttest_commit D &&\n"> 
          <"\t\tgit push --force-with-lease=master origin master 2>err &&\n"> <"\t\t! grep \"forced update\" err\n"> <"\t) &&\n"> 
          <"\tgit ls-remote dst refs/heads/master >expect &&\n"> <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to update (allowed even though no-ff)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\tgit reset --hard HEAD^ &&\n"> <"\t\ttest_commit D &&\n"> <"\t\tgit push --force-with-lease=master origin master 2>err &&\n"> 
          <"\t\tgrep \"forced update\" err\n"> <"\t) &&\n"> <"\tgit ls-remote dst refs/heads/master >expect &&\n"> 
          <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to delete (protected)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\tgit ls-remote src refs/heads/master >expect &&\n"> 
          <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\ttest_must_fail git push --force-with-lease=master:master^ origin :master\n"> 
          <"\t) &&\n"> <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to delete (protected, forced)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\tgit push --force --force-with-lease=master:master^ origin :master\n"> <"\t) &&\n"> <"\t>expect &&\n"> <"\tgit ls-remote src refs/heads/master >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"push to delete (allowed)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\tgit push --force-with-lease=master origin :master 2>err &&\n"> <"\t\tgrep deleted err\n"> <"\t) &&\n"> <"\t>expect &&\n"> 
          <"\tgit ls-remote src refs/heads/master >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cover everything with default force-with-lease (protected)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd src &&\n"> 
          <"\t\tgit branch naster master^\n"> <"\t) &&\n"> <"\tgit ls-remote src refs/heads/\\* >expect &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\ttest_must_fail git push --force-with-lease origin master master:naster\n"> <"\t) &&\n"> <"\tgit ls-remote src refs/heads/\\* >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"cover everything with default force-with-lease (allowed)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd src &&\n"> 
          <"\t\tgit branch naster master^\n"> <"\t) &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\tgit fetch &&\n"> 
          <"\t\tgit push --force-with-lease origin master master:naster\n"> <"\t) &&\n"> <"\tgit ls-remote dst refs/heads/master |\n"> 
          <"\tsed -e \"s/master/naster/\" >expect &&\n"> <"\tgit ls-remote src refs/heads/naster >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"new branch covered by force-with-lease">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\tgit branch branch master &&\n"> <"\t\tgit push --force-with-lease=branch origin branch\n"> <"\t) &&\n"> 
          <"\tgit ls-remote dst refs/heads/branch >expect &&\n"> <"\tgit ls-remote src refs/heads/branch >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"new branch covered by force-with-lease (explicit)">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> 
          <"\t\tgit branch branch master &&\n"> <"\t\tgit push --force-with-lease=branch: origin branch\n"> <"\t) &&\n"> 
          <"\tgit ls-remote dst refs/heads/branch >expect &&\n"> <"\tgit ls-remote src refs/heads/branch >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"new branch already exists">)} 
      {
        (SQ <"\n"> <"\tsetup_srcdst_basic &&\n"> <"\t(\n"> <"\t\tcd src &&\n"> 
          <"\t\tgit checkout -b branch master &&\n"> <"\t\ttest_commit F\n"> <"\t) &&\n"> <"\t(\n"> <"\t\tcd dst &&\n"> <"\t\tgit branch branch master &&\n"> 
          <"\t\ttest_must_fail git push --force-with-lease=branch: origin branch\n"> <"\t)\n">
        )
      }
    )
    (C {(test_done)})
  ]
)