From: Matt Joiner Date: Thu, 7 Aug 2025 05:47:44 +0000 (+1000) Subject: Convert cmd/torrent2 to bargle/v2 X-Git-Tag: v1.59.0~2^2~36 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=cd27f4c2287eb78ce17fd728661608f6a6179ecb;p=btrtrc.git Convert cmd/torrent2 to bargle/v2 --- diff --git a/cmd/torrent2/main.go b/cmd/torrent2/main.go index 223c3fba..b215ee1c 100644 --- a/cmd/torrent2/main.go +++ b/cmd/torrent2/main.go @@ -4,20 +4,18 @@ 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) @@ -29,12 +27,37 @@ func bail(str string) { } 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) @@ -45,7 +68,7 @@ func main() { assertOk(err) }, "pprint": func() { - mi, err := metainfo.LoadFromFile(args[2]) + mi, err := metainfo.LoadFromFile(parseFileName()) assertOk(err) info, err := mi.UnmarshalInfo() assertOk(err) @@ -54,9 +77,13 @@ func main() { 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, @@ -64,7 +91,7 @@ func main() { pieceIndex = endIndex } }, - }[args[1]]() + }) }, "merkle": func() { h := merkle.NewHash() @@ -75,5 +102,7 @@ func main() { } fmt.Printf("%x\n", h.Sum(nil)) }, - }[args[0]]() + }) + p.FailIfArgsRemain() + return p.Err() } diff --git a/go.mod b/go.mod index d7182bff..22fdf1bb 100644 --- a/go.mod +++ b/go.mod @@ -7,13 +7,14 @@ require ( 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 diff --git a/go.sum b/go.sum index 8852f7cd..d67f8b9a 100644 --- a/go.sum +++ b/go.sum @@ -80,12 +80,12 @@ github.com/anacrolix/envpprof v1.3.0/go.mod h1:7QIG4CaX1uexQ3tqd5+BRa/9e2D02Wcer 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=