Diff options
Diffstat (limited to '')
-rw-r--r--source/scan-tree.c17
1 file changed, 7 insertions, 10 deletions
diff --git a/source/scan-tree.c b/source/scan-tree.c
index ed50769..be37805 100644
--- a/source/scan-tree.c
+++ b/source/scan-tree.c
@@ -185,23 +185,20 @@ static void add_repo(const char *base, struct strbuf *path)
// Drop the trailing slash added above, or the "/.git" suffix test
// below never matches and a working tree is named "repo/.git".
- if (relpath.len && relpath.buf[relpath.len - 1] == '/')
- strbuf_setlen(&relpath, relpath.len - 1);
- if (relpath.len >= 5 && !strcmp(relpath.buf + relpath.len - 5, "/.git"))
- strbuf_setlen(&relpath, relpath.len - 5);
- else if (!strcmp(relpath.buf, ".git"))
+ strbuf_strip_suffix(&relpath, "/");
+ if (!strbuf_strip_suffix(&relpath, "/.git") && !strcmp(relpath.buf, ".git"))
strbuf_setlen(&relpath, 0);
// The scan root may itself be the repository, leaving nothing after
// the base, so that one is named after its directory.
if (!relpath.len) {
- const char *end = path->buf + pathlen - 1, *start;
+ size_t len = pathlen - 1;
+ const char *start;
- if (end - path->buf >= 5 && !strncmp(end - 5, "/.git", 5))
- end -= 5;
- start = end;
+ strip_suffix_mem(path->buf, &len, "/.git");
+ start = path->buf + len;
while (start > path->buf && start[-1] != '/')
start--;
- strbuf_add(&relpath, start, end - start);
+ strbuf_add(&relpath, start, path->buf + len - start);
}
current_repo = cgit_add_repo(relpath.buf);