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(); } } }
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); }
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); }