oidset: introduce `oidset_equal()`
Introduce a new function that allows the caller to verify whether two oidsets contain the exact same object IDs. Note that this change requires us to change `oidset_iter_init()` to accept a `const struct oidset`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Nov 19, 2025 at 08:50 UTC
5d795b34dcbf46039c3dda028bb8df8d75a5a9d0
2 files changed
+23
-2
oidset.c
+16
@@ -16,6 +16,22 @@ int oidset_contains(const struct oidset *set, const struct object_id *oid)
16
return pos != kh_end(&set->set);
17
}
18
19
+bool oidset_equal(const struct oidset *a, const struct oidset *b)
20
+{
21
+ struct oidset_iter iter;
22
+ struct object_id *a_oid;
23
+
24
+ if (oidset_size(a) != oidset_size(b))
25
+ return false;
26
+
27
+ oidset_iter_init(a, &iter);
28
+ while ((a_oid = oidset_iter_next(&iter)))
29
+ if (!oidset_contains(b, a_oid))
30
+ return false;
31
+
32
+ return true;
33
+}
34
+
35
int oidset_insert(struct oidset *set, const struct object_id *oid)
36
{
37
int added;
oidset.h
+7
-2
@@ -38,6 +38,11 @@ void oidset_init(struct oidset *set, size_t initial_size);
38
*/
39
int oidset_contains(const struct oidset *set, const struct object_id *oid);
40
41
+/**
42
+ * Returns true iff `a` and `b` contain the exact same OIDs.
43
+ */
44
+bool oidset_equal(const struct oidset *a, const struct oidset *b);
45
+
46
/**
47
* Insert the oid into the set; a copy is made, so "oid" does not need
48
* to persist after this function is called.
@@ -94,11 +99,11 @@ void oidset_parse_file_carefully(struct oidset *set, const char *path,
99
oidset_parse_tweak_fn fn, void *cbdata);
100
101
struct oidset_iter {
97
- kh_oid_set_t *set;
102
+ const kh_oid_set_t *set;
103
khiter_t iter;
104
};
105
101
-static inline void oidset_iter_init(struct oidset *set,
106
+static inline void oidset_iter_init(const struct oidset *set,
107
struct oidset_iter *iter)
108
{
109
iter->set = &set->set;