package main
import (
+ "errors"
"fmt"
"io"
"os"
+ "github.com/anacrolix/bargle/v2"
"github.com/anacrolix/log"
"github.com/anacrolix/torrent/merkle"
"github.com/anacrolix/torrent/metainfo"
)
-type argError struct {
- err error
-}
-
func assertOk(err error) {
if err != nil {
panic(err)
}
func main() {
- args := os.Args[1:]
- map[string]func(){
+ err := mainErr()
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+}
+
+func mainErr() error {
+ p := bargle.NewParser()
+ defer p.DoHelpIfHelping()
+ runMap := func(m map[string]func()) {
+ for key, value := range m {
+ if p.Parse(bargle.Keyword(key)) {
+ value()
+ return
+ }
+ }
+ p.Fail()
+ }
+ parseFileName := func() (ret string) {
+ if p.Parse(bargle.Positional("file", bargle.BuiltinUnmarshaler(&ret))) {
+ return
+ }
+ p.SetError(errors.New("file not specified"))
+ panic(p.Fail())
+ }
+ runMap(map[string]func(){
"metainfo": func() {
- map[string]func(){
+ runMap(map[string]func(){
"validate-v2": func() {
- mi, err := metainfo.LoadFromFile(args[2])
+ mi, err := metainfo.LoadFromFile(parseFileName())
assertOk(err)
info, err := mi.UnmarshalInfo()
assertOk(err)
assertOk(err)
},
"pprint": func() {
- mi, err := metainfo.LoadFromFile(args[2])
+ mi, err := metainfo.LoadFromFile(parseFileName())
assertOk(err)
info, err := mi.UnmarshalInfo()
assertOk(err)
for _, f := range files {
numPieces := int((f.Length + info.PieceLength - 1) / info.PieceLength)
endIndex := pieceIndex + numPieces
+ hash := "no v2 pieces root"
+ for a := range f.PiecesRoot.Iter() {
+ hash = a.HexString()
+ }
fmt.Printf(
- "%x: %q: pieces (%v-%v)\n",
- f.PiecesRoot.Unwrap(),
+ "%s: %q: pieces (%v-%v)\n",
+ hash,
f.BestPath(),
pieceIndex,
endIndex-1,
pieceIndex = endIndex
}
},
- }[args[1]]()
+ })
},
"merkle": func() {
h := merkle.NewHash()
}
fmt.Printf("%x\n", h.Sum(nil))
},
- }[args[0]]()
+ })
+ p.FailIfArgsRemain()
+ return p.Err()
}
github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0
github.com/alexflint/go-arg v1.4.3
github.com/anacrolix/bargle v0.0.0-20221014000746-4f2739072e9d
+ github.com/anacrolix/bargle/v2 v2.0.0
github.com/anacrolix/chansync v0.6.1-0.20250805140455-89f141559964
github.com/anacrolix/dht/v2 v2.22.2-0.20250623060212-d7b7d8a52b01
github.com/anacrolix/envpprof v1.3.0
github.com/anacrolix/fuse v0.3.2-0.20250603105216-aeb550c91d7a
- github.com/anacrolix/generics v0.0.3-0.20250526144502-593be7092deb
+ github.com/anacrolix/generics v0.0.4-0.20250708073025-68393b391647
github.com/anacrolix/go-libutp v1.3.2
- github.com/anacrolix/gostdapp v0.1.0
+ github.com/anacrolix/gostdapp v0.2.0
github.com/anacrolix/log v0.16.1-0.20250526073428-5cb74e15092b
github.com/anacrolix/missinggo v1.3.0
github.com/anacrolix/missinggo/v2 v2.10.0
github.com/anacrolix/fuse v0.3.2-0.20250603105216-aeb550c91d7a h1:bP+SxvpLAWXgpRvDKmB+d8n4XEWYHH5czGlcZ5Kw66Y=
github.com/anacrolix/fuse v0.3.2-0.20250603105216-aeb550c91d7a/go.mod h1:vN3X/6E+uHNjg5F8Oy9FD9I+pYxeDWeB8mNjIoxL5ds=
github.com/anacrolix/generics v0.0.0-20230113004304-d6428d516633/go.mod h1:ff2rHB/joTV03aMSSn/AZNnaIpUw0h3njetGsaXcMy8=
-github.com/anacrolix/generics v0.0.3-0.20250526144502-593be7092deb h1:0GzqbT+KzmrpXsqEp6O3t6qfydTQuqvgo3nTJEC1EGA=
-github.com/anacrolix/generics v0.0.3-0.20250526144502-593be7092deb/go.mod h1:MN3ve08Z3zSV/rTuX/ouI4lNdlfTxgdafQJiLzyNRB8=
+github.com/anacrolix/generics v0.0.4-0.20250708073025-68393b391647 h1:dDTY2j+pjY0EnF0TIuAxees1FeFpnFVE2dr7BxfWe24=
+github.com/anacrolix/generics v0.0.4-0.20250708073025-68393b391647/go.mod h1:MN3ve08Z3zSV/rTuX/ouI4lNdlfTxgdafQJiLzyNRB8=
github.com/anacrolix/go-libutp v1.3.2 h1:WswiaxTIogchbkzNgGHuHRfbrYLpv4o290mlvcx+++M=
github.com/anacrolix/go-libutp v1.3.2/go.mod h1:fCUiEnXJSe3jsPG554A200Qv+45ZzIIyGEvE56SHmyA=
-github.com/anacrolix/gostdapp v0.1.0 h1:sZC+gSLhA7Hdalak5rPCkhO0YSEl0tt/lsovxh6qka4=
-github.com/anacrolix/gostdapp v0.1.0/go.mod h1:2pstbgWcpBCY3rFUldM0NbDCrP86vWsh61wj8yY517E=
+github.com/anacrolix/gostdapp v0.2.0 h1:UNuF8oKKFIa2tzcXLTiVStCYSUfRith81EskV05gIfk=
+github.com/anacrolix/gostdapp v0.2.0/go.mod h1:2pstbgWcpBCY3rFUldM0NbDCrP86vWsh61wj8yY517E=
github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.13.1/go.mod h1:D4+CvN8SnruK6zIFS/xPoRJmtvtnxs+CSfDQ+BFxZ68=