annotate rhodecode/lib/utils.py @ 1217:a3b2b4b4e440

fixes for issue #149
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 05 Apr 2011 18:04:06 +0200
parents 4c123ade8485
children 3d9da7893fdb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
1 # -*- coding: utf-8 -*-
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
2 """
833
9753e0907827 added dbmigrate package, added model changes
Marcin Kuzminski <marcin@python-works.com>
parents: 807
diff changeset
3 rhodecode.lib.utils
9753e0907827 added dbmigrate package, added model changes
Marcin Kuzminski <marcin@python-works.com>
parents: 807
diff changeset
4 ~~~~~~~~~~~~~~~~~~~
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
5
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
6 Utilities library for RhodeCode
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
7
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
8 :created_on: Apr 18, 2010
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
9 :author: marcink
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
10 :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
11 :license: GPLv3, see COPYING for more details.
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
12 """
1217
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 863
diff changeset
13 # This program is free software: you can redistribute it and/or modify
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 863
diff changeset
14 # it under the terms of the GNU General Public License as published by
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 863
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 863
diff changeset
16 # (at your option) any later version.
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 863
diff changeset
17 #
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
18 # 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
19 # 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
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
21 # GNU General Public License for more details.
1217
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 863
diff changeset
22 #
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
23 # You should have received a copy of the GNU General Public License
1217
a3b2b4b4e440 fixes for issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 863
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
25
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
26 import os
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
27 import logging
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
28 import datetime
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
29 import traceback
633
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
30
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
31 from UserDict import DictMixin
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
32
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
33 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
34 from mercurial.error import RepoError
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
35
785
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
36 import paste
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
37 import beaker
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
38 from paste.script.command import Command, BadCommand
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
39
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
40 from vcs.backends.base import BaseChangeset
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
41 from vcs.utils.lazy import LazyProperty
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
42
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
43 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
44 from rhodecode.model.caching_query import FromCache
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
45 from rhodecode.model.db import Repository, User, RhodeCodeUi, UserLog
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
46 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
47 from rhodecode.model.user import UserModel
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
48
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
49 log = logging.getLogger(__name__)
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
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
52 def get_repo_slug(request):
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
53 return request.environ['pylons.routes_dict'].get('repo_name')
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
54
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
55 def action_logger(user, action, repo, ipaddr='', sa=None):
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
56 """
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
57 Action logger for various actions made by users
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
58
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
59 :param user: user that made this action, can be a unique username string or
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
60 object containing user_id attribute
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
61 :param action: action to log, should be on of predefined unique actions for
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
62 easy translations
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
63 :param repo: string name of repository or object containing repo_id,
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
64 that action was made on
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
65 :param ipaddr: optional ip address from what the action was made
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
66 :param sa: optional sqlalchemy session
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
67
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
68 """
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
69
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
70 if not sa:
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
71 sa = meta.Session()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
72
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
73 try:
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
74 um = UserModel()
537
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
75 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
76 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
77 elif isinstance(user, basestring):
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
78 user_obj = um.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
79 else:
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
80 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
81
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
82
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
83 rm = RepoModel()
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
84 if hasattr(repo, 'repo_id'):
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
85 repo_obj = rm.get(repo.repo_id, cache=False)
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
86 repo_name = repo_obj.repo_name
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
87 elif isinstance(repo, basestring):
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
88 repo_name = repo.lstrip('/')
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
89 repo_obj = rm.get_by_repo_name(repo_name, cache=False)
689
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
90 else:
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
91 raise Exception('You have to provide repository to action logger')
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
92
ecc566f8b69f fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents: 688
diff changeset
93
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
94 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
95 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
96 user_log.action = action
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
97
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
98 user_log.repository_id = repo_obj.repo_id
537
48be953851fc extended user logs to create/delete/fork repositories for auditing
Marcin Kuzminski <marcin@python-works.com>
parents: 536
diff changeset
99 user_log.repository_name = repo_name
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
100
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
101 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
102 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
103 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
104 sa.commit()
621
9893c2fc846b removed raise from log user action
Marcin Kuzminski <marcin@python-works.com>
parents: 604
diff changeset
105
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
106 log.info('Adding user %s, action %s on %s', user_obj, action, repo)
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
107 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
108 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
109 sa.rollback()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
110
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
111 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
112 """
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
113 Scans given path for repos and return (name,(type,path)) tuple
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
114
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
115 :param prefix:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
116 :param path:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
117 :param recursive:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
118 :param initial:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
119 """
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
120 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
121 from vcs.exceptions import VCSError
633
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
122
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
123 try:
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
124 scm = get_scm(path)
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
125 except:
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
126 pass
fcf599cd3404 Move changes for git implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 631
diff changeset
127 else:
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
128 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
129 path, scm)
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
130
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
131 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
132 try:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
133 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
134 except VCSError:
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
135 pass
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
136
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
137 def check_repo_fast(repo_name, base_path):
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 756
diff changeset
138 """
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
139 Check given path for existence of directory
761
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 756
diff changeset
140 :param repo_name:
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 756
diff changeset
141 :param base_path:
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 756
diff changeset
142
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 756
diff changeset
143 :return False: if this directory is present
56c2850a5b5f ldap auth rewrite, moved split authfunc into two functions,
Marcin Kuzminski <marcin@python-works.com>
parents: 756
diff changeset
144 """
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 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
146 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
147
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
148 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
149
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
150 repo_path = os.path.join(base_path, repo_name)
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
151
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
152 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
153 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
154 return False
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
155 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
156 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
157 hg.verify(r)
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
158 #here we hnow that repo exists it was verified
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
159 log.info('%s repo is already created', repo_name)
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
160 return False
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
161 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
162 #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
163 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
164 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
165
351
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
166 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
167 while True:
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
168 ok = raw_input(prompt)
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
169 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
170 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
171 retries = retries - 1
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
172 if retries < 0: raise IOError
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
173 print complaint
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
174
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
175 #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
176 ui_sections = ['alias', 'auth',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
177 'decode/encode', 'defaults',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
178 'diff', 'email',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
179 'extensions', 'format',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
180 'merge-patterns', 'merge-tools',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
181 'hooks', 'http_proxy',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
182 'smtp', 'patch',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
183 'paths', 'profiling',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
184 'server', 'trusted',
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
185 'ui', 'web', ]
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
186
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
187 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
188 """
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
189 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
190 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
191
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
192 :param path: path to mercurial config file
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
193 :param checkpaths: check the path
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
194 :param read_from: read from 'file' or 'db'
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
195 """
386
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
196
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
197 baseui = ui.ui()
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
198
724
a9bc513a1fe3 fixed nasty bug with ui()
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
199 #clean the baseui object
a9bc513a1fe3 fixed nasty bug with ui()
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
200 baseui._ocfg = config.config()
a9bc513a1fe3 fixed nasty bug with ui()
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
201 baseui._ucfg = config.config()
a9bc513a1fe3 fixed nasty bug with ui()
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
202 baseui._tcfg = config.config()
a9bc513a1fe3 fixed nasty bug with ui()
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
203
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
204 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
205 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
206 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
207 return False
388
3bcf9529d221 Added new application settings,Push ssl and repositories path
Marcin Kuzminski <marcin@python-works.com>
parents: 386
diff changeset
208 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
209 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
210 cfg.read(path)
386
a9a607a58b1c moved out ui_sections out of make ui function
Marcin Kuzminski <marcin@python-works.com>
parents: 381
diff changeset
211 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
212 for k, v in cfg.items(section):
724
a9bc513a1fe3 fixed nasty bug with ui()
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
213 log.debug('settings ui from file[%s]%s:%s', section, 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
214 baseui.setconfig(section, k, v)
724
a9bc513a1fe3 fixed nasty bug with ui()
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
215
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
216
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
217 elif read_from == 'db':
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
218 sa = meta.Session()
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
219 ret = sa.query(RhodeCodeUi)\
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
220 .options(FromCache("sql_cache_short",
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
221 "get_hg_ui_settings")).all()
773
876776983c3c disabled dotencode format for mercurial 1.7 usage and hg <=1.6 compatibility
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
222
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
223 hg_ui = ret
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
224 for ui_ in hg_ui:
392
b27d32cb3157 Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents: 388
diff changeset
225 if ui_.ui_active:
773
876776983c3c disabled dotencode format for mercurial 1.7 usage and hg <=1.6 compatibility
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
226 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section,
876776983c3c disabled dotencode format for mercurial 1.7 usage and hg <=1.6 compatibility
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
227 ui_.ui_key, ui_.ui_value)
392
b27d32cb3157 Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents: 388
diff changeset
228 baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value)
773
876776983c3c disabled dotencode format for mercurial 1.7 usage and hg <=1.6 compatibility
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
229
876776983c3c disabled dotencode format for mercurial 1.7 usage and hg <=1.6 compatibility
Marcin Kuzminski <marcin@python-works.com>
parents: 761
diff changeset
230 meta.Session.remove()
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
231 return baseui
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
232
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
233
548
b75b77ef649d renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
234 def set_rhodecode_config(config):
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
235 """Updates pylons config with new settings from database
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
236
756
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
237 :param config:
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
238 """
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
239 from rhodecode.model.settings import SettingsModel
01be209b9828 project refactoring, cleaned up lib.utils from rarly used functions, and place them
Marcin Kuzminski <marcin@python-works.com>
parents: 735
diff changeset
240 hgsettings = SettingsModel().get_app_settings()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
241
381
55377fdc1fc6 cleared global application settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 367
diff changeset
242 for k, v in hgsettings.items():
55377fdc1fc6 cleared global application settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 367
diff changeset
243 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
244
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 689
diff changeset
245 def invalidate_cache(cache_key, *args):
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
246 """Puts cache invalidation task into db for
665
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 659
diff changeset
247 further global cache invalidation
070f32743632 Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents: 659
diff changeset
248 """
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
249
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 689
diff changeset
250 from rhodecode.model.scm import ScmModel
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 689
diff changeset
251
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 689
diff changeset
252 if cache_key.startswith('get_repo_cached_'):
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 689
diff changeset
253 name = cache_key.split('get_repo_cached_')[-1]
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 689
diff changeset
254 ScmModel().mark_for_invalidation(name)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
255
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
256 class EmptyChangeset(BaseChangeset):
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
257 """
643
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
258 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
259 an EmptyChangeset
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
260 """
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
261
643
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
262 def __init__(self, cs='0' * 40):
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
263 self._empty_cs = cs
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
264 self.revision = -1
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
265 self.message = ''
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
266 self.author = ''
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
267 self.date = ''
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 633
diff changeset
268
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
269 @LazyProperty
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
270 def raw_id(self):
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
271 """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
272 representation.
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
273 """
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
274
643
9dc1d92d82ed updated setup for all newest versions
Marcin Kuzminski <marcin@python-works.com>
parents: 636
diff changeset
275 return self._empty_cs
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
276
524
63212fea2471 a lot of fixes in templates,
Marcin Kuzminski <marcin@python-works.com>
parents: 520
diff changeset
277 @LazyProperty
520
eda96fb85ba7 dohh !! fixed EmptyCHangeset for new vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 497
diff changeset
278 def short_id(self):
524
63212fea2471 a lot of fixes in templates,
Marcin Kuzminski <marcin@python-works.com>
parents: 520
diff changeset
279 return self.raw_id[:12]
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
280
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
281 def get_file_changeset(self, path):
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
282 return self
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
283
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
284 def get_file_content(self, path):
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
285 return u''
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
286
544
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
287 def get_file_size(self, path):
d8778cde98f0 added limits to single file diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 537
diff changeset
288 return 0
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
289
348
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
290 def repo2db_mapper(initial_repo_list, remove_obsolete=False):
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
291 """maps all found repositories into db
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
292 """
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
293
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
294 sa = meta.Session()
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 689
diff changeset
295 rm = RepoModel()
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
296 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
297
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
298 for name, repo in initial_repo_list.items():
735
dbec976d9975 added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents: 724
diff changeset
299 if not rm.get_by_repo_name(name, cache=False):
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
300 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
301
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
302 form_data = {
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
303 'repo_name':name,
652
37dc1e8d84d8 changed repo type to use alias
Marcin Kuzminski <marcin@python-works.com>
parents: 643
diff changeset
304 '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
305 '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
306 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
307 '%s repository' % name,
297
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
308 'private':False
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
309 }
a074dec6ee40 restored utils, wrongly deleted
Marcin Kuzminski <marcin@python-works.com>
parents: 295
diff changeset
310 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
311
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
312 if remove_obsolete:
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
313 #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
314 for repo in sa.query(Repository).all():
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
315 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
316 sa.delete(repo)
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
317 sa.commit()
e8fc875467bd implemented manual repo rescann and remapping
Marcin Kuzminski <marcin@python-works.com>
parents: 345
diff changeset
318
358
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
319 class OrderedDict(dict, DictMixin):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
320
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
321 def __init__(self, *args, **kwds):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
322 if len(args) > 1:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
323 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
324 try:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
325 self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
326 except AttributeError:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
327 self.clear()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
328 self.update(*args, **kwds)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
329
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
330 def clear(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
331 self.__end = end = []
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
332 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
333 self.__map = {} # key --> [key, prev, next]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
334 dict.clear(self)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
335
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
336 def __setitem__(self, key, value):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
337 if key not in self:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
338 end = self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
339 curr = end[1]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
340 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
341 dict.__setitem__(self, key, value)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
342
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
343 def __delitem__(self, key):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
344 dict.__delitem__(self, key)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
345 key, prev, next = self.__map.pop(key)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
346 prev[2] = next
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
347 next[1] = prev
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
348
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
349 def __iter__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
350 end = self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
351 curr = end[2]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
352 while curr is not end:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
353 yield curr[0]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
354 curr = curr[2]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
355
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
356 def __reversed__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
357 end = self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
358 curr = end[1]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
359 while curr is not end:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
360 yield curr[0]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
361 curr = curr[1]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
362
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
363 def popitem(self, last=True):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
364 if not self:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
365 raise KeyError('dictionary is empty')
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
366 if last:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
367 key = reversed(self).next()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
368 else:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
369 key = iter(self).next()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
370 value = self.pop(key)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
371 return key, value
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
372
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
373 def __reduce__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
374 items = [[k, self[k]] for k in self]
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
375 tmp = self.__map, self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
376 del self.__map, self.__end
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
377 inst_dict = vars(self).copy()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
378 self.__map, self.__end = tmp
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
379 if inst_dict:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
380 return (self.__class__, (items,), inst_dict)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
381 return self.__class__, (items,)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
382
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
383 def keys(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
384 return list(self)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
385
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
386 setdefault = DictMixin.setdefault
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
387 update = DictMixin.update
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
388 pop = DictMixin.pop
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
389 values = DictMixin.values
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
390 items = DictMixin.items
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
391 iterkeys = DictMixin.iterkeys
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
392 itervalues = DictMixin.itervalues
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
393 iteritems = DictMixin.iteritems
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
394
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
395 def __repr__(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
396 if not self:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
397 return '%s()' % (self.__class__.__name__,)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
398 return '%s(%r)' % (self.__class__.__name__, self.items())
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
399
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
400 def copy(self):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
401 return self.__class__(self)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
402
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
403 @classmethod
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
404 def fromkeys(cls, iterable, value=None):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
405 d = cls()
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
406 for key in iterable:
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
407 d[key] = value
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
408 return d
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
409
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
410 def __eq__(self, other):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
411 if isinstance(other, OrderedDict):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
412 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
413 return dict.__eq__(self, other)
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
414
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
415 def __ne__(self, other):
23e720be5f44 Added implementation of Ordered Dict.
Marcin Kuzminski <marcin@python-works.com>
parents: 351
diff changeset
416 return not self == other
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
417
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
418
785
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
419 #set cache regions for beaker so celery can utilise it
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
420 def add_cache(settings):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
421 cache_settings = {'regions':None}
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
422 for key in settings.keys():
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
423 for prefix in ['beaker.cache.', 'cache.']:
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
424 if key.startswith(prefix):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
425 name = key.split(prefix)[1].strip()
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
426 cache_settings[name] = settings[key].strip()
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
427 if cache_settings['regions']:
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
428 for region in cache_settings['regions'].split(','):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
429 region = region.strip()
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
430 region_settings = {}
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
431 for key, value in cache_settings.items():
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
432 if key.startswith(region):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
433 region_settings[key.split('.')[1]] = value
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
434 region_settings['expire'] = int(region_settings.get('expire',
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
435 60))
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
436 region_settings.setdefault('lock_dir',
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
437 cache_settings.get('lock_dir'))
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
438 if 'type' not in region_settings:
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
439 region_settings['type'] = cache_settings.get('type',
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
440 'memory')
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
441 beaker.cache.cache_regions[region] = region_settings
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
442
807
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
443 def get_current_revision():
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
444 """Returns tuple of (number, id) from repository containing this package
807
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
445 or None if repository could not be found.
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
446 """
860
5f7731e3ab4d fixed spelling mistakes, and some minor docs bugs
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
447
807
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
448 try:
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
449 from vcs import get_repo
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
450 from vcs.utils.helpers import get_scm
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
451 from vcs.exceptions import RepositoryError, VCSError
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
452 repopath = os.path.join(os.path.dirname(__file__), '..', '..')
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
453 scm = get_scm(repopath)[0]
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
454 repo = get_repo(path=repopath, alias=scm)
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
455 tip = repo.get_changeset()
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
456 return (tip.revision, tip.short_id)
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
457 except (ImportError, RepositoryError, VCSError), err:
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
458 logging.debug("Cannot retrieve rhodecode's revision. Original error "
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
459 "was: %s" % err)
e8c9ff1da9ba added revision into version for beta
Marcin Kuzminski <marcin@python-works.com>
parents: 785
diff changeset
460 return None
785
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
461
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
462 #===============================================================================
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 621
diff changeset
463 # 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
464 #===============================================================================
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 489
diff changeset
465 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
466 """Makes default test index
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
467 :param repo_location:
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
468 :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
469 """
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 544
diff changeset
470 from rhodecode.lib.indexers.daemon import WhooshIndexingDaemon
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 544
diff changeset
471 from rhodecode.lib.pidlock import DaemonLock, LockHeld
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
472 import shutil
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
473
688
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
474 index_location = os.path.join(repo_location, 'index')
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
475 if os.path.exists(index_location):
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
476 shutil.rmtree(index_location)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
477
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 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
479 l = DaemonLock()
688
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
480 WhooshIndexingDaemon(index_location=index_location,
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
481 repo_location=repo_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
482 .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
483 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
484 except LockHeld:
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
485 pass
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
486
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
487 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
488 """Makes a fresh database and
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
489 install test repository into tmp dir
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
490 """
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 544
diff changeset
491 from rhodecode.lib.db_manage import DbManage
688
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
492 from rhodecode.tests import HG_REPO, GIT_REPO, NEW_HG_REPO, NEW_GIT_REPO, \
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
493 HG_FORK, GIT_FORK, TESTS_TMP_PATH
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
494 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
495 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
496 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
497
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
498 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
499 # 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
500 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
501 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
502 # 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
503 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
504 ch.setLevel(logging.DEBUG)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
505
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
506 # 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
507 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
508
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
509 # 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
510 ch.setFormatter(formatter)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
511
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
512 # 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
513 log.addHandler(ch)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
514
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
515 #PART ONE create db
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
516 dbconf = config['sqlalchemy.db1.url']
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
517 log.debug('making test db %s', dbconf)
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
518
783
71113f64b2d8 fidex corrent variables passed to dnconfig,
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
519 dbmanage = DbManage(log_sql=True, dbconf=dbconf, root=config['here'],
552
2642f128ad46 removed egg info, update files for distutils build
Marcin Kuzminski <marcin@python-works.com>
parents: 549
diff changeset
520 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
521 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
522 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
523 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
524 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
525 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
526 dbmanage.populate_default_permissions()
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
527
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
528 #PART TWO make test repo
688
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
529 log.debug('making test vcs repositories')
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
530
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
531 #remove old one from previos tests
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
532 for r in [HG_REPO, GIT_REPO, NEW_HG_REPO, NEW_GIT_REPO, HG_FORK, GIT_FORK]:
604
5cc96df705b9 fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
533
688
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
534 if os.path.isdir(jn(TESTS_TMP_PATH, r)):
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
535 log.debug('removing %s', r)
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
536 shutil.rmtree(jn(TESTS_TMP_PATH, r))
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
537
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
538 #CREATE DEFAULT HG REPOSITORY
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
539 cur_dir = dn(dn(abspath(__file__)))
688
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
540 tar = tarfile.open(jn(cur_dir, 'tests', "vcs_test_hg.tar.gz"))
8acbfa837180 Tests rewrite for 1.2 added some globals configs to make tests easier.
Marcin Kuzminski <marcin@python-works.com>
parents: 684
diff changeset
541 tar.extractall(jn(TESTS_TMP_PATH, HG_REPO))
473
6b934c9607e7 Improved testing scenarios. Made test env creator
Marcin Kuzminski <marcin@python-works.com>
parents: 395
diff changeset
542 tar.close()
684
2abb398cd9a7 upgrade-db command dummy
Marcin Kuzminski <marcin@python-works.com>
parents: 665
diff changeset
543
785
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
544
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
545 #==============================================================================
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
546 # PASTER COMMANDS
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
547 #==============================================================================
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
548
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
549 class BasePasterCommand(Command):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
550 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
551 Abstract Base Class for paster commands.
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
552
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
553 The celery commands are somewhat aggressive about loading
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
554 celery.conf, and since our module sets the `CELERY_LOADER`
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
555 environment variable to our loader, we have to bootstrap a bit and
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
556 make sure we've had a chance to load the pylons config off of the
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
557 command line, otherwise everything fails.
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
558 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
559 min_args = 1
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
560 min_args_error = "Please provide a paster config file as an argument."
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
561 takes_config_file = 1
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
562 requires_config_file = True
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
563
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
564 def notify_msg(self, msg, log=False):
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
565 """Make a notification to user, additionally if logger is passed
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
566 it logs this action using given logger
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
567
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
568 :param msg: message that will be printed to user
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
569 :param log: logging instance, to use to additionally log this message
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
570
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
571 """
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
572 print msg
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
573 if log and isinstance(log, logging):
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
574 log(msg)
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
575
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 833
diff changeset
576
785
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
577 def run(self, args):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
578 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
579 Overrides Command.run
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
580
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
581 Checks for a config file argument and loads it.
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
582 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
583 if len(args) < self.min_args:
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
584 raise BadCommand(
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
585 self.min_args_error % {'min_args': self.min_args,
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
586 'actual_args': len(args)})
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
587
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
588 # Decrement because we're going to lob off the first argument.
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
589 # @@ This is hacky
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
590 self.min_args -= 1
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
591 self.bootstrap_config(args[0])
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
592 self.update_parser()
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
593 return super(BasePasterCommand, self).run(args[1:])
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
594
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
595 def update_parser(self):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
596 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
597 Abstract method. Allows for the class's parser to be updated
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
598 before the superclass's `run` method is called. Necessary to
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
599 allow options/arguments to be passed through to the underlying
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
600 celery command.
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
601 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
602 raise NotImplementedError("Abstract Method.")
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
603
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
604 def bootstrap_config(self, conf):
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
605 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
606 Loads the pylons configuration.
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
607 """
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
608 from pylons import config as pylonsconfig
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
609
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
610 path_to_ini_file = os.path.realpath(conf)
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
611 conf = paste.deploy.appconfig('config:' + path_to_ini_file)
277427ac29a9 complete rewrite of paster commands,
Marcin Kuzminski <marcin@python-works.com>
parents: 783
diff changeset
612 pylonsconfig.init_app(conf.global_conf, conf.local_conf)