Fixes #382.
"github.com/anacrolix/missinggo/pproffd"
"github.com/anacrolix/missinggo/pubsub"
"github.com/anacrolix/missinggo/slices"
- "github.com/anacrolix/missinggo/v2"
- "github.com/anacrolix/missinggo/v2/conntrack"
"github.com/anacrolix/sync"
"github.com/davecgh/go-spew/spew"
"github.com/dustin/go-humanize"
"golang.org/x/time/rate"
"golang.org/x/xerrors"
+ "github.com/anacrolix/missinggo/v2"
+ "github.com/anacrolix/missinggo/v2/conntrack"
+
"github.com/anacrolix/torrent/bencode"
"github.com/anacrolix/torrent/iplist"
"github.com/anacrolix/torrent/metainfo"
L: cl.locker(),
},
}
+ t._pendingPieces.NewSet = priorityBitmapStableNewSet
t.requestStrategy = cl.config.DefaultRequestStrategy(t.requestStrategyCallbacks(), &cl._mu)
t.logger = cl.logger.WithValues(t).WithText(func(m log.Msg) string {
return fmt.Sprintf("%v: %s", t, m.Text())
"github.com/anacrolix/torrent/storage"
)
-func torrentBar(t *torrent.Torrent) {
+func torrentBar(t *torrent.Torrent, pieceStates bool) {
go func() {
if t.Info() == nil {
fmt.Printf("getting info for %q\n", t.Name())
t.NumPieces(),
partialPieces,
)
- //fmt.Println(psrs)
+ if pieceStates {
+ fmt.Println(psrs)
+ }
time.Sleep(time.Second)
}
}()
return xerrors.Errorf("adding torrent for %q: %w", arg, err)
}
if flags.Progress {
- torrentBar(t)
+ torrentBar(t, flags.PieceStates)
}
t.AddPeers(func() (ret []torrent.Peer) {
for _, ta := range flags.TestPeer {
Stats *bool
PublicIP net.IP
Progress bool
+ PieceStates bool
Quiet bool `help:"discard client logging"`
Dht bool
tagflag.StartPos
github.com/anacrolix/log v0.6.0
github.com/anacrolix/missinggo v1.2.1
github.com/anacrolix/missinggo/perf v1.0.0
- github.com/anacrolix/missinggo/v2 v2.4.0
+ github.com/anacrolix/missinggo/v2 v2.4.1-0.20200227072623-f02f6484f997
github.com/anacrolix/multiless v0.0.0-20191223025854-070b7994e841
github.com/anacrolix/sync v0.2.0
github.com/anacrolix/tagflag v1.0.1
github.com/davecgh/go-spew v1.1.1
github.com/dustin/go-humanize v1.0.0
github.com/edsrzf/mmap-go v1.0.0
+ github.com/elliotchance/orderedmap v1.2.0
github.com/etcd-io/bbolt v1.3.3
github.com/fsnotify/fsnotify v1.4.7
github.com/google/btree v1.0.0
github.com/anacrolix/missinggo/v2 v2.2.1-0.20191103010835-12360f38ced0/go.mod h1:ZzG3/cc3t+5zcYWAgYrJW0MBsSwNwOkTlNquBbP51Bc=
github.com/anacrolix/missinggo/v2 v2.3.0/go.mod h1:ZzG3/cc3t+5zcYWAgYrJW0MBsSwNwOkTlNquBbP51Bc=
github.com/anacrolix/missinggo/v2 v2.3.1/go.mod h1:3XNH0OEmyMUZuvXmYdl+FDfXd0vvSZhvOLy8CFx8tLg=
-github.com/anacrolix/missinggo/v2 v2.4.0 h1:qWSaH/JZyjKBgJ1hrCmNaGUzeEvKrGCbzv/8HjATBFY=
-github.com/anacrolix/missinggo/v2 v2.4.0/go.mod h1:sjPqWXxdr3jWcMO/tXhhshXAaiTkGIgJpN93clGzGr8=
+github.com/anacrolix/missinggo/v2 v2.4.1-0.20200227072623-f02f6484f997 h1:ufGZtSzDyevqcHyFtAWm2HMjmezh/mCemzC1VFEjsu0=
+github.com/anacrolix/missinggo/v2 v2.4.1-0.20200227072623-f02f6484f997/go.mod h1:KY+ij+mWvwGuqSuecLjjPv5LFw5ICUc1UvRems3VAZE=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb h1:2Or5ccMoY4Kfao+WdL2w6tpY6ZEe+2VTVbIPd7A/Ajk=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw=
github.com/anacrolix/mmsg v1.0.0 h1:btC7YLjOn29aTUAExJiVUhQOuf/8rhm+/nWCMAnL3Hg=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
+github.com/elliotchance/orderedmap v1.2.0 h1:Z2kiPPgjjlS8NN+1EFzE4ZO/HpW02gl9ZH3MHL+bNkg=
+github.com/elliotchance/orderedmap v1.2.0/go.mod h1:8hdSl6jmveQw8ScByd3AaNHNk51RhbTazdqtTty+NFw=
github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM=
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
--- /dev/null
+package torrent
+
+import (
+ "github.com/elliotchance/orderedmap"
+
+ "github.com/anacrolix/missinggo/v2/prioritybitmap"
+)
+
+type stableSet struct {
+ om *orderedmap.OrderedMap
+}
+
+func (s stableSet) Has(bit int) bool {
+ _, ok := s.om.Get(bit)
+ return ok
+}
+
+func (s stableSet) Delete(bit int) {
+ s.om.Delete(bit)
+}
+
+func (s stableSet) Len() int {
+ return s.om.Len()
+}
+
+func (s stableSet) Set(bit int) {
+ s.om.Set(bit, struct{}{})
+}
+
+func (s stableSet) Range(f func(int) bool) {
+ for e := s.om.Front(); e != nil; e = e.Next() {
+ if !f(e.Key.(int)) {
+ break
+ }
+ }
+}
+
+func priorityBitmapStableNewSet() prioritybitmap.Set {
+ return stableSet{om: orderedmap.NewOrderedMap()}
+}