This should be done via reference transactions now.  This also means
that struct ref_update can become private.

Signed-off-by: Michael Haggerty <mhag...@alum.mit.edu>
---
 refs.c | 31 ++++++++++++++++++++-----------
 refs.h | 20 --------------------
 2 files changed, 20 insertions(+), 31 deletions(-)

diff --git a/refs.c b/refs.c
index 54260ce..91af0a0 100644
--- a/refs.c
+++ b/refs.c
@@ -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
@@ -3385,16 +3399,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 commit_ref_transaction(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 */
@@ -3404,7 +3419,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)
@@ -3426,7 +3441,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);
@@ -3457,12 +3472,6 @@ cleanup:
        return ret;
 }
 
-int commit_ref_transaction(struct ref_transaction *transaction,
-                          const char *msg, enum action_on_err onerr)
-{
-       return update_refs(msg, transaction->updates, transaction->nr, onerr);
-}
-
 char *shorten_unambiguous_ref(const char *refname, int strict)
 {
        int i;
diff --git a/refs.h b/refs.h
index 2848fb7..b1f8b74 100644
--- a/refs.h
+++ b/refs.h
@@ -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;
 
 /*
@@ -288,12 +274,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 *);
 
-- 
1.9.0

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to