Теперь можем добавлять комментарии

This commit is contained in:
Danil Kislov
2019-03-15 13:44:36 +03:00
parent 119670e072
commit e4148954d2
10 changed files with 179 additions and 41 deletions
+89 -14
View File
@@ -2,7 +2,10 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using JiraTimeBotForm.CommitWorks;
using JiraTimeBotForm.Configuration;
using Mercurial;
@@ -10,10 +13,12 @@ namespace JiraTimeBotForm.TaskTime
{
public class TaskTimeDiscoverer: ITaskTimeDiscoverer
{
private readonly BuzzwordReplacer _buzzwordReplacer;
private readonly ILog _log;
public TaskTimeDiscoverer(ILog log = null)
public TaskTimeDiscoverer(BuzzwordReplacer buzzwordReplacer, ILog log = null)
{
_buzzwordReplacer = buzzwordReplacer;
_log = log;
}
@@ -23,8 +28,7 @@ namespace JiraTimeBotForm.TaskTime
date = date.GetValueOrDefault(DateTime.Now.Date);
var workTasks = new List<string>();
var workTasks = new List<TaskTimeItem>();
foreach (var repoDirectory in Directory.GetDirectories(settings.RepositoryPath))
{
if (cancellationToken.IsCancellationRequested)
@@ -42,7 +46,8 @@ namespace JiraTimeBotForm.TaskTime
var logCommand = new LogCommand
{
Date = date,
Users = { settings.MercurialAuthorEmail }
Users = { settings.MercurialAuthorEmail },
AdditionalArguments = { "--encoding=utf-8"},
};
var log = repo.Log(logCommand);
@@ -54,18 +59,21 @@ namespace JiraTimeBotForm.TaskTime
return workTimeItems;
}
if (!changeset.Branch.Contains("-"))
{
continue;
}
//Пропускаем Close коммиты
if (changeset.CommitMessage.StartsWith($"Close {changeset.Branch} ", StringComparison.InvariantCultureIgnoreCase))
var commitMessage = FixEncoding(changeset.CommitMessage);
if (IsNeedToSkip(changeset.Branch, commitMessage))
{
continue;
}
commitMessage = StripTechnicalInfo(commitMessage);
commitMessage = _buzzwordReplacer.FixBuzzwords(commitMessage);
workTasks.Add(changeset.Branch);
_log?.Trace($" - Найден changeset: {changeset.Timestamp} - {changeset.Branch} - {changeset.AuthorEmailAddress}");
workTasks.Add(new TaskTimeItem
{
Description = commitMessage,
Branch = changeset.Branch,
Commits = 1,
});
_log?.Trace($" - Найден changeset: {changeset.Timestamp} - {changeset.Branch} - {changeset.AuthorEmailAddress} - {commitMessage}");
}
}
if (!workTasks.Any())
@@ -77,17 +85,24 @@ namespace JiraTimeBotForm.TaskTime
int totalCommitsCount = workTasks.Count;
//Нам нужно раскидать 480 минут в день.
foreach (var taskGroup in workTasks.GroupBy(f => f).OrderByDescending(f=>f.Count()))
foreach (var taskGroup in workTasks.GroupBy(f => f.Branch).OrderByDescending(f=>f.Count()))
{
int currentTaskCommits = taskGroup.Count();
int currentTaskTime = (int)RoundTo(settings.MinuterPerWorkDay / totalCommitsCount * currentTaskCommits);
remainMinutes = remainMinutes - currentTaskTime;
StringBuilder sb = new StringBuilder();
foreach (var task in taskGroup)
{
sb.AppendLine($"- {task.Description}");
}
var taskTimeItem = new TaskTimeItem
{
Branch = taskGroup.Key,
Time = TimeSpan.FromMinutes(currentTaskTime),
Commits = taskGroup.Count(),
Description = sb.ToString()
};
workTimeItems.Add(taskTimeItem);
@@ -98,6 +113,67 @@ namespace JiraTimeBotForm.TaskTime
return workTimeItems;
}
private string StripTechnicalInfo(string commitMessage)
{
if (!commitMessage.Contains("Signed-by:"))
{
return commitMessage;
}
var arr = commitMessage.Split('\n');
var sb = new StringBuilder();
foreach (var itm in arr)
{
if (string.IsNullOrEmpty(itm))
{
continue;
}
if (itm.StartsWith("Signed-by"))
{
continue;
}
if (itm.StartsWith("Jira:"))
{
continue;
}
sb.AppendLine(itm);
}
var message = sb.ToString();
message = message.TrimEnd('\n');
message = message.TrimEnd('\r');
return message;
}
private bool IsNeedToSkip(string branch, string commitMessage)
{
if (!branch.Contains("-"))
{
return true;
}
//Пропускаем Close и Merge коммиты
if (commitMessage.StartsWith($"Close {branch} ", StringComparison.InvariantCultureIgnoreCase) ||
commitMessage.StartsWith($"Merge with ", StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
return false;
}
private string FixEncoding(string source)
{
//перекодируем сообщение - ибо оно криво забирается в 1252
Encoding srcEncodingFormat = Encoding.GetEncoding("windows-1252");
byte[] originalByteString = srcEncodingFormat.GetBytes(source);
var commitMessage = Encoding.UTF8.GetString(originalByteString);
return commitMessage;
}
private decimal RoundTo(decimal value, decimal to = 15, bool up = true)
{
if ((value % to) == 0)
@@ -107,6 +183,5 @@ namespace JiraTimeBotForm.TaskTime
return (value - (value % to));
}
}
}