コード例 #1
0
        public IHttpActionResult GetCommits()
        {
            CommitsModel vm;
            UnitOfWork   unitOfWork = null;

            System.Diagnostics.Trace.TraceInformation("Get Commits");

            try
            {
                unitOfWork = new UnitOfWork();

                var         parameters = this.Request.GetQueryNameValuePairs();
                CommitQuery query      = new CommitQuery(unitOfWork.Context.Commits);
                var         keyword    = parameters.FirstOrDefault(p => p.Key == "keyword").Value;

                if (string.IsNullOrEmpty(keyword) == false)
                {
                    query.Keyword = parameters.FirstOrDefault(p => p.Key == "keyword").Value;
                }

                query.ExcludeApproved = String.Equals("true", parameters.FirstOrDefault(p => p.Key == "excludeApproved").Value, StringComparison.InvariantCulture);
                query.Max             = Parser.ParseNullable <int>(parameters.FirstOrDefault(p => p.Key == "max").Value);
                query.IncludeAuthor   = parameters.FirstOrDefault(p => p.Key == "include").Value;
                query.ExcludeAuthor   = parameters.FirstOrDefault(p => p.Key == "exclude").Value;
                query.Project         = Parser.ParseNullable <int>(parameters.FirstOrDefault(p => p.Key == "project").Value);

                var list = new List <Tuple <Commit, CommitStats> >();
                foreach (var commit in query.Execute())
                {
                    var comments = unitOfWork.Context.Comments.Where(c => c.Revision == commit.Revision).ToList();

                    var replies = comments.Where(c => c.User == commit.Author && c.IsLike == false);
                    var reviews = comments.Where(c => c.User != commit.Author && c.IsLike == false);
                    var likes   = comments.Where(c => c.IsLike == true);

                    var stats = new CommitStats(
                        reviews.Select(c => c.User).Distinct().Count(),
                        reviews.Count(),
                        replies.Count(),
                        likes.Count());

                    list.Add(new Tuple <Commit, CommitStats>(commit, stats));
                }
                vm = new CommitsModel(list);

                return(Ok(vm));
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.TraceError("GetRevision: " + ex);
                return(InternalServerError(ex));
            }
            finally
            {
                if (unitOfWork != null)
                {
                    unitOfWork.Dispose();
                }
            }
        }
コード例 #2
0
ファイル: GitService.cs プロジェクト: NewLifeX/GitCandy
        public CommitsModel GetCommits(String path, Int32 page = 1, Int32 pagesize = 20)
        {
            var cfg = UserConfiguration.Current;

            if (!cfg.AllowCommits)
            {
                return(null);
            }

            var commit = GetCommitByPath(ref path, out var referenceName);

            if (commit == null)
            {
                return(null);
            }

            var commitsAccessor = GitCacheAccessor.Singleton(new CommitsAccessor(_repoId, _repository, commit, path, page, pagesize));
            var scopeAccessor   = GitCacheAccessor.Singleton(new ScopeAccessor(_repoId, _repository, commit, path));

            var model = new CommitsModel
            {
                ReferenceName = referenceName,
                Sha           = commit.Sha,
                Commits       = commitsAccessor.Result.Value
                                .Select(s => new CommitModel
                {
                    CommitMessageShort = s.MessageShort,
                    Sha       = s.CommitSha,
                    Author    = CreateSafeSignature(s.AuthorName, s.AuthorEmail, s.AuthorWhen),
                    Committer = CreateSafeSignature(s.CommitterName, s.CommitterEmail, s.CommitterWhen),
                })
                                .ToList(),
                CurrentPage = page,
                ItemCount   = scopeAccessor.Result.Value.Commits,
                Path        = String.IsNullOrEmpty(path) ? "" : path,
                PathBar     = new PathBarModel
                {
                    Name          = Name,
                    Action        = "Commits",
                    Path          = path,
                    ReferenceName = referenceName,
                    ReferenceSha  = commit.Sha,
                    HideLastSlash = true, // I want a improvement here
                },
            };

            return(model);
        }
コード例 #3
0
        public CommitsModel GetCommits(string path, int page = 1, int pagesize = 20)
        {
            string referenceName;
            var    commit = GetCommitByPath(ref path, out referenceName);

            if (commit == null)
            {
                return(null);
            }

            var tree = commit[path];

            if (!string.IsNullOrEmpty(path) && tree == null)
            {
                return(null);
            }

            var cacheKey = commit.Sha;

            if (tree != null)
            {
                cacheKey += "-" + tree.Target.Sha;
            }
            var commits = GitCache.Get <RevisionSummaryCacheItem[]>(cacheKey, "commits");

            if (commits == null)
            {
                var ancestors = _repository.Commits
                                .QueryBy(new CommitFilter {
                    Since = commit, SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Time
                })
                                .PathFilter(path)
                                .ToList();

                commits = ancestors.Select(s => new RevisionSummaryCacheItem
                {
                    Sha            = s.Sha,
                    MessageShort   = s.MessageShort.RepetitionIfEmpty(NoCommitMessage),
                    AuthorName     = s.Author.Name,
                    AuthorEmail    = s.Author.Email,
                    AuthorWhen     = s.Author.When,
                    CommitterName  = s.Committer.Name,
                    CommitterEmail = s.Committer.Email,
                    CommitterWhen  = s.Committer.When,
                }).ToArray();

                GitCache.Set(cacheKey, "commits", commits);
            }

            var model = new CommitsModel
            {
                ReferenceName = referenceName,
                Sha           = commit.Sha,
                Commits       = commits
                                .Skip((page - 1) * pagesize)
                                .Take(pagesize)
                                .Select(s => new CommitModel
                {
                    CommitMessageShort = s.MessageShort,
                    Sha       = s.Sha,
                    Author    = new Signature(s.AuthorName, s.AuthorEmail, s.AuthorWhen),
                    Committer = new Signature(s.CommitterName, s.CommitterEmail, s.CommitterWhen),
                })
                                .ToList(),
                CurrentPage = page,
                ItemCount   = commits.Count(),
                Path        = string.IsNullOrEmpty(path) ? "" : path,
                PathBar     = new PathBarModel
                {
                    Name          = Name,
                    Action        = "Commits",
                    Path          = path,
                    ReferenceName = referenceName,
                    ReferenceSha  = commit.Sha,
                    HideLastSlash = path != "" && commit[path].TargetType == TreeEntryTargetType.Blob,
                },
            };

            return(model);
        }