| 1217 | } |
| 1218 | |
| 1219 | int reftable_ref_record_equal(const struct reftable_ref_record *a, |
| 1220 | const struct reftable_ref_record *b, uint32_t hash_size) |
| 1221 | { |
| 1222 | if (!null_streq(a->refname, b->refname)) |
| 1223 | return 0; |
| 1224 | |
| 1225 | if (a->update_index != b->update_index || |
| 1226 | a->value_type != b->value_type) |
| 1227 | return 0; |
| 1228 | |
| 1229 | switch (a->value_type) { |
| 1230 | case REFTABLE_REF_SYMREF: |
| 1231 | return !strcmp(a->value.symref, b->value.symref); |
| 1232 | case REFTABLE_REF_VAL2: |
| 1233 | return hash_equal(a->value.val2.value, b->value.val2.value, |
| 1234 | hash_size) && |
| 1235 | hash_equal(a->value.val2.target_value, |
| 1236 | b->value.val2.target_value, hash_size); |
| 1237 | case REFTABLE_REF_VAL1: |
| 1238 | return hash_equal(a->value.val1, b->value.val1, hash_size); |
| 1239 | case REFTABLE_REF_DELETION: |
| 1240 | return 1; |
| 1241 | default: |
| 1242 | abort(); |
| 1243 | } |
| 1244 | } |
| 1245 | |
| 1246 | int reftable_ref_record_compare_name(const void *a, const void *b) |
| 1247 | { |