t / t5403-post-checkout-hook.shon commit Merge branch 'sg/ci-brew-gcc-workaround' (e1cee0b)
   1#!/bin/sh
   2#
   3# Copyright (c) 2006 Josh England
   4#
   5
   6test_description='Test the post-checkout hook.'
   7. ./test-lib.sh
   8
   9test_expect_success setup '
  10        mkdir -p .git/hooks &&
  11        write_script .git/hooks/post-checkout <<-\EOF &&
  12        echo "$@" >.git/post-checkout.args
  13        EOF
  14        test_commit one &&
  15        test_commit two &&
  16        test_commit rebase-on-me &&
  17        git reset --hard HEAD^ &&
  18        test_commit three
  19'
  20
  21test_expect_success 'post-checkout receives the right arguments with HEAD unchanged ' '
  22        test_when_finished "rm -f .git/post-checkout.args" &&
  23        git checkout master &&
  24        read old new flag <.git/post-checkout.args &&
  25        test $old = $new && test $flag = 1
  26'
  27
  28test_expect_success 'post-checkout args are correct with git checkout -b ' '
  29        test_when_finished "rm -f .git/post-checkout.args" &&
  30        git checkout -b new1 &&
  31        read old new flag <.git/post-checkout.args &&
  32        test $old = $new && test $flag = 1
  33'
  34
  35test_expect_success 'post-checkout receives the right args with HEAD changed ' '
  36        test_when_finished "rm -f .git/post-checkout.args" &&
  37        git checkout two &&
  38        read old new flag <.git/post-checkout.args &&
  39        test $old != $new && test $flag = 1
  40'
  41
  42test_expect_success 'post-checkout receives the right args when not switching branches ' '
  43        test_when_finished "rm -f .git/post-checkout.args" &&
  44        git checkout master -- three.t &&
  45        read old new flag <.git/post-checkout.args &&
  46        test $old = $new && test $flag = 0
  47'
  48
  49test_expect_success 'post-checkout is triggered on rebase' '
  50        test_when_finished "rm -f .git/post-checkout.args" &&
  51        git checkout -b rebase-test master &&
  52        rm -f .git/post-checkout.args &&
  53        git rebase rebase-on-me &&
  54        read old new flag <.git/post-checkout.args &&
  55        test $old != $new && test $flag = 1
  56'
  57
  58test_expect_success 'post-checkout is triggered on rebase with fast-forward' '
  59        test_when_finished "rm -f .git/post-checkout.args" &&
  60        git checkout -b ff-rebase-test rebase-on-me^ &&
  61        rm -f .git/post-checkout.args &&
  62        git rebase rebase-on-me &&
  63        read old new flag <.git/post-checkout.args &&
  64        test $old != $new && test $flag = 1
  65'
  66
  67test_expect_success 'post-checkout hook is triggered by clone' '
  68        mkdir -p templates/hooks &&
  69        write_script templates/hooks/post-checkout <<-\EOF &&
  70        echo "$@" >"$GIT_DIR/post-checkout.args"
  71        EOF
  72        git clone --template=templates . clone3 &&
  73        test -f clone3/.git/post-checkout.args
  74'
  75
  76test_done