push_util.h 1.83 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
#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
 */
14 15
#define RECORD_CALLBACKS_INIT(data) \
	{ GIT_REMOTE_CALLBACKS_VERSION, NULL, NULL, record_update_tips_cb, data }
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

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);

/**
 * Callback for git_remote_list that adds refspecs to delete each ref
 *
 * @param head a ref on the remote
 * @param payload a git_push instance
 */
int delete_ref_cb(git_remote_head *head, void *payload);

/**
 * 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 stored by record_ref_cb()
 * @param expected_refs expected remote refs
 * @param expected_refs_len length of expected_refs
 */
void verify_remote_refs(git_vector *actual_refs, const expected_ref expected_refs[], size_t expected_refs_len);

#endif /* INCLUDE_cl_push_util_h__ */