]>
Commit | Line | Data |
---|---|---|
29c2bd5f JK |
1 | #include "cache.h" |
2 | #include "oidset.h" | |
3 | ||
8c84ae65 RS |
4 | void oidset_init(struct oidset *set, size_t initial_size) |
5 | { | |
6 | memset(&set->set, 0, sizeof(set->set)); | |
7 | if (initial_size) | |
8fbb558a | 8 | kh_resize_oid_set(&set->set, initial_size); |
8c84ae65 RS |
9 | } |
10 | ||
29c2bd5f JK |
11 | int oidset_contains(const struct oidset *set, const struct object_id *oid) |
12 | { | |
8fbb558a | 13 | khiter_t pos = kh_get_oid_set(&set->set, *oid); |
8b2f8cbc | 14 | return pos != kh_end(&set->set); |
29c2bd5f JK |
15 | } |
16 | ||
17 | int oidset_insert(struct oidset *set, const struct object_id *oid) | |
18 | { | |
8b2f8cbc | 19 | int added; |
8fbb558a | 20 | kh_put_oid_set(&set->set, *oid, &added); |
8b2f8cbc | 21 | return !added; |
29c2bd5f JK |
22 | } |
23 | ||
c3a9ad31 JH |
24 | int oidset_remove(struct oidset *set, const struct object_id *oid) |
25 | { | |
8fbb558a | 26 | khiter_t pos = kh_get_oid_set(&set->set, *oid); |
8b2f8cbc RS |
27 | if (pos == kh_end(&set->set)) |
28 | return 0; | |
8fbb558a | 29 | kh_del_oid_set(&set->set, pos); |
8b2f8cbc | 30 | return 1; |
c3a9ad31 JH |
31 | } |
32 | ||
29c2bd5f JK |
33 | void oidset_clear(struct oidset *set) |
34 | { | |
8fbb558a | 35 | kh_release_oid_set(&set->set); |
8b2f8cbc | 36 | oidset_init(set, 0); |
29c2bd5f | 37 | } |
f93895f8 | 38 | |
f4781068 TB |
39 | int oidset_size(struct oidset *set) |
40 | { | |
41 | return kh_size(&set->set); | |
42 | } | |
43 | ||
f93895f8 BR |
44 | void oidset_parse_file(struct oidset *set, const char *path) |
45 | { | |
46 | FILE *fp; | |
47 | struct strbuf sb = STRBUF_INIT; | |
48 | struct object_id oid; | |
49 | ||
50 | fp = fopen(path, "r"); | |
51 | if (!fp) | |
52 | die("could not open object name list: %s", path); | |
53 | while (!strbuf_getline(&sb, fp)) { | |
54 | const char *p; | |
55 | const char *name; | |
56 | ||
57 | /* | |
58 | * Allow trailing comments, leading whitespace | |
59 | * (including before commits), and empty or whitespace | |
60 | * only lines. | |
61 | */ | |
62 | name = strchr(sb.buf, '#'); | |
63 | if (name) | |
64 | strbuf_setlen(&sb, name - sb.buf); | |
65 | strbuf_trim(&sb); | |
66 | if (!sb.len) | |
67 | continue; | |
68 | ||
69 | if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0') | |
70 | die("invalid object name: %s", sb.buf); | |
71 | oidset_insert(set, &oid); | |
72 | } | |
73 | if (ferror(fp)) | |
74 | die_errno("Could not read '%s'", path); | |
75 | fclose(fp); | |
76 | strbuf_release(&sb); | |
77 | } |