]> gitweb.ps.run Git - ps-cgit/blobdiff - cgit.c
Add URL parameter 'context' for changing the number of context lines in diffs
[ps-cgit] / cgit.c
diff --git a/cgit.c b/cgit.c
index e46c00a48e9e97f78a38d41b87b1a98f088e941f..e9bafb506ef38c24c4b4300de08d0b5965a738f6 100644 (file)
--- a/cgit.c
+++ b/cgit.c
@@ -250,6 +250,8 @@ static void querystring_cb(const char *name, const char *value)
                ctx.qry.period = xstrdup(value);
        } else if (!strcmp(name, "ss")) {
                ctx.qry.ssdiff = atoi(value);
+       } else if (!strcmp(name, "context")) {
+               ctx.qry.context = atoi(value);
        }
 }
 
@@ -260,7 +262,7 @@ char *xstrdupn(const char *str)
 
 static void prepare_context(struct cgit_context *ctx)
 {
-       memset(ctx, 0, sizeof(ctx));
+       memset(ctx, 0, sizeof(*ctx));
        ctx->cfg.agefile = "info/web/last-modified";
        ctx->cfg.nocache = 0;
        ctx->cfg.cache_size = 0;
@@ -424,6 +426,12 @@ static void process_request(void *cbdata)
                return;
        }
 
+       /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual"
+        * in-project path limit to be made available at ctx->qry.vpath.
+        * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL).
+        */
+       ctx->qry.vpath = cmd->want_vpath ? ctx->qry.path : NULL;
+
        if (cmd->want_repo && !ctx->repo) {
                cgit_print_http_headers(ctx);
                cgit_print_docstart(ctx);