From 42a6ab91403be072d8c33661696efc8d6de797ed Mon Sep 17 00:00:00 2001 From: Gilbert Chen Date: Thu, 29 Jun 2017 13:11:28 -0400 Subject: [PATCH] In fixed-size chunking, create a new chunk after returning the old one --- integration_tests/fixed_test.sh | 18 ++++++++++++++++++ src/duplicacy_backupmanager.go | 2 +- src/duplicacy_chunkmaker.go | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100755 integration_tests/fixed_test.sh 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