Diff
1diff --git a/testscript/script_test.go b/testscript/script_test.go
2index 477edc033823c43b8df3722113f59a493d1a83d0..08e8c0b0d2e3f5b20c24f456a1e811ae740a9c0c 100644
3--- a/testscript/script_test.go
4+++ b/testscript/script_test.go
5@@ -46,7 +46,7 @@ func TestScript(t *testing.T) {
6 Cmds: map[string]func(ts *testscript.TestScript, neg bool, args []string){
7 "soft": cmdSoft(admin1.Signer()),
8 "git": cmdGit(key),
9- "mkreadme": cmdMkReadme,
10+ "mkfile": cmdMkfile,
11 "dos2unix": cmdDos2Unix,
12 },
13 Setup: func(e *testscript.Env) error {
14@@ -211,12 +211,15 @@ func cmdGit(key string) func(ts *testscript.TestScript, neg bool, args []string)
15 }
16 }
17
18-func cmdMkReadme(ts *testscript.TestScript, neg bool, args []string) {
19- if len(args) != 1 {
20- ts.Fatalf("usage: mkreadme path")
21+func cmdMkfile(ts *testscript.TestScript, neg bool, args []string) {
22+ if len(args) < 2 {
23+ ts.Fatalf("usage: mkfile path content")
24 }
25- content := []byte("# example\ntest project")
26- check(ts, os.WriteFile(ts.MkAbs(args[0]), content, 0o644), neg)
27+ check(ts, os.WriteFile(
28+ ts.MkAbs(args[0]),
29+ []byte(strings.Join(args[1:], " ")),
30+ 0o644,
31+ ), neg)
32 }
33
34 func check(ts *testscript.TestScript, err error, neg bool) {
35diff --git a/testscript/testdata/help.txtar b/testscript/testdata/help.txtar
36new file mode 100644
37index 0000000000000000000000000000000000000000..d65bcfb0876cc54f9d333c03d8494499c8466ecd
38--- /dev/null
39+++ b/testscript/testdata/help.txtar
40@@ -0,0 +1,25 @@
41+# vi: set ft=conf
42+[windows] dos2unix help.txt
43+
44+soft --help
45+cmpenv stdout help.txt
46+
47+-- help.txt --
48+Soft Serve is a self-hostable Git server for the command line.
49+
50+Usage:
51+ ssh -p $SSH_PORT localhost [command]
52+
53+Available Commands:
54+ help Help about any command
55+ info Show your info
56+ pubkey Manage your public keys
57+ repo Manage repositories
58+ set-username Set your username
59+ settings Manage server settings
60+ user Manage users
61+
62+Flags:
63+ -h, --help help for this command
64+
65+Use "ssh -p $SSH_PORT localhost [command] --help" for more information about a command.
66diff --git a/testscript/testdata/repo-blob.txtar b/testscript/testdata/repo-blob.txtar
67new file mode 100644
68index 0000000000000000000000000000000000000000..770bd2d067f5de2096b8a0b37c36f073a515e577
69--- /dev/null
70+++ b/testscript/testdata/repo-blob.txtar
71@@ -0,0 +1,51 @@
72+# vi: set ft=conf
73+
74+# convert crlf to lf on windows
75+[windows] dos2unix blob1.txt blob2.txt blob3.txt
76+
77+# create a repo
78+soft repo create repo1
79+
80+# clone repo
81+git clone ssh://localhost:$SSH_PORT/repo1 repo1
82+
83+# create some files, commits, tags...
84+mkfile ./repo1/README.md '# Hello\n\nwelcome'
85+mkfile ./repo1/main.go 'package main\nconst foo = 2\n'
86+mkfile ./repo1/.hidden ''
87+mkdir ./repo1/folder
88+mkdir ./repo1/.folder
89+mkfile ./repo1/folder/lib.c '//#include <stdio.h>'
90+git -C repo1 add -A
91+git -C repo1 commit -m 'first'
92+git -C repo1 push origin HEAD
93+
94+# print root blob
95+soft repo blob repo1 README.md
96+cmp stdout blob1.txt
97+
98+# print file blob with revision with line numbers and colors
99+soft repo blob repo1 master main.go -l -c
100+cmp stdout blob2.txt
101+
102+
103+# print file blob with revision within folder with lineno
104+soft repo blob repo1 master folder/lib.c -l
105+cmp stdout blob3.txt
106+
107+# print blob of folder that does not exist
108+! soft repo blob repo1 folder/nope.txt
109+! stdout .
110+stderr 'revision does not exist'
111+
112+# print blob of bad revision
113+! soft repo blob repo1 badrev README.md
114+! stdout .
115+stderr 'revision does not exist'
116+
117+-- blob1.txt --
118+# Hello\n\nwelcome
119+-- blob2.txt --
120+ [38;5;239m1[0m [38;5;236m│[0m [38;5;204m[0m[38;5;204mpackage[0m main[38;5;255m\[0mnconst foo [38;5;187m=[0m [38;5;85m2[0m[38;5;255m\[0mn
121+-- blob3.txt --
122+ 1 │ //#include <stdio.h>
123diff --git a/testscript/testdata/repo-create.txtar b/testscript/testdata/repo-create.txtar
124index 108790cada62f112e21f385da48fe9d6d816465f..ba1a5b706d003bb555a29cf5ff5a5603d8c91a75 100644
125--- a/testscript/testdata/repo-create.txtar
126+++ b/testscript/testdata/repo-create.txtar
127@@ -11,12 +11,14 @@ soft repo private repo1
128 stdout true
129 soft repo description repo1
130 stdout 'description'
131+soft repo project-name repo1
132+stdout 'repo1'
133
134 # clone repo
135 git clone ssh://localhost:$SSH_PORT/repo1 repo1
136
137 # create some files, commits, tags...
138-mkreadme ./repo1/README.md
139+mkfile ./repo1/README.md '# Project\nfoo'
140 git -C repo1 add -A
141 git -C repo1 commit -m 'first'
142 git -C repo1 tag v0.1.0
143@@ -69,10 +71,9 @@ soft repo branch list repo1
144 stdout branch1
145
146 -- tree.txt --
147--rw-r--r-- 22 B README.md
148+-rw-r--r-- 14 B README.md
149 -- readme.md --
150-# example
151-test project
152+# Project\nfoo
153 -- branch_list.1.txt --
154 branch1
155 master
156diff --git a/testscript/testdata/repo-delete.txtar b/testscript/testdata/repo-delete.txtar
157new file mode 100644
158index 0000000000000000000000000000000000000000..55d41cd9cb96ce8ce3eff9798fc2493ed21efcee
159--- /dev/null
160+++ b/testscript/testdata/repo-delete.txtar
161@@ -0,0 +1,8 @@
162+# vi: set ft=conf
163+
164+soft repo create repo1
165+soft repo create repo-to-delete
166+soft repo delete repo-to-delete
167+soft repo delete nope # repo delete never fails
168+soft repo list
169+stdout 'repo1'
170diff --git a/testscript/testdata/repo-tree.txtar b/testscript/testdata/repo-tree.txtar
171index b26b4e1682ade88b433806a62a092c927c95efbc..50a328325984a43c9fa4d5335a234ae8e14a9719 100644
172--- a/testscript/testdata/repo-tree.txtar
173+++ b/testscript/testdata/repo-tree.txtar
174@@ -10,12 +10,12 @@ soft repo create repo1
175 git clone ssh://localhost:$SSH_PORT/repo1 repo1
176
177 # create some files, commits, tags...
178-mkreadme ./repo1/README.md
179-mkreadme ./repo1/b.md
180-mkreadme ./repo1/.hidden
181+mkfile ./repo1/README.md '# Hello'
182+mkfile ./repo1/b.md 'hi'
183+mkfile ./repo1/.hidden ''
184 mkdir ./repo1/folder
185 mkdir ./repo1/.folder
186-mkreadme ./repo1/folder/aa.md
187+mkfile ./repo1/folder/aa.md 'hello'
188 git -C repo1 add -A
189 git -C repo1 commit -m 'first'
190 git -C repo1 push origin HEAD
191@@ -44,10 +44,10 @@ stderr 'revision does not exist'
192
193 -- tree1.txt --
194 drwxrwxrwx - folder
195--rw-r--r-- 22 B .hidden
196--rw-r--r-- 22 B README.md
197--rw-r--r-- 22 B b.md
198+-rw-r--r-- - .hidden
199+-rw-r--r-- 7 B README.md
200+-rw-r--r-- 2 B b.md
201 -- tree2.txt --
202--rw-r--r-- 22 B aa.md
203+-rw-r--r-- 5 B aa.md
204 -- tree3.txt --
205--rw-r--r-- 22 B b.md
206+-rw-r--r-- 2 B b.md
207diff --git a/testscript/testdata/settings.txtar b/testscript/testdata/settings.txtar
208index 606c576c097ae2ccb4656450c368bae077b48900..1340da34387bc33427fb9e3c92179671f59bb08c 100644
209--- a/testscript/testdata/settings.txtar
210+++ b/testscript/testdata/settings.txtar
211@@ -13,7 +13,7 @@ stdout 'false.*'
212 soft settings anon-access
213 stdout 'read-only.*'
214
215-# chaneg anon-access to all available options, and check them
216+# change anon-access to all available options, and check them
217 soft settings anon-access no-access
218 soft settings anon-access
219 stdout 'no-access.*'
220@@ -29,3 +29,9 @@ stdout 'read-write.*'
221 soft settings anon-access admin-access
222 soft settings anon-access
223 stdout 'admin-access.*'
224+
225+# try to set a bad access
226+! soft settings anon-access nope
227+! stdout .
228+stderr .
229+