diff options
Diffstat (limited to '')
| -rw-r--r-- | cgit.c | 35 | ||||
| -rw-r--r-- | scan-tree.c | 36 | ||||
| -rw-r--r-- | shared.c | 1 | 
3 files changed, 34 insertions, 38 deletions
| @@ -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", @@ -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; | 
