--- a/src/commit-data.h Fri Feb 06 16:23:50 2026 +0100 +++ b/src/commit-data.h Fri Feb 06 18:44:47 2026 +0100 @@ -31,13 +31,19 @@ #include <string> namespace fm { + using commit_counts = std::unordered_map< + std::string, // repository name + unsigned>; + using summaries_lists = std::unordered_map< + std::string, // repository name + std::vector<std::string> >; + using tag_lists = std::unordered_map< + std::string, // repository name + std::vector<std::string> >; + struct commits final { - std::unordered_map< - std::string, // repository name - std::vector<std::string> > summaries; - std::unordered_map< - std::string, // repository name - std::vector<std::string> > tags; + summaries_lists summaries; + tag_lists tags; [[nodiscard]] unsigned count(const std::string &repo) const { return summaries.at(repo).size(); @@ -45,8 +51,23 @@ [[nodiscard]] unsigned count() const { return std::accumulate( - summaries.begin(), summaries.end(), 0u, - [](unsigned sum, const auto &pair) { return sum + pair.second.size(); }); + summaries.begin(), summaries.end(), 0u, + [](unsigned sum, const auto &pair) { return sum + pair.second.size(); }); + } + }; + + struct commit_summary final { + tag_lists tags_with_date; + commit_counts commits; + + [[nodiscard]] unsigned count(const std::string &repo) const { + return commits.at(repo); + } + + [[nodiscard]] unsigned count() const { + return std::accumulate( + commits.begin(), commits.end(), 0u, + [](unsigned sum, const auto &pair) { return sum + pair.second; }); } }; }