Skip to content

Commit

Permalink
refs: remove API function update_refs()
Browse files Browse the repository at this point in the history
It has been superseded by reference transactions.  This also means
that struct ref_update can become private.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed Apr 7, 2014
1 parent aebfc13 commit b5c8ea2
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 33 deletions.
33 changes: 20 additions & 13 deletions refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -3267,6 +3267,20 @@ static int update_ref_write(const char *action, const char *refname,
return 0;
}

/**
* Information needed for a single ref update. Set new_sha1 to the
* new value or to zero to delete the ref. To check the old value
* while locking the ref, set have_old to 1 and set old_sha1 to the
* value or to zero to ensure the ref does not exist before update.
*/
struct ref_update {
const char *ref_name;
unsigned char new_sha1[20];
unsigned char old_sha1[20];
int flags; /* REF_NODEREF? */
int have_old; /* 1 if old_sha1 is valid, 0 otherwise */
};

/*
* Data structure for holding a reference transaction, which can
* consist of checks and updates to multiple references, carried out
Expand Down Expand Up @@ -3396,16 +3410,17 @@ static int ref_update_reject_duplicates(struct ref_update **updates, int n,
return 0;
}

int update_refs(const char *action, struct ref_update * const *updates_orig,
int n, enum action_on_err onerr)
int ref_transaction_commit(struct ref_transaction *transaction,
const char *msg, enum action_on_err onerr)
{
int ret = 0, delnum = 0, i;
struct ref_update **updates;
int *types;
struct ref_lock **locks;
const char **delnames;
int n = transaction->nr;

if (!updates_orig || !n)
if (!n)
return 0;

/* Allocate work space */
Expand All @@ -3415,7 +3430,7 @@ int update_refs(const char *action, struct ref_update * const *updates_orig,
delnames = xmalloc(sizeof(*delnames) * n);

/* Copy, sort, and reject duplicate refs */
memcpy(updates, updates_orig, sizeof(*updates) * n);
memcpy(updates, transaction->updates, sizeof(*updates) * n);
qsort(updates, n, sizeof(*updates), ref_update_compare);
ret = ref_update_reject_duplicates(updates, n, onerr);
if (ret)
Expand All @@ -3437,7 +3452,7 @@ int update_refs(const char *action, struct ref_update * const *updates_orig,
/* Perform updates first so live commits remain referenced */
for (i = 0; i < n; i++)
if (!is_null_sha1(updates[i]->new_sha1)) {
ret = update_ref_write(action,
ret = update_ref_write(msg,
updates[i]->ref_name,
updates[i]->new_sha1,
locks[i], onerr);
Expand Down Expand Up @@ -3465,14 +3480,6 @@ int update_refs(const char *action, struct ref_update * const *updates_orig,
free(types);
free(locks);
free(delnames);
return ret;
}

int ref_transaction_commit(struct ref_transaction *transaction,
const char *msg, enum action_on_err onerr)
{
int ret = update_refs(msg, transaction->updates, transaction->nr,
onerr);
ref_transaction_free(transaction);
return ret;
}
Expand Down
20 changes: 0 additions & 20 deletions refs.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,6 @@ struct ref_lock {
int force_write;
};

/**
* Information needed for a single ref update. Set new_sha1 to the
* new value or to zero to delete the ref. To check the old value
* while locking the ref, set have_old to 1 and set old_sha1 to the
* value or to zero to ensure the ref does not exist before update.
*/
struct ref_update {
const char *ref_name;
unsigned char new_sha1[20];
unsigned char old_sha1[20];
int flags; /* REF_NODEREF? */
int have_old; /* 1 if old_sha1 is valid, 0 otherwise */
};

struct ref_transaction;

/*
Expand Down Expand Up @@ -290,12 +276,6 @@ int update_ref(const char *action, const char *refname,
const unsigned char *sha1, const unsigned char *oldval,
int flags, enum action_on_err onerr);

/**
* Lock all refs and then perform all modifications.
*/
int update_refs(const char *action, struct ref_update * const *updates,
int n, enum action_on_err onerr);

extern int parse_hide_refs_config(const char *var, const char *value, const char *);
extern int ref_is_hidden(const char *);

Expand Down

0 comments on commit b5c8ea2

Please sign in to comment.