Mercurial > mercurial > hgweb_golang.cgi
comparison src/ut/main.go @ 17:72ce457fb99d
ut: bug fix.
author | pyon@macmini |
---|---|
date | Wed, 20 Jun 2018 06:01:58 +0900 |
parents | 38b64afbaf79 |
children | 45ca03520eea |
comparison
equal
deleted
inserted
replaced
16:38b64afbaf79 | 17:72ce457fb99d |
---|---|
6 delete file on server | 6 delete file on server |
7 */ | 7 */ |
8 package main | 8 package main |
9 | 9 |
10 import ( | 10 import ( |
11 "archive/tar" | |
12 "bufio" | 11 "bufio" |
13 "bytes" | 12 "bytes" |
14 "compress/gzip" | |
15 "flag" | 13 "flag" |
16 "fmt" | 14 "fmt" |
17 "io" | 15 "io" |
18 "io/ioutil" | 16 "io/ioutil" |
19 "log" | 17 "log" |
27 "time" | 25 "time" |
28 | 26 |
29 "./lu" | 27 "./lu" |
30 ) | 28 ) |
31 | 29 |
32 var version = "1.01" | 30 var version = "1.02" |
33 | 31 |
34 func main() { | 32 func main() { |
35 | 33 |
36 var getfile = flag.Bool( "g", false, "get a file from site." ) // ok | 34 var getfile = flag.Bool( "g", false, "get a file from site." ) // ok |
37 var putfile = flag.Bool( "G", false, "put a file to site." ) // ok | 35 var putfile = flag.Bool( "G", false, "put a file to site." ) // ok |
38 var compupld = flag.Bool( "zu", false, "compress & upload files. (.tgz)" ) // ok | 36 var compress = flag.Bool( "z", false, "compress files. (.tgz)" ) // ok |
39 var compress = flag.Bool( "z", false, "compress files. ( not upload. )" ) // ok | |
40 var uncmprss = flag.Bool( "x", false, "uncompress files. (.tgz )" ) // ok | 37 var uncmprss = flag.Bool( "x", false, "uncompress files. (.tgz )" ) // ok |
41 var noprefix = flag.Bool( "n", false, "not add prefix(YYYYMMDDhhmm_) to filename." ) // ok | 38 var noprefix = flag.Bool( "n", false, "not add prefix(YYYYMMDDhhmm_) to filename." ) // ok |
42 | 39 |
43 var wget = flag.Bool( "w", false, "little wget tool." ) // ok | 40 var wget = flag.Bool( "w", false, "little wget tool." ) // ok |
44 var wc_l = flag.Bool( "l", false, "little wc -l tool." ) // ok | 41 var wc_l = flag.Bool( "l", false, "little wc -l tool." ) // ok |
55 //var swatch = flag.Bool( "W", false, "stop watch." ) | 52 //var swatch = flag.Bool( "W", false, "stop watch." ) |
56 //var bccalc = flag.Bool( "j", false, "calculator." ) | 53 //var bccalc = flag.Bool( "j", false, "calculator." ) |
57 //var bhole = flag.Bool( "k", false, "black hole. ( /dev/null )" ) | 54 //var bhole = flag.Bool( "k", false, "black hole. ( /dev/null )" ) |
58 var cmdtime = flag.Bool( "T", false, "measure program running time." ) | 55 var cmdtime = flag.Bool( "T", false, "measure program running time." ) |
59 var touch = flag.Bool( "t", false, "little touch tool." ) | 56 var touch = flag.Bool( "t", false, "little touch tool." ) |
57 var tee = flag.Bool( "e", false, "little tee tool." ) | |
60 var replace = flag.Bool( "r", false, "replace strings. ( s/arg1/arg2/g )" ) | 58 var replace = flag.Bool( "r", false, "replace strings. ( s/arg1/arg2/g )" ) |
61 var sort = flag.Bool( "s", false, "little sort tool." ) | 59 var sort = flag.Bool( "s", false, "little sort tool." ) |
62 var nsort = flag.Bool( "ns", false, "little number sort tool." ) | 60 var nsort = flag.Bool( "ns", false, "little number sort tool." ) |
63 var grep = flag.Bool( "a", false, "little grep tool." ) | 61 var grep = flag.Bool( "a", false, "little grep tool." ) |
64 var grepv = flag.Bool( "b", false, "little grep -v tool." ) | 62 var grepv = flag.Bool( "b", false, "little grep -v tool." ) |
143 lu.CutCsv( flag.Args() ) | 141 lu.CutCsv( flag.Args() ) |
144 os.Exit( 3 ) | 142 os.Exit( 3 ) |
145 } | 143 } |
146 */ | 144 */ |
147 | 145 |
146 if *tee { | |
147 fmt.Fprintln( os.Stderr, "not implement" ) | |
148 os.Exit( 3 ) | |
149 } | |
150 | |
148 if *sort { | 151 if *sort { |
149 fmt.Fprintln( os.Stderr, "not implement" ) | 152 fmt.Fprintln( os.Stderr, "not implement" ) |
150 os.Exit( 3 ) | 153 os.Exit( 3 ) |
151 } | 154 } |
152 | 155 |
256 if *ipscan { | 259 if *ipscan { |
257 fmt.Fprintln( os.Stderr, "not implement" ) | 260 fmt.Fprintln( os.Stderr, "not implement" ) |
258 os.Exit( 2 ) | 261 os.Exit( 2 ) |
259 } | 262 } |
260 | 263 |
264 if *compress && !*putfile { // done. | |
265 if err := is_exist_files( flag.Args() ); err != nil { | |
266 log.Fatal( err ) | |
267 } | |
268 tgz := time.Now().Format( "200601021504.tgz" ) | |
269 lu.Tgz( tgz, flag.Args() ) | |
270 os.Exit( 0 ) | |
271 } | |
272 | |
261 if *uncmprss { // done. | 273 if *uncmprss { // done. |
262 if err := is_exist_files( flag.Args() ); err != nil { | 274 if err := is_exist_files( flag.Args() ); err != nil { |
263 log.Fatal( err ) | 275 log.Fatal( err ) |
264 } | 276 } |
265 lu.UnTgz( flag.Args() ) | 277 lu.UnTgz( flag.Args() ) |
266 os.Exit( 0 ) | 278 os.Exit( 0 ) |
267 } | 279 } |
268 | 280 |
269 /* Here My Uplaad / Download Function */ | 281 /* Here My Uplaad / Download Function */ |
270 host := "http://777.nazo.cc" | 282 host := "http://777.nazo.cc" |
271 // 引数が指定されたらアップロード | 283 |
272 if *putfile { | 284 if *putfile { |
273 if flag.NArg() > 0 { | 285 if flag.NArg() > 0 { |
274 | 286 |
275 // アップロードには,このプログラムで認証が必要:未実装 | 287 // アップロードには,このプログラムで認証が必要:未実装 |
276 if !is_valid_user() { | 288 if !is_valid_user() { |
291 if !*noprefix { | 303 if !*noprefix { |
292 prefix = time.Now().Format( "200601021504_" ) | 304 prefix = time.Now().Format( "200601021504_" ) |
293 } | 305 } |
294 | 306 |
295 // 圧縮 | 307 // 圧縮 |
296 if *compress || *compupld { | 308 if *compress { |
297 tmpfile, err := ioutil.TempFile( ".", "muxx" ) | 309 tmpfile, err := ioutil.TempFile( ".", "muxx" ) |
298 if err != nil { | 310 if err != nil { |
299 log.Fatal( err ) | 311 log.Fatal( err ) |
300 } | 312 } |
301 | 313 |
302 if err := archive_compress( tmpfile.Name(), flag.Args() ); err != nil { | 314 tgz := prefix + tmpfile.Name() + ".tgz" |
315 os.Rename( tmpfile.Name(), tgz ) | |
316 defer os.Remove( tgz ) | |
317 lu.Tgz( tgz, flag.Args() ) | |
318 fmt.Printf( "archive & compress ...done [%s].\n", tgz ) | |
319 | |
320 if err := post_file( url, tgz ); err != nil { | |
303 log.Fatal( err ) | 321 log.Fatal( err ) |
304 } | 322 } |
305 | 323 fmt.Println( "upload ...done." ) |
306 tgz := prefix + tmpfile.Name() + ".tgz" | 324 // 非圧縮 |
307 os.Rename( tmpfile.Name(), tgz ) | |
308 fmt.Printf( "archive & compress ...done [%s].\n", tgz ) | |
309 | |
310 if *compupld { | |
311 if err := post_file( url, tgz ); err != nil { | |
312 log.Fatal( err ) | |
313 } | |
314 fmt.Println( "upload ...done." ) | |
315 defer os.Remove( tgz ) | |
316 } | |
317 // 非圧縮 | |
318 } else { | 325 } else { |
319 for _, file := range flag.Args() { | 326 for _, file := range flag.Args() { |
320 if !*noprefix { | 327 if !*noprefix { |
321 c, err := ioutil.ReadFile( file ) | 328 c, err := ioutil.ReadFile( file ) |
322 if err != nil { | 329 if err != nil { |
330 log.Fatal( err ) | 337 log.Fatal( err ) |
331 } | 338 } |
332 fmt.Println( file + "\tupload ...done." ) | 339 fmt.Println( file + "\tupload ...done." ) |
333 } | 340 } |
334 } | 341 } |
335 os.Exit( 0 ) | 342 } |
336 } | 343 os.Exit( 0 ) |
337 } | 344 } |
338 | 345 |
339 // ファイル一覧を取得 | 346 // ファイル一覧を取得 |
340 if *getfile { | 347 if *getfile { |
341 url := host + "/uploader/index.cgi/goup/" | 348 url := host + "/uploader/index.cgi/goup/" |
425 func is_valid_user() bool { | 432 func is_valid_user() bool { |
426 return true | 433 return true |
427 return false | 434 return false |
428 } | 435 } |
429 | 436 |
430 func archive_compress( zfile string, files []string ) ( error ) { | |
431 tgz, err := os.Create( zfile ) | |
432 if err != nil { | |
433 return err | |
434 } | |
435 defer tgz.Close() | |
436 | |
437 gw := gzip.NewWriter( tgz ) | |
438 defer gw.Close() | |
439 tw := tar.NewWriter( gw ) | |
440 defer tw.Close() | |
441 | |
442 for _, file := range files { | |
443 f, err := os.Open( file ) | |
444 if err != nil { | |
445 return err | |
446 } | |
447 defer f.Close() | |
448 | |
449 stat, _ := f.Stat() | |
450 header := new( tar.Header ) | |
451 header.Name = file | |
452 header.Size = stat.Size() | |
453 header.Mode = int64( stat.Mode() ) | |
454 header.ModTime = stat.ModTime() | |
455 | |
456 if err := tw.WriteHeader( header ); err != nil { | |
457 return err | |
458 } | |
459 if _, err := io.Copy( tw, f ); err != nil { | |
460 return err | |
461 } | |
462 } | |
463 return nil | |
464 } | |
465 | |
466 func is_exist_files( files []string ) error { | 437 func is_exist_files( files []string ) error { |
467 for _, file := range files { | 438 for _, file := range files { |
468 if _, err := os.Stat( file ); os.IsNotExist( err ) { | 439 if _, err := os.Stat( file ); os.IsNotExist( err ) { |
469 return fmt.Errorf( "%s: not exist\n", file ) | 440 return fmt.Errorf( "%s: not exist\n", file ) |
470 } | 441 } |
474 | 445 |
475 func print_help() { | 446 func print_help() { |
476 fmt.Fprintf( os.Stderr, "Usage of %s [%s]:\n", os.Args[0], version ) | 447 fmt.Fprintf( os.Stderr, "Usage of %s [%s]:\n", os.Args[0], version ) |
477 flag.PrintDefaults() | 448 flag.PrintDefaults() |
478 } | 449 } |
450 |