diff options
-rw-r--r-- | cgit.c | 34 |
1 files changed, 7 insertions, 27 deletions
diff --git a/cgit.c b/cgit.c index e3fbbf4..624cb2c 100644 --- a/cgit.c +++ b/cgit.c | |||
@@ -418,33 +418,13 @@ char *find_default_branch(struct cgit_repo *repo) | |||
418 | 418 | ||
419 | static char *guess_defbranch(const char *repo_path) | 419 | static char *guess_defbranch(const char *repo_path) |
420 | { | 420 | { |
421 | int fd, len; | 421 | const char *ref; |
422 | char buffer[256]; | 422 | unsigned char sha1[20]; |
423 | char *ref_start; | 423 | |
424 | char *head; | 424 | ref = resolve_ref("HEAD", sha1, 0, NULL); |
425 | 425 | if (!ref || prefixcmp(ref, "refs/heads/")) | |
426 | head = fmt("%s/HEAD", repo_path); | 426 | return "master"; |
427 | fd = open(head, O_RDONLY); | 427 | return xstrdup(ref + 11); |
428 | if (fd == -1) | ||
429 | return xstrdup("master"); | ||
430 | |||
431 | memset(buffer, 0, sizeof(buffer)); | ||
432 | len = read_in_full(fd, buffer, sizeof(buffer) - 1); | ||
433 | close(fd); | ||
434 | |||
435 | if(!memcmp(buffer, "ref: refs/heads/", 16)) | ||
436 | return xstrndup(buffer + 16, len - 17); | ||
437 | |||
438 | if(strlen(buffer) == 41) { | ||
439 | /* probably contains a SHA1 sum */ | ||
440 | memset(buffer, 0, sizeof(buffer)); | ||
441 | if(readlink(head, buffer, sizeof(buffer)-1)) { | ||
442 | ref_start = memmem(buffer, sizeof(buffer)-1, "refs/heads/", 11); | ||
443 | if(ref_start) | ||
444 | return xstrdup(ref_start+11); | ||
445 | } | ||
446 | } | ||
447 | return xstrdup("master"); | ||
448 | } | 428 | } |
449 | 429 | ||
450 | static int prepare_repo_cmd(struct cgit_context *ctx) | 430 | static int prepare_repo_cmd(struct cgit_context *ctx) |