approxidate woes

3 messages, 2 authors, 2018-11-15 · open the first message on its own page

approxidate woes

From: Andreas Krey <hidden>
Date: 2018-11-15 14:17:12

Hi everybody,

I've now located why our backup repo shrinks every month:

  git gc --prune=2d

doesn't do what I expected, and differs a lot from --prune=48h.

The latter actually means 'older than two days', while the
former is 'since the second day of this month, same time as now'.

Even '2d ago' does not help - '2 days ago' does.

Mildly irritating, and worse, hard to find in the documentation.
I failed at the latter and fell back to the sources, finding
'./bin-wrappers/test-date approxidate' for trying.

Where would I look?

- Andreas

-- 
"Totally trivial. Famous last words."
From: Linus Torvalds <torvalds@*.org>
Date: Fri, 22 Jan 2010 07:29:21 -0800

Re: approxidate woes

From: Jeff King <hidden>
Date: 2018-11-15 14:48:57

On Thu, Nov 15, 2018 at 02:45:28PM +0100, Andreas Krey wrote:
I've now located why our backup repo shrinks every month:

  git gc --prune=2d

doesn't do what I expected, and differs a lot from --prune=48h.
Yeah, it understands "2 days", but not "d" as a unit.

I don't think "48h" does what you expect either:

  $ t/helper/test-date approxidate now
  now -> 2018-11-15 14:43:32 +0000

  $ t/helper/test-date approxidate 48h
  48h -> 2018-11-15 14:43:34 +0000

  $ t/helper/test-date approxidate 48.hours
  48.hours -> 2018-11-13 14:43:38 +0000

It might be reasonable to teach approxidate these obvious shorthands
(one tricky one is "m"; normally I'd say "minute", but in Git timescales
"month" is more likely).
Mildly irritating, and worse, hard to find in the documentation.
I failed at the latter and fell back to the sources, finding
'./bin-wrappers/test-date approxidate' for trying.

Where would I look?
I don't think approxidate is really documented at all. It started as
Linus's idea of "handle what people would probably say", and the fixes
over the years have mostly been "eh, that's crazy, let's do better with
this input".

You'd have to reverse engineer it a bit from the source, unfortunately.

-Peff

Re: approxidate woes

From: Jeff King <hidden>
Date: 2018-11-15 14:54:11

On Thu, Nov 15, 2018 at 09:48:54AM -0500, Jeff King wrote:
I don't think "48h" does what you expect either:

  $ t/helper/test-date approxidate now
  now -> 2018-11-15 14:43:32 +0000

  $ t/helper/test-date approxidate 48h
  48h -> 2018-11-15 14:43:34 +0000

  $ t/helper/test-date approxidate 48.hours
  48.hours -> 2018-11-13 14:43:38 +0000
Whoops, those should all be:

  t/helper/test-tool date approxidate ...

in recent versions of Git (I was bisecting something earlier, and has a
crufty test-date left over from an old version!).

Adding new unit aliases would be something like:
diff --git a/date.c b/date.c
index 9bc15df6f9..eb477d1601 100644
--- a/date.c
+++ b/date.c
@@ -1016,6 +1016,7 @@ static const struct typelen {
 	{ "minutes", 60 },
 	{ "hours", 60*60 },
 	{ "days", 24*60*60 },
+	{ "d", 24*60*60 },
 	{ "weeks", 7*24*60*60 },
 	{ NULL }
 };
but I suspect we need to tighten up the string matching a bit. I think
that would allow "2 dogs" to be parsed as "days".

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help