1#ifndef BRANCH_H2#define BRANCH_H34/* Functions for acting on the information about branches. */56/*7* Creates a new branch, where:8*9* - name is the new branch name10*11* - start_name is the name of the existing branch that the new branch should12* start from13*14* - force enables overwriting an existing (non-head) branch15*16* - reflog creates a reflog for the branch17*18* - track causes the new branch to be configured to merge the remote branch19* that start_name is a tracking branch for (if any).20*/21void create_branch(const char *name, const char *start_name,22int force, int reflog,23int clobber_head, int quiet, enum branch_track track);2425/*26* Check if 'name' can be a valid name for a branch; die otherwise.27* Return 1 if the named branch already exists; return 0 otherwise.28* Fill ref with the full refname for the branch.29*/30extern int validate_branchname(const char *name, struct strbuf *ref);3132/*33* Check if a branch 'name' can be created as a new branch; die otherwise.34* 'force' can be used when it is OK for the named branch already exists.35* Return 1 if the named branch already exists; return 0 otherwise.36* Fill ref with the full refname for the branch.37*/38extern int validate_new_branchname(const char *name, struct strbuf *ref, int force);3940/*41* Remove information about the state of working on the current42* branch. (E.g., MERGE_HEAD)43*/44void remove_branch_state(void);4546/*47* Configure local branch "local" as downstream to branch "remote"48* from remote "origin". Used by git branch --set-upstream.49* Returns 0 on success.50*/51#define BRANCH_CONFIG_VERBOSE 0152extern int install_branch_config(int flag, const char *local, const char *origin, const char *remote);5354/*55* Read branch description56*/57extern int read_branch_desc(struct strbuf *, const char *branch_name);5859/*60* Check if a branch is checked out in the main worktree or any linked61* worktree and die (with a message describing its checkout location) if62* it is.63*/64extern void die_if_checked_out(const char *branch, int ignore_current_worktree);6566/*67* Update all per-worktree HEADs pointing at the old ref to point the new ref.68* This will be used when renaming a branch. Returns 0 if successful, non-zero69* otherwise.70*/71extern int replace_each_worktree_head_symref(const char *oldref, const char *newref,72const char *logmsg);7374#endif