diff options
author | Sascha Cunz <sascha@babbelbox.org> | 2013-11-02 03:43:34 +0000 |
---|---|---|
committer | Sascha Cunz <sascha@babbelbox.org> | 2013-11-02 03:43:34 +0000 |
commit | 352214416c0e5fd85ef02077ddf185103f3a92df (patch) | |
tree | ccb6fd3d761cbdb9d0710bb981f564ee3225fbac | |
parent | 10749f6ca25179778cf60e411f7de3de1444271d (diff) | |
download | libgit2-352214416c0e5fd85ef02077ddf185103f3a92df.tar.gz |
Checkout: Don't assert if treeish is NULL
In git_checkout_tree, the first check tests if either repo or treeish is
NULL and says that eithor of them has to have a valid value. But there
is no code to handle the treeish == NULL case.
So, do something meaningful in that case: use HEAD instead.
-rw-r--r-- | include/git2/checkout.h | 2 | ||||
-rw-r--r-- | src/checkout.c | 19 |
2 files changed, 16 insertions, 5 deletions
diff --git a/include/git2/checkout.h b/include/git2/checkout.h index 4c6a4ebf7..efafdc3e4 100644 --- a/include/git2/checkout.h +++ b/include/git2/checkout.h @@ -280,7 +280,7 @@ GIT_EXTERN(int) git_checkout_index( * * @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 + * the working directory (or NULL to use HEAD) * @param opts specifies checkout options (may be NULL) * @return 0 on success, GIT_ERROR otherwise (use giterr_last for information * about the error) diff --git a/src/checkout.c b/src/checkout.c index 20b964b54..d818a44bf 100644 --- a/src/checkout.c +++ b/src/checkout.c @@ -2073,10 +2073,21 @@ int git_checkout_tree( if (!repo) repo = git_object_owner(treeish); - if (git_object_peel((git_object **)&tree, treeish, GIT_OBJ_TREE) < 0) { - giterr_set( - GITERR_CHECKOUT, "Provided object cannot be peeled to a tree"); - return -1; + if (treeish) { + if (git_object_peel((git_object **)&tree, treeish, GIT_OBJ_TREE) < 0) { + giterr_set( + 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))) |