/** * ggit_reflog_rename: * @reflog: a #GgitReflog. * @new_name: the new name of the reference. * @error: a #GError for error reporting, or %NULL. * * Renames the reflog for to @new_name, on error @error is set. */ gboolean ggit_reflog_rename (GgitReflog *reflog, const gchar *new_name, GError **error) { git_reference *nref; gint ret; g_return_val_if_fail (reflog != NULL, FALSE); g_return_val_if_fail (new_name != NULL && *new_name != '\0', FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); nref = _ggit_native_get (reflog->ref); ret = git_reflog_rename (git_reference_owner (nref), git_reference_name (nref), new_name); if (ret != GIT_OK) { _ggit_error_set (error, ret); return FALSE; } return TRUE; }
int git_reference_rename( git_reference **out, git_reference *ref, const char *new_name, int force) { unsigned int normalization_flags; char normalized[GIT_REFNAME_MAX]; bool should_head_be_updated = false; int error = 0; int reference_has_log; normalization_flags = ref->type == GIT_REF_SYMBOLIC ? GIT_REF_FORMAT_ALLOW_ONELEVEL : GIT_REF_FORMAT_NORMAL; if ((error = git_reference_normalize_name( normalized, sizeof(normalized), new_name, normalization_flags)) < 0) return error; /* Check if we have to update HEAD. */ if ((error = git_branch_is_head(ref)) < 0) return error; should_head_be_updated = (error > 0); if ((error = git_refdb_rename(out, ref->db, ref->name, new_name, force)) < 0) return error; /* Update HEAD it was poiting to the reference being renamed. */ if (should_head_be_updated && (error = git_repository_set_head(ref->db->repo, new_name)) < 0) { giterr_set(GITERR_REFERENCE, "Failed to update HEAD after renaming reference"); return error; } /* Rename the reflog file, if it exists. */ reference_has_log = git_reference_has_log(ref); if (reference_has_log < 0) return reference_has_log; if (reference_has_log && (error = git_reflog_rename(git_reference_owner(ref), git_reference_name(ref), new_name)) < 0) return error; return 0; }
void test_refs_reflog_reflog__renaming_with_an_invalid_name_returns_EINVALIDSPEC(void) { cl_assert_equal_i(GIT_EINVALIDSPEC, git_reflog_rename(g_repo, "refs/heads/master", "refs/heads/Inv@{id")); }