view 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 source

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