commit 779e1159b25b2aa115e6b42f51003b7e2fa7c06b from: Stefan Sperling date: Fri Jun 18 14:14:49 2021 UTC expose the reflist_insert() helper function as got_reflist_insert() This will be needed by 'gotadmin pack'. commit - 9a8dc2b3ec216fd01b3c33137eb92d98ddadb63e commit + 779e1159b25b2aa115e6b42f51003b7e2fa7c06b blob - e330768de849dc0fa39914378bac64b6f8a09c01 blob + f666e84083ffb2ad05eab02a4fe4cc4a06853221 --- include/got_reference.h +++ include/got_reference.h @@ -117,6 +117,20 @@ const struct got_error *got_ref_list(struct got_reflis /* Free all references on a ref list. */ void got_ref_list_free(struct got_reflist_head *); +/* + * Insert a reference into a reference list. + * Return a pointer to the newly allocated list entry in *newp. + * If *newp is NULL and no error occured then the specified reference was + * already an element of the list. If *newp is not NULL then the reference + * was shallow-copied onto the list and should no longer be closed with + * got_ref_close(). Instead it will be closed along with other list + * elements by got_ref_list_free(). + */ +const struct got_error * +got_reflist_insert(struct got_reflist_entry **newp, struct got_reflist_head *refs, + struct got_reference *ref, struct got_repository *repo, + got_ref_cmp_cb cmp_cb, void *cmp_arg); + /* Indicate whether the provided reference is symbolic (points at another * refernce) or not (points at an object ID). */ int got_ref_is_symbolic(struct got_reference *); blob - fcfc4cbf94642d9a6d37ac919bf5ba788dc7d9f8 blob + b89875ec9e861ec53c6a8c19a5fcbaa184ead648 --- lib/reference.c +++ lib/reference.c @@ -787,8 +787,8 @@ done: return err; } -static const struct got_error * -insert_ref(struct got_reflist_entry **newp, struct got_reflist_head *refs, +const struct got_error * +got_reflist_insert(struct got_reflist_entry **newp, struct got_reflist_head *refs, struct got_reference *ref, struct got_repository *repo, got_ref_cmp_cb cmp_cb, void *cmp_arg) { @@ -881,7 +881,7 @@ gather_on_disk_refs(struct got_reflist_head *refs, con goto done; if (ref) { struct got_reflist_entry *new; - err = insert_ref(&new, refs, ref, repo, + err = got_reflist_insert(&new, refs, ref, repo, cmp_cb, cmp_arg); if (err || new == NULL /* duplicate */) got_ref_close(ref); @@ -932,7 +932,7 @@ got_ref_list(struct got_reflist_head *refs, struct got err = open_ref(&ref, path_refs, "", GOT_REF_HEAD, 0); if (err) goto done; - err = insert_ref(&new, refs, ref, repo, + err = got_reflist_insert(&new, refs, ref, repo, cmp_cb, cmp_arg); if (err || new == NULL /* duplicate */) got_ref_close(ref); @@ -952,7 +952,7 @@ got_ref_list(struct got_reflist_head *refs, struct got goto done; /* Try to look up references in a given namespace. */ } else { - err = insert_ref(&new, refs, ref, repo, + err = got_reflist_insert(&new, refs, ref, repo, cmp_cb, cmp_arg); if (err || new == NULL /* duplicate */) got_ref_close(ref); @@ -1037,7 +1037,7 @@ got_ref_list(struct got_reflist_head *refs, struct got continue; } } - err = insert_ref(&new, refs, ref, repo, + err = got_reflist_insert(&new, refs, ref, repo, cmp_cb, cmp_arg); if (err || new == NULL /* duplicate */) got_ref_close(ref); @@ -1282,7 +1282,7 @@ delete_packed_ref(struct got_reference *delref, struct continue; } - err = insert_ref(&new, &refs, ref, repo, + err = got_reflist_insert(&new, &refs, ref, repo, got_ref_cmp_by_name, NULL); if (err || new == NULL /* duplicate */) got_ref_close(ref);