diff options
Diffstat (limited to 'builtin/blame.c')
-rw-r--r-- | builtin/blame.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/builtin/blame.c b/builtin/blame.c index 324d476abf..83683b8287 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -2044,6 +2044,19 @@ static int git_blame_config(const char *var, const char *value, void *cb) return git_default_config(var, value, cb); } +static void verify_working_tree_path(unsigned char *head_sha1, const char *path) +{ + unsigned char blob_sha1[20]; + unsigned mode; + + if (!resolve_ref_unsafe("HEAD", head_sha1, 1, NULL)) + die("no such ref: HEAD"); + if (get_tree_entry(head_sha1, path, blob_sha1, &mode)) + die("no such path '%s' in HEAD", path); + if (sha1_object_info(blob_sha1, NULL) != OBJ_BLOB) + die("path '%s' in HEAD is not a blob", path); +} + /* * Prepare a dummy commit that represents the work tree (or staged) item. * Note that annotating work tree item never works in the reverse. @@ -2062,8 +2075,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt, struct cache_entry *ce; unsigned mode; - if (get_sha1("HEAD", head_sha1)) - die("No such ref: HEAD"); + verify_working_tree_path(head_sha1, path); time(&now); commit = xcalloc(1, sizeof(*commit)); |