git-remote-testgiton commit remote-testgit: exercise more features (ee10fbf)
   1#!/usr/bin/env bash
   2# Copyright (c) 2012 Felipe Contreras
   3
   4alias=$1
   5url=$2
   6
   7dir="$GIT_DIR/testgit/$alias"
   8prefix="refs/testgit/$alias"
   9
  10default_refspec="refs/heads/*:${prefix}/heads/*"
  11
  12refspec="${GIT_REMOTE_TESTGIT_REFSPEC-$default_refspec}"
  13
  14test -z "$refspec" && prefix="refs"
  15
  16export GIT_DIR="$url/.git"
  17
  18mkdir -p "$dir"
  19
  20if test -z "$GIT_REMOTE_TESTGIT_NO_MARKS"
  21then
  22        gitmarks="$dir/git.marks"
  23        testgitmarks="$dir/testgit.marks"
  24        test -e "$gitmarks" || >"$gitmarks"
  25        test -e "$testgitmarks" || >"$testgitmarks"
  26        testgitmarks_args=( "--"{import,export}"-marks=$testgitmarks" )
  27fi
  28
  29while read line
  30do
  31        case $line in
  32        capabilities)
  33                echo 'import'
  34                echo 'export'
  35                test -n "$refspec" && echo "refspec $refspec"
  36                if test -n "$gitmarks"
  37                then
  38                        echo "*import-marks $gitmarks"
  39                        echo "*export-marks $gitmarks"
  40                fi
  41                echo
  42                ;;
  43        list)
  44                git for-each-ref --format='? %(refname)' 'refs/heads/'
  45                head=$(git symbolic-ref HEAD)
  46                echo "@$head HEAD"
  47                echo
  48                ;;
  49        import*)
  50                # read all import lines
  51                while true
  52                do
  53                        ref="${line#* }"
  54                        refs="$refs $ref"
  55                        read line
  56                        test "${line%% *}" != "import" && break
  57                done
  58
  59                if test -n "$gitmarks"
  60                then
  61                        echo "feature import-marks=$gitmarks"
  62                        echo "feature export-marks=$gitmarks"
  63                fi
  64                git fast-export --use-done-feature "${testgitmarks_args[@]}" $refs |
  65                sed -e "s#refs/heads/#${prefix}/heads/#g"
  66                ;;
  67        export)
  68                git fast-import "${testgitmarks_args[@]}" --quiet
  69                echo
  70                ;;
  71        '')
  72                exit
  73                ;;
  74        esac
  75done