From c049560ecfd7e69c2fbfe4310cabe50cc8273060 Mon Sep 17 00:00:00 2001 From: Danil Kislov Date: Thu, 27 Jun 2019 19:33:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JiraIntegration/JiraCommitEmulator.cs | 6 +++-- src/JiraTimeBot/Mercurial/MercurialLog.cs | 23 +++++++++++++++---- .../Mercurial/Modifiers/CommitSkipper.cs | 4 ++++ .../TaskTime/Objects/TaskTimeItem.cs | 6 +++++ .../TaskTime/TaskTimeByCommitsCalculator.cs | 11 ++++++++- 5 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs b/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs index bda9c93..332592f 100644 --- a/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs +++ b/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs @@ -52,7 +52,8 @@ namespace JiraTimeBot.JiraIntegration Description = issue.Summary, Branch = issue.Key.Value, FilesAffected = 1, - Commits = 1 + Commits = 1, + Type = CommitType.Task }); } } @@ -64,7 +65,8 @@ namespace JiraTimeBot.JiraIntegration Description = issue.Summary, Branch = issue.Key.Value, FilesAffected = 1, - Commits = 1 + Commits = 1, + Type = CommitType.Task }); } } diff --git a/src/JiraTimeBot/Mercurial/MercurialLog.cs b/src/JiraTimeBot/Mercurial/MercurialLog.cs index fab1bf2..5b91236 100644 --- a/src/JiraTimeBot/Mercurial/MercurialLog.cs +++ b/src/JiraTimeBot/Mercurial/MercurialLog.cs @@ -72,15 +72,25 @@ namespace JiraTimeBot.Mercurial } commitMessage = _technicalInfoSkipper.StripTechnicalInfo(commitMessage); - workTasks.Add(new TaskTimeItem + var task = new TaskTimeItem { StartTime = changeset.Timestamp, Description = commitMessage, Branch = changeset.Branch, FilesAffected = changeset.PathActions.Count, Commits = 1, - TimeSpent = TimeSpan.Zero - }); + TimeSpent = TimeSpan.Zero, + Type = GetCommitType(changeset.Branch) + }; + if (task.Type == CommitType.Release && task.Description.StartsWith("Merge with", StringComparison.CurrentCultureIgnoreCase)) + { + var branch = task.Description.Replace("Merge with", "").Replace(" ", ""); + var release = task.Branch.Replace("release", ""); + + task.Branch = branch; + task.Description = $"Подготовка и публикация версии {release}."; + } + workTasks.Add(task); _log?.Trace($" - Найден changeset: {changeset.Timestamp} - {changeset.Branch} - {changeset.AuthorEmailAddress} - {commitMessage}"); } } @@ -91,7 +101,12 @@ namespace JiraTimeBot.Mercurial return workTasks; } - + + private CommitType GetCommitType(string branch) + { + return branch.StartsWith("release") ? CommitType.Release : CommitType.Task; + } + private string FixEncoding(string source) { //перекодируем сообщение - ибо оно криво забирается в 1252 diff --git a/src/JiraTimeBot/Mercurial/Modifiers/CommitSkipper.cs b/src/JiraTimeBot/Mercurial/Modifiers/CommitSkipper.cs index eba4f14..53c5d2d 100644 --- a/src/JiraTimeBot/Mercurial/Modifiers/CommitSkipper.cs +++ b/src/JiraTimeBot/Mercurial/Modifiers/CommitSkipper.cs @@ -6,6 +6,10 @@ namespace JiraTimeBot.Mercurial.Modifiers { public bool IsNeedToSkip(string branch, string commitMessage) { + if (branch.StartsWith("release") && commitMessage.StartsWith("Merge with", StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } if (!branch.Contains("-")) { return true; diff --git a/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs b/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs index dd91adf..83d76fd 100644 --- a/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs +++ b/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs @@ -10,5 +10,11 @@ namespace JiraTimeBot.TaskTime.Objects public TimeSpan TimeSpent { get; set; } public int Commits { get; set; } public int FilesAffected { get; set; } + public CommitType Type { get; set; } + } + + public enum CommitType { + Task = 0, + Release = 1 } } diff --git a/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs b/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs index c1131e2..67c37b4 100644 --- a/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs +++ b/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs @@ -25,6 +25,8 @@ namespace JiraTimeBot.TaskTime int minutesPerWorkDay = settings.MinuterPerWorkDay + GetRandomMinutes(settings); int workHours = (settings.MinuterPerWorkDay / 60); int totalCommitsCount = commits.Count; + var taskCommits = commits.Where(f => f.Type == CommitType.Task).ToList(); + var releaseCommits = commits.Where(f => f.Type == CommitType.Release).ToList(); if (cancellationToken.IsCancellationRequested) { @@ -47,7 +49,14 @@ namespace JiraTimeBot.TaskTime remainMinutes -= (int)timeControlTask.TimeSpent.TotalMinutes; } - var workTasks = _spreadHelper.SpreadTime(commits, remainMinutes, settings.RoundToMinutes); + if (releaseCommits.Any()) + { + var releaseTasks = _spreadHelper.SpreadTime(releaseCommits, 30, 1); + workTimeItems.AddRange(releaseTasks); + remainMinutes -= releaseTasks.Sum(f=>(int)f.TimeSpent.TotalMinutes); + } + + var workTasks = _spreadHelper.SpreadTime(taskCommits, remainMinutes, settings.RoundToMinutes); workTimeItems.AddRange(workTasks); workTimeItems = workTimeItems.OrderByDescending(f => f.TimeSpent).ToList();