diff --git a/integration_tests/fixed_test.sh b/integration_tests/fixed_test.sh new file mode 100755 index 0000000..6fb4823 --- /dev/null +++ b/integration_tests/fixed_test.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Sanity test for the fixed-size chunking algorithm + +. ./test_functions.sh + +fixture + +pushd ${TEST_REPO} +${DUPLICACY} init integration-tests $TEST_STORAGE -c 64 -max 64 -min 64 + +add_file file3 +add_file file4 + + +${DUPLICACY} backup +${DUPLICACY} check --files -stats +popd diff --git a/src/duplicacy_backupmanager.go b/src/duplicacy_backupmanager.go index 06838dc..bfb7eea 100644 --- a/src/duplicacy_backupmanager.go +++ b/src/duplicacy_backupmanager.go @@ -1132,7 +1132,7 @@ func (manager *BackupManager) RestoreFile(chunkDownloader *ChunkDownloader, chun fileHash = hash return nil, false }) - if fileHash == entry.Hash { + if fileHash == entry.Hash && fileHash != "" { LOG_TRACE("DOWNLOAD_SKIP", "File %s unchanged (by hash)", entry.Path) return false } diff --git a/src/duplicacy_chunkmaker.go b/src/duplicacy_chunkmaker.go index b141cab..7f9a3ab 100644 --- a/src/duplicacy_chunkmaker.go +++ b/src/duplicacy_chunkmaker.go @@ -146,7 +146,6 @@ func (maker *ChunkMaker) ForEachChunk(reader io.Reader, endOfChunk func(chunk *C } for { - startNewChunk() maker.bufferStart = 0 for maker.bufferStart < maker.minimumChunkSize && !isEOF { count, err := reader.Read(maker.buffer[maker.bufferStart : maker.minimumChunkSize]) @@ -174,6 +173,7 @@ func (maker *ChunkMaker) ForEachChunk(reader io.Reader, endOfChunk func(chunk *C return } else { endOfChunk(chunk, false) + startNewChunk() fileSize = 0 fileHasher = maker.config.NewFileHasher() isEOF = false