git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
blob f2b551dfafcf7aa08c4fc23c315f8e6eb0bb12ce 2882 bytes (raw)
name: t/t5801/git-remote-testgit 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
#!/bin/sh
# Copyright (c) 2012 Felipe Contreras

# The first argument can be a url when the fetch/push command was a url
# instead of a configured remote. In this case, use a generic alias.
if test "$1" = "testgit::$2"; then
	alias=_
else
	alias=$1
fi
url=$2

dir="$GIT_DIR/testgit/$alias"

refspec="refs/heads/*:refs/testgit/$alias/heads/*"

test -n "$GIT_REMOTE_TESTGIT_NOREFSPEC" && refspec=""

GIT_DIR="$url/.git"
export GIT_DIR

force=

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"
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"
		test -n "$GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE" && echo "no-private-update"
		echo 'option'
		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

		if test -n "$GIT_REMOTE_TESTGIT_FAILURE"
		then
			echo "feature done"
			exit 1
		fi

		echo "feature done"
		git fast-export \
			${refspec:+"--refspec=$refspec"} \
			${testgitmarks:+"--import-marks=$testgitmarks"} \
			${testgitmarks:+"--export-marks=$testgitmarks"} \
			$refs
		echo "done"
		;;
	export)
		if test -n "$GIT_REMOTE_TESTGIT_FAILURE"
		then
			# consume input so fast-export doesn't get SIGPIPE;
			# git would also notice that case, but we want
			# to make sure we are exercising the later
			# error checks
			while read line; do
				test "done" = "$line" && break
			done
			exit 1
		fi

		before=$(git for-each-ref --format=' %(refname) %(objectname) ')

		git fast-import \
			${force:+--force} \
			${testgitmarks:+"--import-marks=$testgitmarks"} \
			${testgitmarks:+"--export-marks=$testgitmarks"} \
			--quiet

		# figure out which refs were updated
		git for-each-ref --format='%(refname) %(objectname)' |
		while read ref a
		do
			case "$before" in
			*" $ref $a "*)
				continue ;;	# unchanged
			esac
			if test -z "$GIT_REMOTE_TESTGIT_PUSH_ERROR"
			then
				echo "ok $ref"
			else
				echo "error $ref $GIT_REMOTE_TESTGIT_PUSH_ERROR"
			fi
		done

		echo
		;;
	option\ *)
		read cmd opt val <<-EOF
		$line
		EOF
		case $opt in
		force)
			test $val = "true" && force="true" || force=
			echo "ok"
			;;
		*)
			echo "unsupported"
			;;
		esac
		;;
	'')
		exit
		;;
	esac
done

debug log:

solving f2b551dfaf ...
found f2b551dfaf in https://80x24.org/mirrors/git.git

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).