changeset 13:3d578fbfeb66

added history
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 15 May 2011 14:18:04 +0200
parents a51909f8032d
children 8f53ae3e6696
files hgstorage.py test_repo.py
diffstat 2 files changed, 43 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/hgstorage.py	Sat May 14 13:25:57 2011 +0200
+++ b/hgstorage.py	Sun May 15 14:18:04 2011 +0200
@@ -210,6 +210,13 @@
         self.storage.repo.commitctx(ctx)
         self._update()
 
+    @staticmethod
+    def _get_meta(ctx):
+        date = datetime.datetime.fromtimestamp(ctx.date()[0])
+        user = unicode(ctx.user(), "utf8", 'replace').split('<')[0].strip()
+        message = unicode(ctx.description(), 'utf8', 'replace')
+        return date, user, message
+
     def load(self, key, rev=None, encoding=None):
         """Load the content of an item."""
 
@@ -225,7 +232,19 @@
         filectx = self._filectx(key, rev)
         if rev is None:
             rev = filectx.filerev()
-        date = datetime.datetime.fromtimestamp(filectx.date()[0])
-        user = unicode(filectx.user(), "utf8", 'replace').split('<')[0].strip()
-        message = unicode(filectx.description(), 'utf8', 'replace')
-        return rev, date, user, message
+        return (rev,) + self._get_meta(filectx)
+
+    def history(self, maxrev=None, minrev=None):
+        """Iterate over changes history."""
+
+        maxrev = maxrev or self.tip.rev()
+        minrev = minrev or 0
+        for rev in range(maxrev, minrev - 1, -1):
+            change = self.storage.repo.changectx(rev)
+            for filename in change.files():
+                try:
+                    file_rev = change[filename].filerev()
+                except mercurial.revlog.LookupError:
+                    file_rev = -1
+                key = self.storage._file_to_key(filename)
+                yield key, (file_rev,) + self._get_meta(change)
--- a/test_repo.py	Sat May 14 13:25:57 2011 +0200
+++ b/test_repo.py	Sun May 15 14:18:04 2011 +0200
@@ -123,3 +123,23 @@
         items = sorted(s)
         assert ['title', 'title1', 'title2'] == items
 
+
+    def test_history(self, storage):
+        s = storage.session()
+        s.save('title', 'text1', 'user1', 'message1', -1)
+        s.save('title1', 'text2', 'user2', 'message2', -1)
+        s.save('title2', 'text3', 'user3', 'message3', -1)
+        s.save('title', 'text4', 'user4', 'message4', 0)
+        history = list(s.history())
+        assert u'title' == history[0][0]
+        assert u'title2' == history[1][0]
+        assert u'title1' == history[2][0]
+        assert u'title' == history[3][0]
+        assert u'user4' == history[0][1][2]
+        assert u'user3' == history[1][1][2]
+        assert u'user2' == history[2][1][2]
+        assert u'user1' == history[3][1][2]
+        assert u'message4' == history[0][1][3]
+        assert u'message3' == history[1][1][3]
+        assert u'message2' == history[2][1][3]
+        assert u'message1' == history[3][1][3]