Mercurial > mercurial > hgweb_rsearcher.cgi
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 |