示例#1
0
        private void checkRevisionTime(VssItem item, VssRevision revision1, VssRevision revision2)
        {
            int      version1 = revision1.Version;
            int      version2 = revision2.Version;
            DateTime time1    = revision1.DateTime;
            DateTime time2    = revision2.DateTime;

            if (version1 > version2)
            {
                string msg = item.Name + "(" + item.PhysicalName + ")";
                logger.WriteLine("***** warning: revision number out of sequence: " + version1
                                 + " before " + version2 + " for item " + msg);
            }
            if (time1.CompareTo(time2) > 0)
            {
                string msg = item.Name + "(" + item.PhysicalName + ")";
                logger.WriteLine("***** warning: revision time out of sequence: " + time1 + "@" + version1
                                 + " later than " + time2 + "@" + version2 + " for item " + msg);

                // as we are only looking at items that are out of sequence, we try to fix
                // each of them as it may be the first or the second
                fixSequence(item, revision1);
                fixSequence(item, revision2);
            }
        }
示例#2
0
        private void ProcessItem(VssItem item, string path, PathMatcher exclusionMatcher)
        {
            try
            {
                VssRevision previousRevision                = null;
                LinkedList <VssRevision>  revisions         = new LinkedList <VssRevision>();
                IEnumerable <VssRevision> originalRevisions = item.Revisions; // this is recreated from the file each time it is queried!!!
                foreach (VssRevision vssRevision in originalRevisions)
                {
                    if (previousRevision != null)
                    {
                        checkRevisionTime(item, previousRevision, vssRevision);
                    }
                    previousRevision = vssRevision;
                    revisions.AddLast(vssRevision);
                }
                foreach (VssRevision vssRevision in revisions)
                {
                    var actionType  = vssRevision.Action.Type;
                    var namedAction = vssRevision.Action as VssNamedAction;
                    if (namedAction != null)
                    {
                        if (actionType == VssActionType.Destroy)
                        {
                            // track destroyed files so missing history can be anticipated
                            // (note that Destroy actions on shared files simply delete
                            // that copy, so destroyed files can't be completely ignored)
                            destroyedFiles.Add(namedAction.Name.PhysicalName);
                        }

                        var targetPath = path + VssDatabase.ProjectSeparator + namedAction.Name.LogicalName;
                        if (exclusionMatcher != null && exclusionMatcher.Matches(targetPath))
                        {
                            // project action targets an excluded file
                            continue;
                        }
                    }

                    Revision revision = new Revision(vssRevision.DateTime,
                                                     vssRevision.User, item.ItemName, vssRevision.Version,
                                                     vssRevision.Comment, vssRevision.Action);

                    ICollection <Revision> revisionSet;
                    if (!sortedRevisions.TryGetValue(vssRevision.DateTime, out revisionSet))
                    {
                        revisionSet = new LinkedList <Revision>();
                        sortedRevisions[vssRevision.DateTime] = revisionSet;
                    }
                    revisionSet.Add(revision);
                    ++revisionCount;
                }
            }
            catch (RecordException e)
            {
                var message = string.Format("Failed to read revisions for {0} ({1}): {2}",
                                            path, item.PhysicalName, ExceptionFormatter.Format(e));
                LogException(e, message);
                ReportError(message);
            }
        }
示例#3
0
 private void fixSequence(VssItem item, VssRevision revision)
 {
     if (timeFixList != null)
     {
         foreach (TimeFix timeFix in timeFixList)
         {
             DateTime time = revision.DateTime;
             if (time.CompareTo(timeFix.start) > 0 && time.CompareTo(timeFix.end) < 0)
             {
                 int version = revision.Version;
                 revision.FixDateTime(timeFix.newTime);
                 string msg = item.Name + "(" + item.PhysicalName + ")";
                 logger.WriteLine("changed time " + time + " to " + timeFix.newTime + " for item " + msg + "@" + version);
             }
         }
     }
 }