initial
This commit is contained in:
parent
67b51b6ead
commit
59bf39aa6d
|
@ -0,0 +1 @@
|
|||
xsum
|
2
Makefile
2
Makefile
|
@ -13,7 +13,7 @@ GOFLAGS = -ldflags "$(GOLDFLAGS)"
|
|||
default: rundebug
|
||||
|
||||
rundebug: build
|
||||
DEBUG=1 ./xsum
|
||||
./xsum -d
|
||||
|
||||
run: build
|
||||
./xsum
|
||||
|
|
|
@ -0,0 +1,128 @@
|
|||
package main
|
||||
|
||||
//import "crypto/sha256"
|
||||
import "fmt"
|
||||
import "github.com/sirupsen/logrus"
|
||||
|
||||
//import "github.com/pkg/xattr"
|
||||
import "hash"
|
||||
import "os"
|
||||
import "flag"
|
||||
import "time"
|
||||
|
||||
var Version string
|
||||
var Buildtime string
|
||||
var Builduser string
|
||||
var Buildarch string
|
||||
var log *logrus.Logger
|
||||
|
||||
func main() {
|
||||
os.Exit(xsum())
|
||||
}
|
||||
|
||||
func xsum() int {
|
||||
log = logrus.New()
|
||||
log.SetLevel(logrus.ErrorLevel)
|
||||
log.SetReportCaller(false)
|
||||
debugPtr := flag.Bool("d", false, "debug mode")
|
||||
flag.Parse()
|
||||
if *debugPtr == true {
|
||||
log.SetReportCaller(true)
|
||||
log.SetLevel(logrus.DebugLevel)
|
||||
}
|
||||
|
||||
log.Debugf(
|
||||
"xsum version %s (%s) built %s by %s",
|
||||
Version,
|
||||
Buildarch,
|
||||
Buildtime,
|
||||
Builduser,
|
||||
)
|
||||
|
||||
paths := flag.Args()
|
||||
fmt.Printf("%+v\n", paths)
|
||||
if len(paths) > 1 {
|
||||
paths = paths[1:]
|
||||
}
|
||||
fmt.Printf("%+v\n", paths)
|
||||
switch flag.Arg(0) {
|
||||
case "cron":
|
||||
return xsfCheckAndUpdate(paths)
|
||||
case "check-and-update":
|
||||
return xsfCheckAndUpdate(paths)
|
||||
case "check":
|
||||
return xsfCheck(paths)
|
||||
case "update":
|
||||
return xsfUpdate(paths)
|
||||
default:
|
||||
usage()
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
func usage() {
|
||||
fmt.Fprintf(os.Stderr, "usage: %s [-d] <update|check|check-and-update|cron> <path> [path2] [...]\n", os.Args[0])
|
||||
flag.PrintDefaults()
|
||||
}
|
||||
|
||||
func xsfCheck(paths []string) int {
|
||||
log.Debugf("check")
|
||||
return 0
|
||||
}
|
||||
|
||||
func showError(e *error) {
|
||||
fmt.Fprintf(os.Stderr, "error: %s\n", e)
|
||||
}
|
||||
|
||||
func xsfUpdate(paths []string) int {
|
||||
log.Debugf("update")
|
||||
for _, path := range paths {
|
||||
x := NewXsf(path)
|
||||
err := x.Update()
|
||||
if err != nil {
|
||||
showError(&err)
|
||||
return -1
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func xsfCheckAndUpdate(paths []string) int {
|
||||
log.Debugf("check-and-update")
|
||||
r := xsfCheck(paths)
|
||||
if r != 0 {
|
||||
return r
|
||||
}
|
||||
return xsfUpdate(paths)
|
||||
}
|
||||
|
||||
type xsf struct {
|
||||
path string
|
||||
mtime *time.Time
|
||||
size int64
|
||||
sum *hash.Hash
|
||||
fi *os.FileInfo
|
||||
}
|
||||
|
||||
func (x *xsf) Update() error {
|
||||
fp, e1 := os.Open(x.path)
|
||||
defer fp.Close()
|
||||
if e1 != nil {
|
||||
return e1
|
||||
}
|
||||
|
||||
fi, e2 := fp.Stat()
|
||||
if e2 != nil {
|
||||
return e2
|
||||
}
|
||||
x.size = fi.Size()
|
||||
t := fi.ModTime()
|
||||
x.mtime = &t
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewXsf(path string) *xsf {
|
||||
x := xsf{}
|
||||
x.path = path
|
||||
return &x
|
||||
}
|
Loading…
Reference in New Issue