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 const std::string repo_key = m_separate ? m_current_repo : "All Repositories"; |
36 |
36 |
37 for (auto line: std::views::split(log, "\n"sv)) { |
37 for (auto line: std::views::split(log, "\n"sv)) { |
38 if (line.empty()) continue; |
38 if (line.empty()) continue; |
39 auto parts = std::views::split(line, "#"sv); |
39 |
40 auto parts_iter = parts.begin(); |
40 // find all delimiters |
41 std::string author{settings.map_author(std::string_view{*parts_iter})}; |
41 const auto line_view = std::string_view{line}; |
|
42 const auto pos_delim1 = line_view.find('#', 0); |
|
43 const auto pos_delim2 = line_view.find('#', pos_delim1 + 1); |
|
44 |
|
45 std::string author{settings.map_author(line_view.substr(0, pos_delim1))}; |
|
46 std::string_view date_view{line_view.substr(pos_delim1+1, pos_delim2)}; |
|
47 std::string_view summary_view{line_view.substr(pos_delim2+1)}; |
42 |
48 |
43 int year = 0; |
49 int year = 0; |
44 unsigned int month = 0, day = 0; |
50 unsigned int month = 0, day = 0; |
45 ++parts_iter; |
51 auto date_parts = std::views::split(date_view, "-"sv) |
46 auto date_parts = std::views::split(*parts_iter, "-"sv) |
|
47 | std::views::transform([](auto r) { return std::string_view(r); }) |
52 | std::views::transform([](auto r) { return std::string_view(r); }) |
48 | std::ranges::to<std::vector>(); |
53 | std::ranges::to<std::vector>(); |
49 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); |
54 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); |
50 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); |
55 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); |
51 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); |
56 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); |
52 auto &[summaries] = m_heatmap[repo_key][author][chrono::year_month_day{ |
57 auto &[summaries] = m_heatmap[repo_key][author][chrono::year_month_day{ |
53 chrono::year{year}, chrono::month{month}, chrono::day{day} |
58 chrono::year{year}, chrono::month{month}, chrono::day{day} |
54 }]; |
59 }]; |
55 ++parts_iter; |
60 summaries[m_current_repo].emplace_back(summary_view); |
56 summaries[m_current_repo].emplace_back(std::string_view{*parts_iter}); |
|
57 } |
61 } |
58 } |
62 } |
59 |
63 |
60 std::array<unsigned int, 12> fm::heatmap::commits_per_month( |
64 std::array<unsigned int, 12> fm::heatmap::commits_per_month( |
61 const std::string& repo, |
65 const std::string& repo, |