@@ -12,26 +12,30 @@ import
12
12
zippy,
13
13
mimetypes
14
14
15
+ import strformat
15
16
import tables, strtabs
16
17
from httpcore import HttpMethod , HttpHeaders
17
18
18
19
from parseBody import parseMPFD
19
20
20
21
const
21
22
name = " TW5 server"
22
- version = " 1.2.3 "
23
+ version = " 1.2.4 "
23
24
style = staticRead (" style.css" )
24
25
temp = staticRead (" template.html" )
25
26
js = staticRead (" main.js" )
26
27
27
- const usage = """
28
+ const usage = fmt"""
29
+ { name} { version}
30
+
31
+ Usage:
28
32
tw5server -a:localhost -p:8000 -d:dir -b:backup
29
33
30
- -h usage help
34
+ -h this help
31
35
-a address, defautl "127.0.0.1"
32
36
-p port, default 8000
33
- -d directory to servering , default `current dir`
34
- -b backup directory name , default `backup`
37
+ -d directory to serve , default `current dir`
38
+ -b backup directory, default `backup` in serve dir. `backup/` or `backup\\` for a backup path.
35
39
-l show log message
36
40
-m max size of uploaded file (MB), default 100
37
41
@@ -147,7 +151,7 @@ proc getPut(req: Request, path, backup: string, log: bool): NimHttpResponse =
147
151
logmsg (" Update: " & path, log)
148
152
149
153
let (dir, name, _) = splitFile (path)
150
- let backup_name = dir / backup / name & " -" & time_now () & " .html.gz"
154
+ let backup_name = backup / name & " -" & time_now () & " .html.gz"
151
155
152
156
let compressed = compress (content, BestCompression )
153
157
writeFile (backup_name, compressed)
@@ -255,17 +259,17 @@ proc backupFileName(name: string): string =
255
259
# backup name: name-timestamp.html.gz, e.g, test-20230227142037.html.gz
256
260
return name[0 ..^ 21 ]
257
261
258
- proc clean_backup (dir, backup: string ): int =
262
+ proc clean_backup (backup: string ): int =
259
263
var names: HashSet [string ]
260
- let all_backups = toSeq (walkPattern (dir / backup / " *.html.gz" ))
264
+ let all_backups = toSeq (walkPattern (backup / " *.html.gz" ))
261
265
262
266
for i in all_backups:
263
267
let (_, name, _) = splitFile (i)
264
268
names.incl (backupFileName (name))
265
269
266
270
var count = 0
267
271
for i in names:
268
- for old in old_backups (dir / backup, i):
272
+ for old in old_backups (backup, i):
269
273
removeFile (old)
270
274
count += 1
271
275
@@ -302,6 +306,9 @@ for kind, key, val in parseopt.getopt():
302
306
log = true
303
307
of " m" , " max" :
304
308
maxbody = parseInt (val)
309
+ of " v" , " version" :
310
+ echo version
311
+ quit ()
305
312
else :
306
313
assert (false )
307
314
@@ -317,17 +324,20 @@ settings.port = Port(port)
317
324
318
325
echo (" Serving url: " , address, " :" , port)
319
326
echo (" Serving path: " , dir)
327
+
328
+ if not (" /" in backup or " \\ " in backup):
329
+ backup = dir / backup
320
330
echo (" Backup dir: " , backup)
321
331
322
- createDir (dir / backup)
332
+ createDir (backup)
323
333
324
334
proc handleCtrlC () {.noconv .} =
325
335
write (stdout, " \r Clean backups (y to clean): " )
326
336
let clean = readLine (stdin)
327
337
328
338
var cleaned = 0
329
339
if " y" == clean:
330
- cleaned = clean_backup (dir, backup)
340
+ cleaned = clean_backup (backup)
331
341
332
342
if cleaned > 0 :
333
343
echo (cleaned, " backup(s) cleaned. Bye ~" )
0 commit comments