diff options
| -rw-r--r-- | cgit.c | 34 |
1 files changed, 7 insertions, 27 deletions
| @@ -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) |
