summaryrefslogtreecommitdiff
path: root/include/git2
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2012-08-19 01:26:06 -0700
committerVicent Martí <vicent@github.com>2012-08-19 01:26:06 -0700
commitf98c32f3fea0d5532db2d5733418aa62648b9e93 (patch)
tree5b53901f1848d73a72765ec014e2ad5188316eb4 /include/git2
parent1a10fded40875f986164b80c6efd414cd1507cb8 (diff)
parenteb87800ab631d19a7655f01ece130455b1cc976a (diff)
downloadlibgit2-f98c32f3fea0d5532db2d5733418aa62648b9e93.tar.gz
Merge pull request #778 from ben/clone
Clone
Diffstat (limited to 'include/git2')
-rw-r--r--include/git2/checkout.h66
-rw-r--r--include/git2/clone.h59
-rw-r--r--include/git2/index.h9
3 files changed, 131 insertions, 3 deletions
diff --git a/include/git2/checkout.h b/include/git2/checkout.h
new file mode 100644
index 000000000..ac31b3462
--- /dev/null
+++ b/include/git2/checkout.h
@@ -0,0 +1,66 @@
+/*
+ * 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"
+
+
+/**
+ * @file git2/checkout.h
+ * @brief Git checkout routines
+ * @defgroup git_checkout Git checkout routines
+ * @ingroup Git
+ * @{
+ */
+GIT_BEGIN_DECL
+
+
+#define GIT_CHECKOUT_OVERWRITE_EXISTING 0 /* default */
+#define GIT_CHECKOUT_SKIP_EXISTING 1
+
+/* Use zeros to indicate default settings */
+typedef struct git_checkout_opts {
+ int existing_file_action; /* default: GIT_CHECKOUT_OVERWRITE_EXISTING */
+ int disable_filters;
+ int dir_mode; /* default is 0755 */
+ int file_mode; /* default is 0644 */
+ int file_open_flags; /* default is O_CREAT | O_TRUNC | O_WRONLY */
+} git_checkout_opts;
+
+/**
+ * Updates files in the working tree to match the commit pointed to 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_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 a commit pointed to by a ref.
+ *
+ * @param ref reference to follow to a commit
+ * @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_reference(git_reference *ref,
+ git_checkout_opts *opts,
+ git_indexer_stats *stats);
+
+
+/** @} */
+GIT_END_DECL
+#endif
diff --git a/include/git2/clone.h b/include/git2/clone.h
new file mode 100644
index 000000000..40292ed59
--- /dev/null
+++ b/include/git2/clone.h
@@ -0,0 +1,59 @@
+/*
+ * 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_clone_h__
+#define INCLUDE_git_clone_h__
+
+#include "common.h"
+#include "types.h"
+#include "indexer.h"
+#include "checkout.h"
+
+
+/**
+ * @file git2/clone.h
+ * @brief Git cloning routines
+ * @defgroup git_clone Git cloning routines
+ * @ingroup Git
+ * @{
+ */
+GIT_BEGIN_DECL
+
+/**
+ * Clone a remote repository, and checkout the branch pointed to by the remote
+ * HEAD.
+ *
+ * @param out pointer that will receive the resulting repository object
+ * @param origin_url repository to clone from
+ * @param workdir_path local directory to clone to
+ * @param fetch_stats pointer to structure that receives fetch progress information (may be NULL)
+ * @param checkout_opts options for the checkout step (may be NULL)
+ * @return 0 on success, GIT_ERROR otherwise (use giterr_last for information about the error)
+ */
+GIT_EXTERN(int) git_clone(git_repository **out,
+ const char *origin_url,
+ const char *workdir_path,
+ git_indexer_stats *fetch_stats,
+ git_indexer_stats *checkout_stats,
+ git_checkout_opts *checkout_opts);
+
+/**
+ * Create a bare clone of a remote repository.
+ *
+ * @param out pointer that will receive the resulting repository object
+ * @param origin_url repository to clone from
+ * @param dest_path local directory to clone to
+ * @param fetch_stats pointer to structure that receives fetch progress information (may be NULL)
+ * @return 0 on success, GIT_ERROR otherwise (use giterr_last for information about the error)
+ */
+GIT_EXTERN(int) git_clone_bare(git_repository **out,
+ const char *origin_url,
+ const char *dest_path,
+ git_indexer_stats *fetch_stats);
+
+/** @} */
+GIT_END_DECL
+#endif
diff --git a/include/git2/index.h b/include/git2/index.h
index 0093330e2..062932e1a 100644
--- a/include/git2/index.h
+++ b/include/git2/index.h
@@ -8,6 +8,7 @@
#define INCLUDE_git_index_h__
#include "common.h"
+#include "indexer.h"
#include "types.h"
#include "oid.h"
@@ -335,15 +336,17 @@ GIT_EXTERN(const git_index_entry_unmerged *) git_index_get_unmerged_byindex(git_
GIT_EXTERN(int) git_index_entry_stage(const git_index_entry *entry);
/**
- * Read a tree into the index file
+ * Read a tree into the index file with stats
*
- * The current index contents will be replaced by the specified tree.
+ * The current index contents will be replaced by the specified tree. The total
+ * node count is collected in stats.
*
* @param index an existing index object
* @param tree tree to read
+ * @param stats structure that receives the total node count (may be NULL)
* @return 0 or an error code
*/
-GIT_EXTERN(int) git_index_read_tree(git_index *index, git_tree *tree);
+GIT_EXTERN(int) git_index_read_tree(git_index *index, git_tree *tree, git_indexer_stats *stats);
/** @} */
GIT_END_DECL