// Need to record that it hasn't been written yet, before we attempt to do
// anything with it.
piece.incrementPendingWrites()
- // Record that we have the chunk.
+ // Record that we have the chunk, so we aren't trying to download it while
+ // waiting for it to be written to storage.
piece.unpendChunkIndex(chunkIndex(req.chunkSpec, t.chunkSize))
// Cancel pending requests for this chunk.
return
}
+// Concatenates all the files in the torrent into w. open is a function that
+// gets at the contents of the given file.
func (info *Info) writeFiles(w io.Writer, open func(fi FileInfo) (io.ReadCloser, error)) error {
for _, fi := range info.UpvertedFiles() {
r, err := open(fi)
return nil
}
-// Set info.Pieces by hashing info.Files.
+// Sets Pieces (the block of piece hashes in the Info) by using the passed
+// function to get at the torrent data.
func (info *Info) GeneratePieces(open func(fi FileInfo) (io.ReadCloser, error)) error {
if info.PieceLength == 0 {
return errors.New("piece length must be non-zero")