]> git.cameronkatri.com Git - cgit.git/blobdiff - cgit.c
Add possibility to switch between unidiff and side-by-side-diff.
[cgit.git] / cgit.c
diff --git a/cgit.c b/cgit.c
index f1ea03c66daaa54c9ddd9bb0d2c7abbe82ee7760..ff678fb210ea4ec073970b8c59ed0b429695ec60 100644 (file)
--- a/cgit.c
+++ b/cgit.c
@@ -137,6 +137,8 @@ void config_cb(const char *name, const char *value)
                ctx.cfg.enable_log_filecount = atoi(value);
        else if (!strcmp(name, "enable-log-linecount"))
                ctx.cfg.enable_log_linecount = atoi(value);
+       else if (!strcmp(name, "enable-tree-linenumbers"))
+               ctx.cfg.enable_tree_linenumbers = atoi(value);
        else if (!strcmp(name, "max-stats"))
                ctx.cfg.max_stats = cgit_find_stats_period(value, NULL);
        else if (!strcmp(name, "cache-size"))
@@ -180,6 +182,8 @@ void config_cb(const char *name, const char *value)
                ctx.cfg.summary_branches = atoi(value);
        else if (!strcmp(name, "summary-tags"))
                ctx.cfg.summary_tags = atoi(value);
+       else if (!strcmp(name, "side-by-side-diffs"))
+               ctx.cfg.ssdiff = atoi(value);
        else if (!strcmp(name, "agefile"))
                ctx.cfg.agefile = xstrdup(value);
        else if (!strcmp(name, "renamelimit"))
@@ -236,6 +240,8 @@ static void querystring_cb(const char *name, const char *value)
                ctx.qry.showmsg = atoi(value);
        } else if (!strcmp(name, "period")) {
                ctx.qry.period = xstrdup(value);
+       } else if (!strcmp(name, "ss")) {
+               ctx.qry.ssdiff = atoi(value);
        }
 }
 
@@ -260,6 +266,7 @@ static void prepare_context(struct cgit_context *ctx)
        ctx->cfg.css = "/cgit.css";
        ctx->cfg.logo = "/cgit.png";
        ctx->cfg.local_time = 0;
+       ctx->cfg.enable_tree_linenumbers = 1;
        ctx->cfg.max_repo_count = 50;
        ctx->cfg.max_commit_count = 50;
        ctx->cfg.max_lock_attempts = 5;
@@ -276,6 +283,7 @@ static void prepare_context(struct cgit_context *ctx)
        ctx->cfg.summary_branches = 10;
        ctx->cfg.summary_log = 10;
        ctx->cfg.summary_tags = 10;
+       ctx->cfg.ssdiff = 0;
        ctx->env.cgit_config = xstrdupn(getenv("CGIT_CONFIG"));
        ctx->env.http_host = xstrdupn(getenv("HTTP_HOST"));
        ctx->env.https = xstrdupn(getenv("HTTPS"));
@@ -437,6 +445,35 @@ int cmp_repos(const void *a, const void *b)
        return strcmp(ra->url, rb->url);
 }
 
+char *build_snapshot_setting(int bitmap)
+{
+       const struct cgit_snapshot_format *f;
+       char *result = xstrdup("");
+       char *tmp;
+       int len;
+
+       for (f = cgit_snapshot_formats; f->suffix; f++) {
+               if (f->bit & bitmap) {
+                       tmp = result;
+                       result = xstrdup(fmt("%s%s ", tmp, f->suffix));
+                       free(tmp);
+               }
+       }
+       len = strlen(result);
+       if (len)
+               result[len - 1] = '\0';
+       return result;
+}
+
+char *get_first_line(char *txt)
+{
+       char *t = xstrdup(txt);
+       char *p = strchr(t, '\n');
+       if (p)
+               *p = '\0';
+       return t;
+}
+
 void print_repo(FILE *f, struct cgit_repo *repo)
 {
        fprintf(f, "repo.url=%s\n", repo->url);
@@ -444,10 +481,39 @@ void print_repo(FILE *f, struct cgit_repo *repo)
        fprintf(f, "repo.path=%s\n", repo->path);
        if (repo->owner)
                fprintf(f, "repo.owner=%s\n", repo->owner);
-       if (repo->desc)
-               fprintf(f, "repo.desc=%s\n", repo->desc);
+       if (repo->desc) {
+               char *tmp = get_first_line(repo->desc);
+               fprintf(f, "repo.desc=%s\n", tmp);
+               free(tmp);
+       }
        if (repo->readme)
                fprintf(f, "repo.readme=%s\n", repo->readme);
+       if (repo->defbranch)
+               fprintf(f, "repo.defbranch=%s\n", repo->defbranch);
+       if (repo->module_link)
+               fprintf(f, "repo.module-link=%s\n", repo->module_link);
+       if (repo->section)
+               fprintf(f, "repo.section=%s\n", repo->section);
+       if (repo->clone_url)
+               fprintf(f, "repo.clone-url=%s\n", repo->clone_url);
+       fprintf(f, "repo.enable-log-filecount=%d\n",
+               repo->enable_log_filecount);
+       fprintf(f, "repo.enable-log-linecount=%d\n",
+               repo->enable_log_linecount);
+       if (repo->about_filter && repo->about_filter != ctx.cfg.about_filter)
+               fprintf(f, "repo.about-filter=%s\n", repo->about_filter->cmd);
+       if (repo->commit_filter && repo->commit_filter != ctx.cfg.commit_filter)
+               fprintf(f, "repo.commit-filter=%s\n", repo->commit_filter->cmd);
+       if (repo->source_filter && repo->source_filter != ctx.cfg.source_filter)
+               fprintf(f, "repo.source-filter=%s\n", repo->source_filter->cmd);
+       if (repo->snapshots != ctx.cfg.snapshots) {
+               char *tmp = build_snapshot_setting(repo->snapshots);
+               fprintf(f, "repo.snapshots=%s\n", tmp);
+               free(tmp);
+       }
+       if (repo->max_stats != ctx.cfg.max_stats)
+               fprintf(f, "repo.max-stats=%s\n",
+                       cgit_find_stats_periodname(repo->max_stats));
        fprintf(f, "\n");
 }
 
@@ -562,6 +628,16 @@ static void cgit_parse_args(int argc, const char **argv)
                }
                if (!strncmp(argv[i], "--scan-tree=", 12) ||
                    !strncmp(argv[i], "--scan-path=", 12)) {
+                       /* HACK: the global snapshot bitmask defines the
+                        * set of allowed snapshot formats, but the config
+                        * file hasn't been parsed yet so the mask is
+                        * currently 0. By setting all bits high before
+                        * scanning we make sure that any in-repo cgitrc
+                        * snapshot setting is respected by scan_tree().
+                        * BTW: we assume that there'll never be more than
+                        * 255 different snapshot formats supported by cgit...
+                        */
+                       ctx.cfg.snapshots = 0xFF;
                        scan++;
                        scan_tree(argv[i] + 12, repo_config);
                }