Example #1
0
        private string BuildMessage(StashModel model)
        {
            var repositoryUrl = string.Format("{0}/projects/{1}/repos/{2}",
                                              Robot.Settings.Get("AtlassianStashUrl"),
                                              model.repository.Project.Name,
                                              model.repository.Slug);

            var branches = model.refChanges.Select(r => r.RefId.Replace("refs/heads/", "")).Distinct().ToList();

            string deleteMessage;

            if (BuildDeleteMessage(model, branches, out deleteMessage))
            {
                return(deleteMessage);
            }

            var authorNames = model.changesets.Values.Select(v => v.ToCommit.Author.Name).Distinct().ToList();

            string mergeMessage;

            if (BuildMergeMessage(model, repositoryUrl, branches, authorNames, out mergeMessage))
            {
                return(mergeMessage);
            }

            var stringBuilder = new StringBuilder();

            stringBuilder
            .AppendFormat(
                "<b>{0}</b> committed to {1} branch at <a href='{2}'>{3}/{4}</a><br/>",
                string.Join(", ", authorNames),
                model.refChanges.Count(),
                repositoryUrl + "/browse",
                model.repository.Project.Name,
                model.repository.Name);

            stringBuilder
            .AppendFormat(
                @"<b>On branch ""{0}""</b><br/>",
                string.Join(", ", branches));

            foreach (var changeset in model.changesets.Values)
            {
                stringBuilder
                .AppendFormat(
                    @"- {0} (<a href='{1}'>{2}</a>)<br/>",
                    changeset.ToCommit.Message,
                    repositoryUrl + "/commits/" + changeset.ToCommit.Id,
                    changeset.ToCommit.DisplayId);
            }

            return(stringBuilder.ToString());
        }
Example #2
0
        private string BuildMessage(StashModel model)
        {
            var stringBuilder = new StringBuilder();

            var repositoryUrl = string.Format("{0}/projects/{1}/repos/{2}",
                                              Robot.Settings.Get("AtlassianStashUrl"),
                                              model.Repository.Project.Name,
                                              model.Repository.Slug);

            var branches = model.RefChanges.Select(r => r.RefId.Replace("refs/heads/", "")).Distinct();

            if (model.RefChanges.Count() == 1 && model.RefChanges[0].Type.Equals("DELETE", StringComparison.InvariantCultureIgnoreCase))
            {
                stringBuilder
                    .AppendFormat(
                        "Branch <b>{0}</b> of <b>{1}/{2}</b> has been deleted<br/>",
                        string.Join(", ", branches),
                        model.Repository.Project.Name,
                        model.Repository.Name);

                return stringBuilder.ToString();
            }

            var authorNames = model.Changesets.Values.Select(v => v.ToCommit.Author.Name).Distinct();

            stringBuilder
                .AppendFormat(
                    "<b>{0}</b> committed to {1} branch at <a href='{2}'>{3}/{4}</a><br/>",
                    string.Join(", ", authorNames),
                    model.RefChanges.Count(),
                    repositoryUrl + "/browse",
                    model.Repository.Project.Name,
                    model.Repository.Name);

            stringBuilder
                .AppendFormat(
                    @"<b>On branch ""{0}""</b><br/>",
                    string.Join(", ", branches));

            foreach (var changeset in model.Changesets.Values)
            {
                stringBuilder
                    .AppendFormat(
                        @"- {0} (<a href='{1}'>{2}</a>)<br/>",
                        changeset.ToCommit.Message,
                        repositoryUrl + "/commits/" + changeset.ToCommit.Id,
                        changeset.ToCommit.DisplayId);
            }

            return stringBuilder.ToString();
        }
Example #3
0
        private static bool BuildMergeMessage(StashModel model, string repositoryUrl, IEnumerable <string> branches, List <string> authorNames, out string mergeMessage)
        {
            var changeset = model.changesets.Values[0];

            if (!IsPullRequestMerge(changeset))
            {
                mergeMessage = string.Empty;
                return(false);
            }

            const string commit        = "* commit ";
            var          commitMessage = changeset.ToCommit.Message;

            var restMessage = commitMessage.Substring(0, commitMessage.LastIndexOf(commit, StringComparison.Ordinal)).Trim();

            var pullRequestNumber = GetPullRequestNumber(restMessage);

            var fromTo = restMessage.Substring(restMessage.IndexOf(" from ", StringComparison.Ordinal)).Trim();

            var pullRequestUrl = string.Format(@"{0}/pull-requests/{1}/overview", repositoryUrl, pullRequestNumber);

            var stringBuilder = new StringBuilder();

            stringBuilder
            .AppendFormat(
                "<b>Pull request #<a href='{0}'>{1}</a></b> has been merged ",
                pullRequestUrl,
                pullRequestNumber);

            stringBuilder
            .AppendFormat(
                "in <a href='{0}'>{1}/{2}</a><br/>",
                repositoryUrl + "/browse",
                model.repository.Project.Name,
                model.repository.Name);

            stringBuilder
            .AppendFormat(
                @"{0} (<a href='{1}'>{2}</a>)<br/>",
                fromTo,
                repositoryUrl + "/commits/" + changeset.ToCommit.Id,
                changeset.ToCommit.DisplayId);

            mergeMessage = stringBuilder.ToString();
            return(true);
        }
