| -rw-r--r-- | cgit.c | 35 | ||||
| -rw-r--r-- | scan-tree.c | 36 | ||||
| -rw-r--r-- | shared.c | 1 |
3 files changed, 38 insertions, 34 deletions
@@ -416,37 +416,6 @@ char *find_default_branch(struct cgit_repo *repo) return ref; } -static char *guess_defbranch(const char *repo_path) -{ - int fd, len; - char buffer[256]; - char *ref_start; - char *head; - - head = fmt("%s/HEAD", repo_path); - fd = open(head, O_RDONLY); - if (fd == -1) - return xstrdup("master"); - - memset(buffer, 0, sizeof(buffer)); - len = read_in_full(fd, buffer, sizeof(buffer) - 1); - close(fd); - - if(!memcmp(buffer, "ref: refs/heads/", 16)) - return xstrndup(buffer + 16, len - 17); - - if(strlen(buffer) == 41) { - /* probably contains a SHA1 sum */ - memset(buffer, 0, sizeof(buffer)); - if(readlink(head, buffer, sizeof(buffer)-1)) { - ref_start = memmem(buffer, sizeof(buffer)-1, "refs/heads/", 11); - if(ref_start) - return xstrdup(ref_start+11); - } - } - return xstrdup("master"); -} - static int prepare_repo_cmd(struct cgit_context *ctx) { char *tmp; @@ -473,12 +442,10 @@ static int prepare_repo_cmd(struct cgit_context *ctx) } ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc); - if (!ctx->repo->defbranch) - ctx->repo->defbranch = guess_defbranch(ctx->repo->path); - if (!ctx->qry.head) { ctx->qry.nohead = 1; ctx->qry.head = find_default_branch(ctx->repo); + ctx->repo->defbranch = ctx->qry.head; } if (!ctx->qry.head) { diff --git a/scan-tree.c b/scan-tree.c index 378d795..a429a9f 100644 --- a/scan-tree.c +++ b/scan-tree.c @@ -68,6 +68,39 @@ static char *xstrrchr(char *s, char *from, int c) return from < s ? NULL : from; } +static char *guess_defbranch(const char *repo_path) +{ + int fd, len; + char buffer[256]; + char *ref_start; + char *head; + + head = fmt("%s/HEAD", repo_path); + fd = open(head, O_RDONLY); + if (fd == -1) + return xstrdup("master"); + + memset(buffer, 0, sizeof(buffer)); + len = read_in_full(fd, buffer, sizeof(buffer)-1); + close(fd); + + if(!memcmp(buffer, "ref: refs/heads/", 16)) + return xstrndup(buffer+16, len-17); + + if(strlen(buffer) == 41) { + /* probably contains a SHA1 sum */ + memset(buffer, 0, sizeof(buffer)); + if(readlink(head, buffer, sizeof(buffer)-1)) { + ref_start = memmem(buffer, sizeof(buffer)-1, "refs/heads/", 11); + if(ref_start) + return xstrdup(ref_start+11); + } + } + + return xstrdup("master"); +} + + static void add_repo(const char *base, const char *path, repo_config_fn fn) { struct stat st; @@ -105,6 +138,9 @@ static void add_repo(const char *base, const char *path, repo_config_fn fn) *p = '\0'; repo->name = repo->url; repo->path = xstrdup(path); + + repo->defbranch = guess_defbranch(repo->path); + while (!owner) { if ((pwd = getpwuid(st.st_uid)) == NULL) { fprintf(stderr, "Error reading owner-info for %s: %s (%d)\n", @@ -56,6 +56,7 @@ struct cgit_repo *cgit_add_repo(const char *url) ret->desc = "[no description]"; ret->owner = NULL; ret->section = ctx.cfg.section; + ret->defbranch = "master"; ret->snapshots = ctx.cfg.snapshots; ret->enable_commit_graph = ctx.cfg.enable_commit_graph; ret->enable_log_filecount = ctx.cfg.enable_log_filecount; |