annotate rhodecode/lib/utils.py @ 663:6199b34d349b beta

fixed html templates, fixed overal rhodecode width to 1024pixels various additional to templates. History for annotation, width for my page, repo types for admin panel repositories
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 06 Nov 2010 16:16:44 +0100
parents 758f64f3fbda
children 070f32743632
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
1 #!/usr/bin/env python
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
2 # encoding: utf-8
569
000b675e7c1d bumped version, some spelling fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 567
diff changeset
3 # Utilities for RhodeCode
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
5 # This program is free software; you can redistribute it and/or
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
6 # modify it under the terms of the GNU General Public License
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
7 # as published by the Free Software Foundation; version 2
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
8 # of the License or (at your opinion) any later version of the license.
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
9 #
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
10 # This program is distributed in the hope that it will be useful,
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
13 # GNU General Public License for more details.
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
14 #
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
15 # You should have received a copy of the GNU General Public License
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
16 # along with this program; if not, write to the Free Software
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
18 # MA 02110-1301, USA.
633
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
19 """
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
20 Created on April 18, 2010
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
21 Utilities for RhodeCode
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
22 @author: marcink
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
23 """
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
24
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
25 from UserDict import DictMixin
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
26 from mercurial import ui, config, hg
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
27 from mercurial.error import RepoError
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
28 from rhodecode.model import meta
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
29 from rhodecode.model.caching_query import FromCache
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
30 from rhodecode.model.db import Repository, User, RhodeCodeUi, RhodeCodeSettings, \
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
31 UserLog
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
32 from rhodecode.model.repo import RepoModel
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
33 from rhodecode.model.user import UserModel
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
34 from vcs.backends.base import BaseChangeset
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
35 from vcs.backends.git import GitRepository
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
36 from vcs.backends.hg import MercurialRepository
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
37 from vcs.utils.lazy import LazyProperty
654
7f5976da192c #48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
38 import traceback
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
39 import datetime
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
40 import logging
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
41 import os
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
42
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
43 log = logging.getLogger(__name__)
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
44
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
45
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
46 def get_repo_slug(request):
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
47 return request.environ['pylons.routes_dict'].get('repo_name')
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
48
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
49 def is_mercurial(environ):
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
50 """
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
51 Returns True if request's target is mercurial server - header
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
52 ``HTTP_ACCEPT`` of such request would start with ``application/mercurial``.
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
53 """
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
54 http_accept = environ.get('HTTP_ACCEPT')
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
55 if http_accept and http_accept.startswith('application/mercurial'):
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
56 return True
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
57 return False
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
58
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
59 def is_git(environ):
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
60 """
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
61 Returns True if request's target is git server. ``HTTP_USER_AGENT`` would
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
62 then have git client version given.
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
63
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
64 :param environ:
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
65 """
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
66 http_user_agent = environ.get('HTTP_USER_AGENT')
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
67 if http_user_agent.startswith('git'):
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
68 return True
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
69 return False
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
70
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
71 def action_logger(user, action, repo, ipaddr, sa=None):
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
72 """
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
73 Action logger for various action made by users
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
74 """
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
75
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
76 if not sa:
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
77 sa = meta.Session()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
78
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
79 try:
537
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
80 if hasattr(user, 'user_id'):
654
7f5976da192c #48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
81 user_obj = user
537
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
82 elif isinstance(user, basestring):
654
7f5976da192c #48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
83 user_obj = UserModel(sa).get_by_username(user, cache=False)
537
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
84 else:
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
85 raise Exception('You have to provide user object or username')
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
86
537
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
87 repo_name = repo.lstrip('/')
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
88 user_log = UserLog()
654
7f5976da192c #48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
89 user_log.user_id = user_obj.user_id
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
90 user_log.action = action
537
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
91 user_log.repository_name = repo_name
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
92 user_log.repository = RepoModel(sa).get(repo_name, cache=False)
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
93 user_log.action_date = datetime.datetime.now()
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
94 user_log.user_ip = ipaddr
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
95 sa.add(user_log)
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
96 sa.commit()
621
9893c2fc846b removed raise from log user action
Marcin Kuzminski <marcin@python-works.com>
parents: 604
diff changeset
97
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
98 log.info('Adding user %s, action %s on %s',
654
7f5976da192c #48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
99 user_obj.username, action, repo)
7f5976da192c #48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
100 except:
7f5976da192c #48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
101 log.error(traceback.format_exc())
536
39203995f2c4 made action logger more global, to be used in other places to log other actions.
Marcin Kuzminski <marcin@python-works.com>
parents: 524
diff changeset
102 sa.rollback()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
103
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
104 def get_repos(path, recursive=False, initial=False):
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
105 """
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
106 Scans given path for repos and return (name,(type,path)) tuple
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
107 :param prefix:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
108 :param path:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
109 :param recursive:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
110 :param initial:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
111 """
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
112 from vcs.utils.helpers import get_scm
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
113 from vcs.exceptions import VCSError
633
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
114
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
115 try:
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
116 scm = get_scm(path)
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
117 except:
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
118 pass
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
119 else:
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
120 raise Exception('The given path %s should not be a repository got %s',
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
121 path, scm)
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
122
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
123 for dirpath in os.listdir(path):
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
124 try:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
125 yield dirpath, get_scm(os.path.join(path, dirpath))
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
126 except VCSError:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
127 pass
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
128
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
129 if __name__ == '__main__':
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
130 get_repos('', '/home/marcink/workspace-python')
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
131
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
132
301
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
133 def check_repo_fast(repo_name, base_path):
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
134 if os.path.isdir(os.path.join(base_path, repo_name)):return False
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
135 return True
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
136
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
137 def check_repo(repo_name, base_path, verify=True):
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
138
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
139 repo_path = os.path.join(base_path, repo_name)
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
140
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
141 try:
301
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
142 if not check_repo_fast(repo_name, base_path):
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
143 return False
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
144 r = hg.repository(ui.ui(), repo_path)
301
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
145 if verify:
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
146 hg.verify(r)
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
147 #here we hnow that repo exists it was verified
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
148 log.info('%s repo is already created', repo_name)
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
149 return False
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
150 except RepoError:
301
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
151 #it means that there is no valid repo there...
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
152 log.info('%s repo is free for creation', repo_name)
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
153 return True
301
752675cdd167 made routes verification method based only on paths, since it's much faster and enough
Marcin Kuzminski <marcin@python-works.com>
parents: 297
diff changeset
154
351
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
155 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
156 while True:
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
157 ok = raw_input(prompt)
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
158 if ok in ('y', 'ye', 'yes'): return True
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
159 if ok in ('n', 'no', 'nop', 'nope'): return False
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
160 retries = retries - 1
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
161 if retries < 0: raise IOError
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
162 print complaint
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
163
343
6484963056cd implemented cache for repeated queries in simplehg mercurial requests
Marcin Kuzminski <marcin@python-works.com>
parents: 341
diff changeset
164 def get_hg_ui_cached():
350
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
165 try:
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
166 sa = meta.Session
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
167 ret = sa.query(RhodeCodeUi)\
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
168 .options(FromCache("sql_cache_short", "get_hg_ui_settings"))\
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
169 .all()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
170 except:
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
171 pass
350
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
172 finally:
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
173 meta.Session.remove()
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
174 return ret
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
175
343
6484963056cd implemented cache for repeated queries in simplehg mercurial requests
Marcin Kuzminski <marcin@python-works.com>
parents: 341
diff changeset
176
345
bb8f45f6d8f9 updated hg-app db manage and global settings
Marcin Kuzminski <marcin@python-works.com>
parents: 343
diff changeset
177 def get_hg_settings():
350
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
178 try:
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
179 sa = meta.Session()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
180 ret = sa.query(RhodeCodeSettings)\
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
181 .options(FromCache("sql_cache_short", "get_hg_settings"))\
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
182 .all()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
183 except:
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
184 pass
350
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
185 finally:
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
186 meta.Session.remove()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
187
345
bb8f45f6d8f9 updated hg-app db manage and global settings
Marcin Kuzminski <marcin@python-works.com>
parents: 343
diff changeset
188 if not ret:
bb8f45f6d8f9 updated hg-app db manage and global settings
Marcin Kuzminski <marcin@python-works.com>
parents: 343
diff changeset
189 raise Exception('Could not get application settings !')
381
55377fdc1fc6 cleared global application settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 367
diff changeset
190 settings = {}
55377fdc1fc6 cleared global application settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 367
diff changeset
191 for each in ret:
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
192 settings['rhodecode_' + each.app_settings_name] = each.app_settings_value
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
193
381
55377fdc1fc6 cleared global application settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 367
diff changeset
194 return settings
386
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
195
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
196 def get_hg_ui_settings():
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
197 try:
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
198 sa = meta.Session()
549
f99075170eb4 more renames for rhode code !!
Marcin Kuzminski <marcin@python-works.com>
parents: 548
diff changeset
199 ret = sa.query(RhodeCodeUi).all()
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
200 except:
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
201 pass
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
202 finally:
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
203 meta.Session.remove()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
204
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
205 if not ret:
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
206 raise Exception('Could not get application ui settings !')
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
207 settings = {}
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
208 for each in ret:
395
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
209 k = each.ui_key
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
210 v = each.ui_value
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
211 if k == '/':
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
212 k = 'root_path'
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
213
395
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
214 if k.find('.') != -1:
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
215 k = k.replace('.', '_')
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
216
395
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
217 if each.ui_section == 'hooks':
e8af467b5a60 Added hooks managment into application settings
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
218 v = each.ui_active
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
219
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
220 settings[each.ui_section + '_' + k] = v
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
221
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
222 return settings
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
223
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
224 #propagated from mercurial documentation
386
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
225 ui_sections = ['alias', 'auth',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
226 'decode/encode', 'defaults',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
227 'diff', 'email',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
228 'extensions', 'format',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
229 'merge-patterns', 'merge-tools',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
230 'hooks', 'http_proxy',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
231 'smtp', 'patch',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
232 'paths', 'profiling',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
233 'server', 'trusted',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
234 'ui', 'web', ]
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
235
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
236 def make_ui(read_from='file', path=None, checkpaths=True):
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
237 """
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
238 A function that will read python rc files or database
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
239 and make an mercurial ui object from read options
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
240
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
241 :param path: path to mercurial config file
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
242 :param checkpaths: check the path
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
243 :param read_from: read from 'file' or 'db'
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
244 """
386
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
245
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
246 baseui = ui.ui()
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
247
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
248 if read_from == 'file':
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
249 if not os.path.isfile(path):
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
250 log.warning('Unable to read config file %s' % path)
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
251 return False
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
252 log.debug('reading hgrc from %s', path)
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
253 cfg = config.config()
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
254 cfg.read(path)
386
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
255 for section in ui_sections:
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
256 for k, v in cfg.items(section):
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
257 baseui.setconfig(section, k, v)
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
258 log.debug('settings ui from file[%s]%s:%s', section, k, v)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
259
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
260 elif read_from == 'db':
343
6484963056cd implemented cache for repeated queries in simplehg mercurial requests
Marcin Kuzminski <marcin@python-works.com>
parents: 341
diff changeset
261 hg_ui = get_hg_ui_cached()
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
262 for ui_ in hg_ui:
392
b27d32cb3157 Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents: 388
diff changeset
263 if ui_.ui_active:
b27d32cb3157 Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents: 388
diff changeset
264 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, ui_.ui_key, ui_.ui_value)
b27d32cb3157 Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents: 388
diff changeset
265 baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
266
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
267
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
268 return baseui
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
269
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
270
548
b75b77ef649d renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
271 def set_rhodecode_config(config):
345
bb8f45f6d8f9 updated hg-app db manage and global settings
Marcin Kuzminski <marcin@python-works.com>
parents: 343
diff changeset
272 hgsettings = get_hg_settings()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
273
381
55377fdc1fc6 cleared global application settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 367
diff changeset
274 for k, v in hgsettings.items():
55377fdc1fc6 cleared global application settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 367
diff changeset
275 config[k] = v
341
1ef52a70f3b7 Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 301
diff changeset
276
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
277 def invalidate_cache(name, *args):
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
278 """Invalidates given name cache"""
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
279
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
280 from beaker.cache import region_invalidate
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
281 log.info('INVALIDATING CACHE FOR %s', name)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
282
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
283 """propagate our arguments to make sure invalidation works. First
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
284 argument has to be the name of cached func name give to cache decorator
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
285 without that the invalidation would not work"""
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
286 tmp = [name]
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
287 tmp.extend(args)
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
288 args = tuple(tmp)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
289
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
290 if name == 'cached_repo_list':
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
291 from rhodecode.model.hg import _get_repos_cached
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
292 region_invalidate(_get_repos_cached, None, *args)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
293
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
294 if name == 'full_changelog':
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
295 from rhodecode.model.hg import _full_changelog_cached
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
296 region_invalidate(_full_changelog_cached, None, *args)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
297
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
298 class EmptyChangeset(BaseChangeset):
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
299 """
643
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
300 An dummy empty changeset. It's possible to pass hash when creating
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
301 an EmptyChangeset
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
302 """
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
303
643
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
304 def __init__(self, cs='0' * 40):
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
305 self._empty_cs = cs
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
306 self.revision = -1
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
307 self.message = ''
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
308 self.author = ''
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
309 self.date = ''
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 633
diff changeset
310
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
311 @LazyProperty
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
312 def raw_id(self):
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
313 """
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
314 Returns raw string identifying this changeset, useful for web
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
315 representation.
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
316 """
643
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
317 return self._empty_cs
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
318
524
63212fea2471 a lot of fixes in templates,
Marcin Kuzminski <marcin@python-works.com>
parents: 520
diff changeset
319 @LazyProperty
520
eda96fb85ba7 dohh !! fixed EmptyCHangeset for new vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 497
diff changeset
320 def short_id(self):
524
63212fea2471 a lot of fixes in templates,
Marcin Kuzminski <marcin@python-works.com>
parents: 520
diff changeset
321 return self.raw_id[:12]
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
322
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
323 def get_file_changeset(self, path):
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
324 return self
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
325
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
326 def get_file_content(self, path):
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
327 return u''
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
328
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
329 def get_file_size(self, path):
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
330 return 0
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
331
348
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
332 def repo2db_mapper(initial_repo_list, remove_obsolete=False):
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
333 """
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
334 maps all found repositories into db
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
335 """
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
336
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
337 sa = meta.Session()
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
338 rm = RepoModel(sa)
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
339 user = sa.query(User).filter(User.admin == True).first()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
340
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
341 for name, repo in initial_repo_list.items():
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
342 if not rm.get(name, cache=False):
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
343 log.info('repository %s not found creating default', name)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
344
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
345 form_data = {
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
346 'repo_name':name,
652
37dc1e8d84d8 changed repo type to use alias
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
347 'repo_type':repo.alias,
659
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 656
diff changeset
348 'description':repo.description \
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 656
diff changeset
349 if repo.description != 'unknown' else \
758f64f3fbda extended repo creation by repo type. fixed fork creation to maintain repo type.
Marcin Kuzminski <marcin@python-works.com>
parents: 656
diff changeset
350 '%s repository' % name,
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
351 'private':False
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
352 }
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
353 rm.create(form_data, user, just_db=True)
348
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
354
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
355
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
356 if remove_obsolete:
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
357 #remove from database those repositories that are not in the filesystem
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
358 for repo in sa.query(Repository).all():
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
359 if repo.repo_name not in initial_repo_list.keys():
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
360 sa.delete(repo)
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
361 sa.commit()
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
362
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
363
350
664a5b8c551a Added application settings, are now customizable from database
Marcin Kuzminski <marcin@python-works.com>
parents: 348
diff changeset
364 meta.Session.remove()
358
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
365
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
366
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
367 class OrderedDict(dict, DictMixin):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
368
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
369 def __init__(self, *args, **kwds):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
370 if len(args) > 1:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
371 raise TypeError('expected at most 1 arguments, got %d' % len(args))
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
372 try:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
373 self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
374 except AttributeError:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
375 self.clear()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
376 self.update(*args, **kwds)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
377
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
378 def clear(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
379 self.__end = end = []
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
380 end += [None, end, end] # sentinel node for doubly linked list
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
381 self.__map = {} # key --> [key, prev, next]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
382 dict.clear(self)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
383
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
384 def __setitem__(self, key, value):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
385 if key not in self:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
386 end = self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
387 curr = end[1]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
388 curr[2] = end[1] = self.__map[key] = [key, curr, end]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
389 dict.__setitem__(self, key, value)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
390
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
391 def __delitem__(self, key):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
392 dict.__delitem__(self, key)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
393 key, prev, next = self.__map.pop(key)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
394 prev[2] = next
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
395 next[1] = prev
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
396
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
397 def __iter__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
398 end = self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
399 curr = end[2]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
400 while curr is not end:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
401 yield curr[0]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
402 curr = curr[2]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
403
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
404 def __reversed__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
405 end = self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
406 curr = end[1]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
407 while curr is not end:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
408 yield curr[0]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
409 curr = curr[1]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
410
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
411 def popitem(self, last=True):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
412 if not self:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
413 raise KeyError('dictionary is empty')
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
414 if last:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
415 key = reversed(self).next()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
416 else:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
417 key = iter(self).next()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
418 value = self.pop(key)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
419 return key, value
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
420
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
421 def __reduce__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
422 items = [[k, self[k]] for k in self]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
423 tmp = self.__map, self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
424 del self.__map, self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
425 inst_dict = vars(self).copy()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
426 self.__map, self.__end = tmp
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
427 if inst_dict:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
428 return (self.__class__, (items,), inst_dict)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
429 return self.__class__, (items,)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
430
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
431 def keys(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
432 return list(self)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
433
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
434 setdefault = DictMixin.setdefault
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
435 update = DictMixin.update
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
436 pop = DictMixin.pop
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
437 values = DictMixin.values
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
438 items = DictMixin.items
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
439 iterkeys = DictMixin.iterkeys
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
440 itervalues = DictMixin.itervalues
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
441 iteritems = DictMixin.iteritems
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
442
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
443 def __repr__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
444 if not self:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
445 return '%s()' % (self.__class__.__name__,)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
446 return '%s(%r)' % (self.__class__.__name__, self.items())
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
447
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
448 def copy(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
449 return self.__class__(self)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
450
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
451 @classmethod
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
452 def fromkeys(cls, iterable, value=None):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
453 d = cls()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
454 for key in iterable:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
455 d[key] = value
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
456 return d
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
457
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
458 def __eq__(self, other):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
459 if isinstance(other, OrderedDict):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
460 return len(self) == len(other) and self.items() == other.items()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
461 return dict.__eq__(self, other)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
462
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
463 def __ne__(self, other):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
464 return not self == other
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
465
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
466
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
467 #===============================================================================
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
468 # TEST FUNCTIONS AND CREATORS
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
469 #===============================================================================
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
470 def create_test_index(repo_location, full_index):
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
471 """Makes default test index
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
472 :param repo_location:
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
473 :param full_index:
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
474 """
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 544
diff changeset
475 from rhodecode.lib.indexers.daemon import WhooshIndexingDaemon
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 544
diff changeset
476 from rhodecode.lib.pidlock import DaemonLock, LockHeld
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 544
diff changeset
477 from rhodecode.lib.indexers import IDX_LOCATION
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
478 import shutil
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
479
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
480 if os.path.exists(IDX_LOCATION):
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
481 shutil.rmtree(IDX_LOCATION)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
482
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
483 try:
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
484 l = DaemonLock()
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
485 WhooshIndexingDaemon(repo_location=repo_location)\
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
486 .run(full_index=full_index)
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
487 l.release()
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
488 except LockHeld:
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
489 pass
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
490
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
491 def create_test_env(repos_test_path, config):
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
492 """Makes a fresh database and
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
493 install test repository into tmp dir
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
494 """
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 544
diff changeset
495 from rhodecode.lib.db_manage import DbManage
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
496 import tarfile
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
497 import shutil
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
498 from os.path import dirname as dn, join as jn, abspath
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
499
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
500 log = logging.getLogger('TestEnvCreator')
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
501 # create logger
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
502 log.setLevel(logging.DEBUG)
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
503 log.propagate = True
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
504 # create console handler and set level to debug
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
505 ch = logging.StreamHandler()
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
506 ch.setLevel(logging.DEBUG)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
507
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
508 # create formatter
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
509 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
510
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
511 # add formatter to ch
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
512 ch.setFormatter(formatter)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
513
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
514 # add ch to logger
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
515 log.addHandler(ch)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
516
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
517 #PART ONE create db
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
518 dbname = config['sqlalchemy.db1.url'].split('/')[-1]
567
80dc0a23edf7 fixed whoosh failure on new repository
Marcin Kuzminski <marcin@python-works.com>
parents: 552
diff changeset
519 log.debug('making test db %s', dbname)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
520
552
2642f128ad46 removed egg info, update files for distutils build
Marcin Kuzminski <marcin@python-works.com>
parents: 549
diff changeset
521 dbmanage = DbManage(log_sql=True, dbname=dbname, root=config['here'],
2642f128ad46 removed egg info, update files for distutils build
Marcin Kuzminski <marcin@python-works.com>
parents: 549
diff changeset
522 tests=True)
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
523 dbmanage.create_tables(override=True)
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
524 dbmanage.config_prompt(repos_test_path)
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
525 dbmanage.create_default_user()
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
526 dbmanage.admin_prompt()
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
527 dbmanage.create_permissions()
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
528 dbmanage.populate_default_permissions()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
529
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
530 #PART TWO make test repo
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
531 log.debug('making test vcs repo')
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
532 if os.path.isdir('/tmp/vcs_test'):
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
533 shutil.rmtree('/tmp/vcs_test')
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
534
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
535 cur_dir = dn(dn(abspath(__file__)))
489
460ad816820d fixed bug when new repo had no last commiter,
Marcin Kuzminski <marcin@python-works.com>
parents: 473
diff changeset
536 tar = tarfile.open(jn(cur_dir, 'tests', "vcs_test.tar.gz"))
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
537 tar.extractall('/tmp')
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
538 tar.close()