git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: git.git object database at kernel.org?
       [not found] <7vhdhvstb2.fsf@assigned-by-dhcp.cox.net>
@ 2005-04-24 23:08 ` Linus Torvalds
  2005-04-25 18:46   ` H. Peter Anvin
  0 siblings, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2005-04-24 23:08 UTC (permalink / raw)
  To: Git Mailing List, Junio C Hamano


Junio just pointed out that "convert-cache" didn't actually handle some of 
the old-style commits that git itself has (notably, the date changes).

I fixed that, and converted git, so that the dates are now correct in "git
log" for the early commit entries too.

This means that all the commit objects in my git tree ended up being
re-generated: the data itself doesn't change, and none of the tree or blob
objects are any different, but since the first "commit" changed (the first
several ones, in fact - it was about a week until the date format got
fixed), the whole chain of commits ends up being different.

That has almost zero impact _except_ for anybody who merges directly with 
my tree using git itself. You now have two choices:

 - convert your own git tree (probably a good thing, otherwise your old 
   commit entries will always be bogus), at which point it should just 
   merge fine with mine automatically.

   NOTE! The fact that "mktime()" seems to depend on the timezone in which 
   it is made seems to make this questionable. I had always assumed that 
   mktime would take the timezone from the "struct tm", and thus be 
   reliable, but somebody seems to have shown that that is not the case at 
   all!

   It's entirely possible that you need to do something stupid like

	TZ=US/Pacific

   before you convert your tree. I wonder if this might also explain the 
   problems some people (notably Russell) had at around the conversion..

   Anyway, _if_ your conversion was successful and matches mine, you
   should now have a root "e83c5163316f89bfbde7d9ab23ca2e25604af290", that
   is reachable from the result of the conversion (check with "git log
   <result>"). You should also have as a top (unless you have made changes 
   of your own):

	commit 3f053897b3445988309d0ae7378944783c34d152
	tree f5c350ae39f61486622c84597a507611e62fa6af
	parent c6e007b0942a373bbf87fa3e4e11e2d90907de8c
	author Linus Torvalds <torvalds@ppc970.osdl.org> Sun Apr 24 22:49:09  2005
	committer Linus Torvalds <torvalds@ppc970.osdl.org> Sun Apr 24 22:49:09  2005
	
	  Update "convert-cache" to handle git itself.
	  
	  The git archives have some old-date-format commits with timezones
	  that the converter didn't recognize. Also, make it be quiet about
	  already-converted dates.

   If it doesn't match that, you can run "convert-cache" (with the
   _original_ head) several times. When you are happy that it's all ok,
   you can "commit" the result by writing it to your .git/HEAD file.

 - alternatively, if you don't want to convert your thing, you can give a 
   "base commit" by hand when merging, and select one where the "tree"  
   object matches in both mine and yours. This isn't something I would 
   recommend, but it should work and "meld" the two commit chains together 
   even though their root entries differ.

Sorry about all this, I had totally forgotten that we had old-style dates 
in our git commit history.

			Linus

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git.git object database at kernel.org?
  2005-04-24 23:08 ` git.git object database at kernel.org? Linus Torvalds
@ 2005-04-25 18:46   ` H. Peter Anvin
  2005-04-25 19:05     ` H. Peter Anvin
  2005-04-26  0:32     ` Linus Torvalds
  0 siblings, 2 replies; 7+ messages in thread
From: H. Peter Anvin @ 2005-04-25 18:46 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Git Mailing List, Junio C Hamano

Linus Torvalds wrote:
> 
>    NOTE! The fact that "mktime()" seems to depend on the timezone in which 
>    it is made seems to make this questionable. I had always assumed that 
>    mktime would take the timezone from the "struct tm", and thus be 
>    reliable, but somebody seems to have shown that that is not the case at 
>    all!
> 

No, mktime() always uses the local time zone.  It's the inverse of 
localtime().  If you know the timezone offset (e.g. if you have a RFC 
2822-style date) then you're probably better off rolling your own; 
otherwise setenv("TZ"); tzset(); mktime(); is of course also doable.

	-hpa

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git.git object database at kernel.org?
  2005-04-25 18:46   ` H. Peter Anvin
@ 2005-04-25 19:05     ` H. Peter Anvin
  2005-04-26  0:32     ` Linus Torvalds
  1 sibling, 0 replies; 7+ messages in thread
From: H. Peter Anvin @ 2005-04-25 19:05 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Linus Torvalds, Git Mailing List, Junio C Hamano

H. Peter Anvin wrote:
> Linus Torvalds wrote:
> 
>>    NOTE! The fact that "mktime()" seems to depend on the timezone in 
>> which    it is made seems to make this questionable. I had always 
>> assumed that    mktime would take the timezone from the "struct tm", 
>> and thus be    reliable, but somebody seems to have shown that that is 
>> not the case at    all!
> 
> No, mktime() always uses the local time zone.  It's the inverse of 
> localtime().  If you know the timezone offset (e.g. if you have a RFC 
> 2822-style date) then you're probably better off rolling your own; 
> otherwise setenv("TZ"); tzset(); mktime(); is of course also doable.
> 

BTW, curl_getdate() from libcurl is a good multiformat date parser.

	-hpa

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git.git object database at kernel.org?
  2005-04-25 18:46   ` H. Peter Anvin
  2005-04-25 19:05     ` H. Peter Anvin
@ 2005-04-26  0:32     ` Linus Torvalds
  2005-04-26  0:48       ` H. Peter Anvin
  1 sibling, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2005-04-26  0:32 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Git Mailing List, Junio C Hamano



On Mon, 25 Apr 2005, H. Peter Anvin wrote:
> 
> No, mktime() always uses the local time zone.  It's the inverse of 
> localtime().

Note that this still doesn't make any sense.

A true inverse of "localtime()" should still take the GMT offset from
"struct tm", and it would work fine, assuming that localtime() set that
offset correctly.

So _I_ think it's incredibly stupid that mktime() looks at the local 
timezone. 

Oh, well.  Not a big issue except for the date conversion, and since there 
hopefully aren't any old repo's left, we can leave it behind us.

		Linus

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git.git object database at kernel.org?
  2005-04-26  0:32     ` Linus Torvalds
