git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
6012cc8172a6bd6e9acad5fc84ddb87cb67815b9 blob 4191 bytes (raw)

  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
145
146
147
148
149
150
151
 
#!/bin/sh
#
# Copyright (c) 2006 Shawn O. Pearce
#

test_description='Test the update hook infrastructure.'
. ./test-lib.sh

test_expect_success setup '
	echo This is a test. >a &&
	git update-index --add a &&
	tree0=$(git write-tree) &&
	commit0=$(echo setup | git commit-tree $tree0) &&
	echo We hope it works. >a &&
	git update-index a &&
	tree1=$(git write-tree) &&
	commit1=$(echo modify | git commit-tree $tree1 -p $commit0) &&
	git update-ref refs/heads/main $commit0 &&
	git update-ref refs/heads/tofail $commit1 &&
	git clone --bare ./. victim.git &&
	GIT_DIR=victim.git git update-ref refs/heads/tofail $commit1 &&
	git update-ref refs/heads/main $commit1 &&
	git update-ref refs/heads/tofail $commit0
'

cat >victim.git/hooks/pre-receive <<'EOF'
#!/bin/sh
printf %s "$@" >>$GIT_DIR/pre-receive.args
cat - >$GIT_DIR/pre-receive.stdin
echo STDOUT pre-receive
echo STDERR pre-receive >&2
EOF
chmod u+x victim.git/hooks/pre-receive

cat >victim.git/hooks/update <<'EOF'
#!/bin/sh
echo "$@" >>$GIT_DIR/update.args
read x; printf %s "$x" >$GIT_DIR/update.stdin
echo STDOUT update $1
echo STDERR update $1 >&2
test "$1" = refs/heads/main || exit
EOF
chmod u+x victim.git/hooks/update

cat >victim.git/hooks/post-receive <<'EOF'
#!/bin/sh
printf %s "$@" >>$GIT_DIR/post-receive.args
cat - >$GIT_DIR/post-receive.stdin
echo STDOUT post-receive
echo STDERR post-receive >&2
EOF
chmod u+x victim.git/hooks/post-receive

cat >victim.git/hooks/post-update <<'EOF'
#!/bin/sh
echo "$@" >>$GIT_DIR/post-update.args
read x; printf %s "$x" >$GIT_DIR/post-update.stdin
echo STDOUT post-update
echo STDERR post-update >&2
EOF
chmod u+x victim.git/hooks/post-update

test_expect_success push '
	test_must_fail git send-pack --force ./victim.git \
		main tofail >send.out 2>send.err
'

test_expect_success 'updated as expected' '
	test $(GIT_DIR=victim.git git rev-parse main) = $commit1 &&
	test $(GIT_DIR=victim.git git rev-parse tofail) = $commit1
'

test_expect_success 'hooks ran' '
	test -f victim.git/pre-receive.args &&
	test -f victim.git/pre-receive.stdin &&
	test -f victim.git/update.args &&
	test -f victim.git/update.stdin &&
	test -f victim.git/post-receive.args &&
	test -f victim.git/post-receive.stdin &&
	test -f victim.git/post-update.args &&
	test -f victim.git/post-update.stdin
'

test_expect_success 'pre-receive hook input' '
	(echo $commit0 $commit1 refs/heads/main &&
	 echo $commit1 $commit0 refs/heads/tofail
	) | test_cmp - victim.git/pre-receive.stdin
'

test_expect_success 'update hook arguments' '
	(echo refs/heads/main $commit0 $commit1 &&
	 echo refs/heads/tofail $commit1 $commit0
	) | test_cmp - victim.git/update.args
'

test_expect_success 'post-receive hook input' '
	echo $commit0 $commit1 refs/heads/main |
	test_cmp - victim.git/post-receive.stdin
'

test_expect_success 'post-update hook arguments' '
	echo refs/heads/main |
	test_cmp - victim.git/post-update.args
'

test_expect_success 'all hook stdin is /dev/null' '
	test_must_be_empty victim.git/update.stdin &&
	test_must_be_empty victim.git/post-update.stdin
'

test_expect_success 'all *-receive hook args are empty' '
	test_must_be_empty victim.git/pre-receive.args &&
	test_must_be_empty victim.git/post-receive.args
'

test_expect_success 'send-pack produced no output' '
	test_must_be_empty send.out
'

cat <<EOF >expect
remote: STDOUT pre-receive
remote: STDERR pre-receive
remote: STDOUT update refs/heads/main
remote: STDERR update refs/heads/main
remote: STDOUT update refs/heads/tofail
remote: STDERR update refs/heads/tofail
remote: error: hook declined to update refs/heads/tofail
remote: STDOUT post-receive
remote: STDERR post-receive
remote: STDOUT post-update
remote: STDERR post-update
EOF
test_expect_success 'send-pack stderr contains hook messages' '
	grep ^remote: send.err | sed "s/ *\$//" >actual &&
	test_cmp expect actual
'

test_expect_success 'pre-receive hook that forgets to read its input' '
	write_script victim.git/hooks/pre-receive <<-\EOF &&
	exit 0
	EOF
	rm -f victim.git/hooks/update victim.git/hooks/post-update &&

	for v in $(test_seq 100 999)
	do
		git branch branch_$v main || return
	done &&
	git push ./victim.git "+refs/heads/*:refs/heads/*"
'

test_done
debug log:

solving 6012cc8172 ...
found 6012cc8172 in git.git.git

git@vger.kernel.org list mirror (unofficial, one of many)

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://public-inbox.org/git
	git clone --mirror http://ou63pmih66umazou.onion/git
	git clone --mirror http://czquwvybam4bgbro.onion/git
	git clone --mirror http://hjrcffqmbrq6wope.onion/git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 git git/ https://public-inbox.org/git \
		git@vger.kernel.org
	public-inbox-index git

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.version-control.git
	nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.version-control.git
	nntp://ie5yzdi7fg72h7s4sdcztq5evakq23rdt33mfyfcddc5u3ndnw24ogqd.onion/inbox.comp.version-control.git
	nntp://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/inbox.comp.version-control.git
	nntp://news.gmane.io/gmane.comp.version-control.git
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for project(s) associated with this inbox:

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

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git