28 #include <ranges> |
28 #include <ranges> |
29 #include <chrono> |
29 #include <chrono> |
30 |
30 |
31 namespace chrono = std::chrono; |
31 namespace chrono = std::chrono; |
32 |
32 |
33 void fm::heatmap::add(const fm::settings &settings, const std::string &log) { |
33 void fm::heatmap::add(const settings &settings, const std::string &log) { |
34 using std::string_view_literals::operator ""sv; |
34 using std::string_view_literals::operator ""sv; |
|
35 const std::string repo_key = m_separate ? m_current_repo : "All Repositories"; |
35 |
36 |
36 for (auto line: std::views::split(log, "\n"sv)) { |
37 for (auto line: std::views::split(log, "\n"sv)) { |
37 if (line.empty()) continue; |
38 if (line.empty()) continue; |
38 auto parts = std::views::split(line, "#"sv); |
39 auto parts = std::views::split(line, "#"sv); |
39 auto parts_iter = parts.begin(); |
40 auto parts_iter = parts.begin(); |
46 | std::views::transform([](auto r) { return std::string_view(r); }) |
47 | std::views::transform([](auto r) { return std::string_view(r); }) |
47 | std::ranges::to<std::vector>(); |
48 | std::ranges::to<std::vector>(); |
48 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); |
49 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); |
49 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); |
50 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); |
50 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); |
51 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); |
51 auto &[summaries] = m_heatmap[m_current_repo][author][chrono::year_month_day{ |
52 auto &[summaries] = m_heatmap[repo_key][author][chrono::year_month_day{ |
52 chrono::year{year}, chrono::month{month}, chrono::day{day} |
53 chrono::year{year}, chrono::month{month}, chrono::day{day} |
53 }]; |
54 }]; |
54 ++parts_iter; |
55 ++parts_iter; |
55 summaries.emplace_back(std::string_view{*parts_iter}); |
56 summaries[m_current_repo].emplace_back(std::string_view{*parts_iter}); |
56 } |
57 } |
57 } |
58 } |
58 |
59 |
59 std::array<unsigned int, 12> fm::heatmap::commits_per_month( |
60 std::array<unsigned int, 12> fm::heatmap::commits_per_month( |
60 const std::string& repo, |
61 const std::string& repo, |