diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2017-12-02 08:51:15 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-12-02 08:18:42 -0800 |
commit | 137e83f7f2595e373be118b724c2fd18db701c98 (patch) | |
tree | a46c5fe87ab6b85fe50d8b44525f47abad07f4f1 /core | |
parent | 136110784ebe2a188ca867bea3a7ff3037281a57 (diff) | |
download | subsurface-137e83f7f2595e373be118b724c2fd18db701c98.tar.gz |
Fix file:// handling for git access.
Currently, in is_remote_git_repository(), git URLs of the form
"file://..." are recognized as local and the "file://" prefix is
removed. The shortened URL is then processed as if it was a remote
URL, which of course has to fail. So far so good - this is not
a remote repository after all. But the removal of the prefix is
not propagated to the calling is_git_repository() function and
handling as a local git repository therefore fails likewise.
To fix this issue, move removal of the "file://" prefix one level
up to the is_git_repository() function.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core')
-rw-r--r-- | core/git-access.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/core/git-access.c b/core/git-access.c index 83a8c6054..dc48546a6 100644 --- a/core/git-access.c +++ b/core/git-access.c @@ -832,15 +832,10 @@ static struct git_repository *is_remote_git_repository(char *remote, const char if (*p++ != '/' || *p++ != '/') return NULL; - /* Special-case "file://", since it's already local */ - if (!strncmp(remote, "file://", 7)) - remote += 7; - /* - * Ok, we found "[a-z]*://", we've simplified the - * local repo case (because libgit2 is insanely slow - * for that), and we think we have a real "remote - * git" format. + * Ok, we found "[a-z]*://" and we think we have a real + * "remote git" format. The "file://" case was handled + * in the calling function. * * We now create the SHA1 hash of the whole thing, * including the branch name. That will be our unique @@ -905,6 +900,15 @@ struct git_repository *is_git_repository(const char *filename, const char **bran if (!flen || filename[--flen] != ']') return NULL; + /* + * Special-case "file://", and treat it as a local + * repository since libgit2 is insanely slow for that. + */ + if (!strncmp(filename, "file://", 7)) { + filename += 7; + flen -= 7; + } + /* Find the matching '[' */ blen = 0; while (flen && filename[--flen] != '[') |