virtual public void UpdateDirectoryFromSnapshot(SnapshotId currentId, SnapshotId targetId, DirectoryInfo dirRoot) { if (currentId.Equals(targetId)) { return; } PopulateDirectoryFromSnapshot(targetId, dirRoot); ProcessDeletionsBetweenSnapshot(currentId, targetId, dirRoot); }
/// <summary> /// List snapshots between first id and last id inclusive. /// </summary> /// <param name="firstId">A more recently created snapshot.</param> /// <param name="lastId">An id older than first Id</param> /// <returns>Empty set on error</returns> virtual public IEnumerable <SnapshotInfo> ListSnapshotsBetween(SnapshotId firstId, SnapshotId lastId) { List <SnapshotInfo> ret = new List <SnapshotInfo>(); var curr = GetLatestSnapshotId(); while (curr != null && !curr.Equals(firstId)) { curr = GetPreviousSnapshotId(curr); } // ran out of ids if (curr == null) { LogEvent.SnapshotIdNotFound(firstId); // on error case return an empty enumeration. ret.Clear(); return(ret); } else { // add first id ret.Add(GetSnapshotInfo(curr)); } // if first is equal to last we are done. if (firstId.Equals(lastId)) { return(ret); } // keep adding till we hit last. while (curr != null && !curr.Equals(lastId)) { ret.Add(GetSnapshotInfo(curr)); curr = GetPreviousSnapshotId(curr); } // ran out of ids. if (curr == null) { LogEvent.SnapshotIdNotFound(lastId); // on error case return an empty enumeration. ret.Clear(); return(ret); } else { // add last id ret.Add(GetSnapshotInfo(curr)); } return(ret); }
virtual public void ProcessDeletionsBetweenSnapshot(SnapshotId currentId, SnapshotId targetId, DirectoryInfo dirRoot) { if (currentId.Equals(targetId)) { return; } var deletions = GetDeletedItemsBetweenSnapshots(currentId, targetId); foreach (var item in deletions) { var fullPath = SafeCombinePath(dirRoot, item.RelativePath); if (fullPath == null) { LogEvent.DeleteOfItemSkipedBecauseOfError(item.RelativePath); } else { TryDeleteFile(fullPath); } } }