changeset 237:c90cfa665b81

Cope with date-less revisions.
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Wed, 08 Apr 2009 13:07:23 +0200
parents c34abd2448b7
children e8b3ca865f93
files fetch_command.py hg_delta_editor.py tests/fixtures/test_no_dates.svndump tests/test_fetch_command.py
diffstat 4 files changed, 153 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/fetch_command.py
+++ b/fetch_command.py
@@ -586,8 +586,8 @@ def stupid_svn_server_pull_rev(ui, svn, 
                         break
                 if not is_closed:
                     deleted_branches[branch] = branchtip
-    date = r.date.replace('T', ' ').replace('Z', '').split('.')[0]
-    date += ' -0000'
+
+    date = hg_editor.fixdate(r.date)
     check_deleted_branches = set()
     for b in branches:
         parentctx = hg_editor.repo[hg_editor.get_parent_revision(r.revnum, b)]
--- a/hg_delta_editor.py
+++ b/hg_delta_editor.py
@@ -129,11 +129,22 @@ class HgChangeReceiver(delta.Editor):
             self.readauthors(authors)
         if self.authors:
             self.writeauthors()
+
+        self.lastdate = '1970-01-01 00:00:00'
         self.includepaths = {}
         self.excludepaths = {}
         if filemap and os.path.exists(filemap):
             self.readfilemap(filemap)
 
+    def fixdate(self, date):
+        if date is not None:
+            date = date.replace('T', ' ').replace('Z', '').split('.')[0]
+            date += ' -0000'
+            self.lastdate = date
+        else:
+            date = self.lastdate
+        return date
+
     def __setup_repo(self, repo_path):
         """Verify the repo is going to work out for us.
 
@@ -573,8 +584,7 @@ class HgChangeReceiver(delta.Editor):
         files_to_commit.sort()
         branch_batches = {}
         rev = self.current_rev
-        date = rev.date.replace('T', ' ').replace('Z', '').split('.')[0]
-        date += ' -0000'
+        date = self.fixdate(rev.date)
 
         # build up the branches that have files on them
         for f in files_to_commit:
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/test_no_dates.svndump
@@ -0,0 +1,133 @@
+SVN-fs-dump-format-version: 2
+
+UUID: 3b9ee152-ff20-493a-9d97-5d739715df90
+
+Revision-number: 0
+Prop-content-length: 56
+Content-length: 56
+
+K 8
+svn:date
+V 27
+2009-04-08T10:33:20.055686Z
+PROPS-END
+
+Revision-number: 1
+Prop-content-length: 55
+Content-length: 55
+
+K 7
+svn:log
+V 4
+init
+K 10
+svn:author
+V 3
+djc
+PROPS-END
+
+Node-path: branches
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: tags
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: trunk
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Revision-number: 2
+Prop-content-length: 56
+Content-length: 56
+
+K 7
+svn:log
+V 5
+add a
+K 10
+svn:author
+V 3
+djc
+PROPS-END
+
+Node-path: trunk/a
+Node-kind: file
+Node-action: add
+Prop-content-length: 10
+Text-content-length: 2
+Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3
+Content-length: 12
+
+PROPS-END
+a
+
+
+Revision-number: 3
+Prop-content-length: 98
+Content-length: 98
+
+K 7
+svn:log
+V 1
+b
+K 10
+svn:author
+V 3
+djc
+K 8
+svn:date
+V 27
+2009-04-08T10:35:21.843827Z
+PROPS-END
+
+Node-path: trunk/a
+Node-kind: file
+Node-action: change
+Text-content-length: 3
+Text-content-md5: daa8075d6ac5ff8d0c6d4650adb4ef29
+Content-length: 3
+
+ab
+
+
+Revision-number: 4
+Prop-content-length: 52
+Content-length: 52
+
+K 7
+svn:log
+V 1
+c
+K 10
+svn:author
+V 3
+djc
+PROPS-END
+
+Node-path: trunk/a
+Node-kind: file
+Node-action: change
+Text-content-length: 4
+Text-content-md5: 0bee89b07a248e27c83fc3d5951213c1
+Content-length: 4
+
+abc
+
+
--- a/tests/test_fetch_command.py
+++ b/tests/test_fetch_command.py
@@ -8,6 +8,12 @@ import test_util
 
 
 class TestBasicRepoLayout(test_util.TestBase):
+
+    def test_no_dates(self):
+        repo = self._load_fixture_and_fetch('test_no_dates.svndump')
+        self.assertEqual(repo[0].date(), (-3600.0, -3600))
+        self.assertEqual(repo[1].date(), repo[2].date())
+
     def test_fresh_fetch_single_rev(self):
         repo = self._load_fixture_and_fetch('single_rev.svndump')
         self.assertEqual(node.hex(repo['tip'].node()),