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 )
+	}
+}
+