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

Re: [PATCH v4] gc: call "prune --expire 2.weeks.ago" by default

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 12, 2008, 23:39 UTC
Message-ID
<7vod9j342h.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<alpine.LSU.1.00.0803130021520.1656@racer.site>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 31 quoted lines
>> Eh, sorry, but why?
>
> The thing is: I want to prevent invalid dates in gc.pruneExpire from going 
> unnoticed, _especially_ since they would default to "now".  IOW if you 
> said something like "one.weak.ago", it would actually have the same effect 
> as "now" and offer _no_ grace period.
>
> But like you said, comparing the difference of two unsigned longs to >= 0 
> might be quite stupid.  Instead, I compare them _directly_.
>
> Since I compare the value to "now" first, and only if it is not, compare 
> the approxidate() of the value to the current time stamp, I can verify 
> that no invalid date was specified.
>
> Unfortunately, this check includes future dates.  Fortunately, they do not 
> make sense at all.
>
> To make my reasoning clear, how about this comment above that if() clause?
>
> 		/*
> 		 * In case of an invalid date, approxidate() returns the
> 		 * same as approxidate("now").  Since the millisecond
> 		 * boundary could have been crossed between the two calls
> 		 * to approxidate(), we compare not only for equality,
> 		 * but also if the former is greater than the latter.
> 		 *
> 		 * Note: this assumes that future dates are invalid, which
> 		 * makes sense, really.
> 		 */
>
> Hmm?
Ah,...

But C language rules haven't changed in such a way that it guarantees B to be evaluated before A when you write "A >= B", have it?

So at least I think you would need something like this if you go that route:

  		if (strcmp(value, "now")) {
                	unsigned long now = approxidate("now");
                	if (approxidate(value) >= now)
				return error("Invalid %s: '%s'", var, value);
			...
		}

Also the resolution of approxidate() is in seconds so millisecond boundary does not matter, but that issue is, eh, secondary ;-).

I have to wonder if approxidate_with_error() function that takes a pointer to receive an error condition may be a better way to solve this cleanly.

Previous: Johannes SchindelinNext: Johannes Schindelin
Message 36 of 41 in “gc: call "prune --expire 2.weeks.ago"”
  1. gc: call "prune --expire 2.weeks.ago"Johannes Schindelin, Mar 11, 2008
  2. Junio C HamanoMar 12, 2008
  3. Nicolas PitreMar 12, 2008
  4. Junio C HamanoMar 12, 2008
  5. Johannes SchindelinMar 12, 2008
  6. Nicolas PitreMar 12, 2008
  7. Pieter de BieMar 12, 2008
  8. Johannes SchindelinMar 12, 2008
  9. Jeff KingMar 12, 2008
  10. Pieter de BieMar 12, 2008
  11. Junio C HamanoMar 12, 2008
  12. Johannes SchindelinMar 12, 2008
  13. Junio C HamanoMar 12, 2008
  14. Geert BoschMar 12, 2008
  15. Nicolas PitreMar 12, 2008
  16. Marko KreenMar 12, 2008
  17. gc: call "prune --expire 2.weeks.ago" by defaultJohannes Schindelin, Mar 12, 2008
  18. Brandon CaseyMar 12, 2008
  19. Jakub NarebskiMar 12, 2008
  20. Johannes SchindelinMar 12, 2008
  21. Junio C HamanoMar 12, 2008
  22. Johannes SchindelinMar 12, 2008
  23. gc: call "prune --expire 2.weeks.ago" by defaultJohannes Schindelin, Mar 12, 2008
  24. Johannes SchindelinMar 12, 2008
  25. Brandon CaseyMar 12, 2008
  26. Johannes SchindelinMar 12, 2008
  27. Brandon CaseyMar 12, 2008
  28. Junio C HamanoMar 12, 2008
  29. gc: call "prune --expire 2.weeks.ago" by defaultJohannes Schindelin, Mar 12, 2008
  30. Johannes SchindelinMar 12, 2008
  31. Junio C HamanoMar 12, 2008
  32. Nicolas PitreMar 12, 2008
  33. Johannes SchindelinMar 12, 2008
  34. Junio C HamanoMar 12, 2008
  35. Johannes SchindelinMar 12, 2008
  36. Junio C HamanoMar 12, 2008
  37. Johannes SchindelinMar 12, 2008
  38. Wincent ColaiutaMar 13, 2008
  39. Johannes SixtMar 13, 2008
  40. Wincent ColaiutaMar 13, 2008
  41. Johannes SchindelinMar 13, 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.