public CommitChangesViewModel(EntityCommitChange commitChanges, IQueryService <TaskState> taskStateQueryService) { _taskStateQueryService = taskStateQueryService; Author = commitChanges.Author; CreationDate = commitChanges.Date.ToString("g"); ResolvePropertyChanges(commitChanges); }
private void ResolvePropertyChanges(EntityCommitChange commitChanges) { AssignedMembersChangeViewModel = null; CommentsChangeViewModel = null; ContentChangeViewModel = null; TaskPriorityChangeViewModel = null; TaskStateChangeViewModel = null; foreach (var propertyChange in commitChanges.PropertyChanges) { switch (propertyChange.PropertyName) { case "Content": ContentChangeViewModel = new ContentChangeViewModel((string)propertyChange.OldValue, (string)propertyChange.NewValue); break; case "AssignedMembers": AssignedMembersChangeViewModel = new ProjectMembersChangeViewModel((IEnumerable <ProjectMember>)propertyChange.OldValue, (IEnumerable <ProjectMember>)propertyChange.NewValue); break; case "Priority": TaskPriorityChangeViewModel = new TaskPriorityChangeViewModel((TaskPriority)propertyChange.OldValue, (TaskPriority)propertyChange.NewValue); break; case "State": TaskStateChangeViewModel = new TaskStateChangeViewModel((string)propertyChange.OldValue, (string)propertyChange.NewValue, _taskStateQueryService); break; case "Comments": CommentsChangeViewModel = new CommentsChangeViewModel((IEnumerable <string>)propertyChange.OldValue, (IEnumerable <string>)propertyChange.NewValue); break; default: continue; } } }
public async Task <EntityHistory> GetEntityHistory <TModel>(TModel modelObject) { return(await Task.Run(() => { if (_repository == null) { return null; } var entityHistory = new EntityHistory { Changes = new List <EntityCommitChange>() }; var objectPath = GetObjectPath(modelObject); var entityInRepo = false; foreach (var commit in _repository.Commits.QueryBy(new CommitFilter { FirstParentOnly = true })) { try { if (!commit.Parents.Any() || !CommitContainsGitTaskFolder(commit)) { return entityInRepo ? entityHistory : null; } var parentCommit = commit.Parents.First(); var treeChanges = _repository.Diff.Compare <TreeChanges>(parentCommit.Tree, commit.Tree, new CompareOptions()); var entityTreeChanges = treeChanges.Where(treeEntry => treeEntry.Path == objectPath).ToList(); if (!entityTreeChanges.Any()) { continue; } var treeEntryChanges = entityTreeChanges.First(); if (treeEntryChanges.Exists && !treeEntryChanges.OldExists) { entityHistory.CreationDate = commit.Committer.When.DateTime; entityHistory.Author = new ProjectMember(commit.Committer.Name, commit.Committer.Email); return entityHistory; } var parentTreeEntry = parentCommit[objectPath]; var childTreeEntry = commit[objectPath]; if (parentTreeEntry.TargetType != TreeEntryTargetType.Blob || childTreeEntry.TargetType != TreeEntryTargetType.Blob) { continue; } var parentBlob = (Blob)parentTreeEntry.Target; var childBlob = (Blob)childTreeEntry.Target; var propertyChanges = _historyResolvingService.ResolveChangesInBlob <TModel>(parentBlob, childBlob).ToList(); if (!propertyChanges.Any()) { continue; } var entityCommitChange = new EntityCommitChange { PropertyChanges = propertyChanges, Date = commit.Committer.When.DateTime, Author = new ProjectMember(commit.Committer.Name, commit.Committer.Email) }; entityHistory.Changes.Add(entityCommitChange); entityInRepo = true; entityHistory.CreationDate = commit.Committer.When.DateTime; } catch (Exception) { // exception while traversing repo or parsing files. Skip commit } } entityHistory.CreationDate = DateTime.MinValue; return entityHistory; })); }