]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Update bargle use
authorMatt Joiner <anacrolix@gmail.com>
Tue, 21 Jun 2022 06:38:19 +0000 (16:38 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 12 Jul 2022 06:00:52 +0000 (16:00 +1000)
cmd/torrent/main.go
cmd/torrent/metainfo.go
cmd/torrent/scrape.go
cmd/torrent/serve.go

index f21bc87ec9a957edfeb0bef020384de000d569bc..4a0fc3e3ff633cffc1b8f59c659fb3eb2c325a66 100644 (file)
@@ -2,12 +2,14 @@
 package main
 
 import (
+       "fmt"
        stdLog "log"
        "net/http"
 
        "github.com/anacrolix/bargle"
        "github.com/anacrolix/envpprof"
        xprometheus "github.com/anacrolix/missinggo/v2/prometheus"
+       "github.com/anacrolix/torrent/version"
        "github.com/prometheus/client_golang/prometheus"
        "github.com/prometheus/client_golang/prometheus/promhttp"
 )
@@ -22,7 +24,9 @@ func main() {
        main := bargle.Main{}
        main.Defer(envpprof.Stop)
        debug := false
-       main.Options = append(main.Options, bargle.Flag{Longs: []string{"debug"}, Value: &debug})
+       debugFlag := bargle.NewFlag(&debug)
+       debugFlag.AddLong("debug")
+       main.Options = append(main.Options, debugFlag.Make())
        main.Positionals = append(main.Positionals,
                bargle.Subcommand{Name: "metainfo", Command: metainfoCmd()},
                //bargle.Subcommand{Name: "announce", Command: func() bargle.Command {
@@ -35,16 +39,15 @@ func main() {
                //      }
                //      return announceErr(cmd)
                //}()},
-               //bargle.Subcommand{Name: "scrape", Command: func() bargle.Command {
-               //      var cmd ScrapeCmd
-               //      err := p.NewParser().AddParams(
-               //              args.Pos("tracker", &cmd.Tracker),
-               //              args.Pos("infohash", &cmd.InfoHashes, args.Arity('+'))).Parse()
-               //      if err != nil {
-               //              return err
-               //      }
-               //      return scrape(cmd)
-               //}()},
+               bargle.Subcommand{Name: "scrape", Command: func() bargle.Command {
+                       var scrapeCfg scrapeCfg
+                       cmd := bargle.FromStruct(&scrapeCfg)
+                       cmd.Desc = "fetch swarm metrics for info-hashes from tracker"
+                       cmd.DefaultAction = func() error {
+                               return scrape(scrapeCfg)
+                       }
+                       return cmd
+               }()},
                bargle.Subcommand{Name: "download", Command: func() bargle.Command {
                        var dlc DownloadCmd
                        cmd := bargle.FromStruct(&dlc)
@@ -100,13 +103,16 @@ func main() {
                //      }(),
                //      Desc: "reads bencoding from stdin into Go native types and spews the result",
                //},
-               //bargle.Subcommand{Name: "version", Command: func() bargle.Command {
-               //      fmt.Printf("HTTP User-Agent: %q\n", version.DefaultHttpUserAgent)
-               //      fmt.Printf("Torrent client version: %q\n", version.DefaultExtendedHandshakeClientVersion)
-               //      fmt.Printf("Torrent version prefix: %q\n", version.DefaultBep20Prefix)
-               //      return nil
-               //}()},
-               bargle.Subcommand{Name: "serve", Command: serve(), Desc: "creates and seeds a torrent from a filepath"},
+               bargle.Subcommand{Name: "version", Command: bargle.Command{
+                       DefaultAction: func() error {
+                               fmt.Printf("HTTP User-Agent: %q\n", version.DefaultHttpUserAgent)
+                               fmt.Printf("Torrent client version: %q\n", version.DefaultExtendedHandshakeClientVersion)
+                               fmt.Printf("Torrent version prefix: %q\n", version.DefaultBep20Prefix)
+                               return nil
+                       },
+                       Desc: "prints various protocol default version strings",
+               }},
+               bargle.Subcommand{Name: "serve", Command: serve()},
        )
        main.Run()
 }
index 4cca795453fccde7ce2f52fe3f00ab586d4715b2..38c14c879a093c01766ad87a34bfd4c658790429 100644 (file)
@@ -22,9 +22,9 @@ func metainfoCmd() (cmd bargle.Command) {
        var mi *metainfo.MetaInfo
        // TODO: Test if bargle treats no subcommand as a failure.
        cmd.Positionals = append(cmd.Positionals,
-               &bargle.Positional[*string]{
+               &bargle.Positional{
                        Name:  "torrent file",
-                       Value: &metainfoPath,
+                       Value: &bargle.String{Target: &metainfoPath},
                        AfterParseFunc: func(ctx bargle.Context) error {
                                ctx.AfterParse(func() (err error) {
                                        mi, err = metainfo.LoadFromFile(metainfoPath)
index a0a93b5755a9ca1efbd75611898ceaa2877e4830..56b9c70cb8a8e46f14cf6b43222c0f61c899c6a0 100644 (file)
@@ -11,12 +11,12 @@ import (
        "github.com/anacrolix/torrent"
 )
 
-type ScrapeCmd struct {
-       Tracker    string `arg:"positional"`
-       InfoHashes []torrent.InfoHash
+type scrapeCfg struct {
+       Tracker    string             `arg:"positional"`
+       InfoHashes []torrent.InfoHash `arity:"+" arg:"positional"`
 }
 
-func scrape(flags ScrapeCmd) error {
+func scrape(flags scrapeCfg) error {
        trackerUrl, err := url.Parse(flags.Tracker)
        if err != nil {
                return fmt.Errorf("parsing tracker url: %w", err)
index 5b88a529f819309c18fc2237312c5c52aa5c8a4a..cf6d483f9ff03864ecc8b3f46af580f0e89dcf40 100644 (file)
@@ -14,8 +14,11 @@ import (
 )
 
 func serve() (cmd bargle.Command) {
-       filePath := &bargle.Positional[string]{}
-       cmd.Positionals = append(cmd.Positionals, filePath)
+       var filePath string
+       cmd.Positionals = append(cmd.Positionals, &bargle.Positional{
+               Value: &bargle.String{Target: &filePath},
+       })
+       cmd.Desc = "creates and seeds a torrent from a filepath"
        cmd.DefaultAction = func() error {
                cfg := torrent.NewDefaultClientConfig()
                cfg.Seed = true
@@ -35,9 +38,9 @@ func serve() (cmd bargle.Command) {
                info := metainfo.Info{
                        PieceLength: pieceLength,
                }
-               err = info.BuildFromFilePath(filePath.Value)
+               err = info.BuildFromFilePath(filePath)
                if err != nil {
-                       return fmt.Errorf("building info from path %q: %w", filePath.Value, err)
+                       return fmt.Errorf("building info from path %q: %w", filePath, err)
                }
                for _, fi := range info.Files {
                        log.Printf("added %q", fi.Path)
@@ -54,7 +57,7 @@ func serve() (cmd bargle.Command) {
                to, _ := cl.AddTorrentOpt(torrent.AddTorrentOpts{
                        InfoHash: ih,
                        Storage: storage.NewFileOpts(storage.NewFileClientOpts{
-                               ClientBaseDir: filePath.Value,
+                               ClientBaseDir: filePath,
                                FilePathMaker: func(opts storage.FilePathMakerOpts) string {
                                        return filepath.Join(opts.File.Path...)
                                },