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_c |
|
77 | last_cs = (repo.scm_instance.get_changeset() if repo.scm_instance | |
77 |
else |
|
78 | else EmptyChangeset()) | |
78 |
repo.update_ |
|
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 |
|
|
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_ |
|
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 |
|
|
14 | pdb=1 | |
15 |
|
|
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