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 |
