Mercurial > mercurial > hgweb_rsearcher.cgi
diff go/mkidx.go @ 16:b651aa41b9d4 default tip
hhsinfo method (server)
author | pyon@macmini |
---|---|
date | Mon, 15 Jul 2019 07:03:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/go/mkidx.go Mon Jul 15 07:03:05 2019 +0900 @@ -0,0 +1,96 @@ +package main + +import ( + "fmt" + "flag" + "io/ioutil" + "log" + "os" + "path/filepath" + "regexp" + "sort" + "strings" +) + +func main() { + var list = flag.Bool( "l", false, "list db." ) + var newest = flag.Bool( "n", false, "only save newest." ) + var output = flag.String( "o", "", "output filename." ) + var help = flag.Bool( "h", false, "print help." ) + flag.Parse() + + idxdb := "index.db" + + content, err := ioutil.ReadFile( idxdb ) + if err != nil { + log.Fatal( err ) + } + + if *list { + fmt.Printf( "%s", content ) + os.Exit( 0 ) + } + + if *help || flag.NArg()!= 1 { + fmt.Fprintf( os.Stderr, "$ mkidx [20201231]\n" ) + flag.PrintDefaults() + os.Exit( 1 ) + } + + if *output == "" { + *output = idxdb + } + + d := flag.Args()[0] + r, err := regexp.Compile( "^20[0-9]{6}$" ) + if err != nil { + log.Fatal( err ) + } + m := r.FindString( d ) + if len( m ) == 0 { + fmt.Fprintf( os.Stderr, "bad directory.\n" ) + os.Exit( 1 ) + } + + var hs []string + + fi, _ := os.Stat( d ) + if fi.IsDir() { + filepath.Walk( d, func( path string, info os.FileInfo, err error ) error { + if !info.IsDir() && strings.HasSuffix( path, ".tgz" ) { + h := strings.TrimSuffix( path, ".tgz" )[9:] + hs = append( hs, h + ":" + d ) + } + return nil + } ) + } else { + fmt.Fprintf( os.Stderr, "%s: not directory\n", d ) + log.Fatal( err ) + } + + for _, s := range strings.Split( string( content ), "\n" ) { + hs = append( hs, s ) + } + + sort.Strings( hs ) + var str string + + if !*newest { + for _, s := range hs { + str += s + "\n" + } + } else { + seen := make( map[string]int ) + for _, s := range hs { + if seen[s] == 0 { + str += s + "\n" + } + seen[s]++ + } + } + + if err := ioutil.WriteFile( *output, []byte( str ), 0644 ); err !=nil { + log.Fatal( err ) + } +} +