t / t5544-pack-objects-hook.shon commit Second batch (f1d4a28)
   1#!/bin/sh
   2
   3test_description='test custom script in place of pack-objects'
   4. ./test-lib.sh
   5
   6test_expect_success 'create some history to fetch' '
   7        test_commit one &&
   8        test_commit two
   9'
  10
  11test_expect_success 'create debugging hook script' '
  12        write_script .git/hook <<-\EOF
  13                echo >&2 "hook running"
  14                echo "$*" >hook.args
  15                cat >hook.stdin
  16                "$@" <hook.stdin >hook.stdout
  17                cat hook.stdout
  18        EOF
  19'
  20
  21clear_hook_results () {
  22        rm -rf .git/hook.* dst.git
  23}
  24
  25test_expect_success 'hook runs via global config' '
  26        clear_hook_results &&
  27        test_config_global uploadpack.packObjectsHook ./hook &&
  28        git clone --no-local . dst.git 2>stderr &&
  29        grep "hook running" stderr
  30'
  31
  32test_expect_success 'hook outputs are sane' '
  33        # check that we recorded a usable pack
  34        git index-pack --stdin <.git/hook.stdout &&
  35
  36        # check that we recorded args and stdin. We do not check
  37        # the full argument list or the exact pack contents, as it would make
  38        # the test brittle. So just sanity check that we could replay
  39        # the packing procedure.
  40        grep "^git" .git/hook.args &&
  41        $(cat .git/hook.args) <.git/hook.stdin >replay
  42'
  43
  44test_expect_success 'hook runs from -c config' '
  45        clear_hook_results &&
  46        git clone --no-local \
  47          -u "git -c uploadpack.packObjectsHook=./hook upload-pack" \
  48          . dst.git 2>stderr &&
  49        grep "hook running" stderr
  50'
  51
  52test_expect_success 'hook does not run from repo config' '
  53        clear_hook_results &&
  54        test_config uploadpack.packObjectsHook "./hook" &&
  55        git clone --no-local . dst.git 2>stderr &&
  56        ! grep "hook running" stderr &&
  57        test_path_is_missing .git/hook.args &&
  58        test_path_is_missing .git/hook.stdin &&
  59        test_path_is_missing .git/hook.stdout
  60'
  61
  62test_done