git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Fix approxidate("never") to always return 0

From
OMOlivier Marin <dkr+ml.git@free.fr>
Date
Jun 17, 2008, 16:34 UTC
Message-ID
<1213720497-9093-1-git-send-email-dkr+ml.git@free.fr>
In-Reply-To
<4855A3CC.2090701@free.fr>
From: Olivier Marin <dkr@freesurf.fr>

Commit af66366a9feb0194ed04b1f538998021ece268a8 introduced the keyword "never" to be used with approxidate() but defined it with a fixed date without taking care of timezone. As a result approxidate() will return a timestamp in the future with a negative timezone.

With this patch, approxidate("never") always return 0 whatever your timezone is.

Also, print seconds since the Epoch in test-date.
Signed-off-by: Olivier Marin <dkr@freesurf.fr>
---
Without this patch:
	$ git --version
	git version 1.5.6.rc3.156.g1a01 (next)
	$ mkdir /tmp/repo1 && cd /tmp/repo1 && git init
	$ echo A > A && git add A && git commit -m A
	$ git config gc.reflogexpire never
	$ TZ=UTC git reflog expire --dry-run --verbose HEAD
	keep commit (initial): A
	$ TZ=UTC-2 git reflog expire --dry-run --verbose HEAD
	would prune commit (initial): A

This test does not trigger the problem with Junio's "Per-ref reflog expiry configuration" patch because it explicitly tests for "never" without relying on approxidate() but the bug still remains with --expire option and in date.c

This make me thinking about TZ=UTC forced into t/test-lib.sh. Should not test cases to be independant of the timezone?

 date.c      |    6 ++----
 test-date.c |    2 +-
 2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/date.c b/date.c
index a74ed86..1a4eb87 100644
--- a/date.c
+++ b/date.c
@@ -682,10 +682,8 @@ static void date_am(struct tm *tm, int *num)
 
 static void date_never(struct tm *tm, int *num)
 {
-	tm->tm_mon = tm->tm_wday = tm->tm_yday
-		= tm->tm_hour = tm->tm_min = tm->tm_sec = 0;
-	tm->tm_year = 70;
-	tm->tm_mday = 1;
+	time_t n = 0;
+	localtime_r(&n, tm);
 }
 
 static const struct special {
diff --git a/test-date.c b/test-date.c
index 62e8f23..b84e000 100644
--- a/test-date.c
+++ b/test-date.c
@@ -14,7 +14,7 @@ int main(int argc, char **argv)
 		printf("%s -> %s -> %s", argv[i], result, ctime(&t));
 
 		t = approxidate(argv[i]);
-		printf("%s -> %s\n", argv[i], ctime(&t));
+		printf("%s -> %lu -> %s\n", argv[i], t, ctime(&t));
 	}
 	return 0;
 }
-- 
1.5.6.rc3.204.gf01a.dirty
Previous: Olivier MarinNext: Johannes Schindelin
Message 2 of 3 in “Bug with approxidate("never")?”
  1. Olivier MarinJun 15, 2008
  2. Fix approxidate("never") to always return 0Olivier Marin, Jun 17, 2008
  3. Johannes SchindelinJun 18, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.