public void Generate(Analysis analysis)
        {
            Console.WriteLine("Generating Excel report...");
            if (analysis == null)
            {
                throw new ArgumentException("Parameter analysis is null.", nameof(analysis));
            }
            this.FileCommitsList        = analysis.FileCommits.Values.OrderByDescending(fc => fc.CommitCount).ThenBy(fc => fc.Filename);
            this.UserfileCommitsList    = analysis.UserfileCommits.Values.OrderByDescending(fc => fc.CommitCount).ThenBy(fc => fc.Filename).ThenBy(fc => fc.Username);
            this.FolderCommits          = analysis.FolderCommits;
            this.FolderCommitsList      = analysis.FolderCommits.Values.OrderByDescending(fc => fc.FileChanges);
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

            using (var excelPackage = new ExcelPackage())
            {
                var sheetCommitsForEachSubfolder = excelPackage.Workbook.Worksheets.Add("Commits for each sub-folder");
                AddSectionCommitsForEachMonth(sheetCommitsForEachSubfolder);

                var sheetTopMostChangedFiles = excelPackage.Workbook.Worksheets.Add($"Top {NumberOfFilesToList} most changed files");
                AddSectionCommitsForEachFile(sheetTopMostChangedFiles);

                var sheetStatistics = excelPackage.Workbook.Worksheets.Add("Statistics");
                AddSectionStatistics(sheetStatistics, analysis);

                var sheetCommitsEachDay = excelPackage.Workbook.Worksheets.Add("Commits each day");
                AddSectionCommitsEachDay(sheetCommitsEachDay, analysis.CommitsEachDay);

                var sheetLinesChangedEachDay = excelPackage.Workbook.Worksheets.Add("Lines changed each day");
                AddSectionLinesChangedEachDay(sheetLinesChangedEachDay, analysis.LinesOfCodeAddedEachDay, analysis.LinesOfCodeDeletedEachDay);

                var sheetCodeAge = excelPackage.Workbook.Worksheets.Add("Code age");
                AddSectionCodeAge(sheetCodeAge, analysis.CodeAge);

                if (analysis.Tags.Any() || analysis.Branches.Any())
                {
                    var sheetTags = excelPackage.Workbook.Worksheets.Add("Tags and Branches");
                    AddSectionTagsAndBranches(sheetTags, analysis.Tags, analysis.Branches);
                }

                var sheetNumberOfFilesOfEachType = excelPackage.Workbook.Worksheets.Add("Number of files of each type");
                AddSectionNumberOfFilesOfEachType(sheetNumberOfFilesOfEachType, analysis.FileTypes);

                excelPackage.SaveAs(systemIO.FileInfo($"{ReportFilename}.xlsx"));
            }
        }
Example #2
0
        public IList <FileInfo> Directory(string path, bool useCache = true)
        {
            if (!_systemio.DirectoryExists(path))
            {
                logger.LogError(path + " not found");
                throw new ArgumentException(path + " not found");
            }

            var result = new List <FileInfo>();

            if (useCache)
            {
                if (!_systemio.DirectoryExists(path + "/.archive"))
                {
                    _systemio.DirectoryCreateDirectory(path + "/.archive");
                }
            }

            var files = _systemio.DirectoryGetFiles(path);

            foreach (var file in files)
            {
                if (useCache)
                {
                    var fileInfo = _systemio.FileInfo(file);
                    if (_systemio.FileExists(path + "/.archive/" + fileInfo.Name))
                    {
                        result.Add(_fileInfoIO.Load(path + "/.archive/" + fileInfo.Name));
                        continue;
                    }
                    else
                    {
                        var infoObject = File(file);
                        result.Add(infoObject);
                        _fileInfoIO.Save(infoObject, path + "/.archive/" + fileInfo.Name);
                    }
                    continue;
                }

                result.Add(File(file));
            }

            return(result);
        }