If the repository got mangled by FAT capitalization rules, then a ref such as "HEAD" will become "head" once it is back on a non-FAT FS. Check for this condition in resolve_refs and in the setup code. Suggested-by: Francois Marier <francois@xxxxxxxxxx> Signed-off-by: Sam Vilain <sam.vilain@xxxxxxxxxxxxxxx> --- This should probably help people putting their git repos on FAT USB sticks. refs.c | 28 ++++++++++++++++++++++++---- setup.c | 7 +++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/refs.c b/refs.c index 09a2c87..89ffb15 100644 --- a/refs.c +++ b/refs.c @@ -400,10 +400,30 @@ const char *resolve_ref(const char *ref, unsigned char *sha1, int reading, int * } list = list->next; } - if (reading || errno != ENOENT) - return NULL; - hashclr(sha1); - return ref; + if (reading || errno != ENOENT) { + /* + * Hack for FAT-mangled ref filenames + */ + if (strlen(ref) <= 8) { + char lc_name[9]; + char* i; + strncpy(&lc_name, ref, 9); + for (i = lc_name; *i; i++) { + *i = tolower(*i); + } + path = git_path("%s", lc_name); + if (lstat(path, &st) < 0) { + return NULL; + } + } + else { + return NULL; + } + } + else { + hashclr(sha1); + return ref; + } } /* Follow "normalized" - ie "refs/.." symlinks by hand */ diff --git a/setup.c b/setup.c index 06004f1..284d7b9 100644 --- a/setup.c +++ b/setup.c @@ -168,8 +168,11 @@ static int is_git_directory(const char *suspect) return 0; strcpy(path + len, "/HEAD"); - if (validate_headref(path)) - return 0; + if (validate_headref(path)) { + strcpy(path + len, "/head"); + if (validate_headref(path)) + return 0; + } return 1; } -- 1.5.3.2.3.g2f2dcc-dirty - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html