vendor/libgit2/src/transaction.c in rugged-0.28.4 vs vendor/libgit2/src/transaction.c in rugged-0.28.4.1
- old
+ new
@@ -82,11 +82,11 @@
if (!tx) {
error = -1;
goto on_error;
}
- if ((error = git_strmap_new(&tx->locks)) < 0) {
+ if ((error = git_strmap_alloc(&tx->locks)) < 0) {
error = -1;
goto on_error;
}
if ((error = git_repository_refdb(&tx->db, repo)) < 0)
@@ -117,11 +117,12 @@
GIT_ERROR_CHECK_ALLOC(node->name);
if ((error = git_refdb_lock(&node->payload, tx->db, refname)) < 0)
return error;
- if ((error = git_strmap_set(tx->locks, node->name, node)) < 0)
+ git_strmap_insert(tx->locks, node->name, node, &error);
+ if (error < 0)
goto cleanup;
return 0;
cleanup:
@@ -131,16 +132,20 @@
}
static int find_locked(transaction_node **out, git_transaction *tx, const char *refname)
{
transaction_node *node;
+ size_t pos;
- if ((node = git_strmap_get(tx->locks, refname)) == NULL) {
+ pos = git_strmap_lookup_index(tx->locks, refname);
+ if (!git_strmap_valid_index(tx->locks, pos)) {
git_error_set(GIT_ERROR_REFERENCE, "the specified reference is not locked");
return GIT_ENOTFOUND;
}
+ node = git_strmap_value_at(tx->locks, pos);
+
*out = node;
return 0;
}
static int copy_common(transaction_node *node, git_transaction *tx, const git_signature *sig, const char *msg)
@@ -332,16 +337,10 @@
if (node->reflog) {
if ((error = tx->db->backend->reflog_write(tx->db->backend, node->reflog)) < 0)
return error;
}
- if (node->ref_type == GIT_REFERENCE_INVALID) {
- /* ref was locked but not modified */
- if ((error = git_refdb_unlock(tx->db, node->payload, false, false, NULL, NULL, NULL)) < 0) {
- return error;
- }
- node->committed = true;
- } else {
+ if (node->ref_type != GIT_REFERENCE_INVALID) {
if ((error = update_target(tx->db, node)) < 0)
return error;
}
});