/*
syncer -- stateful file/device data syncer.
-Copyright (C) 2015 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2015-2019 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
data []byte
}
-func prn(s string) {
- os.Stdout.Write([]byte(s))
- os.Stdout.Sync()
-}
-
func main() {
flag.Parse()
bs := *blkSize * int64(1<<10)
syncs := make(chan chan SyncEvent, workers)
// Writer
- prn("[")
+ prn := NewPrinter(blocks)
finished := make(chan struct{})
go func() {
var event SyncEvent
sumState := state[i*blake2b.Size : i*blake2b.Size+blake2b.Size]
if bytes.Compare(sumState, sum[:]) != 0 {
sync <- SyncEvent{i, buf, buf[:n]}
- prn("%")
+ prn.Changed()
} else {
sync <- SyncEvent{i, buf, nil}
- prn(".")
+ prn.Unchanged()
}
copy(sumState, sum[:])
close(sync)
}
close(syncs)
<-finished
- prn("]\n")
+ prn.Output()
log.Println("Saving state")
stateFile.Write(state)