diff options
author | Lars Hjemli <hjemli@gmail.com> | 2011-06-21 07:52:51 (JST) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2011-06-21 08:23:57 (JST) |
commit | 8d7c2ec295423fe31d9113038f6717d7b64dbe57 (patch) | |
tree | 78df2a78ae27a8f879ae71e92a47b0e284de7221 | |
parent | e95c70d4ea997d1217d5c81cb3b640f3fa025df1 (diff) | |
download | cgit-8d7c2ec295423fe31d9113038f6717d7b64dbe57.zip cgit-8d7c2ec295423fe31d9113038f6717d7b64dbe57.tar.gz |
cgit.c: use resolve_ref() to guess_defbranch()
The resolve_ref() function handles reading of git- and filesystem
symbolic links (including proper whitespace trimming) and packed refs.
There's no point in reimplementing this function in cgit.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-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) |