Wed, 25 Feb 2026 22:32:55 +0100
fix regression: incorrectly splitting at # within commit message
relates to #807
| src/heatmap.cpp | file | annotate | diff | comparison | revisions |
--- a/src/heatmap.cpp Wed Feb 25 21:13:55 2026 +0100 +++ b/src/heatmap.cpp Wed Feb 25 22:32:55 2026 +0100 @@ -38,16 +38,18 @@ if (line.empty()) continue; // split the line by delimiter + // this needs to be so crappy, because C++ split does not have a max-split parameter const auto line_view = std::string_view{line}; - auto parts = std::views::split(line_view, '#') - | std::views::transform([](auto r) { return std::string_view(r); }) - | std::ranges::to<std::vector>(); + const auto pos_delim1 = line_view.find('#', 0); + const auto pos_delim2 = line_view.find('#', pos_delim1 + 1); + const auto pos_delim3 = line_view.find('#', pos_delim2 + 1); + const auto pos_delim4 = line_view.find('#', pos_delim3 + 1); - std::string_view hash_view{parts[0]}; - std::string author{settings.map_author(parts[1])}; - std::string_view date_view{parts[2]}; - std::string_view tags_view{parts[3]}; - std::string_view summary_view{parts[4]}; + std::string_view hash_view{line_view.substr(0, pos_delim1)}; + std::string author{line_view.substr(pos_delim1+1, pos_delim2 - pos_delim1 - 1)}; + std::string_view date_view{line_view.substr(pos_delim2+1, pos_delim3 - pos_delim2 - 1)}; + std::string_view tags_view{line_view.substr(pos_delim3+1, pos_delim4 - pos_delim3 - 1)}; + std::string_view summary_view{line_view.substr(pos_delim4+1)}; int year = 0; unsigned int month = 0, day = 0;