src/commit-data.h

Wed, 25 Feb 2026 22:32:55 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 25 Feb 2026 22:32:55 +0100
changeset 77
43a1ba0e11e3
parent 76
110a234a3260
permissions
-rw-r--r--

fix regression: incorrectly splitting at # within commit message

relates to #807

54
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /* Copyright 2025 Mike Becker. All rights reserved.
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 *
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Redistribution and use in source and binary forms, with or without
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * modification, are permitted provided that the following conditions are met:
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * 1. Redistributions of source code must retain the above copyright
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * notice, this list of conditions and the following disclaimer.
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 2. Redistributions in binary form must reproduce the above copyright
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer in the
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * documentation and/or other materials provided with the distribution.
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 *
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 */
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 #ifndef COMMIT_DATA_H
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 #define COMMIT_DATA_H
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
61
d77763d2fdda highlight days with tags - resolves #672
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
28 #include <unordered_map>
56
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
29 #include <numeric>
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
30 #include <vector>
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
31 #include <string>
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
32
54
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 namespace fm {
76
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
34 struct commit_info final {
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
35 std::string hash;
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
36 std::string message;
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
37 commit_info(std::string_view hash, std::string_view message)
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
38 : hash{hash}, message {message} {}
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
39 };
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
40
75
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
41 using commit_counts = std::unordered_map<
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
42 std::string, // repository name
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
43 unsigned>;
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
44 using summaries_lists = std::unordered_map<
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
45 std::string, // repository name
76
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
46 std::vector<commit_info> >;
75
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
47 using tag_lists = std::unordered_map<
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
48 std::string, // repository name
76
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
49 std::vector<commit_info> >;
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
50 using tag_summaries = std::unordered_map<
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
51 std::string, // repository name
75
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
52 std::vector<std::string> >;
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
53
54
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 struct commits final {
75
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
55 summaries_lists summaries;
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
56 tag_lists tags;
56
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
57
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
58 [[nodiscard]] unsigned count(const std::string &repo) const {
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
59 return summaries.at(repo).size();
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
60 }
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
61
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
62 [[nodiscard]] unsigned count() const {
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
63 return std::accumulate(
75
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
64 summaries.begin(), summaries.end(), 0u,
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
65 [](unsigned sum, const auto &pair) { return sum + pair.second.size(); });
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
66 }
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
67 };
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
68
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
69 struct commit_summary final {
76
110a234a3260 add reading commit hashes from the commit log - resolves #807
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
70 tag_summaries tags_with_date;
75
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
71 commit_counts commits;
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
72
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
73 [[nodiscard]] unsigned count(const std::string &repo) const {
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
74 return commits.at(repo);
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
75 }
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
76
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
77 [[nodiscard]] unsigned count() const {
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
78 return std::accumulate(
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
79 commits.begin(), commits.end(), 0u,
857af79337d5 add monthly summaries - resolves #699
Mike Becker <universe@uap-core.de>
parents: 61
diff changeset
80 [](unsigned sum, const auto &pair) { return sum + pair.second; });
56
3d2720f95cfb fix that commits were not listed per repository in the combined view
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
81 }
54
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 };
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 }
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84
586dcd606e47 add popups with commit summaries - resolves #644
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 #endif //COMMIT_DATA_H

mercurial