Website Summary Files Commits Branches @commit @diff @stats
path: root / cgit.c
diff options
context:
space:
mode:
Commitcd4c77d989983778432363061e99219f034c3717 (patch)
Author
 Jason A. Donenfeld <Jason@zx2c4.com>
2013-05-25 16:32:37 +0200
Committer
 Jason A. Donenfeld <Jason@zx2c4.com>
2013-05-25 20:33:28 +0200
Filesa394b7960e7105c7dbcb130721298a49d49b8a75 /cgit.c
cgit-cd4c77d989983778432363061e99219f034c3717.tar
cgit-cd4c77d989983778432363061e99219f034c3717.tar.gz
cgit-cd4c77d989983778432363061e99219f034c3717.zip
Parentc0dfaf1c281d0697ce43131343d7a9f170a61ff9 (diff)
readme: Accept multiple candidates and test them.
The readme variable may now contain multiple space deliminated entries, which per usual are either a filepath or a git ref filepath. If multiple are specified, cgit will now select the first one in the list that exists. This is to make it easier to specify multiple default readme types in the main cgitrc file and have them automatically get applied to each repo based on what exists. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
1 files changed, 35 insertions, 0 deletions
-rw-r--r--cgit.c35
diff --git a/cgit.c b/cgit.c
index 04682be..f738b83 100644
--- a/cgit.c
+++ b/cgit.c
@@ -14,6 +14,8 @@
#include "html.h"
#include "ui-shared.h"
#include "ui-stats.h"
+#include "ui-blob.h"
+#include "ui-summary.h"
#include "scan-tree.h"
const char *cgit_version = CGIT_VERSION;
@@ -469,6 +471,38 @@ static char *guess_defbranch(void)
return xstrdup(ref + 11);
}
+static void choose_readme(struct cgit_repo *repo)
+{
+ char *entry, *filename, *ref;
+
+ /* If there's no space, we skip the possibly expensive
+ * selection process. */
+ if (!repo->readme || !strchr(repo->readme, ' '))
+ return;
+
+ for (entry = strtok(repo->readme, " "); entry; entry = strtok(NULL, " ")) {
+ cgit_parse_readme(entry, NULL, &filename, &ref, repo);
+ if (!(*filename)) {
+ free(filename);
+ free(ref);
+ continue;
+ }
+ if (*ref && cgit_ref_path_exists(filename, ref)) {
+ free(filename);
+ free(ref);
+ break;
+ }
+ if (!access(filename, R_OK)) {
+ free(filename);
+ free(ref);
+ break;
+ }
+ free(filename);
+ free(ref);
+ }
+ repo->readme = entry;
+}
+
static int prepare_repo_cmd(struct cgit_context *ctx)
{
unsigned char sha1[20];
@@ -537,6 +571,7 @@ static int prepare_repo_cmd(struct cgit_context *ctx)
}
sort_string_list(&ctx->repo->submodules);
cgit_prepare_repo_env(ctx->repo);
+ choose_readme(ctx->repo);
return 0;
}