summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2013-05-14 16:07:33 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2013-11-23 13:35:51 +0100
commit14ab0e100e9474c5d1fda37fb0f4eec9ee0e9d13 (patch)
treea5a0a27bab657b9a87560f68e41a0b082e230786 /src
parent56ad3782e08cd1b2d26eee4014e77fac7a6c2414 (diff)
downloadlibgit2-14ab0e100e9474c5d1fda37fb0f4eec9ee0e9d13.tar.gz
refs: Introduce git_reference_set_target_with_log()
Diffstat (limited to 'src')
-rw-r--r--src/refs.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/refs.c b/src/refs.c
index 7c97c1627..75a7e1b95 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -480,21 +480,49 @@ int git_reference_symbolic_create_with_log(
ref_out, repo, name, NULL, target, force, signature, log_message);
}
+static int ensure_is_an_updatable_direct_reference(git_reference *ref)
+{
+ if (ref->type == GIT_REF_OID)
+ return 0;
+
+ giterr_set(GITERR_REFERENCE, "Cannot set OID on symbolic reference");
+ return -1;
+}
+
int git_reference_set_target(
git_reference **out,
git_reference *ref,
const git_oid *id)
{
+ int error;
+
assert(out && ref && id);
- if (ref->type != GIT_REF_OID) {
- giterr_set(GITERR_REFERENCE, "Cannot set OID on symbolic reference");
- return -1;
- }
+ if ((error = ensure_is_an_updatable_direct_reference(ref)) < 0)
+ return error;
return git_reference_create(out, ref->db->repo, ref->name, id, 1);
}
+int git_reference_set_target_with_log(
+ git_reference **out,
+ git_reference *ref,
+ const git_oid *id,
+ const git_signature *signature,
+ const char *log_message)
+{
+ int error;
+
+ assert(out && ref && id);
+ assert(signature && log_message);
+
+ if ((error = ensure_is_an_updatable_direct_reference(ref)) < 0)
+ return error;
+
+ return git_reference_create_with_log(
+ out, ref->db->repo, ref->name, id, 1, signature, log_message);
+}
+
int git_reference_symbolic_set_target(
git_reference **out,
git_reference *ref,