Merge branch 'ks/branch-set-upstream'
authorJunio C Hamano <gitster@pobox.com>
Mon, 18 Jun 2018 18:23:23 +0000 (11:23 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 18 Jun 2018 18:23:23 +0000 (11:23 -0700)
A test title has been reworded to clarify it.

* ks/branch-set-upstream:
t3200: clarify description of --set-upstream test

1  2 
t/t3200-branch.sh
diff --combined t/t3200-branch.sh
index 69ea8202f437a47b1c52b60f4a2afacd3d5a4f21,18708ca301c6281d645b64fdd6acc78d504e6e28..08467982f61fd81f0614711b52b9806f2497f3eb
@@@ -6,7 -6,6 +6,7 @@@
  test_description='git branch assorted tests'
  
  . ./test-lib.sh
 +. "$TEST_DIRECTORY"/lib-rebase.sh
  
  test_expect_success 'prepare a trivial repository' '
        echo Hello >A &&
@@@ -47,7 -46,7 +47,7 @@@ test_expect_success 'git branch HEAD sh
  '
  
  cat >expect <<EOF
 -$_z40 $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000       branch: Created from master
 +$ZERO_OID $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000   branch: Created from master
  EOF
  test_expect_success 'git branch -l d/e/f should create a branch and a log' '
        GIT_COMMITTER_DATE="2005-05-26 23:30" \
@@@ -118,16 -117,6 +118,16 @@@ test_expect_success 'git branch -m bbb 
        test_cmp expect actual
  '
  
 +test_expect_success 'renaming checked out branch works with d/f conflict' '
 +      test_when_finished "git branch -D foo/bar || git branch -D foo" &&
 +      test_when_finished git checkout master &&
 +      git checkout -b foo &&
 +      git branch -m foo/bar &&
 +      git symbolic-ref HEAD >actual &&
 +      echo refs/heads/foo/bar >expect &&
 +      test_cmp expect actual
 +'
 +
  test_expect_success 'git branch -m o/o o should fail when o/p exists' '
        git branch o/o &&
        git branch o/p &&
@@@ -173,19 -162,6 +173,19 @@@ test_expect_success 'git branch -M baz 
        grep "^0\{40\}.*$msg$" .git/logs/HEAD
  '
  
 +test_expect_success 'git branch -M should leave orphaned HEAD alone' '
 +      git init orphan &&
 +      (
 +              cd orphan &&
 +              test_commit initial &&
 +              git checkout --orphan lonely &&
 +              grep lonely .git/HEAD &&
 +              test_path_is_missing .git/refs/head/lonely &&
 +              git branch -M master mistress &&
 +              grep lonely .git/HEAD
 +      )
 +'
 +
  test_expect_success 'resulting reflog can be shown by log -g' '
        oid=$(git rev-parse HEAD) &&
        cat >expect <<-EOF &&
@@@ -234,34 -210,34 +234,34 @@@ test_expect_success 'git branch -M mast
  
  test_expect_success 'git branch -v -d t should work' '
        git branch t &&
 -      test_path_is_file .git/refs/heads/t &&
 +      git rev-parse --verify refs/heads/t &&
        git branch -v -d t &&
 -      test_path_is_missing .git/refs/heads/t
 +      test_must_fail git rev-parse --verify refs/heads/t
  '
  
  test_expect_success 'git branch -v -m t s should work' '
        git branch t &&
 -      test_path_is_file .git/refs/heads/t &&
 +      git rev-parse --verify refs/heads/t &&
        git branch -v -m t s &&
 -      test_path_is_missing .git/refs/heads/t &&
 -      test_path_is_file .git/refs/heads/s &&
 +      test_must_fail git rev-parse --verify refs/heads/t &&
 +      git rev-parse --verify refs/heads/s &&
        git branch -d s
  '
  
  test_expect_success 'git branch -m -d t s should fail' '
        git branch t &&
 -      test_path_is_file .git/refs/heads/t &&
 +      git rev-parse refs/heads/t &&
        test_must_fail git branch -m -d t s &&
        git branch -d t &&
 -      test_path_is_missing .git/refs/heads/t
 +      test_must_fail git rev-parse refs/heads/t
  '
  
  test_expect_success 'git branch --list -d t should fail' '
        git branch t &&
 -      test_path_is_file .git/refs/heads/t &&
 +      git rev-parse refs/heads/t &&
        test_must_fail git branch --list -d t &&
        git branch -d t &&
 -      test_path_is_missing .git/refs/heads/t
 +      test_must_fail git rev-parse refs/heads/t
  '
  
  test_expect_success 'git branch --list -v with --abbrev' '
@@@ -392,262 -368,6 +392,262 @@@ test_expect_success 'config informatio
        test_must_fail git config branch.s/s.dummy
  '
  
 +test_expect_success 'git branch -m correctly renames multiple config sections' '
 +      test_when_finished "git checkout master" &&
 +      git checkout -b source master &&
 +
 +      # Assert that a config file with multiple config sections has
 +      # those sections preserved...
 +      cat >expect <<-\EOF &&
 +      branch.dest.key1=value1
 +      some.gar.b=age
 +      branch.dest.key2=value2
 +      EOF
 +      cat >config.branch <<\EOF &&
 +;; Note the lack of -\EOF above & mixed indenting here. This is
 +;; intentional, we are also testing that the formatting of copied
 +;; sections is preserved.
 +
 +;; Comment for source. Tabs
 +[branch "source"]
 +      ;; Comment for the source value
 +      key1 = value1
 +;; Comment for some.gar. Spaces
 +[some "gar"]
 +    ;; Comment for the some.gar value
 +    b = age
 +;; Comment for source, again. Mixed tabs/spaces.
 +[branch "source"]
 +    ;; Comment for the source value, again
 +      key2 = value2
 +EOF
 +      cat config.branch >>.git/config &&
 +      git branch -m source dest &&
 +      git config -f .git/config -l | grep -F -e source -e dest -e some.gar >actual &&
 +      test_cmp expect actual &&
 +
 +      # ...and that the comments for those sections are also
 +      # preserved.
 +      cat config.branch | sed "s/\"source\"/\"dest\"/" >expect &&
 +      sed -n -e "/Note the lack/,\$p" .git/config >actual &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'git branch -c dumps usage' '
 +      test_expect_code 128 git branch -c 2>err &&
 +      test_i18ngrep "branch name required" err
 +'
 +
 +test_expect_success 'git branch --copy dumps usage' '
 +      test_expect_code 128 git branch --copy 2>err &&
 +      test_i18ngrep "branch name required" err
 +'
 +
 +test_expect_success 'git branch -c d e should work' '
 +      git branch -l d &&
 +      git reflog exists refs/heads/d &&
 +      git config branch.d.dummy Hello &&
 +      git branch -c d e &&
 +      git reflog exists refs/heads/d &&
 +      git reflog exists refs/heads/e &&
 +      echo Hello >expect &&
 +      git config branch.e.dummy >actual &&
 +      test_cmp expect actual &&
 +      echo Hello >expect &&
 +      git config branch.d.dummy >actual &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'git branch --copy is a synonym for -c' '
 +      git branch -l copy &&
 +      git reflog exists refs/heads/copy &&
 +      git config branch.copy.dummy Hello &&
 +      git branch --copy copy copy-to &&
 +      git reflog exists refs/heads/copy &&
 +      git reflog exists refs/heads/copy-to &&
 +      echo Hello >expect &&
 +      git config branch.copy.dummy >actual &&
 +      test_cmp expect actual &&
 +      echo Hello >expect &&
 +      git config branch.copy-to.dummy >actual &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'git branch -c ee ef should copy ee to create branch ef' '
 +      git checkout -b ee &&
 +      git reflog exists refs/heads/ee &&
 +      git config branch.ee.dummy Hello &&
 +      git branch -c ee ef &&
 +      git reflog exists refs/heads/ee &&
 +      git reflog exists refs/heads/ef &&
 +      test $(git config branch.ee.dummy) = Hello &&
 +      test $(git config branch.ef.dummy) = Hello &&
 +      test $(git rev-parse --abbrev-ref HEAD) = ee
 +'
 +
 +test_expect_success 'git branch -c f/f g/g should work' '
 +      git branch -l f/f &&
 +      git reflog exists refs/heads/f/f &&
 +      git config branch.f/f.dummy Hello &&
 +      git branch -c f/f g/g &&
 +      git reflog exists refs/heads/f/f &&
 +      git reflog exists refs/heads/g/g &&
 +      test $(git config branch.f/f.dummy) = Hello &&
 +      test $(git config branch.g/g.dummy) = Hello
 +'
 +
 +test_expect_success 'git branch -c m2 m2 should work' '
 +      git branch -l m2 &&
 +      git reflog exists refs/heads/m2 &&
 +      git config branch.m2.dummy Hello &&
 +      git branch -c m2 m2 &&
 +      git reflog exists refs/heads/m2 &&
 +      test $(git config branch.m2.dummy) = Hello
 +'
 +
 +test_expect_success 'git branch -c zz zz/zz should fail' '
 +      git branch -l zz &&
 +      git reflog exists refs/heads/zz &&
 +      test_must_fail git branch -c zz zz/zz
 +'
 +
 +test_expect_success 'git branch -c b/b b should fail' '
 +      git branch -l b/b &&
 +      test_must_fail git branch -c b/b b
 +'
 +
 +test_expect_success 'git branch -C o/q o/p should work when o/p exists' '
 +      git branch -l o/q &&
 +      git reflog exists refs/heads/o/q &&
 +      git reflog exists refs/heads/o/p &&
 +      git branch -C o/q o/p
 +'
 +
 +test_expect_success 'git branch -c -f o/q o/p should work when o/p exists' '
 +      git reflog exists refs/heads/o/q &&
 +      git reflog exists refs/heads/o/p &&
 +      git branch -c -f o/q o/p
 +'
 +
 +test_expect_success 'git branch -c qq rr/qq should fail when rr exists' '
 +      git branch qq &&
 +      git branch rr &&
 +      test_must_fail git branch -c qq rr/qq
 +'
 +
 +test_expect_success 'git branch -C b1 b2 should fail when b2 is checked out' '
 +      git branch b1 &&
 +      git checkout -b b2 &&
 +      test_must_fail git branch -C b1 b2
 +'
 +
 +test_expect_success 'git branch -C c1 c2 should succeed when c1 is checked out' '
 +      git checkout -b c1 &&
 +      git branch c2 &&
 +      git branch -C c1 c2 &&
 +      test $(git rev-parse --abbrev-ref HEAD) = c1
 +'
 +
 +test_expect_success 'git branch -C c1 c2 should never touch HEAD' '
 +      msg="Branch: copied refs/heads/c1 to refs/heads/c2" &&
 +      ! grep "$msg$" .git/logs/HEAD
 +'
 +
 +test_expect_success 'git branch -C master should work when master is checked out' '
 +      git checkout master &&
 +      git branch -C master
 +'
 +
 +test_expect_success 'git branch -C master master should work when master is checked out' '
 +      git checkout master &&
 +      git branch -C master master
 +'
 +
 +test_expect_success 'git branch -C master5 master5 should work when master is checked out' '
 +      git checkout master &&
 +      git branch master5 &&
 +      git branch -C master5 master5
 +'
 +
 +test_expect_success 'git branch -C ab cd should overwrite existing config for cd' '
 +      git branch -l cd &&
 +      git reflog exists refs/heads/cd &&
 +      git config branch.cd.dummy CD &&
 +      git branch -l ab &&
 +      git reflog exists refs/heads/ab &&
 +      git config branch.ab.dummy AB &&
 +      git branch -C ab cd &&
 +      git reflog exists refs/heads/ab &&
 +      git reflog exists refs/heads/cd &&
 +      test $(git config branch.ab.dummy) = AB &&
 +      test $(git config branch.cd.dummy) = AB
 +'
 +
 +test_expect_success 'git branch -c correctly copies multiple config sections' '
 +      FOO=1 &&
 +      export FOO &&
 +      test_when_finished "git checkout master" &&
 +      git checkout -b source2 master &&
 +
 +      # Assert that a config file with multiple config sections has
 +      # those sections preserved...
 +      cat >expect <<-\EOF &&
 +      branch.source2.key1=value1
 +      branch.dest2.key1=value1
 +      more.gar.b=age
 +      branch.source2.key2=value2
 +      branch.dest2.key2=value2
 +      EOF
 +      cat >config.branch <<\EOF &&
 +;; Note the lack of -\EOF above & mixed indenting here. This is
 +;; intentional, we are also testing that the formatting of copied
 +;; sections is preserved.
 +
 +;; Comment for source2. Tabs
 +[branch "source2"]
 +      ;; Comment for the source2 value
 +      key1 = value1
 +;; Comment for more.gar. Spaces
 +[more "gar"]
 +    ;; Comment for the more.gar value
 +    b = age
 +;; Comment for source2, again. Mixed tabs/spaces.
 +[branch "source2"]
 +    ;; Comment for the source2 value, again
 +      key2 = value2
 +EOF
 +      cat config.branch >>.git/config &&
 +      git branch -c source2 dest2 &&
 +      git config -f .git/config -l | grep -F -e source2 -e dest2 -e more.gar >actual &&
 +      test_cmp expect actual &&
 +
 +      # ...and that the comments and formatting for those sections
 +      # is also preserved.
 +      cat >expect <<\EOF &&
 +;; Comment for source2. Tabs
 +[branch "source2"]
 +      ;; Comment for the source2 value
 +      key1 = value1
 +;; Comment for more.gar. Spaces
 +[branch "dest2"]
 +      ;; Comment for the source2 value
 +      key1 = value1
 +;; Comment for more.gar. Spaces
 +[more "gar"]
 +    ;; Comment for the more.gar value
 +    b = age
 +;; Comment for source2, again. Mixed tabs/spaces.
 +[branch "source2"]
 +    ;; Comment for the source2 value, again
 +      key2 = value2
 +[branch "dest2"]
 +    ;; Comment for the source2 value, again
 +      key2 = value2
 +EOF
 +      sed -n -e "/Comment for source2/,\$p" .git/config >actual &&
 +      test_cmp expect actual
 +'
 +
  test_expect_success 'deleting a symref' '
        git branch target &&
        git symbolic-ref refs/heads/symref refs/heads/target &&
@@@ -885,7 -605,7 +885,7 @@@ test_expect_success 'test --unset-upstr
        test_must_fail git config branch.my14.merge
  '
  
- test_expect_success '--set-upstream fails' '
+ test_expect_success 'disabled option --set-upstream fails' '
      test_must_fail git branch --set-upstream origin/master
  '
  
@@@ -901,7 -621,7 +901,7 @@@ test_expect_success '--set-upstream-to 
  
  # Keep this test last, as it changes the current branch
  cat >expect <<EOF
 -$_z40 $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000       branch: Created from master
 +$ZERO_OID $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000   branch: Created from master
  EOF
  test_expect_success 'git checkout -b g/h/i -l should create a branch and a log' '
        GIT_COMMITTER_DATE="2005-05-26 23:30" \
@@@ -1247,29 -967,6 +1247,29 @@@ test_expect_success '--merged is incomp
        test_must_fail git branch --merged HEAD --no-merged HEAD
  '
  
 +test_expect_success '--list during rebase' '
 +      test_when_finished "reset_rebase" &&
 +      git checkout master &&
 +      FAKE_LINES="1 edit 2" &&
 +      export FAKE_LINES &&
 +      set_fake_editor &&
 +      git rebase -i HEAD~2 &&
 +      git branch --list >actual &&
 +      test_i18ngrep "rebasing master" actual
 +'
 +
 +test_expect_success '--list during rebase from detached HEAD' '
 +      test_when_finished "reset_rebase && git checkout master" &&
 +      git checkout master^0 &&
 +      oid=$(git rev-parse --short HEAD) &&
 +      FAKE_LINES="1 edit 2" &&
 +      export FAKE_LINES &&
 +      set_fake_editor &&
 +      git rebase -i HEAD~2 &&
 +      git branch --list >actual &&
 +      test_i18ngrep "rebasing detached HEAD $oid" actual
 +'
 +
  test_expect_success 'tracking with unexpected .fetch refspec' '
        rm -rf a b c d &&
        git init a &&