changeset 2902:e2b2791d1e7c beta

fixed #597 commits in future get negative age.
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 08 Oct 2012 23:28:38 +0200
parents f4c09b57a070
children 9c778306eb73
files docs/changelog.rst rhodecode/lib/utils2.py rhodecode/tests/test_libs.py
diffstat 3 files changed, 33 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/docs/changelog.rst	Mon Oct 08 23:08:46 2012 +0200
+++ b/docs/changelog.rst	Mon Oct 08 23:28:38 2012 +0200
@@ -33,6 +33,7 @@
   status. Checks now are made also for the repository.
 - fixes #591 git backend was causing encoding errors when handling binary
   files - added a test case for VCS lib tests
+- fixed #597 commits in future get negative age.
 
 1.4.3 (**2012-09-28**)
 ----------------------
--- a/rhodecode/lib/utils2.py	Mon Oct 08 23:08:46 2012 +0200
+++ b/rhodecode/lib/utils2.py	Mon Oct 08 23:28:38 2012 +0200
@@ -314,9 +314,14 @@
 
     order = ['year', 'month', 'day', 'hour', 'minute', 'second']
     deltas = {}
+    future = False
 
     # Get date parts deltas
     now = datetime.datetime.now()
+    if prevdate > now:
+        now, prevdate = prevdate, now
+        future = True
+
     for part in order:
         deltas[part] = getattr(now, part) - getattr(prevdate, part)
 
@@ -369,10 +374,16 @@
             sub_value = 0
 
         if sub_value == 0:
-            return _(u'%s ago') % fmt_funcs[part](value)
-
-        return _(u'%s and %s ago') % (fmt_funcs[part](value),
-            fmt_funcs[sub_part](sub_value))
+            if future:
+                return _(u'in %s') % fmt_funcs[part](value)
+            else:
+                return _(u'%s ago') % fmt_funcs[part](value)
+        if future:
+            return _(u'in %s and %s') % (fmt_funcs[part](value),
+                fmt_funcs[sub_part](sub_value))
+        else:
+            return _(u'%s and %s ago') % (fmt_funcs[part](value),
+                fmt_funcs[sub_part](sub_value))
 
     return _(u'just now')
 
@@ -504,4 +515,4 @@
     url = url.make_url(engine)
     if url.password:
         url.password = 'XXXXX'
-    return str(url)
\ No newline at end of file
+    return str(url)
--- a/rhodecode/tests/test_libs.py	Mon Oct 08 23:08:46 2012 +0200
+++ b/rhodecode/tests/test_libs.py	Mon Oct 08 23:28:38 2012 +0200
@@ -129,10 +129,25 @@
         self.assertEqual(age(n - delt(hours=1)), u'1 hour ago')
         self.assertEqual(age(n - delt(hours=24)), u'1 day ago')
         self.assertEqual(age(n - delt(hours=24 * 5)), u'5 days ago')
-        self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[n.month-1] + 2))),
+        self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[n.month - 1] + 2))),
                          u'1 month and 2 days ago')
         self.assertEqual(age(n - delt(hours=24 * 400)), u'1 year and 1 month ago')
 
+    def test_age_in_future(self):
+        import calendar
+        from rhodecode.lib.utils2 import age
+        n = datetime.datetime.now()
+        delt = lambda *args, **kwargs: datetime.timedelta(*args, **kwargs)
+        self.assertEqual(age(n), u'just now')
+        self.assertEqual(age(n + delt(seconds=1)), u'in 1 second')
+        self.assertEqual(age(n + delt(seconds=60 * 2)), u'in 2 minutes')
+        self.assertEqual(age(n + delt(hours=1)), u'in 1 hour')
+        self.assertEqual(age(n + delt(hours=24)), u'in 1 day')
+        self.assertEqual(age(n + delt(hours=24 * 5)), u'in 5 days')
+        self.assertEqual(age(n + delt(hours=24 * (calendar.mdays[n.month - 1] + 2))),
+                         u'in 1 month and 1 days')
+        self.assertEqual(age(n + delt(hours=24 * 400)), u'in 1 year and 1 month')
+
     def test_tag_exctrator(self):
         sample = (
             "hello pta[tag] gog [[]] [[] sda ero[or]d [me =>>< sa]"