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_c |
|
|
77 |
else |
|
|
78 |
repo.update_ |
|
|
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 |
|
|
|
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_ |
|
|
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}, |
General Comments 0
You need to be logged in to leave comments.
Login now