Try to lock the ref during the transaction update instead of later during the
commit phase. This allows us to do things such as :

t = transaction_begin()
transaction_update_sha1(t, ref, ...)   /* locking ref */
...
do stuff while we know that ref is locked
...
transaction_commit(t)

Signed-off-by: Ronnie Sahlberg <sahlb...@google.com>
---
 refs.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/refs.c b/refs.c
index 8212d77..b006238 100644
--- a/refs.c
+++ b/refs.c
@@ -3438,6 +3438,16 @@ int transaction_update_sha1(struct ref_transaction 
*transaction,
         */
        if (update->flags & REF_ISPACKONLY)
                add_delname(transaction, update->refname);
+       else {
+               update->lock = lock_ref_sha1_basic(update->refname,
+                                                  (update->have_old ?
+                                                   update->old_sha1 :
+                                                   NULL),
+                                                  update->flags,
+                                                  &update->type,
+                                                  transaction->delnames,
+                                                  transaction->delnum);
+       }
        return 0;
 }
 
@@ -3566,14 +3576,6 @@ int transaction_commit(struct ref_transaction 
*transaction,
                if (update->flags & REF_ISPACKONLY)
                        continue;
 
-               update->lock = lock_ref_sha1_basic(update->refname,
-                                                  (update->have_old ?
-                                                   update->old_sha1 :
-                                                   NULL),
-                                                  update->flags,
-                                                  &update->type,
-                                                  transaction->delnames,
-                                                  transaction->delnum);
                if (!update->lock) {
                        if (err)
                                strbuf_addf(err, "Cannot lock the ref '%s'.",
-- 
2.0.0.rc3.506.g3739a35

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