Diff options
Diffstat (limited to '')
-rw-r--r--source/ui-stats.c4
-rwxr-xr-xtests/t0112-stats.sh28
2 files changed, 32 insertions, 0 deletions
diff --git a/source/ui-stats.c b/source/ui-stats.c
index e4dcf8e..6cb2653 100644
--- a/source/ui-stats.c
+++ b/source/ui-stats.c
@@ -162,6 +162,10 @@ static void window_start(const struct cgit_period *period, struct tm *tm)
time(&now);
gmtime_r(&now, tm);
period->trunc(tm);
+ // The window opens at midnight, not at the time of day it is now.
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
for (i = 1; i < period->count; i++)
period->dec(tm);
}
diff --git a/tests/t0112-stats.sh b/tests/t0112-stats.sh
index 7b08a6b..7e1fcc5 100755
--- a/tests/t0112-stats.sh
+++ b/tests/t0112-stats.sh
@@ -96,4 +96,32 @@ test_expect_success 'every period renders its own columns' '
grep -E "<th[^>]*>[0-9]{4}</th>" tmp
'
+# The yearly window opens on the first of January three years back. cgit reads
+# the real clock, so the two commits sit either side of midnight on that day.
+test_expect_success 'the window opens at midnight on its first day' '
+ first=$(($(date -u +%Y) - 3)) &&
+ test_create_repo repos/edge &&
+ (
+ cd repos/edge &&
+ GIT_AUTHOR_NAME="Too Early" \
+ GIT_AUTHOR_DATE="$((first - 1))-12-31 23:59:59 +0000" \
+ GIT_COMMITTER_DATE="$((first - 1))-12-31 23:59:59 +0000" \
+ git commit --allow-empty -m before &&
+ GIT_AUTHOR_NAME="Early Bird" \
+ GIT_AUTHOR_DATE="$first-01-01 00:00:00 +0000" \
+ GIT_COMMITTER_DATE="$first-01-01 00:00:00 +0000" \
+ git commit --allow-empty -m first
+ ) &&
+ {
+ echo "virtual-root=/" &&
+ echo "cache-size=0" &&
+ echo "max-stats=year" &&
+ echo "repo.url=edge" &&
+ echo "repo.path=$PWD/repos/edge/.git"
+ } >edgerc &&
+ CGIT_CONFIG="$PWD/edgerc" QUERY_STRING="url=edge/stats/&period=y" cgit >tmp &&
+ grep ">Early Bird<" tmp &&
+ ! grep ">Too Early<" tmp
+'
+
test_done