From e95c70d4ea997d1217d5c81cb3b640f3fa025df1 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 20 Jun 2011 20:59:10 +0200 Subject: Only guess default branch when a repo page is requested There's no need to invoke guess_defbranch() for each repo during scan-path, since repo.defbranch is only used when repo content is being displayed. Also, some users prefer to register their projects manually in cgitrc but they got no benefit from the new repo.defbranch handling. This patch tries to rectify these issues by only invoking guess_defbranch() when needed, regardless of how the repo was registered. Signed-off-by: Lars Hjemli --- cgit.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'cgit.c') 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) { -- cgit 1.4.1 g=1&follow=1'>bin/1sh/mail.h (unfollow)
Commit message (Collapse)Author
2020-10-27Use SendEnv for cd host:pathJune McEnroe
Works properly for weird paths, etc.
2020-10-27Allow cd host:path over sshJune McEnroe
Requires AcceptEnv SSH_CD in the remote sshd_config.
2020-10-07Use mandoc -T utf8 for text.June McEnroe
Don't depend on LANG being set.
2020-09-20Add The Awakened KingdomJune McEnroe
A cute extra novella. Finally finished this series.
2020-09-12Move /opt/local back, cheat port select to use system manJune McEnroe
This is not really how you're supposed to use the select system, I don't think, since the mandoc package actually creates those files, but it does work. This lets me actually use the git installed by MacPorts.
2020-09-12Move /opt/local behind /usr againJune McEnroe
The reason I did this with pkgsrc was because I actually don't want the man(1) from mandoc, since it won't follow MANSECT. Same applies to MacPorts. I wish I could disable its man(1) with a variant or whatever.
2020-09-12Enable toc in cgit renderings of man pagesJune McEnroe
But keep it disabled for READMEs since they always use non-standard sections and the TOC is just distracting there, I think. Also add the style so its h1 is the same size as the ones inside sections...
2020-09-11Install mandoc on macOSJune McEnroe
2020-09-11Rewrite install script yet againJune McEnroe
2020-09-11Remove NetBSD from install scriptJune McEnroe
I never use it.
2020-09-11Use MacPorts rather than pkgsrcJune McEnroe
My system is probably such a mess now...
2020-09-11Add debian VM name to sshJune McEnroe
2020-09-11Add influencer tweetJune McEnroe
2020-09-10Add The Kingdom of GodsJune McEnroe
Reading has really slowed down :(
2020-09-07Add SunglassesJune McEnroe
An IRC find.
2020-09-06Add Between the BreathsJune McEnroe
One of those good songs from a soundtrack of a film that probably isn't? The summary sounds a lot more interesting than the title implies, at least.
2020-09-04Open /dev/tty in nudgeJune McEnroe
This makes it work even when it's run connected to a pipe, i.e. as the notify command of catgirl...
2020-09-04Add nudgeJune McEnroe
2020-09-03Build fbclock with -lzJune McEnroe
I guess this got lost somewhere, long ago...
2020-08-29Add tweets from retweetsJune McEnroe