Blame include/git2/branch.h

Packit ae9e2a
/*
Packit ae9e2a
 * Copyright (C) the libgit2 contributors. All rights reserved.
Packit ae9e2a
 *
Packit ae9e2a
 * This file is part of libgit2, distributed under the GNU GPL v2 with
Packit ae9e2a
 * a Linking Exception. For full terms see the included COPYING file.
Packit ae9e2a
 */
Packit ae9e2a
#ifndef INCLUDE_git_branch_h__
Packit ae9e2a
#define INCLUDE_git_branch_h__
Packit ae9e2a
Packit ae9e2a
#include "common.h"
Packit ae9e2a
#include "oid.h"
Packit ae9e2a
#include "types.h"
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * @file git2/branch.h
Packit ae9e2a
 * @brief Git branch parsing routines
Packit ae9e2a
 * @defgroup git_branch Git branch management
Packit ae9e2a
 * @ingroup Git
Packit ae9e2a
 * @{
Packit ae9e2a
 */
Packit ae9e2a
GIT_BEGIN_DECL
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Create a new branch pointing at a target commit
Packit ae9e2a
 *
Packit ae9e2a
 * A new direct reference will be created pointing to
Packit ae9e2a
 * this target commit. If `force` is true and a reference
Packit ae9e2a
 * already exists with the given name, it'll be replaced.
Packit ae9e2a
 *
Packit ae9e2a
 * The returned reference must be freed by the user.
Packit ae9e2a
 *
Packit ae9e2a
 * The branch name will be checked for validity.
Packit ae9e2a
 * See `git_tag_create()` for rules about valid names.
Packit ae9e2a
 *
Packit ae9e2a
 * @param out Pointer where to store the underlying reference.
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch_name Name for the branch; this name is
Packit ae9e2a
 * validated for consistency. It should also not conflict with
Packit ae9e2a
 * an already existing branch name.
Packit ae9e2a
 *
Packit ae9e2a
 * @param target Commit to which this branch should point. This object
Packit ae9e2a
 * must belong to the given `repo`.
Packit ae9e2a
 *
Packit ae9e2a
 * @param force Overwrite existing branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0, GIT_EINVALIDSPEC or an error code.
Packit ae9e2a
 * A proper reference is written in the refs/heads namespace
Packit ae9e2a
 * pointing to the provided target commit.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_create(
Packit ae9e2a
	git_reference **out,
Packit ae9e2a
	git_repository *repo,
Packit ae9e2a
	const char *branch_name,
Packit ae9e2a
	const git_commit *target,
Packit ae9e2a
	int force);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Create a new branch pointing at a target commit
Packit ae9e2a
 *
Packit ae9e2a
 * This behaves like `git_branch_create()` but takes an annotated
Packit ae9e2a
 * commit, which lets you specify which extended sha syntax string was
Packit ae9e2a
 * specified by a user, allowing for more exact reflog messages.
Packit ae9e2a
 *
Packit ae9e2a
 * See the documentation for `git_branch_create()`.
Packit ae9e2a
 *
Packit ae9e2a
 * @see git_branch_create
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_create_from_annotated(
Packit ae9e2a
	git_reference **ref_out,
Packit ae9e2a
	git_repository *repository,
Packit ae9e2a
	const char *branch_name,
Packit ae9e2a
	const git_annotated_commit *commit,
Packit ae9e2a
	int force);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Delete an existing branch reference.
Packit ae9e2a
 *
Packit ae9e2a
 * If the branch is successfully deleted, the passed reference
Packit ae9e2a
 * object will be invalidated. The reference must be freed manually
Packit ae9e2a
 * by the user.
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch A valid reference representing a branch
Packit ae9e2a
 * @return 0 on success, or an error code.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_delete(git_reference *branch);
Packit ae9e2a
Packit ae9e2a
/** Iterator type for branches */
Packit ae9e2a
typedef struct git_branch_iterator git_branch_iterator;
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Create an iterator which loops over the requested branches.
Packit ae9e2a
 *
Packit ae9e2a
 * @param out the iterator
Packit ae9e2a
 * @param repo Repository where to find the branches.
Packit ae9e2a
 * @param list_flags Filtering flags for the branch
Packit ae9e2a
 * listing. Valid values are GIT_BRANCH_LOCAL, GIT_BRANCH_REMOTE
Packit ae9e2a
 * or GIT_BRANCH_ALL.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0 on success  or an error code
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_iterator_new(
Packit ae9e2a
	git_branch_iterator **out,
Packit ae9e2a
	git_repository *repo,
Packit ae9e2a
	git_branch_t list_flags);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Retrieve the next branch from the iterator
Packit ae9e2a
 *
Packit ae9e2a
 * @param out the reference
Packit ae9e2a
 * @param out_type the type of branch (local or remote-tracking)
Packit ae9e2a
 * @param iter the branch iterator
Packit ae9e2a
 * @return 0 on success, GIT_ITEROVER if there are no more branches or an error code.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_next(git_reference **out, git_branch_t *out_type, git_branch_iterator *iter);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Free a branch iterator
Packit ae9e2a
 *
Packit ae9e2a
 * @param iter the iterator to free
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(void) git_branch_iterator_free(git_branch_iterator *iter);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Move/rename an existing local branch reference.
Packit ae9e2a
 *
Packit ae9e2a
 * The new branch name will be checked for validity.
Packit ae9e2a
 * See `git_tag_create()` for rules about valid names.
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch Current underlying reference of the branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @param new_branch_name Target name of the branch once the move
Packit ae9e2a
 * is performed; this name is validated for consistency.
Packit ae9e2a
 *
Packit ae9e2a
 * @param force Overwrite existing branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0 on success, GIT_EINVALIDSPEC or an error code.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_move(
Packit ae9e2a
	git_reference **out,
Packit ae9e2a
	git_reference *branch,
Packit ae9e2a
	const char *new_branch_name,
Packit ae9e2a
	int force);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Lookup a branch by its name in a repository.
Packit ae9e2a
 *
Packit ae9e2a
 * The generated reference must be freed by the user.
Packit ae9e2a
 *
Packit ae9e2a
 * The branch name will be checked for validity.
Packit ae9e2a
 * See `git_tag_create()` for rules about valid names.
Packit ae9e2a
 *
Packit ae9e2a
 * @param out pointer to the looked-up branch reference
Packit ae9e2a
 *
Packit ae9e2a
 * @param repo the repository to look up the branch
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch_name Name of the branch to be looked-up;
Packit ae9e2a
 * this name is validated for consistency.
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch_type Type of the considered branch. This should
Packit ae9e2a
 * be valued with either GIT_BRANCH_LOCAL or GIT_BRANCH_REMOTE.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0 on success; GIT_ENOTFOUND when no matching branch
Packit ae9e2a
 * exists, GIT_EINVALIDSPEC, otherwise an error code.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_lookup(
Packit ae9e2a
	git_reference **out,
Packit ae9e2a
	git_repository *repo,
Packit ae9e2a
	const char *branch_name,
Packit ae9e2a
	git_branch_t branch_type);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Return the name of the given local or remote branch.
Packit ae9e2a
 *
Packit ae9e2a
 * The name of the branch matches the definition of the name
Packit ae9e2a
 * for git_branch_lookup. That is, if the returned name is given
Packit ae9e2a
 * to git_branch_lookup() then the reference is returned that
Packit ae9e2a
 * was given to this function.
Packit ae9e2a
 *
Packit ae9e2a
 * @param out where the pointer of branch name is stored;
Packit ae9e2a
 * this is valid as long as the ref is not freed.
Packit ae9e2a
 * @param ref the reference ideally pointing to a branch
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0 on success; otherwise an error code (e.g., if the
Packit ae9e2a
 *  ref is no local or remote branch).
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_name(
Packit ae9e2a
		const char **out,
Packit ae9e2a
		const git_reference *ref);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Return the reference supporting the remote tracking branch,
Packit ae9e2a
 * given a local branch reference.
Packit ae9e2a
 *
Packit ae9e2a
 * @param out Pointer where to store the retrieved
Packit ae9e2a
 * reference.
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch Current underlying reference of the branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0 on success; GIT_ENOTFOUND when no remote tracking
Packit ae9e2a
 * reference exists, otherwise an error code.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_upstream(
Packit ae9e2a
	git_reference **out,
Packit ae9e2a
	const git_reference *branch);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Set the upstream configuration for a given local branch
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch the branch to configure
Packit ae9e2a
 *
Packit ae9e2a
 * @param upstream_name remote-tracking or local branch to set as
Packit ae9e2a
 * upstream. Pass NULL to unset.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0 or an error code
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_set_upstream(git_reference *branch, const char *upstream_name);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Return the name of the reference supporting the remote tracking branch,
Packit ae9e2a
 * given the name of a local branch reference.
Packit ae9e2a
 *
Packit ae9e2a
 * @param out Pointer to the user-allocated git_buf which will be
Packit ae9e2a
 * filled with the name of the reference.
Packit ae9e2a
 *
Packit ae9e2a
 * @param repo the repository where the branches live
Packit ae9e2a
 *
Packit ae9e2a
 * @param refname reference name of the local branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0, GIT_ENOTFOUND when no remote tracking reference exists,
Packit ae9e2a
 *     otherwise an error code.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_upstream_name(
Packit ae9e2a
	git_buf *out,
Packit ae9e2a
	git_repository *repo,
Packit ae9e2a
	const char *refname);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Determine if the current local branch is pointed at by HEAD.
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch Current underlying reference of the branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 1 if HEAD points at the branch, 0 if it isn't,
Packit ae9e2a
 * error code otherwise.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_is_head(
Packit ae9e2a
	const git_reference *branch);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Determine if the current branch is checked out in any linked
Packit ae9e2a
 * repository.
Packit ae9e2a
 *
Packit ae9e2a
 * @param branch Reference to the branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 1 if branch is checked out, 0 if it isn't,
Packit ae9e2a
 * error code otherwise.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_is_checked_out(
Packit ae9e2a
	const git_reference *branch);
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Return the name of remote that the remote tracking branch belongs to.
Packit ae9e2a
 *
Packit ae9e2a
 * @param out Pointer to the user-allocated git_buf which will be filled with the name of the remote.
Packit ae9e2a
 *
Packit ae9e2a
 * @param repo The repository where the branch lives.
Packit ae9e2a
 *
Packit ae9e2a
 * @param canonical_branch_name name of the remote tracking branch.
Packit ae9e2a
 *
Packit ae9e2a
 * @return 0, GIT_ENOTFOUND
Packit ae9e2a
 *     when no remote matching remote was found,
Packit ae9e2a
 *     GIT_EAMBIGUOUS when the branch maps to several remotes,
Packit ae9e2a
 *     otherwise an error code.
Packit ae9e2a
 */
Packit ae9e2a
GIT_EXTERN(int) git_branch_remote_name(
Packit ae9e2a
	git_buf *out,
Packit ae9e2a
	git_repository *repo,
Packit ae9e2a
	const char *canonical_branch_name);
Packit ae9e2a
Packit ae9e2a
Packit ae9e2a
/**
Packit ae9e2a
 * Retrieve the name fo the upstream remote of a local branch
Packit ae9e2a
 *
Packit ae9e2a
 * @param buf the buffer into which to write the name
Packit ae9e2a
 * @param repo the repository in which to look
Packit ae9e2a
 * @param refname the full name of the branch
Packit ae9e2a
 * @return 0 or an error code
Packit ae9e2a
 */
Packit ae9e2a
 GIT_EXTERN(int) git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *refname);
Packit ae9e2a
Packit ae9e2a
/** @} */
Packit ae9e2a
GIT_END_DECL
Packit ae9e2a
#endif