summaryrefslogtreecommitdiff
path: root/src/status.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/status.c')
-rw-r--r--src/status.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/src/status.c b/src/status.c
index 8d2c7de14..d4f59e355 100644
--- a/src/status.c
+++ b/src/status.c
@@ -20,31 +20,19 @@
static int resolve_head_to_tree(git_tree **tree, git_repository *repo)
{
- git_reference *head = NULL;
+ git_oid head_oid;
git_object *obj = NULL;
- if (git_reference_lookup(&head, repo, GIT_HEAD_FILE) < 0)
- return -1;
-
- if (git_reference_oid(head) == NULL) {
- git_reference *resolved;
-
- if (git_reference_resolve(&resolved, head) < 0) {
- /* cannot resolve HEAD - probably brand new repo */
- giterr_clear();
- git_reference_free(head);
- return GIT_ENOTFOUND;
- }
-
- git_reference_free(head);
- head = resolved;
+ if (git_reference_lookup_oid(&head_oid, repo, GIT_HEAD_FILE) < 0) {
+ /* cannot resolve HEAD - probably brand new repo */
+ giterr_clear();
+ *tree = NULL;
+ return 0;
}
- if (git_object_lookup(&obj, repo, git_reference_oid(head), GIT_OBJ_ANY) < 0)
+ if (git_object_lookup(&obj, repo, &head_oid, GIT_OBJ_ANY) < 0)
goto fail;
- git_reference_free(head);
-
switch (git_object_type(obj)) {
case GIT_OBJ_TREE:
*tree = (git_tree *)obj;
@@ -62,7 +50,6 @@ static int resolve_head_to_tree(git_tree **tree, git_repository *repo)
fail:
git_object_free(obj);
- git_reference_free(head);
return -1;
}
@@ -152,7 +139,7 @@ int git_status_foreach_ext(
diffopt.flags = diffopt.flags | GIT_DIFF_RECURSE_UNTRACKED_DIRS;
/* TODO: support EXCLUDE_SUBMODULES flag */
- if (show != GIT_STATUS_SHOW_WORKDIR_ONLY &&
+ if (show != GIT_STATUS_SHOW_WORKDIR_ONLY && head != NULL &&
(err = git_diff_index_to_tree(repo, &diffopt, head, &idx2head)) < 0)
goto cleanup;