annotate rhodecode/model/scm.py @ 1255:c93234e9ac36 beta

fixes issue #163 RhodeCode will check and report a corrupted repo. A rescan with destroy old data should be perform after such operations
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 13 Apr 2011 00:39:15 +0200
parents 8748f7974ba8
children 08ac2c3ae810
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
1 # -*- coding: utf-8 -*-
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
2 """
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
3 rhodecode.model.scm
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
4 ~~~~~~~~~~~~~~~~~~~
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
5
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
6 Scm model for RhodeCode
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
7
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
8 :created_on: Apr 9, 2010
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
9 :author: marcink
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
11 :license: GPLv3, see COPYING for more details.
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
12 """
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
13 # This program is free software: you can redistribute it and/or modify
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
14 # it under the terms of the GNU General Public License as published by
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
16 # (at your option) any later version.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
17 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 248
diff changeset
18 # This program is distributed in the hope that it will be useful,
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 248
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 248
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 248
diff changeset
21 # GNU General Public License for more details.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
22 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 248
diff changeset
23 # You should have received a copy of the GNU General Public License
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
25 import os
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
26 import time
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
27 import traceback
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
28 import logging
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
29
1022
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1005
diff changeset
30 from mercurial import ui
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1005
diff changeset
31
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1005
diff changeset
32 from sqlalchemy.exc import DatabaseError
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
33 from sqlalchemy.orm import make_transient
1022
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1005
diff changeset
34
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1005
diff changeset
35 from beaker.cache import cache_region, region_invalidate
4f834b0abcd3 Code refactor number 2
Marcin Kuzminski <marcin@python-works.com>
parents: 1005
diff changeset
36
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
37 from vcs import get_backend
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
38 from vcs.utils.helpers import get_scm
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
39 from vcs.exceptions import RepositoryError, VCSError
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
40 from vcs.utils.lazy import LazyProperty
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
41
710
e2f3c8e6939d Disable git support due to large problems with dulwich.
Marcin Kuzminski <marcin@python-works.com>
parents: 693
diff changeset
42 from rhodecode import BACKENDS
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 535
diff changeset
43 from rhodecode.lib import helpers as h
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 535
diff changeset
44 from rhodecode.lib.auth import HasRepoPermissionAny
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
45 from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, \
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
46 action_logger
752
89b9037d68b7 fixed Example celery config to ampq,
Marcin Kuzminski <marcin@python-works.com>
parents: 747
diff changeset
47 from rhodecode.model import BaseModel
758
6a31e64acabd code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 757
diff changeset
48 from rhodecode.model.user import UserModel
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
49 from rhodecode.model.repo import RepoModel
758
6a31e64acabd code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 757
diff changeset
50 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
784
30d3161c6683 Implemented fancier top menu for logged and anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 767
diff changeset
51 UserFollowing, UserLog
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
52 from rhodecode.model.caching_query import FromCache
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
53
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
54 log = logging.getLogger(__name__)
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
55
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
56
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
57 class UserTemp(object):
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
58 def __init__(self, user_id):
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
59 self.user_id = user_id
901
765c2125e4d9 Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
60
765c2125e4d9 Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
61 def __repr__(self):
765c2125e4d9 Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
62 return "<%s('id:%s')>" % (self.__class__.__name__, self.user_id)
765c2125e4d9 Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
63
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
64
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
65 class RepoTemp(object):
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
66 def __init__(self, repo_id):
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
67 self.repo_id = repo_id
747
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
68
901
765c2125e4d9 Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
69 def __repr__(self):
765c2125e4d9 Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
70 return "<%s('id:%s')>" % (self.__class__.__name__, self.repo_id)
765c2125e4d9 Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
71
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
72
752
89b9037d68b7 fixed Example celery config to ampq,
Marcin Kuzminski <marcin@python-works.com>
parents: 747
diff changeset
73 class ScmModel(BaseModel):
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
74 """Generic Scm Model
58
8fb1abd4178a Added hg model,implemented removal of repos, added HgModel for fetching repos(with generator)
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
75 """
8fb1abd4178a Added hg model,implemented removal of repos, added HgModel for fetching repos(with generator)
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
76
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
77 @LazyProperty
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
78 def repos_path(self):
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
79 """Get's the repositories root path from database
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
80 """
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
81
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
82 q = self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one()
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
83
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
84 return q.ui_value
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
85
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
86 def repo_scan(self, repos_path=None):
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
87 """Listing of repositories in given path. This path should not be a
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
88 repository itself. Return a dictionary of repository objects
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
89
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
90 :param repos_path: path to directory containing repositories
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
91 """
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
92
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
93 log.info('scanning for repositories in %s', repos_path)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
94
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
95 if repos_path is None:
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
96 repos_path = self.repos_path
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
97
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
98 baseui = make_ui('db')
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
99 repos_list = {}
690
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
100
877
bc9a73adc216 Added recursive scanning for repositories in directory
Marcin Kuzminski <marcin@python-works.com>
parents: 851
diff changeset
101 for name, path in get_filesystem_repos(repos_path, recursive=True):
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
102 try:
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
103 if name in repos_list:
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
104 raise RepositoryError('Duplicate repository name %s '
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
105 'found in %s' % (name, path))
248
fb7f066126cc Added support for repository located in subdirectories.
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
106 else:
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
107
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
108 klass = get_backend(path[0])
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
109
710
e2f3c8e6939d Disable git support due to large problems with dulwich.
Marcin Kuzminski <marcin@python-works.com>
parents: 693
diff changeset
110 if path[0] == 'hg' and path[0] in BACKENDS.keys():
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
111 repos_list[name] = klass(path[1], baseui=baseui)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
112
710
e2f3c8e6939d Disable git support due to large problems with dulwich.
Marcin Kuzminski <marcin@python-works.com>
parents: 693
diff changeset
113 if path[0] == 'git' and path[0] in BACKENDS.keys():
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
114 repos_list[name] = klass(path[1])
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
115 except OSError:
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
116 continue
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
117
245
a83a1799480c Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 222
diff changeset
118 return repos_list
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
119
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
120 def get_repos(self, all_repos=None):
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
121 """Get all repos from db and for each repo create it's
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
122 backend instance and fill that backed with information from database
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
123
690
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
124 :param all_repos: give specific repositories list, good for filtering
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
125 this have to be a list of just the repository names
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
126 """
767
632b0761e617 bugfix, when user had no repos he would see all repos in my account, (correct commit)
Marcin Kuzminski <marcin@python-works.com>
parents: 758
diff changeset
127 if all_repos is None:
1193
523382549c45 Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents: 1114
diff changeset
128 repos = self.sa.query(Repository)\
523382549c45 Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents: 1114
diff changeset
129 .order_by(Repository.repo_name).all()
523382549c45 Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents: 1114
diff changeset
130 all_repos = [r.repo_name for r in repos]
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
131
791
06a98912325c fixed bug when invalidation was making to many queries when there was no list of invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 784
diff changeset
132 #get the repositories that should be invalidated
726
04c4e5f94cee cache list speed improvement
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
133 invalidation_list = [str(x.cache_key) for x in \
04c4e5f94cee cache list speed improvement
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
134 self.sa.query(CacheInvalidation.cache_key)\
04c4e5f94cee cache list speed improvement
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
135 .filter(CacheInvalidation.cache_active == False)\
04c4e5f94cee cache list speed improvement
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
136 .all()]
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
137 for r_name in all_repos:
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
138 r_dbr = self.get(r_name, invalidation_list)
1042
ab0a2b69d082 bugfix for getting proper values from cache
Marcin Kuzminski <marcin@python-works.com>
parents: 1039
diff changeset
139 if r_dbr is not None:
ab0a2b69d082 bugfix for getting proper values from cache
Marcin Kuzminski <marcin@python-works.com>
parents: 1039
diff changeset
140 repo, dbrepo = r_dbr
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
141
1255
c93234e9ac36 fixes issue #163 RhodeCode will check and report a corrupted repo. A rescan with destroy old data should be perform after such operations
Marcin Kuzminski <marcin@python-works.com>
parents: 1229
diff changeset
142 if repo is None or dbrepo is None:
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
143 log.error('Repository %s looks somehow corrupted', r_name)
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
144 continue
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
145 last_change = repo.last_change
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
146 tip = h.get_changeset_safe(repo, 'tip')
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
147
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
148 tmp_d = {}
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
149 tmp_d['name'] = dbrepo.repo_name
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
150 tmp_d['name_sort'] = tmp_d['name'].lower()
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
151 tmp_d['description'] = dbrepo.description
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
152 tmp_d['description_sort'] = tmp_d['description']
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
153 tmp_d['last_change'] = last_change
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
154 tmp_d['last_change_sort'] = time.mktime(last_change \
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
155 .timetuple())
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
156 tmp_d['tip'] = tip.raw_id
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
157 tmp_d['tip_sort'] = tip.revision
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
158 tmp_d['rev'] = tip.revision
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
159 tmp_d['contact'] = dbrepo.user.full_contact
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
160 tmp_d['contact_sort'] = tmp_d['contact']
1005
520e67cbb494 fixed sorting in maing page by owners
Marcin Kuzminski <marcin@python-works.com>
parents: 999
diff changeset
161 tmp_d['owner_sort'] = tmp_d['contact']
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
162 tmp_d['repo_archives'] = list(repo._get_archives())
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
163 tmp_d['last_msg'] = tip.message
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
164 tmp_d['repo'] = repo
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
165 tmp_d['dbrepo'] = dbrepo.get_dict()
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
166 tmp_d['dbrepo_fork'] = dbrepo.fork.get_dict() if dbrepo.fork \
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
167 else {}
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
168 yield tmp_d
74
cdf4fda66dd9 Started summary page. Added filters to templates. used by n,self.f.filtername prefixed by n to disable other filters. Few other fixes found
Marcin Kuzminski <marcin@python-blog.com>
parents: 73
diff changeset
169
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
170 def get(self, repo_name, invalidation_list=None, retval='all'):
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
171 """Returns a tuple of Repository,DbRepository,
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
172 Get's repository from given name, creates BackendInstance and
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
173 propagates it's data from database with all additional information
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
174
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
175 :param repo_name:
791
06a98912325c fixed bug when invalidation was making to many queries when there was no list of invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 784
diff changeset
176 :param invalidation_list: if a invalidation list is given the get
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
177 method should not manually check if this repository needs
791
06a98912325c fixed bug when invalidation was making to many queries when there was no list of invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 784
diff changeset
178 invalidation and just invalidate the repositories in list
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
179 :param retval: string specifing what to return one of 'repo','dbrepo',
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
180 'all'if repo or dbrepo is given it'll just lazy load chosen type
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
181 and return None as the second
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
182 """
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
183 if not HasRepoPermissionAny('repository.read', 'repository.write',
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
184 'repository.admin')(repo_name, 'get repo check'):
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
185 return
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
186
791
06a98912325c fixed bug when invalidation was making to many queries when there was no list of invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 784
diff changeset
187 #======================================================================
06a98912325c fixed bug when invalidation was making to many queries when there was no list of invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 784
diff changeset
188 # CACHE FUNCTION
06a98912325c fixed bug when invalidation was making to many queries when there was no list of invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 784
diff changeset
189 #======================================================================
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
190 @cache_region('long_term')
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
191 def _get_repo(repo_name):
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
192
690
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
193 repo_path = os.path.join(self.repos_path, repo_name)
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
194
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
195 try:
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
196 alias = get_scm(repo_path)[0]
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
197 log.debug('Creating instance of %s repository', alias)
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
198 backend = get_backend(alias)
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
199 except VCSError:
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
200 log.error(traceback.format_exc())
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
201 log.error('Perhaps this repository is in db and not in '
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
202 'filesystem run rescan repositories with '
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
203 '"destroy old data " option from admin panel')
757
c52e88b57bf4 rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents: 753
diff changeset
204 return
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
205
690
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
206 if alias == 'hg':
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
207 repo = backend(repo_path, create=False, baseui=make_ui('db'))
690
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
208 #skip hidden web repository
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
209 if repo._get_hidden():
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
210 return
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
211 else:
4685f3eafd35 Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
212 repo = backend(repo_path, create=False)
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
213
535
72778dda34cf some fixups in cache, added fallback and cache invalidation when key not found in cached repos list,
Marcin Kuzminski <marcin@python-works.com>
parents: 531
diff changeset
214 return repo
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
215
792
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
216 pre_invalidate = True
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
217 dbinvalidate = False
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
218
792
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
219 if invalidation_list is not None:
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
220 pre_invalidate = repo_name in invalidation_list
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
221
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
222 if pre_invalidate:
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
223 #this returns object to invalidate
792
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
224 invalidate = self._should_invalidate(repo_name)
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
225 if invalidate:
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
226 log.info('invalidating cache for repository %s', repo_name)
1039
51b70569c330 extended admin rescan to show what repositories was added and what removed
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
227 region_invalidate(_get_repo, None, repo_name)
792
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
228 self._mark_invalidated(invalidate)
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
229 dbinvalidate = True
792
4c16ed1eb699 fixed bug introduced in latest commit
Marcin Kuzminski <marcin@python-works.com>
parents: 791
diff changeset
230
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
231 r, dbr = None, None
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
232 if retval == 'repo' or 'all':
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
233 r = _get_repo(repo_name)
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
234 if retval == 'dbrepo' or 'all':
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
235 dbr = RepoModel().get_full(repo_name, cache=True,
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
236 invalidate=dbinvalidate)
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
237
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
238 return r, dbr
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
239
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
240 def mark_for_invalidation(self, repo_name):
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
241 """Puts cache invalidation task into db for
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
242 further global cache invalidation
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
243
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
244 :param repo_name: this repo that should invalidation take place
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
245 """
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
246
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
247 log.debug('marking %s for invalidation', repo_name)
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
248 cache = self.sa.query(CacheInvalidation)\
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
249 .filter(CacheInvalidation.cache_key == repo_name).scalar()
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
250
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
251 if cache:
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
252 #mark this cache as inactive
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
253 cache.cache_active = False
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
254 else:
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
255 log.debug('cache key not found in invalidation db -> creating one')
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
256 cache = CacheInvalidation(repo_name)
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
257
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
258 try:
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
259 self.sa.add(cache)
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
260 self.sa.commit()
758
6a31e64acabd code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 757
diff changeset
261 except (DatabaseError,):
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
262 log.error(traceback.format_exc())
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
263 self.sa.rollback()
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
264
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
265 def toggle_following_repo(self, follow_repo_id, user_id):
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
266
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
267 f = self.sa.query(UserFollowing)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
268 .filter(UserFollowing.follows_repo_id == follow_repo_id)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
269 .filter(UserFollowing.user_id == user_id).scalar()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
270
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
271 if f is not None:
747
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
272
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
273 try:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
274 self.sa.delete(f)
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
275 self.sa.commit()
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
276 action_logger(UserTemp(user_id),
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
277 'stopped_following_repo',
747
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
278 RepoTemp(follow_repo_id))
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
279 return
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
280 except:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
281 log.error(traceback.format_exc())
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
282 self.sa.rollback()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
283 raise
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
284
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
285 try:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
286 f = UserFollowing()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
287 f.user_id = user_id
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
288 f.follows_repo_id = follow_repo_id
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
289 self.sa.add(f)
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
290 self.sa.commit()
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
291 action_logger(UserTemp(user_id),
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
292 'started_following_repo',
747
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
293 RepoTemp(follow_repo_id))
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
294 except:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
295 log.error(traceback.format_exc())
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
296 self.sa.rollback()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
297 raise
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
298
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
299 def toggle_following_user(self, follow_user_id, user_id):
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
300 f = self.sa.query(UserFollowing)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
301 .filter(UserFollowing.follows_user_id == follow_user_id)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
302 .filter(UserFollowing.user_id == user_id).scalar()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
303
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
304 if f is not None:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
305 try:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
306 self.sa.delete(f)
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
307 self.sa.commit()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
308 return
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
309 except:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
310 log.error(traceback.format_exc())
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
311 self.sa.rollback()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
312 raise
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
313
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
314 try:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
315 f = UserFollowing()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
316 f.user_id = user_id
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
317 f.follows_user_id = follow_user_id
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
318 self.sa.add(f)
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
319 self.sa.commit()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
320 except:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
321 log.error(traceback.format_exc())
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
322 self.sa.rollback()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
323 raise
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
324
999
1951c35483ab fixed following js snipet. It' can be called multiple times now next to each repository
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
325 def is_following_repo(self, repo_name, user_id, cache=False):
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
326 r = self.sa.query(Repository)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
327 .filter(Repository.repo_name == repo_name).scalar()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
328
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
329 f = self.sa.query(UserFollowing)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
330 .filter(UserFollowing.follows_repository == r)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
331 .filter(UserFollowing.user_id == user_id).scalar()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
332
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
333 return f is not None
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
334
999
1951c35483ab fixed following js snipet. It' can be called multiple times now next to each repository
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
335 def is_following_user(self, username, user_id, cache=False):
758
6a31e64acabd code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 757
diff changeset
336 u = UserModel(self.sa).get_by_username(username)
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
337
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
338 f = self.sa.query(UserFollowing)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
339 .filter(UserFollowing.follows_user == u)\
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
340 .filter(UserFollowing.user_id == user_id).scalar()
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
341
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 726
diff changeset
342 return f is not None
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
343
747
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
344 def get_followers(self, repo_id):
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
345 if isinstance(repo_id, int):
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
346 return self.sa.query(UserFollowing)\
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
347 .filter(UserFollowing.follows_repo_id == repo_id).count()
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
348 else:
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
349 return self.sa.query(UserFollowing)\
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
350 .filter(UserFollowing.follows_repository \
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
351 == RepoModel().get_by_repo_name(repo_id)).count()
747
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
352
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
353 def get_forks(self, repo_id):
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
354 if isinstance(repo_id, int):
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
355 return self.sa.query(Repository)\
747
2f89beda06a1 Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
356 .filter(Repository.fork_id == repo_id).count()
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
357 else:
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
358 return self.sa.query(Repository)\
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
359 .filter(Repository.fork \
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1042
diff changeset
360 == RepoModel().get_by_repo_name(repo_id)).count()
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
361
1114
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
362 def pull_changes(self, repo_name, username):
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
363 repo, dbrepo = self.get(repo_name, retval='all')
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
364
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
365 try:
1213
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
366 extras = {'ip': '',
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
367 'username': username,
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
368 'action': 'push_remote',
68e34f5cf122 #150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
369 'repository': repo_name}
1114
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
370
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
371 #inject ui extra param to log this action via push logger
1114
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
372 for k, v in extras.items():
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
373 repo._repo.ui.setconfig('rhodecode_extras', k, v)
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
374
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
375 repo.pull(dbrepo.clone_uri)
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
376 self.mark_for_invalidation(repo_name)
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
377 except:
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
378 log.error(traceback.format_exc())
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
379 raise
4de3fa6290a7 #109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
380
784
30d3161c6683 Implemented fancier top menu for logged and anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 767
diff changeset
381 def get_unread_journal(self):
30d3161c6683 Implemented fancier top menu for logged and anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 767
diff changeset
382 return self.sa.query(UserLog).count()
30d3161c6683 Implemented fancier top menu for logged and anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 767
diff changeset
383
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
384 def _should_invalidate(self, repo_name):
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
385 """Looks up database for invalidation signals for this repo_name
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
386
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
387 :param repo_name:
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
388 """
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
389
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
390 ret = self.sa.query(CacheInvalidation)\
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
391 .filter(CacheInvalidation.cache_key == repo_name)\
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
392 .filter(CacheInvalidation.cache_active == False)\
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
393 .scalar()
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
394
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
395 return ret
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
396
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
397 def _mark_invalidated(self, cache_key):
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
398 """ Marks all occurrences of cache to invalidation as already
1038
5554aa9c2480 another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents: 1033
diff changeset
399 invalidated
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1193
diff changeset
400
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
401 :param cache_key:
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
402 """
811
bb35ad076e2f docs updates
Marcin Kuzminski <marcin@python-works.com>
parents: 792
diff changeset
403
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
404 if cache_key:
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
405 log.debug('marking %s as already invalidated', cache_key)
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
406 try:
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
407 cache_key.cache_active = True
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
408 self.sa.add(cache_key)
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
409 self.sa.commit()
758
6a31e64acabd code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 757
diff changeset
410 except (DatabaseError,):
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
411 log.error(traceback.format_exc())
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
412 self.sa.rollback()