#!/usr/bin/env bash # Copyright (c) 2012 Felipe Contreras alias=$1 url=$2 dir="$GIT_DIR/testgit/$alias" prefix="refs/testgit/$alias" default_refspec="refs/heads/*:${prefix}/heads/*" refspec="${GIT_REMOTE_TESTGIT_REFSPEC-$default_refspec}" test -z "$refspec" && prefix="refs" export GIT_DIR="$url/.git" mkdir -p "$dir" if test -z "$GIT_REMOTE_TESTGIT_NO_MARKS" then gitmarks="$dir/git.marks" testgitmarks="$dir/testgit.marks" test -e "$gitmarks" || >"$gitmarks" test -e "$testgitmarks" || >"$testgitmarks" testgitmarks_args=( "--"{import,export}"-marks=$testgitmarks" ) fi while read line do case $line in capabilities) echo 'import' echo 'export' test -n "$refspec" && echo "refspec $refspec" if test -n "$gitmarks" then echo "*import-marks $gitmarks" echo "*export-marks $gitmarks" fi test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags" echo ;; list) git for-each-ref --format='? %(refname)' 'refs/heads/' head=$(git symbolic-ref HEAD) echo "@$head HEAD" echo ;; import*) # read all import lines while true do ref="${line#* }" refs="$refs $ref" read line test "${line%% *}" != "import" && break done if test -n "$gitmarks" then echo "feature import-marks=$gitmarks" echo "feature export-marks=$gitmarks" fi echo "feature done" git fast-export "${testgitmarks_args[@]}" $refs | sed -e "s#refs/heads/#${prefix}/heads/#g" echo "done" ;; export) before=$(git for-each-ref --format='%(refname) %(objectname)') git fast-import "${testgitmarks_args[@]}" --quiet after=$(git for-each-ref --format='%(refname) %(objectname)') # figure out which refs were updated join -e 0 -o '0 1.2 2.2' -a 2 <(echo "$before") <(echo "$after") | while read ref a b do test $a == $b && continue echo "ok $ref" done echo ;; '') exit ;; esac done