Diff options
authorBryce Kwon <bryce@brycekwon.com>
committerBryce Kwon <bryce@brycekwon.com>
commit
parent
tree
download
Offer the versions as an option
enable-version-info brings back the cgit and git versions that 3a00e19 took off the footer and the generator tag, for a site that wants them, and the version 2a6726a put on the signature of patches now follows it too. It stays off by default for the reason 3a00e19 gave.
-rw-r--r--MANUAL.txt8
-rw-r--r--custom/cgitrc6
-rw-r--r--source/cgit.c2
-rw-r--r--source/cgit.h1
-rw-r--r--source/ui-patch.c8
-rw-r--r--source/ui-shared.c10
-rwxr-xr-xtests/t0005-markup.sh22
-rwxr-xr-xtests/t0109-patch.sh18
8 files changed, 68 insertions, 7 deletions
diff --git a/MANUAL.txt b/MANUAL.txt
index e14b0dc..c6909cc 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -287,6 +287,14 @@ enable-tree-linenumbers::
Flag which, when set to "1", makes cgit generate linenumber links for
plaintext blobs printed in the tree and blame pages. Default value: "1".
+enable-version-info::
+ Flag which, when set to "1", names the cgit and git versions in the
+ standard page footer and the generator meta tag, and the cgit version
+ in the signature that ends each patch. Exact versions help someone
+ match a site against published advisories, so they are left out unless
+ a site asks for them, and a footer set with footer replaces the
+ standard one either way. Default value: "0".
+
favicon::
Url used as link to the icon for cgit. Any path works, but keeping the
value "/favicon.ico" is still worthwhile, since clients that do not
diff --git a/custom/cgitrc b/custom/cgitrc
index 569feb4..86f00aa 100644
--- a/custom/cgitrc
+++ b/custom/cgitrc
@@ -241,6 +241,12 @@ enable-html-serving=0
# Values are 0 or 1. Default is 1.
enable-tree-linenumbers=1
+# Name the cgit and git versions in the page footer, the generator tag and
+# the signature of patches. Exact versions help someone match a site against
+# advisories, so they stay out unless asked for. Values are 0 or 1. Default
+# is 0.
+enable-version-info=0
+
# List directories first, then files, in the tree page. Values are 0 or 1.
# Default is 0.
enable-tree-group-dirs=0
diff --git a/source/cgit.c b/source/cgit.c
index efcb703..eaf1d19 100644
--- a/source/cgit.c
+++ b/source/cgit.c
@@ -586,6 +586,8 @@ static void apply_config(const char *name, const char *value)
ctx.cfg.enable_html_serving = atoi(value);
else if (!strcmp(name, "enable-tree-linenumbers"))
ctx.cfg.enable_tree_linenumbers = atoi(value);
+ else if (!strcmp(name, "enable-version-info"))
+ ctx.cfg.enable_version_info = atoi(value);
else if (!strcmp(name, "enable-tree-group-dirs"))
ctx.cfg.enable_tree_group_dirs = atoi(value);
else if (!strcmp(name, "enable-git-config"))
diff --git a/source/cgit.h b/source/cgit.h
index c04193f..5e17a3e 100644
--- a/source/cgit.h
+++ b/source/cgit.h
@@ -227,6 +227,7 @@ struct cgit_config {
int embedded;
int trust_scan_config;
int enable_follow_links;
+ int enable_version_info;
int enable_gitmodules_links;
int enable_header;
int enable_http_clone;
diff --git a/source/ui-patch.c b/source/ui-patch.c
index 78c850c..04083fe 100644
--- a/source/ui-patch.c
+++ b/source/ui-patch.c
@@ -132,7 +132,8 @@ void cgit_print_patch(const char *new_rev, const char *old_rev, const char *pref
cgit_print_http_headers();
// git format-patch signs with its bare version number, so the v that
- // cgit's tags carry is left off to read the same way.
+ // cgit's tags carry is left off to read the same way. Without
+ // enable-version-info the signature names cgit alone.
if (!skip_prefix(cgit_version, "v", &version))
version = cgit_version;
@@ -141,6 +142,9 @@ void cgit_print_patch(const char *new_rev, const char *old_rev, const char *pref
// Two dashes and a space is the mail signature separator, so
// git am and mail readers drop the version note below rather
// than carrying it into the commit message.
- printf("-- \ncgit %s\n\n", version);
+ if (ctx.cfg.enable_version_info)
+ printf("-- \ncgit %s\n\n", version);
+ else
+ printf("-- \ncgit\n\n");
}
}
diff --git a/source/ui-shared.c b/source/ui-shared.c
index 8da9878..936a6a4 100644
--- a/source/ui-shared.c
+++ b/source/ui-shared.c
@@ -1558,7 +1558,10 @@ void cgit_print_docstart(void)
html_attr(ctx.cfg.root_desc);
html("'>\n");
}
- html("<meta name='generator' content='cgit'>\n");
+ if (ctx.cfg.enable_version_info)
+ htmlf("<meta name='generator' content='cgit %s'>\n", cgit_version);
+ else
+ html("<meta name='generator' content='cgit'>\n");
if (ctx.cfg.robots && *ctx.cfg.robots) {
html("<meta name='robots' content='");
html_attr(ctx.cfg.robots);
@@ -1615,6 +1618,11 @@ void cgit_print_docend(void)
}
if (ctx.cfg.footer)
html_include(ctx.cfg.footer);
+ else if (ctx.cfg.enable_version_info)
+ htmlf("<footer class='footer'>generated by "
+ "<a href='https://github.com/brycekwon/cgit'>cgit %s</a> "
+ "(<a href='https://git-scm.com/'>git %s</a>)</footer>\n",
+ cgit_version, git_version_string);
else
html("<footer class='footer'>generated by <a href='https://github.com/brycekwon/cgit'>cgit</a></footer>\n");
html("</div>\n");
diff --git a/tests/t0005-markup.sh b/tests/t0005-markup.sh
index 52d9e34..5fa866d 100755
--- a/tests/t0005-markup.sh
+++ b/tests/t0005-markup.sh
@@ -44,6 +44,28 @@ test_expect_success 'the landmarks and the search form are in place' '
grep "<footer class=.footer.>" tmp
'
+test_expect_success 'the pages name the versions only when asked to' '
+ hooks "hooks/" >footer &&
+ grep "<meta name=.generator. content=.cgit.>" footer &&
+ grep "<footer class=.footer.>generated by <a href=[^>]*>cgit</a></footer>" footer &&
+ {
+ echo "enable-version-info=1" &&
+ cat hooksrc
+ } >versionrc &&
+ CGIT_CONFIG="$PWD/versionrc" QUERY_STRING="url=hooks/" cgit >footer &&
+ grep "<meta name=.generator. content=.cgit v[0-9][^>]*>" footer &&
+ grep "<footer class=.footer.>generated by <a href=[^>]*>cgit v[0-9][^<]*</a> (<a href=[^>]*>git [0-9][^<]*</a>)</footer>" footer &&
+ echo "<footer>our own</footer>" >footer.html &&
+ {
+ echo "enable-version-info=1" &&
+ echo "footer=$PWD/footer.html" &&
+ cat hooksrc
+ } >versionrc &&
+ CGIT_CONFIG="$PWD/versionrc" QUERY_STRING="url=hooks/" cgit >footer &&
+ grep "<footer>our own</footer>" footer &&
+ ! grep "git-scm" footer
+'
+
test_expect_success 'the listings name themselves, their sections and their rows' '
grep "<table class=.list log. aria-label=.Commits.>" tmp &&
grep "<tbody class=.log.>" tmp &&
diff --git a/tests/t0109-patch.sh b/tests/t0109-patch.sh
index 0c4bf8c..6840f0c 100755
--- a/tests/t0109-patch.sh
+++ b/tests/t0109-patch.sh
@@ -12,9 +12,10 @@ test_description='Check content on patch page'
# tag, as git writes its own.
CGIT_VERSION=$(sed -n "s/CGIT_VERSION = v\{0,1\}//p" "$TEST_OUTPUT_DIRECTORY/../build/VERSION")
-# The signature sits on the second-to-last line, above the trailing blank.
+# The signature sits on the second-to-last line, above the trailing blank,
+# and names the version only when enable-version-info asks for it.
check_cgit_signature() {
- tail -2 tmp | head -1 | grep -x -F "cgit $CGIT_VERSION"
+ tail -2 tmp | head -1 | grep -x -F "cgit${1:+ $1}"
}
test_expect_success 'generate foo/patch' '
@@ -39,7 +40,7 @@ test_expect_success 'find `cgit` signature' '
test_expect_success 'compare with output of git-format-patch(1)' '
git --git-dir="$PWD/repos/foo/.git" format-patch --subject-prefix="" \
- --signature="cgit $CGIT_VERSION" --stdout HEAD^ >tmp2 &&
+ --signature="cgit" --stdout HEAD^ >tmp2 &&
strip_headers <tmp >tmp_ &&
test_cmp tmp_ tmp2
'
@@ -68,7 +69,7 @@ test_expect_success 'find `cgit` signature on the range' '
test_expect_success 'compare the range with git-format-patch(1)' '
git --git-dir="$PWD/repos/foo/.git" format-patch --subject-prefix="" \
- -N --signature="cgit $CGIT_VERSION" --stdout HEAD~3..HEAD >tmp2 &&
+ -N --signature="cgit" --stdout HEAD~3..HEAD >tmp2 &&
strip_headers <tmp >tmp_ &&
test_cmp tmp_ tmp2
'
@@ -86,4 +87,13 @@ test_expect_success 'max-patch-count bounds a patch range' '
test $(grep -c "^From " tmp) -eq 2
'
+test_expect_success 'the signature names the version when asked to' '
+ {
+ echo "enable-version-info=1" &&
+ sed "s/^cache-size=.*/cache-size=0/" cgitrc
+ } >versionrc &&
+ CGIT_CONFIG="$PWD/versionrc" QUERY_STRING="url=foo/patch" cgit >tmp &&
+ check_cgit_signature "$CGIT_VERSION"
+'
+
test_done