Пример #1
0
        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
        }
Пример #2
0
        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);
        }
Пример #3
0
 private void StartChangeSet()
 {
     _currentChangeSet    = new ChangeSet();
     _currentChangeSet.Id = Guid.NewGuid().ToString();
     _tracker.BeginChangeSet(_currentChangeSet);
 }
Пример #4
0
        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);
        }