diff --git a/Duplicati/Library/Main/Operation/BackupHandler.cs b/Duplicati/Library/Main/Operation/BackupHandler.cs index 3d48efebc..7660d2206 100644 --- a/Duplicati/Library/Main/Operation/BackupHandler.cs +++ b/Duplicati/Library/Main/Operation/BackupHandler.cs @@ -103,8 +103,10 @@ namespace Duplicati.Library.Main.Operation private UsnJournalService GetJournalService(IEnumerable sources, ISnapshotService snapshot, IFilter filter, long lastfilesetid) { if (m_options.UsnStrategy == Options.OptimizationStrategy.Off) return null; + var journalData = m_database.GetChangeJournalData(lastfilesetid); - var service = new UsnJournalService(sources, snapshot, filter, journalData, cancellationTokenSource.Token); + var service = new UsnJournalService(sources, snapshot, filter, m_options.FileAttributeFilter, m_options.SkipFilesLargerThan, + journalData, cancellationTokenSource.Token); foreach (var volumeData in service.VolumeDataList) { diff --git a/Duplicati/Library/Snapshots/UsnJournalService.cs b/Duplicati/Library/Snapshots/UsnJournalService.cs index dd8f084ec..f51d48291 100644 --- a/Duplicati/Library/Snapshots/UsnJournalService.cs +++ b/Duplicati/Library/Snapshots/UsnJournalService.cs @@ -44,13 +44,16 @@ namespace Duplicati.Library.Snapshots /// Sources to filter /// /// Emit filter + /// + /// /// Journal-data of previous fileset - public UsnJournalService(IEnumerable sources, ISnapshotService snapshot, IFilter emitFilter, - IEnumerable prevJournalData, CancellationToken token) + /// + public UsnJournalService(IEnumerable sources, ISnapshotService snapshot, IFilter emitFilter, FileAttributes fileAttributeFilter, + long skipFilesLargerThan, IEnumerable prevJournalData, CancellationToken token) { m_sources = sources; m_snapshot = snapshot; - m_volumeDataDict = Initialize(emitFilter, prevJournalData); + m_volumeDataDict = Initialize(emitFilter, fileAttributeFilter, skipFilesLargerThan, prevJournalData); m_token = token; } @@ -60,18 +63,26 @@ namespace Duplicati.Library.Snapshots /// Initialize list of modified files / folder for each volume /// /// + /// + /// /// /// - private Dictionary Initialize(IFilter emitFilter, IEnumerable prevJournalData) + private Dictionary Initialize(IFilter emitFilter, FileAttributes fileAttributeFilter, long skipFilesLargerThan, + IEnumerable prevJournalData) { if (prevJournalData == null) throw new UsnJournalSoftFailureException(); var result = new Dictionary(); - // get filter identifying current source filter / sources configuration + // get hash identifying current source filter / sources configuration // ReSharper disable once PossibleMultipleEnumeration - var configHash = (emitFilter == null ? string.Empty : emitFilter.GetFilterHash()) + Utility.Utility.ByteArrayAsHexString(MD5HashHelper.GetHash(m_sources)); + var configHash = Utility.Utility.ByteArrayAsHexString(MD5HashHelper.GetHash(new string[] { + emitFilter == null ? string.Empty : emitFilter.ToString(), + string.Join("; ", m_sources), + fileAttributeFilter.ToString(), + skipFilesLargerThan.ToString() + })); // create lookup for journal data var journalDataDict = prevJournalData.ToDictionary(data => data.Volume);