##// END OF EJS Templates
Added full last changeset info to lightweight dashboard
marcink -
r3147:8182ebed beta
parent child Browse files
Show More
@@ -76,6 +76,13 b' class HomeController(BaseController):'
76 76 .render(repo_name, _=_, h=h, c=c))
77 77 atom_lnk = lambda repo_name: (template.get_def("atom")
78 78 .render(repo_name, _=_, h=h, c=c))
79 tip = lambda repo_name, cs_cache: (template.get_def("revision")
80 .render(repo_name,
81 cs_cache.get('revision'),
82 cs_cache.get('raw_id'),
83 cs_cache.get('author'),
84 cs_cache.get('message'), _=_, h=h,
85 c=c))
79 86
80 87 def desc(desc):
81 88 if c.visual.stylify_metatags:
@@ -90,6 +97,7 b' class HomeController(BaseController):'
90 97 "name": repo_lnk(repo.repo_name, repo.repo_type,
91 98 repo.private, repo.fork),
92 99 "last_change": last_change(repo.last_db_change),
100 "tip": tip(repo.repo_name, repo.changeset_cache),
93 101 "desc": desc(repo.description),
94 102 "owner": h.person(repo.user.username),
95 103 "rss": rss_lnk(repo.repo_name),
@@ -319,7 +319,7 b' class BaseRepoController(BaseController)'
319 319 dbr = c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
320 320 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
321 321 # update last change according to VCS data
322 dbr.update_last_change(c.rhodecode_repo.last_change)
322 dbr.update_changeset_cache(dbr.get_changeset())
323 323 if c.rhodecode_repo is None:
324 324 log.error('%s this repository is present in database but it '
325 325 'cannot be created as an scm instance', c.repo_name)
@@ -28,6 +28,23 b' def upgrade(migrate_engine):'
28 28 tbl = UserIpMap.__table__
29 29 tbl.create()
30 30
31 #==========================================================================
32 # REPOSITORIES
33 #==========================================================================
34 from rhodecode.lib.dbmigrate.schema.db_1_5_0 import Repository
35 tbl = Repository.__table__
36 changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True)
37 # create username column
38 changeset_cache.create(table=tbl)
39
40 #fix cache data
41 _Session = Session()
42 ## after adding that column fix all usernames
43 repositories = _Session.query(Repository).all()
44 for entry in repositories:
45 entry.update_changeset_cache()
46 _Session.commit()
47
31 48
32 49 def downgrade(migrate_engine):
33 50 meta = MetaData()
@@ -34,6 +34,7 b' from os.path import dirname as dn, join '
34 34 from rhodecode.model import init_model
35 35 from rhodecode.lib.utils2 import engine_from_config, safe_str
36 36 from rhodecode.model.db import RhodeCodeUi, Repository
37 from rhodecode.lib.vcs.backends.base import EmptyChangeset
37 38
38 39
39 40 #to get the rhodecode import
@@ -73,9 +74,9 b' class UpdateCommand(BasePasterCommand):'
73 74 else:
74 75 repo_list = Repository.getAll()
75 76 for repo in repo_list:
76 last_change = (repo.scm_instance.last_change if repo.scm_instance
77 else datetime.datetime.utcfromtimestamp(0))
78 repo.update_last_change(last_change)
77 last_cs = (repo.scm_instance.get_changeset() if repo.scm_instance
78 else EmptyChangeset())
79 repo.update_changeset_cache(last_cs)
79 80
80 81 def update_parser(self):
81 82 self.parser.add_option('--update-only',
@@ -455,6 +455,7 b' def repo2db_mapper(initial_repo_list, re'
455 455 # installed
456 456 if new_repo.repo_type == 'git':
457 457 ScmModel().install_git_hook(new_repo.scm_instance)
458 new_repo.update_changeset_cache()
458 459 elif install_git_hook:
459 460 if db_repo.repo_type == 'git':
460 461 ScmModel().install_git_hook(db_repo.scm_instance)
@@ -376,6 +376,7 b' class BaseChangeset(object):'
376 376 return dict(
377 377 short_id=self.short_id,
378 378 raw_id=self.raw_id,
379 revision=self.revision,
379 380 message=self.message,
380 381 date=self.date,
381 382 author=self.author,
@@ -671,7 +671,7 b' class Repository(Base, BaseModel):'
671 671 landing_rev = Column("landing_revision", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
672 672 enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
673 673 _locked = Column("locked", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
674 #changeset_cache = Column("changeset_cache", LargeBinary(), nullable=False) #JSON data
674 _changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) #JSON data
675 675
676 676 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
677 677 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
@@ -717,6 +717,24 b' class Repository(Base, BaseModel):'
717 717 else:
718 718 self._locked = None
719 719
720 @hybrid_property
721 def changeset_cache(self):
722 from rhodecode.lib.vcs.backends.base import EmptyChangeset
723 dummy = EmptyChangeset().__json__()
724 if not self._changeset_cache:
725 return dummy
726 try:
727 return json.loads(self._changeset_cache)
728 except TypeError:
729 return dummy
730
731 @changeset_cache.setter
732 def changeset_cache(self, val):
733 try:
734 self._changeset_cache = json.dumps(val)
735 except:
736 log.error(traceback.format_exc())
737
720 738 @classmethod
721 739 def url_sep(cls):
722 740 return URL_SEP
@@ -914,12 +932,30 b' class Repository(Base, BaseModel):'
914 932 cs = self.get_changeset(self.landing_rev) or self.get_changeset()
915 933 return cs
916 934
917 def update_last_change(self, last_change=None):
918 if last_change is None:
919 last_change = datetime.datetime.now()
920 if self.updated_on is None or self.updated_on != last_change:
921 log.debug('updated repo %s with new date %s' % (self, last_change))
935 def update_changeset_cache(self, cs_cache=None):
936 """
937 Update cache of last changeset for repository, keys should be::
938
939 short_id
940 raw_id
941 revision
942 message
943 date
944 author
945
946 :param cs_cache:
947 """
948 from rhodecode.lib.vcs.backends.base import BaseChangeset
949 if cs_cache is None:
950 cs_cache = self.get_changeset()
951 if isinstance(cs_cache, BaseChangeset):
952 cs_cache = cs_cache.__json__()
953
954 if cs_cache != self.changeset_cache:
955 last_change = cs_cache.get('date') or self.last_change
956 log.debug('updated repo %s with new cs cache %s' % (self, cs_cache))
922 957 self.updated_on = last_change
958 self.changeset_cache = cs_cache
923 959 Session().add(self)
924 960 Session().commit()
925 961
@@ -233,6 +233,7 b''
233 233 {key:"name"},
234 234 {key:"desc"},
235 235 {key:"last_change"},
236 {key: "tip"},
236 237 {key:"owner"},
237 238 {key:"rss"},
238 239 {key:"atom"},
@@ -266,6 +267,8 b''
266 267 {key:"desc",label:"${_('Description')}",sortable:true},
267 268 {key:"last_change",label:"${_('Last Change')}",sortable:true,
268 269 sortOptions: { sortFunction: ageSort }},
270 {key:"tip",label:"${_('Tip')}",sortable:true,
271 sortOptions: { sortFunction: revisionSort }},
269 272 {key:"owner",label:"${_('Owner')}",sortable:true},
270 273 {key:"rss",label:"",sortable:false},
271 274 {key:"atom",label:"",sortable:false},
@@ -11,8 +11,8 b' verbosity=2'
11 11 with-pylons=test.ini
12 12 detailed-errors=1
13 13 nologcapture=1
14 #pdb=1
15 #pdb-failures=1
14 pdb=1
15 pdb-failures=1
16 16
17 17 # Babel configuration
18 18 [compile_catalog]
General Comments 0
You need to be logged in to leave comments. Login now