private void ShowException(Exception exception) { var message = ExceptionFormatter.Format(exception); logger.WriteLine("ERROR: {0}", message); logger.WriteLine(exception); MessageBox.Show(message, "Unhandled Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); }
private void ProcessItem(VssItem item, string path, PathMatcher exclusionMatcher) { try { foreach (VssRevision vssRevision in item.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); LinkedList <Revision> revisionSet; if (!sortedRevisions.TryGetValue(vssRevision.DateTime, out revisionSet)) { revisionSet = new LinkedList <Revision>(); sortedRevisions[vssRevision.DateTime] = revisionSet; } ((ICollection <Revision>)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); } }
private bool WriteRevisionTo(string physical, int version, string destPath) { VssFile item; VssFileRevision revision; Stream contents; try { item = (VssFile)database.GetItemPhysical(physical); revision = item.GetRevision(version); contents = revision.GetContents(); } catch (Exception e) { // log an error for missing data files or versions, but keep processing var message = ExceptionFormatter.Format(e); logger.WriteLine("ERROR: {0}", message); logger.WriteLine(e); return(false); } // propagate exceptions here (e.g. disk full) to abort/retry/ignore using (contents) { WriteStream(contents, destPath); } // try to use the first revision (for this branch) as the create time, // since the item creation time doesn't seem to be meaningful var createDateTime = item.Created; using (var revEnum = item.Revisions.GetEnumerator()) { if (revEnum.MoveNext()) { createDateTime = revEnum.Current.DateTime; } } // set file creation and update timestamps File.SetCreationTimeUtc(destPath, TimeZoneInfo.ConvertTimeToUtc(createDateTime)); File.SetLastWriteTimeUtc(destPath, TimeZoneInfo.ConvertTimeToUtc(revision.DateTime)); return(true); }