@ 2005-04-26  0:48       ` H. Peter Anvin
  2005-04-26  0:58         ` Linus Torvalds
  0 siblings, 1 reply; 7+ messages in thread
From: H. Peter Anvin @ 2005-04-26  0:48 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Git Mailing List, Junio C Hamano

Linus Torvalds wrote:
> 
> On Mon, 25 Apr 2005, H. Peter Anvin wrote:
> 
>>No, mktime() always uses the local time zone.  It's the inverse of 
>>localtime().
> 
> Note that this still doesn't make any sense.
> 
> A true inverse of "localtime()" should still take the GMT offset from
> "struct tm", and it would work fine, assuming that localtime() set that
> offset correctly.
> 
> So _I_ think it's incredibly stupid that mktime() looks at the local 
> timezone. 
> 
> Oh, well.  Not a big issue except for the date conversion, and since there 
> hopefully aren't any old repo's left, we can leave it behind us.
> 

It *is* incredibly stupid, but dates back to the fact that a the GMT 
offset field in struct tm is a reasonably recent invention, and a lot of 
old code depended on just stuffing fields in struct tm and calling 
mktime(); they would leave the offset field uninitialized, as opposed to 
setting it to some well-defined "I don't know" value.

What totally blows is that if mktime() can't be fixed, that we haven't 
added mktime_have_offset() or something like that.

Oh well.  If you have the offset, the algorithm is fully arithmetric and 
doesn't rely on the zoneinfo system, so it can be trivially implemented. 
   And again, curl_gettime() does handle the whole string to time_t 
conversion of the common formats.

	-hpa


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git.git object database at kernel.org?
  2005-04-26  0:48       ` H. Peter Anvin
@ 2005-04-26  0:58         ` Linus Torvalds
  2005-04-26  1:05           ` H. Peter Anvin
  0 siblings, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2005-04-26  0:58 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Git Mailing List, Junio C Hamano



On Mon, 25 Apr 2005, H. Peter Anvin wrote:
> 
> Oh well.  If you have the offset, the algorithm is fully arithmetric and 
> doesn't rely on the zoneinfo system, so it can be trivially implemented. 

You have a different definition of "trivial" than I do. I have not a 
frigging clue how to handle leap seconds etc ;)

>    And again, curl_gettime() does handle the whole string to time_t 
> conversion of the common formats.

I don't doubt you, I just would prefer to not rely on boutique libraries 
too much. 

Yeah, we already use it for http-pull, so I guess it's moot, but at least 
that felt less like a core command..

		Linus

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git.git object database at kernel.org?
  2005-04-26  0:58         ` Linus Torvalds
@ 2005-04-26  1:05           ` H. Peter Anvin
  0 siblings, 0 replies; 7+ messages in thread
From: H. Peter Anvin @ 2005-04-26  1:05 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Git Mailing List, Junio C Hamano

Linus Torvalds wrote:
> 
> On Mon, 25 Apr 2005, H. Peter Anvin wrote:
> 
>>Oh well.  If you have the offset, the algorithm is fully arithmetric and 
>>doesn't rely on the zoneinfo system, so it can be trivially implemented. 
> 
> You have a different definition of "trivial" than I do. I have not a 
> frigging clue how to handle leap seconds etc ;)
> 

Leap seconds don't exist in the POSIX time_t universe, so they always obey:

	... + 3600*hour + 60*min + sec

... which means that during a positive leap second, time_t remains 
unchanged for 2 seconds, and for a negative leap second time_t jumps. 
Thus, the difference between two time_t doesn't always match the exact 
number of seconds between those two points in time.

> 
>>   And again, curl_gettime() does handle the whole string to time_t 
>>conversion of the common formats.
> 
> I don't doubt you, I just would prefer to not rely on boutique libraries 
> too much. 
> 
> Yeah, we already use it for http-pull, so I guess it's moot, but at least 
> that felt less like a core command..
> 

If we're already using libcurl, we might as well.  Otherwise, I'd just 
rip out curl_gettime from the libcurl sources.

	-hpa

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-04-26  1:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <7vhdhvstb2.fsf@assigned-by-dhcp.cox.net>
2005-04-24 23:08 ` git.git object database at kernel.org? Linus Torvalds
2005-04-25 18:46   ` H. Peter Anvin
2005-04-25 19:05     ` H. Peter Anvin
2005-04-26  0:32     ` Linus Torvalds
2005-04-26  0:48       ` H. Peter Anvin
2005-04-26  0:58         ` Linus Torvalds
2005-04-26  1:05           ` H. Peter Anvin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).