Added verbose mode
This commit is contained in:
parent
98d5dd7033
commit
9017579805
8
check.go
8
check.go
@ -31,7 +31,7 @@ type checksum struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check is the entry point for -c operation.
|
// check is the entry point for -c operation.
|
||||||
func check(args []string) chan error {
|
func check(args []string, verbose bool) chan error {
|
||||||
jobs := make(chan checksum)
|
jobs := make(chan checksum)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
@ -55,7 +55,7 @@ func check(args []string) chan error {
|
|||||||
results := []<-chan error{}
|
results := []<-chan error{}
|
||||||
|
|
||||||
for w := 0; w < *ngo; w++ {
|
for w := 0; w < *ngo; w++ {
|
||||||
results = append(results, verify(jobs))
|
results = append(results, verify(jobs, verbose))
|
||||||
}
|
}
|
||||||
|
|
||||||
return merge(results)
|
return merge(results)
|
||||||
@ -105,7 +105,7 @@ func parseCS(line string) checksum {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// verify does grunt work of verifying a stream of jobs (filenames).
|
// verify does grunt work of verifying a stream of jobs (filenames).
|
||||||
func verify(jobs chan checksum) chan error {
|
func verify(jobs chan checksum, verbose bool) chan error {
|
||||||
r := make(chan error)
|
r := make(chan error)
|
||||||
go func() {
|
go func() {
|
||||||
for job := range jobs {
|
for job := range jobs {
|
||||||
@ -125,6 +125,8 @@ func verify(jobs chan checksum) chan error {
|
|||||||
f.Close()
|
f.Close()
|
||||||
if fmt.Sprintf("%x", job.hash.Sum(nil)) != job.checksum {
|
if fmt.Sprintf("%x", job.hash.Sum(nil)) != job.checksum {
|
||||||
r <- fmt.Errorf("%s: bad", job.filename)
|
r <- fmt.Errorf("%s: bad", job.filename)
|
||||||
|
} else if verbose {
|
||||||
|
fmt.Fprintf(os.Stderr, "ok: %v\n", job.filename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(r)
|
close(r)
|
||||||
|
9
hash.go
9
hash.go
@ -32,7 +32,7 @@ func (r results) Less(i, j int) bool { return r[i].f < r[j].f }
|
|||||||
type hashr func() hash.Hash
|
type hashr func() hash.Hash
|
||||||
|
|
||||||
// hsh figures out which hash algo to use, and distributes the work of hashing
|
// hsh figures out which hash algo to use, and distributes the work of hashing
|
||||||
func hsh(files []string) chan result {
|
func hsh(files []string, verbose bool) chan result {
|
||||||
var h hashr
|
var h hashr
|
||||||
switch *algo {
|
switch *algo {
|
||||||
case "sha1", "1":
|
case "sha1", "1":
|
||||||
@ -77,7 +77,7 @@ func hsh(files []string) chan result {
|
|||||||
|
|
||||||
res := []<-chan result{}
|
res := []<-chan result{}
|
||||||
for w := 0; w < *ngo; w++ {
|
for w := 0; w < *ngo; w++ {
|
||||||
res = append(res, compute(h, jobs))
|
res = append(res, compute(h, jobs, verbose))
|
||||||
}
|
}
|
||||||
|
|
||||||
o := make(chan result)
|
o := make(chan result)
|
||||||
@ -96,7 +96,7 @@ func hsh(files []string) chan result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// compute is the checksumming workhorse
|
// compute is the checksumming workhorse
|
||||||
func compute(h hashr, jobs chan checksum) chan result {
|
func compute(h hashr, jobs chan checksum, verbose bool) chan result {
|
||||||
hsh := h()
|
hsh := h()
|
||||||
r := make(chan result)
|
r := make(chan result)
|
||||||
go func() {
|
go func() {
|
||||||
@ -113,6 +113,9 @@ func compute(h hashr, jobs chan checksum) chan result {
|
|||||||
r <- result{err: err}
|
r <- result{err: err}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if verbose {
|
||||||
|
fmt.Fprintf(os.Stderr, "%v\n", job.filename)
|
||||||
|
}
|
||||||
r <- result{f: job.filename, cs: fmt.Sprintf("%x", hsh.Sum(nil))}
|
r <- result{f: job.filename, cs: fmt.Sprintf("%x", hsh.Sum(nil))}
|
||||||
}
|
}
|
||||||
close(r)
|
close(r)
|
||||||
|
5
main.go
5
main.go
@ -10,6 +10,7 @@ import (
|
|||||||
var algo = flag.String("a", "sha256", "algorithm to use")
|
var algo = flag.String("a", "sha256", "algorithm to use")
|
||||||
var mode = flag.Bool("c", false, "check")
|
var mode = flag.Bool("c", false, "check")
|
||||||
var ngo = flag.Int("n", runtime.NumCPU(), "number of goroutines")
|
var ngo = flag.Int("n", runtime.NumCPU(), "number of goroutines")
|
||||||
|
var verbose = flag.Bool("v", false, "vebose")
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
@ -17,7 +18,7 @@ func main() {
|
|||||||
switch *mode {
|
switch *mode {
|
||||||
case true:
|
case true:
|
||||||
ec := 0
|
ec := 0
|
||||||
for err := range check(files) {
|
for err := range check(files, *verbose) {
|
||||||
ec++
|
ec++
|
||||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||||
}
|
}
|
||||||
@ -26,7 +27,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
case false:
|
case false:
|
||||||
ec := 0
|
ec := 0
|
||||||
for res := range hsh(files) {
|
for res := range hsh(files, *verbose) {
|
||||||
if res.err != nil {
|
if res.err != nil {
|
||||||
ec++
|
ec++
|
||||||
fmt.Fprintf(os.Stderr, "%v\n", res.err)
|
fmt.Fprintf(os.Stderr, "%v\n", res.err)
|
||||||
|
Loading…
Reference in New Issue
Block a user