mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 05:50:21 +00:00
Merge pull request #1937 from scunz/checkout_assert
Don't assert in git_checkout_tree
This commit is contained in:
commit
44acdd1f9a
@ -272,7 +272,7 @@ GIT_EXTERN(int) git_checkout_head(
|
|||||||
GIT_EXTERN(int) git_checkout_index(
|
GIT_EXTERN(int) git_checkout_index(
|
||||||
git_repository *repo,
|
git_repository *repo,
|
||||||
git_index *index,
|
git_index *index,
|
||||||
git_checkout_opts *opts);
|
const git_checkout_opts *opts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates files in the index and working tree to match the content of the
|
* Updates files in the index and working tree to match the content of the
|
||||||
@ -280,7 +280,7 @@ GIT_EXTERN(int) git_checkout_index(
|
|||||||
*
|
*
|
||||||
* @param repo repository to check out (must be non-bare)
|
* @param repo repository to check out (must be non-bare)
|
||||||
* @param treeish a commit, tag or tree which content will be used to update
|
* @param treeish a commit, tag or tree which content will be used to update
|
||||||
* the working directory
|
* the working directory (or NULL to use HEAD)
|
||||||
* @param opts specifies checkout options (may be NULL)
|
* @param opts specifies checkout options (may be NULL)
|
||||||
* @return 0 on success, GIT_ERROR otherwise (use giterr_last for information
|
* @return 0 on success, GIT_ERROR otherwise (use giterr_last for information
|
||||||
* about the error)
|
* about the error)
|
||||||
@ -288,7 +288,7 @@ GIT_EXTERN(int) git_checkout_index(
|
|||||||
GIT_EXTERN(int) git_checkout_tree(
|
GIT_EXTERN(int) git_checkout_tree(
|
||||||
git_repository *repo,
|
git_repository *repo,
|
||||||
const git_object *treeish,
|
const git_object *treeish,
|
||||||
git_checkout_opts *opts);
|
const git_checkout_opts *opts);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
GIT_END_DECL
|
GIT_END_DECL
|
||||||
|
@ -2018,7 +2018,7 @@ cleanup:
|
|||||||
int git_checkout_index(
|
int git_checkout_index(
|
||||||
git_repository *repo,
|
git_repository *repo,
|
||||||
git_index *index,
|
git_index *index,
|
||||||
git_checkout_opts *opts)
|
const git_checkout_opts *opts)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
git_iterator *index_i;
|
git_iterator *index_i;
|
||||||
@ -2053,7 +2053,7 @@ int git_checkout_index(
|
|||||||
int git_checkout_tree(
|
int git_checkout_tree(
|
||||||
git_repository *repo,
|
git_repository *repo,
|
||||||
const git_object *treeish,
|
const git_object *treeish,
|
||||||
git_checkout_opts *opts)
|
const git_checkout_opts *opts)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
git_tree *tree = NULL;
|
git_tree *tree = NULL;
|
||||||
@ -2073,10 +2073,21 @@ int git_checkout_tree(
|
|||||||
if (!repo)
|
if (!repo)
|
||||||
repo = git_object_owner(treeish);
|
repo = git_object_owner(treeish);
|
||||||
|
|
||||||
if (git_object_peel((git_object **)&tree, treeish, GIT_OBJ_TREE) < 0) {
|
if (treeish) {
|
||||||
giterr_set(
|
if (git_object_peel((git_object **)&tree, treeish, GIT_OBJ_TREE) < 0) {
|
||||||
GITERR_CHECKOUT, "Provided object cannot be peeled to a tree");
|
giterr_set(
|
||||||
return -1;
|
GITERR_CHECKOUT, "Provided object cannot be peeled to a tree");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ((error = checkout_lookup_head_tree(&tree, repo)) < 0) {
|
||||||
|
if (error != GIT_EUNBORNBRANCH)
|
||||||
|
giterr_set(
|
||||||
|
GITERR_CHECKOUT,
|
||||||
|
"HEAD could not be peeled to a tree and no treeish given");
|
||||||
|
return error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(error = git_iterator_for_tree(&tree_i, tree, 0, NULL, NULL)))
|
if (!(error = git_iterator_for_tree(&tree_i, tree, 0, NULL, NULL)))
|
||||||
@ -2092,18 +2103,6 @@ int git_checkout_head(
|
|||||||
git_repository *repo,
|
git_repository *repo,
|
||||||
const git_checkout_opts *opts)
|
const git_checkout_opts *opts)
|
||||||
{
|
{
|
||||||
int error;
|
|
||||||
git_tree *head = NULL;
|
|
||||||
git_iterator *head_i = NULL;
|
|
||||||
|
|
||||||
assert(repo);
|
assert(repo);
|
||||||
|
return git_checkout_tree(repo, NULL, opts);
|
||||||
if (!(error = checkout_lookup_head_tree(&head, repo)) &&
|
|
||||||
!(error = git_iterator_for_tree(&head_i, head, 0, NULL, NULL)))
|
|
||||||
error = git_checkout_iterator(head_i, opts);
|
|
||||||
|
|
||||||
git_iterator_free(head_i);
|
|
||||||
git_tree_free(head);
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user