]> Sergey Matveev's repositories - meta4ra.git/blob - cmd/meta4ra/hash.go
Prepare for release
[meta4ra.git] / cmd / meta4ra / hash.go
1 // meta4ra -- Metalink 4.0 utilities
2 // Copyright (C) 2021-2024 Sergey Matveev <stargrave@stargrave.org>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, version 3 of the License.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 package main
17
18 import (
19         "bufio"
20         "flag"
21         "fmt"
22         "io"
23         "log"
24         "os"
25         "strings"
26
27         meta4ra "go.stargrave.org/meta4ra/internal"
28 )
29
30 func runHash() {
31         hashes := flag.String("hashes", meta4ra.HashesDefault,
32                 "hash-name:commandline[,...]")
33         flag.Usage = func() {
34                 fmt.Fprintf(flag.CommandLine.Output(),
35                         "Usage: %s [-hashes ...] < data | read hash name\n", os.Args[0])
36                 flag.PrintDefaults()
37                 fmt.Fprint(flag.CommandLine.Output(), `
38 Only the first hash from -hashes will be used.
39 `)
40         }
41         flag.Parse()
42
43         if *showVersion {
44                 fmt.Println(meta4ra.Version())
45                 return
46         }
47         if *showWarranty {
48                 fmt.Println(meta4ra.Warranty)
49                 return
50         }
51
52         hsh := *hashes
53         if i := strings.Index(hsh, ","); i != -1 {
54                 hsh = hsh[:i]
55         }
56         hasher, err := meta4ra.NewHasher(hsh)
57         if err != nil {
58                 log.Fatalln(err)
59         }
60         if err = hasher.Start(); err != nil {
61                 log.Fatalln(err)
62         }
63         if _, err = io.Copy(hasher, bufio.NewReaderSize(
64                 os.Stdin, meta4ra.BufLen)); err != nil {
65                 log.Fatalln(err)
66         }
67         sums, err := hasher.Sums()
68         if err != nil {
69                 log.Fatalln(err)
70         }
71         fmt.Println(sums[0].Hash, sums[0].Type)
72 }