Example #1
0
        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;
            }));
        }
Example #2
0
 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);
     }
 }
Example #3
0
 public ProjectCommitChangesViewModel(ProjectCommitChange commitChanges)
 {
     Author       = commitChanges.Author;
     CreationDate = commitChanges.Date.ToString("g");
     ResolvePropertyChanges(commitChanges);
 }