private void UpdateHistory() { var log = _gitCli.Log(); var parser = new Parser(_mapper, null); parser.WorkItemRegex = _workItemRegex; var history = parser.ParseLogString(log); // Update Ids for files var tracker = new MovementTracker(); foreach (var cs in history.ChangeSets) { tracker.BeginChangeSet(cs); foreach (var item in cs.Items) { tracker.TrackId(item); } cs.Items.Clear(); tracker.ApplyChangeSet(cs.Items); } Warnings = tracker.Warnings; // Write history file var json = JsonConvert.SerializeObject(history, Formatting.Indented); File.WriteAllText(_gitHistoryExportFile, json, Encoding.UTF8); // For information File.WriteAllText(Path.Combine(_cachePath, @"git_full_history.txt"), log); }
public void ItemSeenFirst_GetsUniqueId([Values( KindOfChange.Add, KindOfChange.Rename, KindOfChange.Delete, KindOfChange.Edit )] KindOfChange kind) { var tracker = new MovementTracker(); var previousServerPath = kind == KindOfChange.Rename ? "previous_path" : null; tracker.BeginChangeSet(new ChangeSet()); var ci = new ChangeItem { ServerPath = "current_path", FromServerPath = previousServerPath, Kind = kind }; tracker.BeginChangeSet(new ChangeSet()); tracker.TrackId(ci); tracker.ApplyChangeSet(new List <ChangeItem>()); var id = ci.Id; Assert.NotNull(id); Assert.IsTrue(Guid.TryParse(id, out var uuid)); // Is a uuid }
public void InvalidArguments_RenameHasNoPreviousServerPath() { var tracker = new MovementTracker(); var ci = new ChangeItem { Kind = KindOfChange.Rename }; StartChangeSet(); Assert.Throws <ArgumentException>(() => tracker.TrackId(ci)); EndChangeSet(); }
public void InvalidArguments_NonRenameHasPreviousServerPath() { var tracker = new MovementTracker(); var ci = new ChangeItem { Kind = KindOfChange.Edit, FromServerPath = "unexpected" }; StartChangeSet(); Assert.Throws <ArgumentException>(() => tracker.TrackId(ci)); EndChangeSet(); }
private ChangeItem TrackOperation(KindOfChange kind, string currentServerPath, string previousServerPath) { // Note arg order changed here! var ci = new ChangeItem { ServerPath = currentServerPath, FromServerPath = previousServerPath, Kind = kind }; _currentChangeSet.Items.Add(ci); _tracker.TrackId(ci); return(ci); }
private void ParseLogEntry(XmlReader reader, List <ChangeSet> result) { var cs = new ChangeSet(); // revision -> Id var revision = ReadRevision(reader); cs.Id = revision; _tracking.BeginChangeSet(cs); // author -> Committer if (!reader.ReadToDescendant("author")) { throw new InvalidDataException("author"); } cs.Committer = reader.ReadString(); // date -> date if (!reader.ReadToNextSibling("date")) { throw new InvalidDataException("date"); } cs.Date = DateTime.Parse(reader.ReadString().Trim()); if (!reader.ReadToNextSibling("paths")) { throw new InvalidDataException("paths"); } if (reader.ReadToDescendant("path")) { do { var item = new ChangeItem(); var kind = reader.GetAttribute("kind"); if (kind != "file") { continue; } var action = reader.GetAttribute("action"); item.Kind = SvnActionToKindOfChange(action); if (item.IsRename() || item.IsAdd()) { // Both actions can mean a renaming or movement. var copyFromPath = GetStringAttribute(reader, "copyfrom-path"); if (copyFromPath != null) { var id = GetULongAttribute(reader, "copyfrom-rev"); var copyFromRev = new NumberId(id); item.FromServerPath = copyFromPath; } } else { Debug.Assert(string.IsNullOrEmpty(GetStringAttribute(reader, "copyfrom-path"))); Debug.Assert(string.IsNullOrEmpty(GetStringAttribute(reader, "copyfrom-rev"))); } // All attributes must have been read here. var path = reader.ReadString().Trim(); item.ServerPath = path; item.LocalPath = MapToLocalFile_ServerIsAbsolute(path); if (item.Kind == KindOfChange.Rename && item.FromServerPath == null) { // Wtf. This can happen. Just ignore it. } else { _tracking.TrackId(item); } } while (reader.ReadToNextSibling("path")); if (!reader.ReadToFollowing("msg")) { throw new InvalidDataException("msg"); } cs.Comment = reader.ReadString().Trim(); ParseWorkItemsFromComment(cs.WorkItems, cs.Comment); } // Applies all change set items and sets their id _tracking.ApplyChangeSet(cs.Items); result.Add(cs); }