Example #4
0
        private static bool BuildDeleteMessage(StashModel model, IEnumerable<string> branches, out string deleteMessage)
        {
            if (!IsBranchDelete(model))
            {
                deleteMessage = string.Empty;
                return false;
            }

            var stringBuilder = new StringBuilder();

            stringBuilder
                .AppendFormat(
                    "Branch <b>{0}</b> of <b>{1}/{2}</b> has been deleted<br/>",
                    string.Join(", ", branches),
                    model.repository.Project.Name,
                    model.repository.Name);

            deleteMessage = stringBuilder.ToString();
            return true;
        }
Example #5
0
        private static bool BuildDeleteMessage(StashModel model, IEnumerable <string> branches, out string deleteMessage)
        {
            if (!IsBranchDelete(model))
            {
                deleteMessage = string.Empty;
                return(false);
            }

            var stringBuilder = new StringBuilder();

            stringBuilder
            .AppendFormat(
                "Branch <b>{0}</b> of <b>{1}/{2}</b> has been deleted<br/>",
                string.Join(", ", branches),
                model.repository.Project.Name,
                model.repository.Name);

            deleteMessage = stringBuilder.ToString();
            return(true);
        }
Example #6
0
        private static bool BuildMergeMessage(StashModel model, string repositoryUrl, IEnumerable<string> branches, List<string> authorNames, out string mergeMessage)
        {
            var changeset = model.changesets.Values[0];

            if (!IsPullRequestMerge(changeset))
            {
                mergeMessage = string.Empty;
                return false;
            }

            const string commit = "* commit ";
            var commitMessage = changeset.ToCommit.Message;

            var restMessage = commitMessage.Substring(0, commitMessage.LastIndexOf(commit, StringComparison.Ordinal)).Trim();

            var pullRequestNumber = GetPullRequestNumber(restMessage);

            var fromTo = restMessage.Substring(restMessage.IndexOf(" from ", StringComparison.Ordinal)).Trim();

            var pullRequestUrl = string.Format(@"{0}/pull-requests/{1}/overview", repositoryUrl, pullRequestNumber);

            var stringBuilder = new StringBuilder();

            stringBuilder
                .AppendFormat(
                    "<b>Pull request #<a href='{0}'>{1}</a></b> has been merged ",
                    pullRequestUrl,
                    pullRequestNumber);

            stringBuilder
                .AppendFormat(
                    "in <a href='{0}'>{1}/{2}</a><br/>",
                    repositoryUrl + "/browse",
                    model.repository.Project.Name,
                    model.repository.Name);

            stringBuilder
                .AppendFormat(
                    @"{0} (<a href='{1}'>{2}</a>)<br/>",
                    fromTo,
                    repositoryUrl + "/commits/" + changeset.ToCommit.Id,
                    changeset.ToCommit.DisplayId);

            mergeMessage = stringBuilder.ToString();
            return true;
        }
Example #7
0
        private string BuildMessage(StashModel model)
        {
            var repositoryUrl = string.Format("{0}/projects/{1}/repos/{2}",
                                              Robot.Settings.Get("AtlassianStashUrl"),
                                              model.repository.Project.Name,
                                              model.repository.Slug);

            var branches = model.refChanges.Select(r => r.RefId.Replace("refs/heads/", "")).Distinct().ToList();

            string deleteMessage;
            if (BuildDeleteMessage(model, branches, out deleteMessage)) return deleteMessage;

            var authorNames = model.changesets.Values.Select(v => v.ToCommit.Author.Name).Distinct().ToList();

            string mergeMessage;
            if (BuildMergeMessage(model, repositoryUrl, branches, authorNames, out mergeMessage)) return mergeMessage;

            var stringBuilder = new StringBuilder();

            stringBuilder
                .AppendFormat(
                    "<b>{0}</b> committed to {1} branch at <a href='{2}'>{3}/{4}</a><br/>",
                    string.Join(", ", authorNames),
                    model.refChanges.Count(),
                    repositoryUrl + "/browse",
                    model.repository.Project.Name,
                    model.repository.Name);

            stringBuilder
                .AppendFormat(
                    @"<b>On branch ""{0}""</b><br/>",
                    string.Join(", ", branches));

            foreach (var changeset in model.changesets.Values)
            {
                stringBuilder
                    .AppendFormat(
                        @"- {0} (<a href='{1}'>{2}</a>)<br/>",
                        changeset.ToCommit.Message,
                        repositoryUrl + "/commits/" + changeset.ToCommit.Id,
                        changeset.ToCommit.DisplayId);
            }

            return stringBuilder.ToString();
        }
Example #8
0
 private static bool IsBranchDelete(StashModel model)
 {
     return model.refChanges.Count() == 1 && model.refChanges[0].Type.Equals("DELETE", StringComparison.InvariantCultureIgnoreCase);
 }
Example #9
0
 private static bool IsBranchDelete(StashModel model)
 {
     return(model.refChanges.Count() == 1 && model.refChanges[0].Type.Equals("DELETE", StringComparison.InvariantCultureIgnoreCase));
 }