{"thread":{"id":"16759","subject":"[EGIT PATCH 0/2] *** SUBJECT HERE ***","startedAt":"2008-12-17T00:07:17Z","lastAt":"2008-12-18T00:09:51Z","messageCount":9,"participants":["Robin Rosenberg","Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"98090","messageId":"1229472439-24104-1-git-send-email-robin.rosenberg@dewire.com","threadId":"16759","inReplyTo":null,"subject":"[EGIT PATCH 0/2] *** SUBJECT HERE ***","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-12-17T00:07:17Z","receivedAt":"2008-12-17T00:07:17Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"The few plugin unit tests we have is a sad story. Cheer up a bit.\n\nRobin Rosenberg (2):\n  Revert \"Fix commit id in egit test\n    T0001_ConnectProviderOperationTest\"\n  Fixed an old failed EGit unit test.\n\n .../egit/core/internal/mapping/T0002_history.java  |    5 ++---\n .../op/T0001_ConnectProviderOperationTest.java     |    3 ++-\n 2 files changed, 4 insertions(+), 4 deletions(-)\n"},{"id":"98091","messageId":"1229472439-24104-2-git-send-email-robin.rosenberg@dewire.com","threadId":"16759","inReplyTo":"1229472439-24104-1-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 1/2] Revert \"Fix commit id in egit test T0001_ConnectProviderOperationTest\"","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-12-17T00:07:18Z","receivedAt":"2008-12-17T00:07:18Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"This reverts commit 61133091d5f22398828b350ff772165e9945db8a.\n\nBisect says this is the commit that failed, which is odd. Bad QA.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../op/T0001_ConnectProviderOperationTest.java     |    3 ++-\n 1 files changed, 2 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java b/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\nindex 0ce2d7f..aae1ef4 100644\n--- a/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\n+++ b/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\n@@ -99,8 +99,9 @@ assertTrue(\"tree missing\", new File(gitDir,\n \t\t\t\t\"objects/08/ccc3d91a14d337a45f355d3d63bd97fd5e4db9\").exists());\n \t\tassertTrue(\"tree missing\", new File(gitDir,\n \t\t\t\t\"objects/9d/aeec817090098f05eeca858e3a552d78b0a346\").exists());\n+\n \t\tassertTrue(\"commit missing\", new File(gitDir,\n-\t\t\t\t\"objects/09/6f1a84091b90b6d9fb12f95848da69496305c1\").exists());\n+\t\t\t\t\"objects/45/df73fd9abbc2c61620c036948b1157e4d21253\").exists());\n \n \t\tConnectProviderOperation operation = new ConnectProviderOperation(\n \t\t\t\tproject.getProject(), null);\n-- \n1.6.0.3.640.g6331a\n"},{"id":"98092","messageId":"1229472439-24104-3-git-send-email-robin.rosenberg@dewire.com","threadId":"16759","inReplyTo":"1229472439-24104-2-git-send-email-robin.rosenberg@dewire.com","subject":"[EGIT PATCH 2/2] Fixed an old failed EGit unit test.","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-12-17T00:07:19Z","receivedAt":"2008-12-17T00:07:19Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"The index was dropped from the history with Shawns revision walker.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../egit/core/internal/mapping/T0002_history.java  |    5 ++---\n 1 files changed, 2 insertions(+), 3 deletions(-)\n\ndiff --git a/org.spearce.egit.core.test/src/org/spearce/egit/core/internal/mapping/T0002_history.java b/org.spearce.egit.core.test/src/org/spearce/egit/core/internal/mapping/T0002_history.java\nindex b540e10..71f5cc5 100644\n--- a/org.spearce.egit.core.test/src/org/spearce/egit/core/internal/mapping/T0002_history.java\n+++ b/org.spearce.egit.core.test/src/org/spearce/egit/core/internal/mapping/T0002_history.java\n@@ -98,8 +98,7 @@ public void testShallowHistory() {\n \t\tIFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();\n \t\tIFileHistory fileHistory = fileHistoryProvider.getFileHistoryFor(project.getProject().getWorkspace().getRoot().findMember(\"Project-1/A.txt\"), IFileHistoryProvider.SINGLE_LINE_OF_DESCENT, new NullProgressMonitor());\n \t\tIFileRevision[] fileRevisions = fileHistory.getFileRevisions();\n-\t\tassertEquals(2, fileRevisions.length);\n-\t\tassertEquals(\"Index\", fileRevisions[0].getContentIdentifier());\n-\t\tassertEquals(\"6dd8f0b51204fa24a01734971947847549ec4ba8\", fileRevisions[1].getContentIdentifier());\n+\t\tassertEquals(1, fileRevisions.length);\n+\t\tassertEquals(\"6dd8f0b51204fa24a01734971947847549ec4ba8\", fileRevisions[0].getContentIdentifier());\n \t}\n }\n-- \n1.6.0.3.640.g6331a\n"},{"id":"98149","messageId":"20081217160933.GD32487@spearce.org","threadId":"16759","inReplyTo":"1229472439-24104-2-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH 1/2] Revert \"Fix commit id in egit test T0001_ConnectProviderOperationTest\"","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-12-17T16:09:33Z","receivedAt":"2008-12-17T16:09:33Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n> This reverts commit 61133091d5f22398828b350ff772165e9945db8a.\n> \n> Bisect says this is the commit that failed, which is odd. Bad QA.\n\nHmmph.  This revert fails here.\n\n> diff --git a/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java b/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\n> index 0ce2d7f..aae1ef4 100644\n> --- a/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\n> +++ b/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\n> @@ -99,8 +99,9 @@ assertTrue(\"tree missing\", new File(gitDir,\n>  \t\t\t\t\"objects/08/ccc3d91a14d337a45f355d3d63bd97fd5e4db9\").exists());\n>  \t\tassertTrue(\"tree missing\", new File(gitDir,\n>  \t\t\t\t\"objects/9d/aeec817090098f05eeca858e3a552d78b0a346\").exists());\n> +\n>  \t\tassertTrue(\"commit missing\", new File(gitDir,\n> -\t\t\t\t\"objects/09/6f1a84091b90b6d9fb12f95848da69496305c1\").exists());\n> +\t\t\t\t\"objects/45/df73fd9abbc2c61620c036948b1157e4d21253\").exists());\n\nDebugging this test shows that the commit we created in the test\nis actually:\n\n--\n$ git cat-file commit 4c1bc1435f93c9409c93db5239e111271a8ccf55\ntree 9daeec817090098f05eeca858e3a552d78b0a346\nauthor J. Git <j.git@egit.org> 60876086400 +0100\ncommitter J. Git <j.git@egit.org> 60876086400 +0100\n\ntestNewUnsharedFile\n\nJunit tests\n--\n\nWhich has me starting to wonder, what the heck is different\nbetween systems that is being reflected in this commit object?\nThe only thing I can think of is the timestamp we are creating by\nthe deprecated Date constructor call back on line 82.  Perhaps\non different JVMs it is using different values for the hh:mm:ss\nparts of the timestamp value?\n\n-- \nShawn.\n"},{"id":"98193","messageId":"200812172328.07371.robin.rosenberg.lists@dewire.com","threadId":"16759","inReplyTo":"20081217160933.GD32487@spearce.org","subject":"Re: [EGIT PATCH 1/2] Revert \"Fix commit id in egit test T0001_ConnectProviderOperationTest\"","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-12-17T22:28:06Z","receivedAt":"2008-12-17T22:28:06Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"onsdag 17 december 2008 17:09:33 skrev Shawn O. Pearce:\n> The only thing I can think of is the timestamp we are creating by\n> the deprecated Date constructor call back on line 82.  Perhaps\n> on different JVMs it is using different values for the hh:mm:ss\n> parts of the timestamp value?\n\nIndeed it is. Date is dependent on local time zone.\n\n>From e4d10dea5d62210868d71384e559a0d3ef1ca55d Mon Sep 17 00:00:00 2001\nFrom: Robin Rosenberg <robin.rosenberg@dewire.com>\nDate: Wed, 17 Dec 2008 22:46:48 +0100\nSubject: [EGIT PATCH 1/2 v2] Fix testcase that was sensitive to the local time zone.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../op/T0001_ConnectProviderOperationTest.java     |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java b/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\nindex 0ce2d7f..092c048 100644\n--- a/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\n+++ b/org.spearce.egit.core.test/src/org/spearce/egit/core/op/T0001_ConnectProviderOperationTest.java\n@@ -80,7 +80,7 @@ public void testNewUnsharedFile() throws CoreException, IOException,\n \t\tCommit commit = new Commit(thisGit);\n \t\tcommit.setTree(rootTree);\n \t\tcommit.setAuthor(new PersonIdent(\"J. Git\", \"j.git@egit.org\", new Date(\n-\t\t\t\t1999, 1, 1), TimeZone.getTimeZone(\"GMT+1\")));\n+\t\t\t\t60876075600000L), TimeZone.getTimeZone(\"GMT+1\")));\n \t\tcommit.setCommitter(commit.getAuthor());\n \t\tcommit.setMessage(\"testNewUnsharedFile\\n\\nJunit tests\\n\");\n \t\tObjectId id = writer.writeCommit(commit);\n-- \n1.6.0.3.640.g6331a\n"},{"id":"98194","messageId":"20081217223231.GJ32487@spearce.org","threadId":"16759","inReplyTo":"200812172328.07371.robin.rosenberg.lists@dewire.com","subject":"Re: [EGIT PATCH 1/2] Revert \"Fix commit id in egit test T0001_ConnectProviderOperationTest\"","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-12-17T22:32:31Z","receivedAt":"2008-12-17T22:32:31Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Robin Rosenberg <robin.rosenberg.lists@dewire.com> wrote:\n> onsdag 17 december 2008 17:09:33 skrev Shawn O. Pearce:\n> > The only thing I can think of is the timestamp we are creating by\n> > the deprecated Date constructor call back on line 82.  Perhaps\n> > on different JVMs it is using different values for the hh:mm:ss\n> > parts of the timestamp value?\n> \n> Indeed it is. Date is dependent on local time zone.\n\nThanks, much better.\n \n-- \nShawn.\n"},{"id":"98196","messageId":"1229553172-2038-1-git-send-email-robin.rosenberg@dewire.com","threadId":"16759","inReplyTo":"200812172328.07371.robin.rosenberg.lists@dewire.com","subject":"[EGIT PATCH] Committer, author and tagger time should not be parsed as 32 bit signed int","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@dewire.com","sentAt":"2008-12-17T22:32:52Z","receivedAt":"2008-12-17T22:32:52Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"If not dates past 2038 will be parsed the wrong way when\nparsed into a RevCommit or RevTag object.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../src/org/spearce/jgit/util/RawParseUtils.java   |   58 +++++++++++++++++++-\n 1 files changed, 56 insertions(+), 2 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java b/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java\nindex 55a3001..74fe506 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java\n@@ -135,7 +135,7 @@ public static int formatBase10(final byte[] b, int o, int value) {\n \t}\n \n \t/**\n-\t * Parse a base 10 numeric from a sequence of ASCII digits.\n+\t * Parse a base 10 numeric from a sequence of ASCII digits into an int.\n \t * <p>\n \t * Digit sequences can begin with an optional run of spaces before the\n \t * sequence, and may start with a '+' or a '-' to indicate sign position.\n@@ -189,6 +189,60 @@ public static final int parseBase10(final byte[] b, int ptr,\n \t}\n \n \t/**\n+\t * Parse a base 10 numeric from a sequence of ASCII digits into a long.\n+\t * <p>\n+\t * Digit sequences can begin with an optional run of spaces before the\n+\t * sequence, and may start with a '+' or a '-' to indicate sign position.\n+\t * Any other characters will cause the method to stop and return the current\n+\t * result to the caller.\n+\t * \n+\t * @param b\n+\t *            buffer to scan.\n+\t * @param ptr\n+\t *            position within buffer to start parsing digits at.\n+\t * @param ptrResult\n+\t *            optional location to return the new ptr value through. If null\n+\t *            the ptr value will be discarded.\n+\t * @return the value at this location; 0 if the location is not a valid\n+\t *         numeric.\n+\t */\n+\tpublic static final long parseLongBase10(final byte[] b, int ptr,\n+\t\t\tfinal MutableInteger ptrResult) {\n+\t\tlong r = 0;\n+\t\tint sign = 0;\n+\t\ttry {\n+\t\t\tfinal int sz = b.length;\n+\t\t\twhile (ptr < sz && b[ptr] == ' ')\n+\t\t\t\tptr++;\n+\t\t\tif (ptr >= sz)\n+\t\t\t\treturn 0;\n+\n+\t\t\tswitch (b[ptr]) {\n+\t\t\tcase '-':\n+\t\t\t\tsign = -1;\n+\t\t\t\tptr++;\n+\t\t\t\tbreak;\n+\t\t\tcase '+':\n+\t\t\t\tptr++;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\twhile (ptr < sz) {\n+\t\t\t\tfinal byte v = digits[b[ptr]];\n+\t\t\t\tif (v < 0)\n+\t\t\t\t\tbreak;\n+\t\t\t\tr = (r * 10) + v;\n+\t\t\t\tptr++;\n+\t\t\t}\n+\t\t} catch (ArrayIndexOutOfBoundsException e) {\n+\t\t\t// Not a valid digit.\n+\t\t}\n+\t\tif (ptrResult != null)\n+\t\t\tptrResult.value = ptr;\n+\t\treturn sign < 0 ? -r : r;\n+\t}\n+\n+\t/**\n \t * Parse a Git style timezone string.\n \t * <p>\n \t * The sequence \"-0315\" will be parsed as the numeric value -195, as the\n@@ -414,7 +468,7 @@ public static PersonIdent parsePersonIdent(final byte[] raw, final int nameB) {\n \t\tfinal String email = decode(cs, raw, emailB, emailE - 1);\n \n \t\tfinal MutableInteger ptrout = new MutableInteger();\n-\t\tfinal int when = parseBase10(raw, emailE + 1, ptrout);\n+\t\tfinal long when = parseLongBase10(raw, emailE + 1, ptrout);\n \t\tfinal int tz = parseTimeZoneOffset(raw, ptrout.value);\n \n \t\treturn new PersonIdent(name, email, when * 1000L, tz);\n-- \n1.6.0.3.640.g6331a\n"},{"id":"98198","messageId":"20081217224844.GK32487@spearce.org","threadId":"16759","inReplyTo":"1229553172-2038-1-git-send-email-robin.rosenberg@dewire.com","subject":"Re: [EGIT PATCH] Committer, author and tagger time should not be parsed as 32 bit signed int","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-12-17T22:48:44Z","receivedAt":"2008-12-17T22:48:44Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n> If not dates past 2038 will be parsed the wrong way when\n> parsed into a RevCommit or RevTag object.\n\nUhm, sure.\n\nBut there's also the commitTime field in RevCommit, its used to\nsort commits during walking.  In 2038 that will also overflow.\n\nAlso, if you search the code for '2038' you'll find a remark\nabout the year 2038 in DirCacheEntry.smudgeRacilyClean.  Last\nI looked at the git sources I think this field in the index is\ntreated as a signed time_t so we can't set the high bits and\nextend it out another 60+ years.\n\nHonestly, I'm not sure this patch is worth the code duplication\nwithout fixing our other two known 2038 problem spots... and\nI really don't want to make RevCommit.commitTime into a long,\nas that will bloat out the object allocations and slow down the\ncomparsion on 32 bit JVMs.  Right now at the end of 2008 the memory\nisn't as readily available and there's still a lot of 32 bit JVMs.\nAnother 10 years we'll probably be looking at 256 bit wide registers\nbeing very common, and 1 PB of core memory, and extending these\nfields out to a long will be trivial.  And we'll still have 20\nyears to make the transition.\n\nI'd rather just tag the fields with \"2038\" so we can search for\nthem in the future.  Like say this:\n\n--8<--\nMark the other two locations that break in the year 2038\n\nWhen the 32 bit timestamp rolls over in 2038 these spots in JGit\nwill break, unless we upgrade them to use a 64 bit long before then.\nFor now its too time and memory intensive to use a full long here,\nbut in another 10 years we should have enough computing power that\nthis is a moot point and we can upgrade the code paths marked with\nby 'git grep 2038'.\n\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n .../src/org/spearce/jgit/revwalk/RevCommit.java    |    2 ++\n .../src/org/spearce/jgit/util/RawParseUtils.java   |    2 ++\n 2 files changed, 4 insertions(+), 0 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\nindex 9d30018..bcfd8c4 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevCommit.java\n@@ -129,6 +129,8 @@ else if (nParents == 1) {\n \t\tptr = RawParseUtils.committer(raw, ptr);\n \t\tif (ptr > 0) {\n \t\t\tptr = RawParseUtils.nextLF(raw, ptr, '>');\n+\n+\t\t\t// In 2038 commitTime will overflow unless it is changed to long.\n \t\t\tcommitTime = RawParseUtils.parseBase10(raw, ptr, null);\n \t\t}\n \ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java b/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java\nindex 55a3001..c2d591b 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java\n@@ -414,6 +414,8 @@ public static PersonIdent parsePersonIdent(final byte[] raw, final int nameB) {\n \t\tfinal String email = decode(cs, raw, emailB, emailE - 1);\n \n \t\tfinal MutableInteger ptrout = new MutableInteger();\n+\n+\t\t// In 2038 \"when\" will overflow.  Switch to a long before then.\n \t\tfinal int when = parseBase10(raw, emailE + 1, ptrout);\n \t\tfinal int tz = parseTimeZoneOffset(raw, ptrout.value);\n \n-- \n1.6.1.rc3.302.gb14d9\n\n\n-- \nShawn.\n"},{"id":"98207","messageId":"200812180109.51987.robin.rosenberg.lists@dewire.com","threadId":"16759","inReplyTo":"20081217224844.GK32487@spearce.org","subject":"Re: [EGIT PATCH] Committer, author and tagger time should not be parsed as 32 bit signed int","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-12-18T00:09:51Z","receivedAt":"2008-12-18T00:09:51Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"onsdag 17 december 2008 23:48:44 skrev Shawn O. Pearce:\n> Robin Rosenberg <robin.rosenberg@dewire.com> wrote:\n> > If not dates past 2038 will be parsed the wrong way when\n> > parsed into a RevCommit or RevTag object.\n> \n> Uhm, sure.\n> \n> But there's also the commitTime field in RevCommit, its used to\n> sort commits during walking.  In 2038 that will also overflow.\n\nOk, but that's not used for display purposes, which what I saw. How\nhuge is the cost of a long here. Most processor handle longs\nwell today, though many megs of them will hurt the cache.\n\n> Also, if you search the code for '2038' you'll find a remark\n> about the year 2038 in DirCacheEntry.smudgeRacilyClean.  Last\n> I looked at the git sources I think this field in the index is\n> treated as a signed time_t so we can't set the high bits and\n> extend it out another 60+ years.\n\nThat is another time stamp. It is a file time stamp, which we\nnever store in the Git object database. The index can be revised over time since\nit is purely local structure. If it weren't for the need to operate\nwith C Git in the same repo we could have used a different format,\nand nobody would notice. (The first jgit versions used a different\nindex structure). \n\ntime_t is signed, but it is also 64 bit on 64-bit linux so it doesn't overflow in 2038.\n\n$ cev 'printf(\"sizeof time =%d\\n\",sizeof(time_t));'\nsizeof time =8\n\n> I'd rather just tag the fields with \"2038\" so we can search for\n> them in the future.  Like say this:\n\nThere should be a comment on the commitTime field too if we choose\nthat option.\n\n-- robin\n"}]}