Преглед изворни кода

Populate block offsets even if the blocks are not diffed

Audrius Butkevicius пре 11 година
родитељ
комит
aa168ec2d6
2 измењених фајлова са 11 додато и 7 уклоњено
  1. 2 0
      internal/model/puller.go
  2. 9 7
      internal/scanner/blocks.go

+ 2 - 0
internal/model/puller.go

@@ -453,6 +453,8 @@ func (p *Puller) handleFile(file protocol.FileInfo, copyChan chan<- copyBlocksSt
 
 FilesAreDifferent:
 
+	scanner.PopulateOffsets(file.Blocks)
+
 	// Figure out the absolute filenames we need once and for all
 	tempName := filepath.Join(p.dir, defTempNamer.TempName(file.Name))
 	realName := filepath.Join(p.dir, file.Name)

+ 9 - 7
internal/scanner/blocks.go

@@ -68,6 +68,15 @@ func Blocks(r io.Reader, blocksize int, sizehint int64) ([]protocol.BlockInfo, e
 	return blocks, nil
 }
 
+// Set the Offset field on each block
+func PopulateOffsets(blocks []protocol.BlockInfo) {
+	var offset int64
+	for i := range blocks {
+		blocks[i].Offset = offset
+		offset += int64(blocks[i].Size)
+	}
+}
+
 // BlockDiff returns lists of common and missing (to transform src into tgt)
 // blocks. Both block lists must have been created with the same block size.
 func BlockDiff(src, tgt []protocol.BlockInfo) (have, need []protocol.BlockInfo) {
@@ -75,13 +84,6 @@ func BlockDiff(src, tgt []protocol.BlockInfo) (have, need []protocol.BlockInfo)
 		return nil, nil
 	}
 
-	// Set the Offset field on each target block
-	var offset int64
-	for i := range tgt {
-		tgt[i].Offset = offset
-		offset += int64(tgt[i].Size)
-	}
-
 	if len(tgt) != 0 && len(src) == 0 {
 		// Copy the entire file
 		return nil, tgt