Exemple #1
0
 virtual public void UpdateDirectoryFromSnapshot(SnapshotId currentId, SnapshotId targetId, DirectoryInfo dirRoot)
 {
     if (currentId.Equals(targetId))
     {
         return;
     }
     PopulateDirectoryFromSnapshot(targetId, dirRoot);
     ProcessDeletionsBetweenSnapshot(currentId, targetId, dirRoot);
 }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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);
                }
            }
        }