// Generates an index from a reader // This is mostly a utility function to avoid being overly verbose in tests that need // an index to work, but don't want to construct one by hand in order to avoid the dependencies // obviously this means that those tests are likely to fail if there are issues with any of the other // modules, which is not ideal. // TODO: move to util? func BuildChecksumIndex(check *filechecksum.FileChecksumGenerator, r io.Reader) ( fcheck []byte, i *index.ChecksumIndex, lookup filechecksum.ChecksumLookup, err error, ) { b := bytes.NewBuffer(nil) fcheck, err = check.GenerateChecksums(r, b) if err != nil { return } weakSize := check.WeakRollingHash.Size() strongSize := check.GetStrongHash().Size() readChunks, err := chunks.LoadChecksumsFromReader(b, weakSize, strongSize) if err != nil { return } i = index.MakeChecksumIndex(readChunks) lookup = chunks.StrongChecksumGetter(readChunks) return }
func ExampleFileChecksumGenerator_LoadChecksumsFromReader() { const BLOCKSIZE = 8096 checksum := NewFileChecksumGenerator(BLOCKSIZE) // This could be any source that conforms to io.Reader // sections of a file, or the body of an http response file1, err := os.Open("fileChecksums.chk") if err != nil { return } defer file1.Close() ws, ss := checksum.GetChecksumSizes() checksums, err := chunks.LoadChecksumsFromReader(file1, ws, ss) if err != nil { return } // Make an index that we can use against our local // checksums i := index.MakeChecksumIndex(checksums) // example checksum from a local file // look for the chunk in the index i.FindWeakChecksumInIndex([]byte("a")) }
func readIndex(r io.Reader, blocksize uint) ( i *index.ChecksumIndex, checksumLookup filechecksum.ChecksumLookup, blockCount uint, err error, ) { generator := filechecksum.NewFileChecksumGenerator(blocksize) readChunks, e := chunks.LoadChecksumsFromReader( r, generator.WeakRollingHash.Size(), generator.StrongHash.Size(), ) err = e if err != nil { return } checksumLookup = chunks.StrongChecksumGetter(readChunks) i = index.MakeChecksumIndex(readChunks) blockCount = uint(len(readChunks)) return }