comparison go/mkidx.go @ 16:b651aa41b9d4 default tip

hhsinfo method (server)
author pyon@macmini
date Mon, 15 Jul 2019 07:03:05 +0900
parents
children
comparison
equal deleted inserted replaced
15:c262e17de9b1 16:b651aa41b9d4
1 package main
2
3 import (
4 "fmt"
5 "flag"
6 "io/ioutil"
7 "log"
8 "os"
9 "path/filepath"
10 "regexp"
11 "sort"
12 "strings"
13 )
14
15 func main() {
16 var list = flag.Bool( "l", false, "list db." )
17 var newest = flag.Bool( "n", false, "only save newest." )
18 var output = flag.String( "o", "", "output filename." )
19 var help = flag.Bool( "h", false, "print help." )
20 flag.Parse()
21
22 idxdb := "index.db"
23
24 content, err := ioutil.ReadFile( idxdb )
25 if err != nil {
26 log.Fatal( err )
27 }
28
29 if *list {
30 fmt.Printf( "%s", content )
31 os.Exit( 0 )
32 }
33
34 if *help || flag.NArg()!= 1 {
35 fmt.Fprintf( os.Stderr, "$ mkidx [20201231]\n" )
36 flag.PrintDefaults()
37 os.Exit( 1 )
38 }
39
40 if *output == "" {
41 *output = idxdb
42 }
43
44 d := flag.Args()[0]
45 r, err := regexp.Compile( "^20[0-9]{6}$" )
46 if err != nil {
47 log.Fatal( err )
48 }
49 m := r.FindString( d )
50 if len( m ) == 0 {
51 fmt.Fprintf( os.Stderr, "bad directory.\n" )
52 os.Exit( 1 )
53 }
54
55 var hs []string
56
57 fi, _ := os.Stat( d )
58 if fi.IsDir() {
59 filepath.Walk( d, func( path string, info os.FileInfo, err error ) error {
60 if !info.IsDir() && strings.HasSuffix( path, ".tgz" ) {
61 h := strings.TrimSuffix( path, ".tgz" )[9:]
62 hs = append( hs, h + ":" + d )
63 }
64 return nil
65 } )
66 } else {
67 fmt.Fprintf( os.Stderr, "%s: not directory\n", d )
68 log.Fatal( err )
69 }
70
71 for _, s := range strings.Split( string( content ), "\n" ) {
72 hs = append( hs, s )
73 }
74
75 sort.Strings( hs )
76 var str string
77
78 if !*newest {
79 for _, s := range hs {
80 str += s + "\n"
81 }
82 } else {
83 seen := make( map[string]int )
84 for _, s := range hs {
85 if seen[s] == 0 {
86 str += s + "\n"
87 }
88 seen[s]++
89 }
90 }
91
92 if err := ioutil.WriteFile( *output, []byte( str ), 0644 ); err !=nil {
93 log.Fatal( err )
94 }
95 }
96