提交 daa45408 编写于 作者: M Michael Haggerty 提交者: Junio C Hamano

packed_ref_cache: remember the file-wide peeling state

Rather than store the peeling state (i.e., the one defined by traits
in the `packed-refs` file header line) in a local variable in
`read_packed_refs()`, store it permanently in `packed_ref_cache`. This
will be needed when we stop reading all packed refs at once.
Signed-off-by: NMichael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 6a9bc403
......@@ -18,6 +18,12 @@ struct packed_ref_cache {
struct ref_cache *cache;
/*
* What is the peeled state of this cache? (This is usually
* determined from the header of the "packed-refs" file.)
*/
enum { PEELED_NONE, PEELED_TAGS, PEELED_FULLY } peeled;
/*
* Count of references to the data structure in this instance,
* including the pointer from files_ref_store::packed if any.
......@@ -195,13 +201,13 @@ static struct packed_ref_cache *read_packed_refs(struct packed_ref_store *refs)
char *buf;
const char *pos, *eol, *eof;
struct strbuf tmp = STRBUF_INIT;
enum { PEELED_NONE, PEELED_TAGS, PEELED_FULLY } peeled = PEELED_NONE;
struct ref_dir *dir;
packed_refs->refs = refs;
acquire_packed_ref_cache(packed_refs);
packed_refs->cache = create_ref_cache(NULL, NULL);
packed_refs->cache->root->flag &= ~REF_INCOMPLETE;
packed_refs->peeled = PEELED_NONE;
fd = open(refs->path, O_RDONLY);
if (fd < 0) {
......@@ -244,9 +250,9 @@ static struct packed_ref_cache *read_packed_refs(struct packed_ref_store *refs)
string_list_split_in_place(&traits, p, ' ', -1);
if (unsorted_string_list_has_string(&traits, "fully-peeled"))
peeled = PEELED_FULLY;
packed_refs->peeled = PEELED_FULLY;
else if (unsorted_string_list_has_string(&traits, "peeled"))
peeled = PEELED_TAGS;
packed_refs->peeled = PEELED_TAGS;
/* perhaps other traits later as well */
/* The "+ 1" is for the LF character. */
......@@ -282,8 +288,9 @@ static struct packed_ref_cache *read_packed_refs(struct packed_ref_store *refs)
oidclr(&oid);
flag |= REF_BAD_NAME | REF_ISBROKEN;
}
if (peeled == PEELED_FULLY ||
(peeled == PEELED_TAGS && starts_with(refname, "refs/tags/")))
if (packed_refs->peeled == PEELED_FULLY ||
(packed_refs->peeled == PEELED_TAGS &&
starts_with(refname, "refs/tags/")))
flag |= REF_KNOWS_PEELED;
entry = create_ref_entry(refname, &oid, flag);
add_ref_entry(dir, entry);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册