#ifndef INCLUDE_cl_push_util_h__ #define INCLUDE_cl_push_util_h__ #include "git2/oid.h" /* Constant for zero oid */ extern const git_oid OID_ZERO; /** * Macro for initializing git_remote_callbacks to use test helpers that * record data in a record_callbacks_data instance. * @param data pointer to a record_callbacks_data instance */ #define RECORD_CALLBACKS_INIT(data) \ { GIT_REMOTE_CALLBACKS_VERSION, NULL, NULL, cred_acquire_cb, NULL, record_update_tips_cb, data } typedef struct { char *name; git_oid *old_oid; git_oid *new_oid; } updated_tip; typedef struct { git_vector updated_tips; } record_callbacks_data; typedef struct { const char *name; const git_oid *oid; } expected_ref; void updated_tip_free(updated_tip *t); void record_callbacks_data_clear(record_callbacks_data *data); /** * Callback for git_remote_update_tips that records updates * * @param data (git_vector *) of updated_tip instances */ int record_update_tips_cb(const char *refname, const git_oid *a, const git_oid *b, void *data); /** * Create a set of refspecs that deletes each of the inputs * * @param out the vector in which to store the refspecs * @param heads the remote heads * @param heads_len the size of the array */ int create_deletion_refspecs(git_vector *out, const git_remote_head **heads, size_t heads_len); /** * Callback for git_remote_list that adds refspecs to vector * * @param head a ref on the remote * @param payload (git_vector *) of git_remote_head instances */ int record_ref_cb(git_remote_head *head, void *payload); /** * Verifies that refs on remote stored by record_ref_cb match the expected * names, oids, and order. * * @param actual_refs actual refs in the remote * @param actual_refs_len length of actual_refs * @param expected_refs expected remote refs * @param expected_refs_len length of expected_refs */ void verify_remote_refs(const git_remote_head *actual_refs[], size_t actual_refs_len, const expected_ref expected_refs[], size_t expected_refs_len); #endif /* INCLUDE_cl_push_util_h__ */