Mercurial > kallithea
changeset 3147:8182ebed2922 beta
Added full last changeset info to lightweight dashboard
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 05 Jan 2013 01:58:29 +0100 |
parents | c5169e445fb8 |
children | b31984972e95 |
files | rhodecode/controllers/home.py rhodecode/lib/base.py rhodecode/lib/dbmigrate/versions/010_version_1_5_2.py rhodecode/lib/update_repoinfo.py rhodecode/lib/utils.py rhodecode/lib/vcs/backends/base.py rhodecode/model/db.py rhodecode/templates/index_base.html setup.cfg |
diffstat | 9 files changed, 79 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/home.py Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/controllers/home.py Sat Jan 05 01:58:29 2013 +0100 @@ -76,6 +76,13 @@ .render(repo_name, _=_, h=h, c=c)) atom_lnk = lambda repo_name: (template.get_def("atom") .render(repo_name, _=_, h=h, c=c)) + tip = lambda repo_name, cs_cache: (template.get_def("revision") + .render(repo_name, + cs_cache.get('revision'), + cs_cache.get('raw_id'), + cs_cache.get('author'), + cs_cache.get('message'), _=_, h=h, + c=c)) def desc(desc): if c.visual.stylify_metatags: @@ -90,6 +97,7 @@ "name": repo_lnk(repo.repo_name, repo.repo_type, repo.private, repo.fork), "last_change": last_change(repo.last_db_change), + "tip": tip(repo.repo_name, repo.changeset_cache), "desc": desc(repo.description), "owner": h.person(repo.user.username), "rss": rss_lnk(repo.repo_name),
--- a/rhodecode/lib/base.py Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/lib/base.py Sat Jan 05 01:58:29 2013 +0100 @@ -319,7 +319,7 @@ dbr = c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name) c.rhodecode_repo = c.rhodecode_db_repo.scm_instance # update last change according to VCS data - dbr.update_last_change(c.rhodecode_repo.last_change) + dbr.update_changeset_cache(dbr.get_changeset()) if c.rhodecode_repo is None: log.error('%s this repository is present in database but it ' 'cannot be created as an scm instance', c.repo_name)
--- a/rhodecode/lib/dbmigrate/versions/010_version_1_5_2.py Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/lib/dbmigrate/versions/010_version_1_5_2.py Sat Jan 05 01:58:29 2013 +0100 @@ -28,6 +28,23 @@ tbl = UserIpMap.__table__ tbl.create() + #========================================================================== + # REPOSITORIES + #========================================================================== + from rhodecode.lib.dbmigrate.schema.db_1_5_0 import Repository + tbl = Repository.__table__ + changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) + # create username column + changeset_cache.create(table=tbl) + + #fix cache data + _Session = Session() + ## after adding that column fix all usernames + repositories = _Session.query(Repository).all() + for entry in repositories: + entry.update_changeset_cache() + _Session.commit() + def downgrade(migrate_engine): meta = MetaData()
--- a/rhodecode/lib/update_repoinfo.py Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/lib/update_repoinfo.py Sat Jan 05 01:58:29 2013 +0100 @@ -34,6 +34,7 @@ from rhodecode.model import init_model from rhodecode.lib.utils2 import engine_from_config, safe_str from rhodecode.model.db import RhodeCodeUi, Repository +from rhodecode.lib.vcs.backends.base import EmptyChangeset #to get the rhodecode import @@ -73,9 +74,9 @@ else: repo_list = Repository.getAll() for repo in repo_list: - last_change = (repo.scm_instance.last_change if repo.scm_instance - else datetime.datetime.utcfromtimestamp(0)) - repo.update_last_change(last_change) + last_cs = (repo.scm_instance.get_changeset() if repo.scm_instance + else EmptyChangeset()) + repo.update_changeset_cache(last_cs) def update_parser(self): self.parser.add_option('--update-only',
--- a/rhodecode/lib/utils.py Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/lib/utils.py Sat Jan 05 01:58:29 2013 +0100 @@ -455,6 +455,7 @@ # installed if new_repo.repo_type == 'git': ScmModel().install_git_hook(new_repo.scm_instance) + new_repo.update_changeset_cache() elif install_git_hook: if db_repo.repo_type == 'git': ScmModel().install_git_hook(db_repo.scm_instance)
--- a/rhodecode/lib/vcs/backends/base.py Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/lib/vcs/backends/base.py Sat Jan 05 01:58:29 2013 +0100 @@ -376,6 +376,7 @@ return dict( short_id=self.short_id, raw_id=self.raw_id, + revision=self.revision, message=self.message, date=self.date, author=self.author,
--- a/rhodecode/model/db.py Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/model/db.py Sat Jan 05 01:58:29 2013 +0100 @@ -671,7 +671,7 @@ landing_rev = Column("landing_revision", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None) enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False) _locked = Column("locked", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) - #changeset_cache = Column("changeset_cache", LargeBinary(), nullable=False) #JSON data + _changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) #JSON data fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None) group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None) @@ -717,6 +717,24 @@ else: self._locked = None + @hybrid_property + def changeset_cache(self): + from rhodecode.lib.vcs.backends.base import EmptyChangeset + dummy = EmptyChangeset().__json__() + if not self._changeset_cache: + return dummy + try: + return json.loads(self._changeset_cache) + except TypeError: + return dummy + + @changeset_cache.setter + def changeset_cache(self, val): + try: + self._changeset_cache = json.dumps(val) + except: + log.error(traceback.format_exc()) + @classmethod def url_sep(cls): return URL_SEP @@ -914,12 +932,30 @@ cs = self.get_changeset(self.landing_rev) or self.get_changeset() return cs - def update_last_change(self, last_change=None): - if last_change is None: - last_change = datetime.datetime.now() - if self.updated_on is None or self.updated_on != last_change: - log.debug('updated repo %s with new date %s' % (self, last_change)) + def update_changeset_cache(self, cs_cache=None): + """ + Update cache of last changeset for repository, keys should be:: + + short_id + raw_id + revision + message + date + author + + :param cs_cache: + """ + from rhodecode.lib.vcs.backends.base import BaseChangeset + if cs_cache is None: + cs_cache = self.get_changeset() + if isinstance(cs_cache, BaseChangeset): + cs_cache = cs_cache.__json__() + + if cs_cache != self.changeset_cache: + last_change = cs_cache.get('date') or self.last_change + log.debug('updated repo %s with new cs cache %s' % (self, cs_cache)) self.updated_on = last_change + self.changeset_cache = cs_cache Session().add(self) Session().commit()
--- a/rhodecode/templates/index_base.html Fri Jan 04 23:34:53 2013 +0100 +++ b/rhodecode/templates/index_base.html Sat Jan 05 01:58:29 2013 +0100 @@ -233,6 +233,7 @@ {key:"name"}, {key:"desc"}, {key:"last_change"}, + {key: "tip"}, {key:"owner"}, {key:"rss"}, {key:"atom"}, @@ -266,6 +267,8 @@ {key:"desc",label:"${_('Description')}",sortable:true}, {key:"last_change",label:"${_('Last Change')}",sortable:true, sortOptions: { sortFunction: ageSort }}, + {key:"tip",label:"${_('Tip')}",sortable:true, + sortOptions: { sortFunction: revisionSort }}, {key:"owner",label:"${_('Owner')}",sortable:true}, {key:"rss",label:"",sortable:false}, {key:"atom",label:"",sortable:false},