##// 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 .render(repo_name, _=_, h=h, c=c))
76 .render(repo_name, _=_, h=h, c=c))
77 atom_lnk = lambda repo_name: (template.get_def("atom")
77 atom_lnk = lambda repo_name: (template.get_def("atom")
78 .render(repo_name, _=_, h=h, c=c))
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 def desc(desc):
87 def desc(desc):
81 if c.visual.stylify_metatags:
88 if c.visual.stylify_metatags:
@@ -90,6 +97,7 b' class HomeController(BaseController):'
90 "name": repo_lnk(repo.repo_name, repo.repo_type,
97 "name": repo_lnk(repo.repo_name, repo.repo_type,
91 repo.private, repo.fork),
98 repo.private, repo.fork),
92 "last_change": last_change(repo.last_db_change),
99 "last_change": last_change(repo.last_db_change),
100 "tip": tip(repo.repo_name, repo.changeset_cache),
93 "desc": desc(repo.description),
101 "desc": desc(repo.description),
94 "owner": h.person(repo.user.username),
102 "owner": h.person(repo.user.username),
95 "rss": rss_lnk(repo.repo_name),
103 "rss": rss_lnk(repo.repo_name),
@@ -319,7 +319,7 b' class BaseRepoController(BaseController)'
319 dbr = c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
319 dbr = c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
320 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
320 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
321 # update last change according to VCS data
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 if c.rhodecode_repo is None:
323 if c.rhodecode_repo is None:
324 log.error('%s this repository is present in database but it '
324 log.error('%s this repository is present in database but it '
325 'cannot be created as an scm instance', c.repo_name)
325 'cannot be created as an scm instance', c.repo_name)
@@ -28,6 +28,23 b' def upgrade(migrate_engine):'
28 tbl = UserIpMap.__table__
28 tbl = UserIpMap.__table__
29 tbl.create()
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 def downgrade(migrate_engine):
49 def downgrade(migrate_engine):
33 meta = MetaData()
50 meta = MetaData()
@@ -34,6 +34,7 b' from os.path import dirname as dn, join '
34 from rhodecode.model import init_model
34 from rhodecode.model import init_model
35 from rhodecode.lib.utils2 import engine_from_config, safe_str
35 from rhodecode.lib.utils2 import engine_from_config, safe_str
36 from rhodecode.model.db import RhodeCodeUi, Repository
36 from rhodecode.model.db import RhodeCodeUi, Repository
37 from rhodecode.lib.vcs.backends.base import EmptyChangeset
37
38
38
39
39 #to get the rhodecode import
40 #to get the rhodecode import
@@ -73,9 +74,9 b' class UpdateCommand(BasePasterCommand):'
73 else:
74 else:
74 repo_list = Repository.getAll()
75 repo_list = Repository.getAll()
75 for repo in repo_list:
76 for repo in repo_list:
76 last_change = (repo.scm_instance.last_change if repo.scm_instance
77 last_cs = (repo.scm_instance.get_changeset() if repo.scm_instance
77 else datetime.datetime.utcfromtimestamp(0))
78 else EmptyChangeset())
78 repo.update_last_change(last_change)
79 repo.update_changeset_cache(last_cs)
79
80
80 def update_parser(self):
81 def update_parser(self):
81 self.parser.add_option('--update-only',
82 self.parser.add_option('--update-only',
@@ -455,6 +455,7 b' def repo2db_mapper(initial_repo_list, re'
455 # installed
455 # installed
456 if new_repo.repo_type == 'git':
456 if new_repo.repo_type == 'git':
457 ScmModel().install_git_hook(new_repo.scm_instance)
457 ScmModel().install_git_hook(new_repo.scm_instance)
458 new_repo.update_changeset_cache()
458 elif install_git_hook:
459 elif install_git_hook:
459 if db_repo.repo_type == 'git':
460 if db_repo.repo_type == 'git':
460 ScmModel().install_git_hook(db_repo.scm_instance)
461 ScmModel().install_git_hook(db_repo.scm_instance)
@@ -376,6 +376,7 b' class BaseChangeset(object):'
376 return dict(
376 return dict(
377 short_id=self.short_id,
377 short_id=self.short_id,
378 raw_id=self.raw_id,
378 raw_id=self.raw_id,
379 revision=self.revision,
379 message=self.message,
380 message=self.message,
380 date=self.date,
381 date=self.date,
381 author=self.author,
382 author=self.author,
@@ -671,7 +671,7 b' class Repository(Base, BaseModel):'
671 landing_rev = Column("landing_revision", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
671 landing_rev = Column("landing_revision", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
672 enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
672 enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
673 _locked = Column("locked", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
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 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
676 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
677 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
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 else:
717 else:
718 self._locked = None
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 @classmethod
738 @classmethod
721 def url_sep(cls):
739 def url_sep(cls):
722 return URL_SEP
740 return URL_SEP
@@ -914,12 +932,30 b' class Repository(Base, BaseModel):'
914 cs = self.get_changeset(self.landing_rev) or self.get_changeset()
932 cs = self.get_changeset(self.landing_rev) or self.get_changeset()
915 return cs
933 return cs
916
934
917 def update_last_change(self, last_change=None):
935 def update_changeset_cache(self, cs_cache=None):
918 if last_change is None:
936 """
919 last_change = datetime.datetime.now()
937 Update cache of last changeset for repository, keys should be::
920 if self.updated_on is None or self.updated_on != last_change:
938
921 log.debug('updated repo %s with new date %s' % (self, last_change))
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 self.updated_on = last_change
957 self.updated_on = last_change
958 self.changeset_cache = cs_cache
923 Session().add(self)
959 Session().add(self)
924 Session().commit()
960 Session().commit()
925
961
@@ -233,6 +233,7 b''
233 {key:"name"},
233 {key:"name"},
234 {key:"desc"},
234 {key:"desc"},
235 {key:"last_change"},
235 {key:"last_change"},
236 {key: "tip"},
236 {key:"owner"},
237 {key:"owner"},
237 {key:"rss"},
238 {key:"rss"},
238 {key:"atom"},
239 {key:"atom"},
@@ -266,6 +267,8 b''
266 {key:"desc",label:"${_('Description')}",sortable:true},
267 {key:"desc",label:"${_('Description')}",sortable:true},
267 {key:"last_change",label:"${_('Last Change')}",sortable:true,
268 {key:"last_change",label:"${_('Last Change')}",sortable:true,
268 sortOptions: { sortFunction: ageSort }},
269 sortOptions: { sortFunction: ageSort }},
270 {key:"tip",label:"${_('Tip')}",sortable:true,
271 sortOptions: { sortFunction: revisionSort }},
269 {key:"owner",label:"${_('Owner')}",sortable:true},
272 {key:"owner",label:"${_('Owner')}",sortable:true},
270 {key:"rss",label:"",sortable:false},
273 {key:"rss",label:"",sortable:false},
271 {key:"atom",label:"",sortable:false},
274 {key:"atom",label:"",sortable:false},
@@ -11,8 +11,8 b' verbosity=2'
11 with-pylons=test.ini
11 with-pylons=test.ini
12 detailed-errors=1
12 detailed-errors=1
13 nologcapture=1
13 nologcapture=1
14 #pdb=1
14 pdb=1
15 #pdb-failures=1
15 pdb-failures=1
16
16
17 # Babel configuration
17 # Babel configuration
18 [compile_catalog]
18 [compile_catalog]
General Comments 0
You need to be logged in to leave comments. Login now