public async Task <ProjectHistory> GetProjectHistory() { return(await Task.Run(() => { if (_repository == null) { return null; } var projectHistory = new ProjectHistory { Changes = new List <ProjectCommitChange>() }; var baseProjectPath = GetBaseEntityPath("Project"); var baseTaskPath = GetBaseEntityPath("Task"); var projectInRepo = false; foreach (var commit in _repository.Commits.QueryBy(new CommitFilter { FirstParentOnly = true })) { try { if (!commit.Parents.Any() || !CommitContainsGitTaskFolder(commit)) { return !projectInRepo ? null : projectHistory; } var parentCommit = commit.Parents.First(); var treeChanges = _repository.Diff.Compare <TreeChanges>(parentCommit.Tree, commit.Tree).ToList(); var commitChange = new ProjectCommitChange { Author = new ProjectMember(commit.Committer.Name, commit.Committer.Email), Date = commit.Committer.When.DateTime, AddedTasks = HistoryResolvingService.GetAddedTasks(treeChanges, baseTaskPath).ToList(), RemovedTasks = HistoryResolvingService.GetRemovedTasks(treeChanges, baseTaskPath).ToList(), ProjectMembersChange = _historyResolvingService.GetProjectMembersChange(parentCommit, commit, treeChanges, baseProjectPath), TaskStatesChange = _historyResolvingService.GetTaskStatesChange(parentCommit, commit, treeChanges, _projectPathsService.RelativeStoragePath, typeof(TaskState).Name), }; if (commitChange.AddedTasks.Any() || commitChange.RemovedTasks.Any() || commitChange.ProjectMembersChange != null || commitChange.TaskStatesChange != null) { projectInRepo = true; projectHistory.Changes.Add(commitChange); projectHistory.CreationDate = commit.Committer.When.DateTime; } } catch (Exception) { // exception while traversing repo or parsing files. Skip commit } } projectHistory.CreationDate = DateTime.MinValue; return projectHistory; })); }
private void ResolvePropertyChanges(ProjectCommitChange commitChanges) { if (commitChanges.ProjectMembersChange != null) { ProjectMembersChangeViewModel = new ProjectMembersChangeViewModel((IEnumerable <ProjectMember>)commitChanges.ProjectMembersChange.OldValue, (IEnumerable <ProjectMember>)commitChanges.ProjectMembersChange.NewValue); } if (commitChanges.RemovedTasks.Any() || commitChanges.AddedTasks.Any()) { TaskChangesViewModel = new TaskChangesViewModel(commitChanges.AddedTasks, commitChanges.RemovedTasks); } if (commitChanges.TaskStatesChange != null) { var orderedOld = ((IEnumerable <TaskState>)commitChanges.TaskStatesChange.OldValue).OrderBy(x => x.Position); var orderedNew = ((IEnumerable <TaskState>)commitChanges.TaskStatesChange.NewValue).OrderBy(x => x.Position); TaskStatesChangesViewModel = new TaskStatesChangesViewModel(orderedOld, orderedNew); } }
public ProjectCommitChangesViewModel(ProjectCommitChange commitChanges) { Author = commitChanges.Author; CreationDate = commitChanges.Date.ToString("g"); ResolvePropertyChanges(commitChanges); }