diff --git a/cgit.c b/cgit.c index b7807ad..e3fbbf4 100644 --- a/cgit.c +++ b/cgit.c @@ -416,6 +416,37 @@ 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; @@ -442,10 +473,12 @@ 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 a429a9f..378d795 100644 --- a/scan-tree.c +++ b/scan-tree.c @@ -68,39 +68,6 @@ 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; @@ -138,9 +105,6 @@ 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", diff --git a/shared.c b/shared.c index 699c362..9c839a9 100644 --- a/shared.c +++ b/shared.c @@ -56,7 +56,6 @@ 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;