changeset 1466:ad5a543a9b2f beta

Code cleanup - extended repository models with scm functions - moved get_changeset_safe function to lib
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 12 Sep 2011 02:42:06 +0300
parents ef31d0c6bae9
children da60cdb41969 aaec08ad9daf
files rhodecode/lib/__init__.py rhodecode/lib/helpers.py rhodecode/lib/utils.py rhodecode/model/db.py
diffstat 4 files changed, 49 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/__init__.py	Mon Sep 12 02:24:52 2011 +0300
+++ b/rhodecode/lib/__init__.py	Mon Sep 12 02:42:06 2011 +0300
@@ -140,7 +140,7 @@
 
 def generate_api_key(username, salt=None):
     """
-    Generates unique API key for given username,if salt is not given
+    Generates unique API key for given username, if salt is not given
     it'll be generated from some random string
 
     :param username: username as string
@@ -342,3 +342,23 @@
 
     return ''.join(uri)
 
+def get_changeset_safe(repo, rev):
+    """
+    Safe version of get_changeset if this changeset doesn't exists for a 
+    repo it returns a Dummy one instead
+    
+    :param repo:
+    :param rev:
+    """
+    from vcs.backends.base import BaseRepository
+    from vcs.exceptions import RepositoryError
+    if not isinstance(repo, BaseRepository):
+        raise Exception('You must pass an Repository '
+                        'object as first argument got %s', type(repo))
+
+    try:
+        cs = repo.get_changeset(rev)
+    except RepositoryError:
+        from rhodecode.lib.utils import EmptyChangeset
+        cs = EmptyChangeset(requested_revision=rev)
+    return cs
\ No newline at end of file
--- a/rhodecode/lib/helpers.py	Mon Sep 12 02:24:52 2011 +0300
+++ b/rhodecode/lib/helpers.py	Mon Sep 12 02:42:06 2011 +0300
@@ -37,7 +37,7 @@
 
 from vcs.utils.annotate import annotate_highlight
 from rhodecode.lib.utils import repo_name_slug
-from rhodecode.lib import str2bool, safe_unicode, safe_str
+from rhodecode.lib import str2bool, safe_unicode, safe_str,get_changeset_safe
 
 def _reset(name, value=None, id=NotGiven, type="reset", **attrs):
     """
@@ -275,21 +275,6 @@
 
     return literal(annotate_highlight(filenode, url_func(repo_name), **kwargs))
 
-def get_changeset_safe(repo, rev):
-    from vcs.backends.base import BaseRepository
-    from vcs.exceptions import RepositoryError
-    if not isinstance(repo, BaseRepository):
-        raise Exception('You must pass an Repository '
-                        'object as first argument got %s', type(repo))
-
-    try:
-        cs = repo.get_changeset(rev)
-    except RepositoryError:
-        from rhodecode.lib.utils import EmptyChangeset
-        cs = EmptyChangeset()
-    return cs
-
-
 def is_following_repo(repo_name, user_id):
     from rhodecode.model.scm import ScmModel
     return ScmModel().is_following_repo(repo_name, user_id)
--- a/rhodecode/lib/utils.py	Mon Sep 12 02:24:52 2011 +0300
+++ b/rhodecode/lib/utils.py	Mon Sep 12 02:42:06 2011 +0300
@@ -313,14 +313,15 @@
     an EmptyChangeset
     """
 
-    def __init__(self, cs='0' * 40, repo=None):
+    def __init__(self, cs='0' * 40, repo=None,requested_revision=None):
         self._empty_cs = cs
         self.revision = -1
         self.message = ''
         self.author = ''
         self.date = ''
         self.repository = repo
-
+        self.requested_revision = requested_revision
+        
     @LazyProperty
     def raw_id(self):
         """Returns raw string identifying this changeset, useful for web
--- a/rhodecode/model/db.py	Mon Sep 12 02:24:52 2011 +0300
+++ b/rhodecode/model/db.py	Mon Sep 12 02:42:06 2011 +0300
@@ -43,7 +43,7 @@
 from vcs.nodes import FileNode
 
 from rhodecode.lib.exceptions import UsersGroupsAssignedException
-from rhodecode.lib import str2bool, json, safe_str
+from rhodecode.lib import str2bool, json, safe_str, get_changeset_safe
 from rhodecode.model.meta import Base, Session
 from rhodecode.model.caching_query import FromCache
 
@@ -125,13 +125,13 @@
     @classmethod
     def get(cls, id_):
         return Session.query(cls).get(id_)
-    
+
     @classmethod
     def delete(cls, id_):
         obj = Session.query(cls).get(id_)
         Session.delete(obj)
         Session.commit()
-        
+
 
 class RhodeCodeSettings(Base, BaseModel):
     __tablename__ = 'rhodecode_settings'
@@ -538,8 +538,7 @@
 
 
         ret = Session.query(RhodeCodeUi)\
-            .options(FromCache("sql_cache_short",
-                               "repository_repo_ui")).all()
+            .options(FromCache("sql_cache_short", "repository_repo_ui")).all()
 
         hg_ui = ret
         for ui_ in hg_ui:
@@ -551,6 +550,25 @@
         return baseui
 
     #==========================================================================
+    # SCM PROPERTIES
+    #==========================================================================
+
+    def get_changeset(self, rev):
+        return get_changeset_safe(self.scm_instance, rev)
+
+    @property
+    def tip(self):
+        return self.get_changeset('tip')
+
+    @property
+    def author(self):
+        return self.tip.author
+
+    @property
+    def last_change(self):
+        return self.scm_instance.last_change
+
+    #==========================================================================
     # SCM CACHE INSTANCE
     #==========================================================================
 
@@ -580,7 +598,7 @@
         Session.add(inv)
         Session.commit()
 
-    @property
+    @LazyProperty
     def scm_instance(self):
         return self.__get_instance()