Mercurial > mercurial > hgweb_golang.cgi
comparison src/gf/gf.go @ 37:43adde439537
ver.up: gf.go
author | pyon@macmini |
---|---|
date | Tue, 26 Nov 2019 21:04:22 +0900 |
parents | a2e33e922a54 |
children |
comparison
equal
deleted
inserted
replaced
36:a2e33e922a54 | 37:43adde439537 |
---|---|
1 /* | 1 /* |
2 Last Change: 2019-11-21 Thu 02:11:35. | 2 Last Change: 2019-11-25 月 13:55:58. |
3 | 3 |
4 gf.go: Get Files (ver.0.6) | 4 gf.go: Get Files (ver.0.7) |
5 | 5 |
6 ./gf.json: server & file list | 6 ./gf.json: server & file list |
7 e.g. | 7 e.g. |
8 { | 8 { |
9 "Server": { | 9 "Server": { |
12 }, | 12 }, |
13 "Files": [ | 13 "Files": [ |
14 "mahjong.html", | 14 "mahjong.html", |
15 "gammon", | 15 "gammon", |
16 "gammon/backgammon.html" | 16 "gammon/backgammon.html" |
17 ] | 17 ], |
18 "Backup": false | |
18 } | 19 } |
19 | 20 |
20 TODO: | 21 TODO: |
21 + reserve dirtree option [-r] | 22 + reserve dirtree option [-r] |
22 + gunzip/untar option | 23 + gunzip/untar option |
31 "log" | 32 "log" |
32 "os" | 33 "os" |
33 "path" | 34 "path" |
34 "path/filepath" | 35 "path/filepath" |
35 "net/http" | 36 "net/http" |
37 "time" | |
36 ) | 38 ) |
37 | 39 |
38 const version = "0.6" | 40 const version = "0.7" |
39 const defaultjson = "gf.json" | 41 const defaultjson = "gf.json" |
40 const samplejson = `{ | 42 const samplejson = `{ |
41 "Server": { | 43 "Server": { |
42 "Address": "hoge.com", | 44 "Address": "hoge.com", |
43 "Port": "80" | 45 "Port": "80" |
44 }, | 46 }, |
45 "Files": [ | 47 "Files": [ |
46 "mahjong.html", | 48 "mahjong.html", |
47 "gammon/backgammon.html" | 49 "gammon/backgammon.html" |
48 ] | 50 ], |
51 "Backup": false | |
49 }` | 52 }` |
50 | 53 |
51 type SV struct { | 54 type SV struct { |
52 Address string | 55 Address string |
53 Port string | 56 Port string |
58 } | 61 } |
59 | 62 |
60 type GF struct { | 63 type GF struct { |
61 Server SV | 64 Server SV |
62 Files []string | 65 Files []string |
66 Backup bool | |
63 } | 67 } |
64 | 68 |
65 type HO struct { // html object | 69 type HO struct { // html object |
66 Status string | 70 Status string |
67 StatusCode int | 71 StatusCode int |
131 n := len(gf.Files) | 135 n := len(gf.Files) |
132 if n > 1 { | 136 if n > 1 { |
133 print_msg(fmt.Sprintf("%d files downloading", n)) | 137 print_msg(fmt.Sprintf("%d files downloading", n)) |
134 } | 138 } |
135 | 139 |
140 if gf.Backup { | |
141 bkdir := "backup" + time.Now().Format("200601021504") | |
142 if err := os.Mkdir(bkdir, 0755); err != nil { | |
143 log.Fatal(err) | |
144 } | |
145 for _, f := range gf.Files { | |
146 file := path.Base(f) | |
147 if _, err := os.Stat(file); os.IsNotExist(err) { | |
148 continue | |
149 } | |
150 if err := os.Link(file, filepath.Join(bkdir, file)); err != nil { | |
151 log.Fatal(err) | |
152 } | |
153 } | |
154 files, err := ioutil.ReadDir(bkdir) | |
155 if err != nil { | |
156 log.Fatal(err) | |
157 } | |
158 if len(files) == 0 { | |
159 os.Remove(bkdir) | |
160 } | |
161 | |
162 } | |
163 | |
136 ch := make(chan string) | 164 ch := make(chan string) |
137 for _, f := range gf.Files { | 165 for _, f := range gf.Files { |
138 go http_gets(gf.Server.String(), f, ch) | 166 go http_gets(gf.Server.String(), f, ch) |
139 } | 167 } |
140 | 168 |