mirror of
https://github.com/git/git.git
synced 2024-11-27 12:03:55 +08:00
resolve_ref_unsafe(): extract function handle_missing_loose_ref()
The nesting was getting a bit out of hand, and it's about to get worse. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4d1c565e1f
commit
47f534bf92
56
refs.c
56
refs.c
@ -1197,6 +1197,37 @@ static struct ref_entry *get_packed_ref(const char *refname)
|
||||
return find_ref(get_packed_refs(&ref_cache), refname);
|
||||
}
|
||||
|
||||
/*
|
||||
* A loose ref file doesn't exist; check for a packed ref. The
|
||||
* options are forwarded from resolve_safe_unsafe().
|
||||
*/
|
||||
static const char *handle_missing_loose_ref(const char *refname,
|
||||
unsigned char *sha1,
|
||||
int reading,
|
||||
int *flag)
|
||||
{
|
||||
struct ref_entry *entry;
|
||||
|
||||
/*
|
||||
* The loose reference file does not exist; check for a packed
|
||||
* reference.
|
||||
*/
|
||||
entry = get_packed_ref(refname);
|
||||
if (entry) {
|
||||
hashcpy(sha1, entry->u.value.sha1);
|
||||
if (flag)
|
||||
*flag |= REF_ISPACKED;
|
||||
return refname;
|
||||
}
|
||||
/* The reference is not a packed reference, either. */
|
||||
if (reading) {
|
||||
return NULL;
|
||||
} else {
|
||||
hashclr(sha1);
|
||||
return refname;
|
||||
}
|
||||
}
|
||||
|
||||
const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int reading, int *flag)
|
||||
{
|
||||
int depth = MAXDEPTH;
|
||||
@ -1222,28 +1253,11 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
|
||||
git_snpath(path, sizeof(path), "%s", refname);
|
||||
|
||||
if (lstat(path, &st) < 0) {
|
||||
struct ref_entry *entry;
|
||||
|
||||
if (errno != ENOENT)
|
||||
if (errno == ENOENT)
|
||||
return handle_missing_loose_ref(refname, sha1,
|
||||
reading, flag);
|
||||
else
|
||||
return NULL;
|
||||
/*
|
||||
* The loose reference file does not exist;
|
||||
* check for a packed reference.
|
||||
*/
|
||||
entry = get_packed_ref(refname);
|
||||
if (entry) {
|
||||
hashcpy(sha1, entry->u.value.sha1);
|
||||
if (flag)
|
||||
*flag |= REF_ISPACKED;
|
||||
return refname;
|
||||
}
|
||||
/* The reference is not a packed reference, either. */
|
||||
if (reading) {
|
||||
return NULL;
|
||||
} else {
|
||||
hashclr(sha1);
|
||||
return refname;
|
||||
}
|
||||
}
|
||||
|
||||
/* Follow "normalized" - ie "refs/.." symlinks by hand */
|
||||
|
Loading…
Reference in New Issue
Block a user