diff --git a/BLL/CommitDetail.cs b/BLL/CommitDetail.cs index b9702f6..3c8b34c 100644 --- a/BLL/CommitDetail.cs +++ b/BLL/CommitDetail.cs @@ -5,13 +5,17 @@ public class CommitDetail private List? _authors; private SortedList? _commitDetails; private string _currentBranch; + private string? _outputOption; + private string? _branchOption; + private string? _tagOption; + private string? _selectedDir; - public List? Authors - { + public List? Authors + { get { return _authors; } set { _authors = value; } } - + public SortedList? CommitDetails { get { return _commitDetails; } @@ -24,16 +28,28 @@ public class CommitDetail set { _currentBranch = value; } } - public CommitDetail() + public string? SelectedDir { + get { return _selectedDir; } + set { _selectedDir = value; } + } + + public CommitDetail(string? dir) + { + _selectedDir = !String.IsNullOrEmpty(dir) ? dir : Directory.GetCurrentDirectory(); _authors = new List(); _commitDetails = new SortedList(); _currentBranch = GetCurrentBranch(); + + // unused, might be used later for a refactor + _outputOption = null; + _branchOption = null; + _tagOption = null; } - public void GetCurrentCommitsByName() + public void GetCurrentCommitsByName() { - using (var repo = new Repository(Directory.GetCurrentDirectory())) + using (var repo = new Repository(_selectedDir)) { foreach (var c in repo.Commits) { @@ -42,7 +58,7 @@ public class CommitDetail _authors.Add(c.Author.Name); } } - + foreach (var a in _authors) { int commitCount = repo.Commits.Where(r => r.Author.Name == a).Count(); @@ -53,7 +69,7 @@ public class CommitDetail public void GetCurrentCommitsByEmail() { - using (var repo = new Repository(Directory.GetCurrentDirectory())) + using (var repo = new Repository(_selectedDir)) { foreach (var c in repo.Commits) { @@ -62,7 +78,7 @@ public class CommitDetail _authors.Add(c.Author.Email); } } - + foreach (var a in _authors) { int commitCount = repo.Commits.Where(r => r.Author.Email == a).Count(); @@ -73,7 +89,7 @@ public class CommitDetail public int GetCommitTotal() { - using (var repo = new Repository(Directory.GetCurrentDirectory())) + using (var repo = new Repository(_selectedDir)) { return repo.Commits.Count(); } @@ -81,7 +97,7 @@ public class CommitDetail public string GetCurrentBranch() { - using (var repo = new Repository(Directory.GetCurrentDirectory())) + using (var repo = new Repository(_selectedDir)) { return repo.Head.Reference.TargetIdentifier; } @@ -89,7 +105,7 @@ public class CommitDetail public void GetCommitsByBranch(string branchName) { - using (var repo = new Repository(Directory.GetCurrentDirectory())) + using (var repo = new Repository(_selectedDir)) { var branchResult = repo.Branches[branchName]; @@ -100,7 +116,7 @@ public class CommitDetail branchResult = repo.Branches[$"origin/{branchName}"]; var remoteBranch = repo.CreateBranch(branchName, branchResult.Tip); repo.Branches.Update(remoteBranch, b => b.UpstreamBranch = $"refs/heads/{branchName}"); - } + } } catch (System.Exception) { @@ -115,7 +131,7 @@ public class CommitDetail _authors.Add(c.Author.Name); } } - + foreach (var a in _authors) { int commitCount = branchResult.Commits.Where(r => r.Author.Name == a).Count(); @@ -123,15 +139,15 @@ public class CommitDetail } } } - + public void GetCommitsByTag(string tagName) { - using (var repo = new Repository(Directory.GetCurrentDirectory())) + using (var repo = new Repository(_selectedDir)) { try { var tagResult = repo.Tags[tagName].Target.Sha; - + var commitFilter = new CommitFilter { IncludeReachableFrom = tagResult, diff --git a/DrillSergeant.csproj b/DrillSergeant.csproj index a246cc4..bddfa44 100644 --- a/DrillSergeant.csproj +++ b/DrillSergeant.csproj @@ -7,7 +7,7 @@ enable enable drillsergeant - 1.1.0 + 1.2.0 diff --git a/Program.cs b/Program.cs index a156caa..d70fe7e 100644 --- a/Program.cs +++ b/Program.cs @@ -22,119 +22,141 @@ static class Program ); tagOption.AddAlias("-t"); + var dirOption = new Option( + "--file", + "Specify a git directory" + ); + dirOption.AddAlias("-f"); + var rootCommand = new RootCommand("Get a tally of contributors' commits") { outputOption, branchOption, tagOption, + dirOption, }; - rootCommand.SetHandler((outputOptionValue, branchOptionValue, tagOptionValue) => { - CommitDetail commits = new CommitDetail(); - - switch (outputOptionValue) + rootCommand.SetHandler((outputOptionValue, branchOptionValue, tagOptionValue, dirOptionValue) => + { + CommitDetail commits = new CommitDetail(dirOptionValue); + + switch (outputOptionValue) + { + case "stdout": + StdOutDataService outDataService = new StdOutDataService(); + DataAccess dataAccess = new DataAccess(outDataService); + + if (branchOptionValue != null && tagOptionValue != null) { - case "stdout": - StdOutDataService outDataService = new StdOutDataService(); - DataAccess dataAccess = new DataAccess(outDataService); - - if (branchOptionValue != null && tagOptionValue != null) { - Console.WriteLine("Please specify either a branch or a tag"); - Environment.Exit(2); - } else if (branchOptionValue != null && tagOptionValue == null) { - switch (branchOptionValue) - { - case null: - commits.GetCurrentCommitsByName(); - dataAccess.WriteData(commits.CommitDetails); - break; - default: - commits.GetCommitsByBranch(branchOptionValue); - dataAccess.WriteData(commits.CommitDetails); - break; - } - break; - } else if (branchOptionValue == null && tagOptionValue != null) { - commits.GetCommitsByTag(tagOptionValue); - dataAccess.WriteData(commits.CommitDetails); - } - break; - case "xlsx": - ExcelDataService excelDataService = new ExcelDataService(); - DataAccess dataAccessExcelCase = new DataAccess(excelDataService); - - if (branchOptionValue != null && tagOptionValue != null) { - Console.WriteLine("Please specify either a branch or a tag."); - Environment.Exit(2); - } else if (branchOptionValue != null && tagOptionValue == null) { - switch (branchOptionValue) - { - case null: - commits.GetCurrentCommitsByName(); - dataAccessExcelCase.WriteData(commits.CommitDetails); - break; - default: - commits.GetCommitsByBranch(branchOptionValue); - dataAccessExcelCase.WriteData(commits.CommitDetails); - break; - } - break; - } else if (branchOptionValue == null && tagOptionValue != null) { - commits.GetCommitsByTag(tagOptionValue); - dataAccessExcelCase.WriteData(commits.CommitDetails); - } - break; - case "pdf": - PdfDataService pdfDataService = new PdfDataService(); - DataAccess dataAccessPdfCase = new DataAccess(pdfDataService); - - switch (branchOptionValue) - { - case null: - commits.GetCurrentCommitsByName(); - dataAccessPdfCase.WriteData(commits.CommitDetails); - break; - default: - commits.GetCommitsByBranch(branchOptionValue); - dataAccessPdfCase.WriteData(commits.CommitDetails); - break; - } - break; - case null: - StdOutDataService stdOutDataService = new StdOutDataService(); - DataAccess dataAccessNullCase = new DataAccess(stdOutDataService); - - if (branchOptionValue != null && tagOptionValue != null) { - Console.WriteLine("Please specify either a branch or a tag."); - Environment.Exit(2); - } else if (branchOptionValue != null && tagOptionValue == null) { - switch (branchOptionValue) - { - case null: - commits.GetCurrentCommitsByName(); - dataAccessNullCase.WriteData(commits.CommitDetails); - break; - default: - commits.GetCommitsByBranch(branchOptionValue); - dataAccessNullCase.WriteData(commits.CommitDetails); - break; - } - break; - } else if (branchOptionValue == null && tagOptionValue != null) { - commits.GetCommitsByTag(tagOptionValue); - dataAccessNullCase.WriteData(commits.CommitDetails); - } else { + Console.WriteLine("Please specify either a branch or a tag"); + Environment.Exit(2); + } + else if (branchOptionValue != null && tagOptionValue == null) + { + switch (branchOptionValue) + { + case null: commits.GetCurrentCommitsByName(); - dataAccessNullCase.WriteData(commits.CommitDetails); - } + dataAccess.WriteData(commits.CommitDetails); + break; + default: + commits.GetCommitsByBranch(branchOptionValue); + dataAccess.WriteData(commits.CommitDetails); + break; + } + } + else if (branchOptionValue == null && tagOptionValue != null) + { + commits.GetCommitsByTag(tagOptionValue); + dataAccess.WriteData(commits.CommitDetails); + } + break; + case "xlsx": + ExcelDataService excelDataService = new ExcelDataService(); + DataAccess dataAccessExcelCase = new DataAccess(excelDataService); + + if (branchOptionValue != null && tagOptionValue != null) + { + Console.WriteLine("Please specify either a branch or a tag."); + Environment.Exit(2); + } + else if (branchOptionValue != null && tagOptionValue == null) + { + switch (branchOptionValue) + { + case null: + commits.GetCurrentCommitsByName(); + dataAccessExcelCase.WriteData(commits.CommitDetails); + break; + default: + commits.GetCommitsByBranch(branchOptionValue); + dataAccessExcelCase.WriteData(commits.CommitDetails); + break; + } + } + else if (branchOptionValue == null && tagOptionValue != null) + { + commits.GetCommitsByTag(tagOptionValue); + dataAccessExcelCase.WriteData(commits.CommitDetails); + } + break; + case "pdf": + PdfDataService pdfDataService = new PdfDataService(); + DataAccess dataAccessPdfCase = new DataAccess(pdfDataService); + + switch (branchOptionValue) + { + case null: + commits.GetCurrentCommitsByName(); + dataAccessPdfCase.WriteData(commits.CommitDetails); break; default: - System.Console.WriteLine("This should not happen..."); - Environment.Exit(4); + commits.GetCommitsByBranch(branchOptionValue); + dataAccessPdfCase.WriteData(commits.CommitDetails); break; } - }, - outputOption, branchOption, tagOption); + break; + case null: + StdOutDataService stdOutDataService = new StdOutDataService(); + DataAccess dataAccessNullCase = new DataAccess(stdOutDataService); + + if (branchOptionValue != null && tagOptionValue != null) + { + Console.WriteLine("Please specify either a branch or a tag."); + Environment.Exit(2); + } + else if (branchOptionValue != null && tagOptionValue == null) + { + switch (branchOptionValue) + { + case null: + commits.GetCurrentCommitsByName(); + dataAccessNullCase.WriteData(commits.CommitDetails); + break; + default: + commits.GetCommitsByBranch(branchOptionValue); + dataAccessNullCase.WriteData(commits.CommitDetails); + break; + } + } + else if (branchOptionValue == null && tagOptionValue != null) + { + commits.GetCommitsByTag(tagOptionValue); + dataAccessNullCase.WriteData(commits.CommitDetails); + } + else + { + commits.GetCurrentCommitsByName(); + dataAccessNullCase.WriteData(commits.CommitDetails); + } + break; + default: + System.Console.WriteLine("This should not happen..."); + Environment.Exit(4); + break; + } + }, + outputOption, branchOption, tagOption, dirOption); rootCommand.Invoke(args); }