Diff
1diff --git a/testscript/script_test.go b/testscript/script_test.go
2index 08e8c0b0d2e3f5b20c24f456a1e811ae740a9c0c..76c1866bddb91a7675ebe0e0d93d25447beb905b 100644
3--- a/testscript/script_test.go
4+++ b/testscript/script_test.go
5@@ -45,6 +45,7 @@ func TestScript(t *testing.T) {
6 UpdateScripts: *update,
7 Cmds: map[string]func(ts *testscript.TestScript, neg bool, args []string){
8 "soft": cmdSoft(admin1.Signer()),
9+ "usoft": cmdSoft(user1.Signer()),
10 "git": cmdGit(key),
11 "mkfile": cmdMkfile,
12 "dos2unix": cmdDos2Unix,
13diff --git a/testscript/testdata/repo-create.txtar b/testscript/testdata/repo-create.txtar
14index ba1a5b706d003bb555a29cf5ff5a5603d8c91a75..633142202c19dae41e0878d1431a1a66027a4e31 100644
15--- a/testscript/testdata/repo-create.txtar
16+++ b/testscript/testdata/repo-create.txtar
17@@ -1,7 +1,7 @@
18 # vi: set ft=conf
19
20 # convert crlf to lf on windows
21-[windows] dos2unix tree.txt readme.md branch_list.1.txt
22+[windows] dos2unix tree.txt readme.md branch_list.1.txt info.txt
23
24 # create a repo
25 soft repo create repo1 -d 'description' -H -p -n 'repo11'
26@@ -25,6 +25,10 @@ git -C repo1 tag v0.1.0
27 git -C repo1 push origin HEAD
28 git -C repo1 push origin HEAD --tags
29
30+# info
31+soft repo info repo1
32+cmp stdout info.txt
33+
34 # list tags
35 soft repo tag list repo1
36 stdout 'v0.1.0'
37@@ -77,3 +81,15 @@ stdout branch1
38 -- branch_list.1.txt --
39 branch1
40 master
41+-- info.txt --
42+Project Name: repo11
43+Repository: repo1
44+Description: description
45+Private: true
46+Hidden: true
47+Mirror: false
48+Default Branch: master
49+Branches:
50+ - master
51+Tags:
52+ - v0.1.0
53diff --git a/testscript/testdata/repo-perms.txtar b/testscript/testdata/repo-perms.txtar
54new file mode 100644
55index 0000000000000000000000000000000000000000..3d682b6fca9b2d2d41eeaf6b63f3db0f9d88bc18
56--- /dev/null
57+++ b/testscript/testdata/repo-perms.txtar
58@@ -0,0 +1,89 @@
59+# vi: set ft=conf
60+
61+# convert crlf to lf on windows
62+[windows] dos2unix info.txt
63+
64+# create a repo & user1 with admin
65+soft repo create repo1 -p
66+soft user create user1 -k "$USER1_AUTHORIZED_KEY"
67+
68+# setup repo
69+git clone ssh://localhost:$SSH_PORT/repo1 repo1
70+mkfile ./repo1/README.md '# Project\nfoo'
71+git -C repo1 add -A
72+git -C repo1 commit -m 'first'
73+git -C repo1 tag v1.0.0
74+git -C repo1 push origin HEAD
75+git -C repo1 push origin HEAD --tags
76+
77+# admin can access it
78+soft repo tree repo1
79+soft repo blob repo1 README.md
80+soft repo description repo1 'desc'
81+soft repo project-name repo1 'proj'
82+soft repo private repo1
83+soft repo info repo1
84+cmp stdout info.txt
85+
86+# verify no collab
87+soft repo collab list repo1
88+! stdout .
89+
90+# regular user can't access it
91+! usoft repo info repo1
92+stderr 'Unauthorized'
93+! usoft repo tree repo1
94+stderr 'Unauthorized'
95+! usoft repo tag list repo1
96+stderr 'Unauthorized'
97+! usoft repo tag delete repo1 v1.0.0
98+stderr 'Unauthorized'
99+! usoft repo blob repo1 README.md
100+stderr 'Unauthorized'
101+! usoft repo description repo1
102+stderr 'Unauthorized'
103+! usoft repo description repo1 'new desc'
104+stderr 'Unauthorized'
105+! usoft repo project-name repo1
106+stderr 'Unauthorized'
107+! usoft repo private repo1 true
108+stderr 'Unauthorized'
109+! usoft repo private repo1
110+stderr 'Unauthorized'
111+! usoft repo rename repo1 repo11
112+stderr 'Unauthorized'
113+! usoft repo branch default repo1
114+stderr 'Unauthorized'
115+! usoft repo branch default repo1 main
116+stderr 'Unauthorized'
117+! usoft repo delete repo1
118+stderr 'Unauthorized'
119+
120+# add user1 as collab
121+soft repo collab add repo1 user1
122+soft repo collab list repo1
123+stdout user1
124+usoft repo collab list repo1
125+stdout user1
126+
127+# verify user1 has access now
128+usoft repo info repo1
129+cmp stdout info.txt
130+
131+# delete
132+usoft repo delete repo1
133+usoft repo list
134+! stdout .
135+
136+-- info.txt --
137+Project Name: proj
138+Repository: repo1
139+Description: desc
140+Private: true
141+Hidden: false
142+Mirror: false
143+Default Branch: master
144+Branches:
145+ - master
146+Tags:
147+ - v1.0.0