/** * ggit_branch_get_upstream: * @branch: a #GgitBranch. * @error: a #GError for error reporting, or %NULL. * * Gets the reference supporting the remote tracking branch, * given a local branch reference. * * Returns: (transfer full) (allow-none): the reference supporting the remote tracking branch. */ GgitRef * ggit_branch_get_upstream (GgitBranch *branch, GError **error) { gint ret; git_reference *upstream; const gchar *name; GgitRef *ref; g_return_val_if_fail (GGIT_IS_BRANCH (branch), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); ret = git_branch_upstream (&upstream, _ggit_native_get (branch)); if (ret != GIT_OK) { _ggit_error_set (error, ret); return NULL; } name = git_reference_name (_ggit_native_get (upstream)); if (g_str_has_prefix (name, "refs/heads/")) { ref = GGIT_REF (_ggit_branch_wrap (upstream)); } else { ref = _ggit_ref_wrap (upstream); } return ref; }
/** * ggit_ref_set_target: * @ref: a #GgitRef. * @oid: a #GgitOId. * @log_message: The one line long message to be appended to the reflog. * @error: a #GError for error reporting, or %NULL. * * Create a new reference with the same name as the given reference but a * different OID target. The reference must be a direct reference, otherwise * this will fail. * * The new reference will be written to disk, overwriting the given reference. * * Returns: (transfer full): the newly created #GgitRef. */ GgitRef * ggit_ref_set_target (GgitRef *ref, GgitOId *oid, const gchar *log_message, GError **error) { git_reference *out; gint ret; g_return_val_if_fail (ref != NULL, NULL); g_return_val_if_fail (oid != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); ret = git_reference_set_target (&out, _ggit_native_get (ref), _ggit_oid_get_oid (oid), log_message); if (ret != GIT_OK) { _ggit_error_set (error, ret); return NULL; } return _ggit_ref_wrap (out, FALSE); }
/** * ggit_ref_rename: * @ref: a #GgitRef. * @new_name: the new name. * @force: %TRUE to force the renaming. * @log_message: The one line long message to be appended to the reflog. * @error: a #GError for error reporting, or %NULL. * * Rename an existing reference. * * This method works for both direct and symbolic references. * * The new name will be checked for validity. * See `ggit_ref_create_symbolic()` for rules about valid names. * * If not error, @ref will be deleted from disk and a * new #GgitRef will be returned. * * The reference will be immediately renamed in-memory and on disk. * * If the `force` flag is not enabled, and there's already * a reference with the given name, the renaming will fail. * * IMPORTANT: * The user needs to write a proper reflog entry if the * reflog is enabled for the repository. We only rename * the reflog if it exists. * * Returns: (transfer full): a newly created #GgitRef. */ GgitRef * ggit_ref_rename (GgitRef *ref, const gchar *new_name, gboolean force, const gchar *log_message, GError **error) { git_reference *out; gint ret; g_return_val_if_fail (ref != NULL, NULL); g_return_val_if_fail (new_name != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); force = (force != FALSE); ret = git_reference_rename (&out, _ggit_native_get (ref), new_name, force, log_message); if (ret != GIT_OK) { _ggit_error_set (error, ret); return NULL; } return _ggit_ref_wrap (out, FALSE); }
/** * ggit_branch_get_upstream: * @branch: a #GgitBranch. * @error: a #GError for error reporting, or %NULL. * * Gets the reference supporting the remote tracking branch, * given a local branch reference. * * Returns: (transfer full) (allow-none): the reference supporting the remote tracking branch. */ GgitRef * ggit_branch_get_upstream (GgitBranch *branch, GError **error) { gint ret; git_reference *upstream; g_return_val_if_fail (GGIT_IS_BRANCH (branch), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); ret = git_branch_upstream (&upstream, _ggit_native_get (branch)); if (ret != GIT_OK) { _ggit_error_set (error, ret); return NULL; } return _ggit_ref_wrap (upstream, FALSE); }
/** * ggit_ref_resolve: * @ref: a #GgitRef. * @error: a #GError for error reporting, or %NULL. * * Resolves a symbolic reference. * * This method iteratively peels a symbolic reference * until it resolves to a direct reference to an OID. * * If a direct reference is passed as an argument, * that reference is returned immediately. * * Returns: (transfer full): the resolved reference to the peeled one. */ GgitRef * ggit_ref_resolve (GgitRef *ref, GError **error) { GgitRef *rev_ref = NULL; git_reference *reference; gint ret; g_return_val_if_fail (ref != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); ret = git_reference_resolve (&reference, _ggit_native_get (ref)); if (ret == GIT_OK) { rev_ref = _ggit_ref_wrap (reference, FALSE); } else { _ggit_error_set (error, ret); } return rev_ref; }