/* * Copyright (C) 2012 the libgit2 contributors * * This file is part of libgit2, distributed under the GNU GPL v2 with * a Linking Exception. For full terms see the included COPYING file. */ #ifndef INCLUDE_git_checkout_h__ #define INCLUDE_git_checkout_h__ #include "common.h" #include "types.h" #include "indexer.h" #include "strarray.h" /** * @file git2/checkout.h * @brief Git checkout routines * @defgroup git_checkout Git checkout routines * @ingroup Git * @{ */ GIT_BEGIN_DECL /** * Checkout behavior flags * * These flags control what checkout does with files. Pass in a * combination of these values OR'ed together. */ typedef enum { /** Checkout does not update any files in the working directory. */ GIT_CHECKOUT_DEFAULT = (1 << 0), /** When a file exists and is modified, replace it with new version. */ GIT_CHECKOUT_OVERWRITE_MODIFIED = (1 << 1), /** When a file does not exist in the working directory, create it. */ GIT_CHECKOUT_CREATE_MISSING = (1 << 2), /** If an untracked file in found in the working dir, delete it. */ GIT_CHECKOUT_REMOVE_UNTRACKED = (1 << 3), } git_checkout_strategy_t; /** * Checkout options structure * * Use zeros to indicate default settings. */ typedef struct git_checkout_opts { unsigned int checkout_strategy; /** default: GIT_CHECKOUT_DEFAULT */ int disable_filters; /** don't apply filters like CRLF conversion */ int dir_mode; /** default is 0755 */ int file_mode; /** default is 0644 or 0755 as dictated by blob */ int file_open_flags; /** default is O_CREAT | O_TRUNC | O_WRONLY */ /** Optional callback to notify the consumer of files that * haven't be checked out because a modified version of them * exist in the working directory. * * When provided, this callback will be invoked when the flag * GIT_CHECKOUT_OVERWRITE_MODIFIED isn't part of the checkout strategy. */ int (* skipped_notify_cb)( const char *skipped_file, const git_oid *blob_oid, int file_mode, void *payload); void *notify_payload; /** When not NULL, array of fnmatch patterns specifying * which paths should be taken into account */ git_strarray paths; } git_checkout_opts; /** * Updates files in the index and the working tree to match the content of the * commit pointed at by HEAD. * * @param repo repository to check out (must be non-bare) * @param opts specifies checkout options (may be NULL) * @param stats structure through which progress information is reported * @return 0 on success, GIT_EORPHANEDHEAD when HEAD points to a non existing * branch, GIT_ERROR otherwise (use giterr_last for information * about the error) */ GIT_EXTERN(int) git_checkout_head( git_repository *repo, git_checkout_opts *opts, git_indexer_stats *stats); /** * Updates files in the working tree to match the content of the index. * * @param repo repository to check out (must be non-bare) * @param opts specifies checkout options (may be NULL) * @param stats structure through which progress information is reported * @return 0 on success, GIT_ERROR otherwise (use giterr_last for information * about the error) */ GIT_EXTERN(int) git_checkout_index( git_repository *repo, git_checkout_opts *opts, git_indexer_stats *stats); /** * Updates files in the index and working tree to match the content of the * tree pointed at by the treeish. * * @param repo repository to check out (must be non-bare) * @param treeish a commit, tag or tree which content will be used to update * the working directory * @param opts specifies checkout options (may be NULL) * @param stats structure through which progress information is reported * @return 0 on success, GIT_ERROR otherwise (use giterr_last for information * about the error) */ GIT_EXTERN(int) git_checkout_tree( git_repository *repo, git_object *treeish, git_checkout_opts *opts, git_indexer_stats *stats); /** @} */ GIT_END_DECL #endif