src/heatmap.cpp

changeset 76
110a234a3260
parent 75
857af79337d5
child 77
43a1ba0e11e3
--- a/src/heatmap.cpp	Fri Feb 06 18:44:47 2026 +0100
+++ b/src/heatmap.cpp	Wed Feb 25 21:13:55 2026 +0100
@@ -37,16 +37,17 @@
     for (auto line: std::views::split(log, "\n"sv)) {
         if (line.empty()) continue;
 
-        // find all delimiters
+        // split the line by delimiter
         const auto line_view = std::string_view{line};
-        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);
+        auto parts = std::views::split(line_view, '#')
+                     | std::views::transform([](auto r) { return std::string_view(r); })
+                     | std::ranges::to<std::vector>();
 
-        std::string author{settings.map_author(line_view.substr(0, pos_delim1))};
-        std::string_view date_view{line_view.substr(pos_delim1+1, pos_delim2 - pos_delim1 - 1)};
-        std::string_view tags_view{line_view.substr(pos_delim2+1, pos_delim3 - pos_delim2 - 1)};
-        std::string_view summary_view{line_view.substr(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]};
 
         int year = 0;
         unsigned int month = 0, day = 0;
@@ -60,10 +61,10 @@
                 m_heatmap[repo_key][author][chrono::year_month_day{
                     chrono::year{year}, chrono::month{month}, chrono::day{day}
                 }];
-        summaries[m_current_repo].emplace_back(summary_view);
+        summaries[m_current_repo].emplace_back(hash_view, summary_view);
         // special case: if the (only) tag is "tip", we do not add it
         if (!tags_view.empty() && tags_view != "tip") {
-            tags[m_current_repo].emplace_back(tags_view);
+            tags[m_current_repo].emplace_back(hash_view, tags_view);
         }
     }
 }
@@ -82,10 +83,10 @@
         }
         for (auto &&[reponame, tags]: commits.tags) {
             if (tags.empty()) continue;
-            std::string tag_list = tags.at(0);
+            std::string tag_list = tags.at(0).message;
             for (unsigned i = 1; i < tags.size(); ++i) {
                 tag_list.append(", ");
-                tag_list.append(tags.at(i));
+                tag_list.append(tags.at(i).message);
             }
             cs.tags_with_date[reponame].emplace_back(
                     std::format("{} on {}-{:02}-{:02}",

mercurial