summaryrefslogtreecommitdiff
path: root/src/refs.c
diff options
context:
space:
mode:
authorschu <schu-github@schulog.org>2011-11-21 11:30:14 +0100
committerschu <schu-github@schulog.org>2011-11-21 13:11:10 +0100
commit64093ce51879b5f9f6015b94fce095499c14159c (patch)
tree66e974622547ad938dc9649bc8bdd82b4d377ca1 /src/refs.c
parentbdbdefac39256da42f72532161363d92df00566b (diff)
downloadlibgit2-64093ce51879b5f9f6015b94fce095499c14159c.tar.gz
reference_rename: make sure to rollback
Actually rollback when we can't create the new reference. Mark the rolled back reference as loose. Signed-off-by: schu <schu-github@schulog.org>
Diffstat (limited to 'src/refs.c')
-rw-r--r--src/refs.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/refs.c b/src/refs.c
index 569efbf78..d7396f203 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -1352,7 +1352,7 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force)
}
if (error < GIT_SUCCESS)
- goto cleanup;
+ goto rollback;
/*
* Check if we have to update HEAD.
@@ -1398,6 +1398,9 @@ rollback:
error = git_reference_create_oid(
NULL, ref->owner, ref->name, &ref->target.oid, 0);
+ /* The reference is no longer packed */
+ ref->flags &= ~GIT_REF_PACKED;
+
return error == GIT_SUCCESS ?
git__rethrow(GIT_ERROR, "Failed to rename reference. Did rollback") :
git__rethrow(error, "Failed to rename reference. Failed to rollback");