Merge branch 'jc/missing-ref-store-fix'
We've left the command line parsing of "git log :/a/b/" broken for about a full year without anybody noticing, which has been corrected. * jc/missing-ref-store-fix: repository: mark the "refs" pointer as private sha1-name: do not assume that the ref store is initialized
This commit is contained in:
commit
95ca48973d
8
refs.c
8
refs.c
@ -1852,14 +1852,14 @@ static struct ref_store *ref_store_init(const char *gitdir,
|
||||
|
||||
struct ref_store *get_main_ref_store(struct repository *r)
|
||||
{
|
||||
if (r->refs)
|
||||
return r->refs;
|
||||
if (r->refs_private)
|
||||
return r->refs_private;
|
||||
|
||||
if (!r->gitdir)
|
||||
BUG("attempting to get main_ref_store outside of repository");
|
||||
|
||||
r->refs = ref_store_init(r->gitdir, REF_STORE_ALL_CAPS);
|
||||
return r->refs;
|
||||
r->refs_private = ref_store_init(r->gitdir, REF_STORE_ALL_CAPS);
|
||||
return r->refs_private;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -67,8 +67,12 @@ struct repository {
|
||||
*/
|
||||
struct parsed_object_pool *parsed_objects;
|
||||
|
||||
/* The store in which the refs are held. */
|
||||
struct ref_store *refs;
|
||||
/*
|
||||
* The store in which the refs are held. This should generally only be
|
||||
* accessed via get_main_ref_store(), as that will lazily initialize
|
||||
* the ref object.
|
||||
*/
|
||||
struct ref_store *refs_private;
|
||||
|
||||
/*
|
||||
* Contains path to often used file names.
|
||||
|
@ -1815,8 +1815,8 @@ static enum get_oid_result get_oid_with_context_1(struct repository *repo,
|
||||
|
||||
cb.repo = repo;
|
||||
cb.list = &list;
|
||||
refs_for_each_ref(repo->refs, handle_one_ref, &cb);
|
||||
refs_head_ref(repo->refs, handle_one_ref, &cb);
|
||||
refs_for_each_ref(get_main_ref_store(repo), handle_one_ref, &cb);
|
||||
refs_head_ref(get_main_ref_store(repo), handle_one_ref, &cb);
|
||||
commit_list_sort_by_date(&list);
|
||||
return get_oid_oneline(repo, name + 2, oid, list);
|
||||
}
|
||||
|
@ -55,6 +55,10 @@ test_expect_success '"git log -- :/a" should not be ambiguous' '
|
||||
git log -- :/a
|
||||
'
|
||||
|
||||
test_expect_success '"git log :/any/path/" should not segfault' '
|
||||
test_must_fail git log :/any/path/
|
||||
'
|
||||
|
||||
# This differs from the ":/a" check above in that :/in looks like a pathspec,
|
||||
# but doesn't match an actual file.
|
||||
test_expect_success '"git log :/in" should not be ambiguous' '
|
||||
|
Loading…
Reference in New Issue
Block a user