annotate rhodecode/lib/db_manage.py @ 2532:19de74e33fb0 beta

Better descriptions of given permission overview in edit user view
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 02 Jul 2012 00:22:57 +0200
parents 388843a3a3c0
children 957329c1c35b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
835
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
1 # -*- coding: utf-8 -*-
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
2 """
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
3 rhodecode.lib.db_manage
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
5
838
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
6 Database creation, and setup module for RhodeCode. Used for creation
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
7 of database as well as for migration operations
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1138
diff changeset
8
835
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
9 :created_on: Apr 10, 2010
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
10 :author: marcink
1824
89efedac4e6c 2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents: 1783
diff changeset
11 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
835
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
12 :license: GPLv3, see COPYING for more details.
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
13 """
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
14 # This program is free software: you can redistribute it and/or modify
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
15 # it under the terms of the GNU General Public License as published by
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
16 # the Free Software Foundation, either version 3 of the License, or
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
17 # (at your option) any later version.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1138
diff changeset
18 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 249
diff changeset
19 # This program is distributed in the hope that it will be useful,
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 249
diff changeset
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 249
diff changeset
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 249
diff changeset
22 # GNU General Public License for more details.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1138
diff changeset
23 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 249
diff changeset
24 # You should have received a copy of the GNU General Public License
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 249
diff changeset
26
249
bad9ccac26b7 fixed import errors on db_manage
Marcin Kuzminski <marcin@python-works.com>
parents: 243
diff changeset
27 import os
bad9ccac26b7 fixed import errors on db_manage
Marcin Kuzminski <marcin@python-works.com>
parents: 243
diff changeset
28 import sys
327
0e87466a117e updated installation instruction, made more user friendly way of creating all needed configs. All is done now from paster setup-app
Marcin Kuzminski <marcin@python-works.com>
parents: 307
diff changeset
29 import uuid
835
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
30 import logging
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
31 from os.path import dirname as dn, join as jn
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
32
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
33 from rhodecode import __dbversion__
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
34 from rhodecode.model import meta
249
bad9ccac26b7 fixed import errors on db_manage
Marcin Kuzminski <marcin@python-works.com>
parents: 243
diff changeset
35
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
36 from rhodecode.model.user import UserModel
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 533
diff changeset
37 from rhodecode.lib.utils import ask_ok
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 533
diff changeset
38 from rhodecode.model import init_model
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
39 from rhodecode.model.db import User, Permission, RhodeCodeUi, \
1985
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
40 RhodeCodeSetting, UserToPerm, DbMigrateVersion, RepoGroup,\
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
41 UserRepoGroupToPerm
835
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
42
239
b18f89d6d17f Adde draft for permissions systems, made all needed decorators, and checks. For future usage in the system.
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
43 from sqlalchemy.engine import create_engine
1985
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
44 from rhodecode.model.repos_group import ReposGroupModel
835
08d2dcd71666 fixed imports on migrate, added getting current version from database
Marcin Kuzminski <marcin@python-works.com>
parents: 834
diff changeset
45
351
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
46 log = logging.getLogger(__name__)
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
47
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
48
226
c6526b7531e9 rewritten db manage script to use sqlalchemy. Fixed sqlalchemy models to more generic.
Marcin Kuzminski <marcin@python-works.com>
parents: 88
diff changeset
49 class DbManage(object):
781
7ae66bddf48d fixed db manage, to work on other databases than sqlite
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
50 def __init__(self, log_sql, dbconf, root, tests=False):
7ae66bddf48d fixed db manage, to work on other databases than sqlite
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
51 self.dbname = dbconf.split('/')[-1]
459
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
52 self.tests = tests
552
2642f128ad46 removed egg info, update files for distutils build
Marcin Kuzminski <marcin@python-works.com>
parents: 549
diff changeset
53 self.root = root
781
7ae66bddf48d fixed db manage, to work on other databases than sqlite
Marcin Kuzminski <marcin@python-works.com>
parents: 773
diff changeset
54 self.dburi = dbconf
907
2f83756f3041 Fixed dbmigrate issues.
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
55 self.log_sql = log_sql
2f83756f3041 Fixed dbmigrate issues.
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
56 self.db_exists = False
2f83756f3041 Fixed dbmigrate issues.
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
57 self.init_db()
2f83756f3041 Fixed dbmigrate issues.
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
58
2f83756f3041 Fixed dbmigrate issues.
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
59 def init_db(self):
2f83756f3041 Fixed dbmigrate issues.
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
60 engine = create_engine(self.dburi, echo=self.log_sql)
226
c6526b7531e9 rewritten db manage script to use sqlalchemy. Fixed sqlalchemy models to more generic.
Marcin Kuzminski <marcin@python-works.com>
parents: 88
diff changeset
61 init_model(engine)
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
62 self.sa = meta.Session
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
63
226
c6526b7531e9 rewritten db manage script to use sqlalchemy. Fixed sqlalchemy models to more generic.
Marcin Kuzminski <marcin@python-works.com>
parents: 88
diff changeset
64 def create_tables(self, override=False):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
65 """
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
66 Create a auth database
226
c6526b7531e9 rewritten db manage script to use sqlalchemy. Fixed sqlalchemy models to more generic.
Marcin Kuzminski <marcin@python-works.com>
parents: 88
diff changeset
67 """
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
68
1138
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
69 log.info("Any existing database is going to be destroyed")
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
70 if self.tests:
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
71 destroy = True
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
72 else:
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
73 destroy = ask_ok('Are you sure to destroy old database ? [y/n]')
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
74 if not destroy:
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
75 sys.exit()
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
76 if destroy:
9c45e11493fb fixed ldap settings creation, we need to fill in some bool defaults properly to make it work fine
Marcin Kuzminski <marcin@python-works.com>
parents: 1116
diff changeset
77 meta.Base.metadata.drop_all()
964
84bb5b8b498d changed dev and tests to postgressql for more error proof setup.
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
78
351
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
79 checkfirst = not override
d09381593b12 updated db manage script, and remove broken test
Marcin Kuzminski <marcin@python-works.com>
parents: 350
diff changeset
80 meta.Base.metadata.create_all(checkfirst=checkfirst)
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
81 log.info('Created tables for %s' % self.dbname)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
82
834
8924ed0e4f36 added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents: 781
diff changeset
83 def set_db_version(self):
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
84 ver = DbMigrateVersion()
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
85 ver.version = __dbversion__
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
86 ver.repository_id = 'rhodecode_db_migrations'
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
87 ver.repository_path = 'versions'
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
88 self.sa.add(ver)
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
89 log.info('db version set to: %s' % __dbversion__)
834
8924ed0e4f36 added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents: 781
diff changeset
90
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
91 def upgrade(self):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
92 """
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
93 Upgrades given database schema to given revision following
900
07f248329a3b updated migration for version 1.2
Marcin Kuzminski <marcin@python-works.com>
parents: 890
diff changeset
94 all needed steps, to perform the upgrade
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1138
diff changeset
95
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
96 """
841
78b3d2d730f2 fixed import problems
Marcin Kuzminski <marcin@python-works.com>
parents: 839
diff changeset
97
78b3d2d730f2 fixed import problems
Marcin Kuzminski <marcin@python-works.com>
parents: 839
diff changeset
98 from rhodecode.lib.dbmigrate.migrate.versioning import api
78b3d2d730f2 fixed import problems
Marcin Kuzminski <marcin@python-works.com>
parents: 839
diff changeset
99 from rhodecode.lib.dbmigrate.migrate.exceptions import \
78b3d2d730f2 fixed import problems
Marcin Kuzminski <marcin@python-works.com>
parents: 839
diff changeset
100 DatabaseNotControlledError
78b3d2d730f2 fixed import problems
Marcin Kuzminski <marcin@python-works.com>
parents: 839
diff changeset
101
1835
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
102 if 'sqlite' in self.dburi:
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
103 print (
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
104 '********************** WARNING **********************\n'
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
105 'Make sure your version of sqlite is at least 3.7.X. \n'
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
106 'Earlier versions are known to fail on some migrations\n'
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
107 '*****************************************************\n'
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
108 )
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
109 upgrade = ask_ok('You are about to perform database upgrade, make '
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
110 'sure You backed up your database before. '
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
111 'Continue ? [y/n]')
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
112 if not upgrade:
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
113 sys.exit('Nothing done')
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
114
843
3b21ba5f7cb0 fixed path issues in upgrade script
Marcin Kuzminski <marcin@python-works.com>
parents: 841
diff changeset
115 repository_path = jn(dn(dn(dn(os.path.realpath(__file__)))),
3b21ba5f7cb0 fixed path issues in upgrade script
Marcin Kuzminski <marcin@python-works.com>
parents: 841
diff changeset
116 'rhodecode/lib/dbmigrate')
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
117 db_uri = self.dburi
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
118
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
119 try:
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
120 curr_version = api.db_version(db_uri, repository_path)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
121 msg = ('Found current database under version'
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
122 ' control with version %s' % curr_version)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
123
1299
8eda822931c9 small fixes for interactive prompt in setup
Marcin Kuzminski <marcin@python-works.com>
parents: 1290
diff changeset
124 except (RuntimeError, DatabaseNotControlledError):
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
125 curr_version = 1
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
126 msg = ('Current database is not under version control. Setting'
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
127 ' as version %s' % curr_version)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
128 api.version_control(db_uri, repository_path, curr_version)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
129
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
130 print (msg)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
131
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
132 if curr_version == __dbversion__:
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
133 sys.exit('This database is already at the newest version')
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
134
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
135 #======================================================================
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
136 # UPGRADE STEPS
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
137 #======================================================================
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
138 class UpgradeSteps(object):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
139 """
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
140 Those steps follow schema versions so for example schema
900
07f248329a3b updated migration for version 1.2
Marcin Kuzminski <marcin@python-works.com>
parents: 890
diff changeset
141 for example schema with seq 002 == step_2 and so on.
07f248329a3b updated migration for version 1.2
Marcin Kuzminski <marcin@python-works.com>
parents: 890
diff changeset
142 """
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
143
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
144 def __init__(self, klass):
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
145 self.klass = klass
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
146
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
147 def step_0(self):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
148 # step 0 is the schema upgrade, and than follow proper upgrades
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
149 print ('attempting to do database upgrade to version %s' \
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
150 % __dbversion__)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
151 api.upgrade(db_uri, repository_path, __dbversion__)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
152 print ('Schema upgrade completed')
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
153
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
154 def step_1(self):
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
155 pass
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
156
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
157 def step_2(self):
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
158 print ('Patching repo paths for newer version of RhodeCode')
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
159 self.klass.fix_repo_paths()
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
160
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
161 print ('Patching default user of RhodeCode')
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
162 self.klass.fix_default_user()
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
163
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
164 log.info('Changing ui settings')
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
165 self.klass.create_ui_settings()
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
166
890
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
167 def step_3(self):
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
168 print ('Adding additional settings into RhodeCode db')
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
169 self.klass.fix_settings()
1510
90062009bb1e added default ldap option into migration
Marcin Kuzminski <marcin@python-works.com>
parents: 1503
diff changeset
170 print ('Adding ldap defaults')
90062009bb1e added default ldap option into migration
Marcin Kuzminski <marcin@python-works.com>
parents: 1503
diff changeset
171 self.klass.create_ldap_options(skip_existing=True)
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
172
1835
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
173 def step_4(self):
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1987
diff changeset
174 print ('create permissions and fix groups')
1987
77b5c24f1887 fixed found issues in upgrade script
Marcin Kuzminski <marcin@python-works.com>
parents: 1986
diff changeset
175 self.klass.create_permissions()
1985
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
176 self.klass.fixup_groups()
1835
971ce5e20856 added warning on sqlite when using migration.
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
177
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1987
diff changeset
178 def step_5(self):
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1987
diff changeset
179 pass
2006
34d009e5147a added clone_uri to API method for creating users
Marcin Kuzminski <marcin@python-works.com>
parents: 2000
diff changeset
180
2214
2fd474e63177 Starting RhodeCode 1.4 Branch
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
181 def step_6(self):
2fd474e63177 Starting RhodeCode 1.4 Branch
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
182 pass
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
183 upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1)
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
184
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
185 # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE
839
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
186 for step in upgrade_steps:
ad66bd0e5601 moved db migration do db manage script, added my cycles for upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 838
diff changeset
187 print ('performing upgrade step %s' % step)
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1694
diff changeset
188 getattr(UpgradeSteps(self), 'step_%s' % step)()
1987
77b5c24f1887 fixed found issues in upgrade script
Marcin Kuzminski <marcin@python-works.com>
parents: 1986
diff changeset
189 self.sa.commit()
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1987
diff changeset
190
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
191 def fix_repo_paths(self):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
192 """
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
193 Fixes a old rhodecode version path into new one without a '*'
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
194 """
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
195
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
196 paths = self.sa.query(RhodeCodeUi)\
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
197 .filter(RhodeCodeUi.ui_key == '/')\
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
198 .scalar()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
199
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
200 paths.ui_value = paths.ui_value.replace('*', '')
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
201
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
202 try:
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
203 self.sa.add(paths)
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
204 self.sa.commit()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
205 except:
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
206 self.sa.rollback()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
207 raise
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
208
838
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
209 def fix_default_user(self):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
210 """
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
211 Fixes a old default user with some 'nicer' default values,
838
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
212 used mostly for anonymous access
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
213 """
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
214 def_user = self.sa.query(User)\
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
215 .filter(User.username == 'default')\
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
216 .one()
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
217
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
218 def_user.name = 'Anonymous'
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
219 def_user.lastname = 'User'
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
220 def_user.email = 'anonymous@rhodecode.org'
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
221
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
222 try:
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
223 self.sa.add(def_user)
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
224 self.sa.commit()
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
225 except:
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
226 self.sa.rollback()
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
227 raise
12eb1a018199 db migrations:
Marcin Kuzminski <marcin@python-works.com>
parents: 837
diff changeset
228
890
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
229 def fix_settings(self):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
230 """
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
231 Fixes rhodecode settings adds ga_code key for google analytics
890
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
232 """
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
233
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1510
diff changeset
234 hgsettings3 = RhodeCodeSetting('ga_code', '')
907
2f83756f3041 Fixed dbmigrate issues.
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
235
890
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
236 try:
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
237 self.sa.add(hgsettings3)
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
238 self.sa.commit()
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
239 except:
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
240 self.sa.rollback()
042d38683d42 implemented #89 google analytics code
Marcin Kuzminski <marcin@python-works.com>
parents: 843
diff changeset
241 raise
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
242
2284
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
243 def admin_prompt(self, second=False, defaults={}):
459
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
244 if not self.tests:
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
245 import getpass
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
246
2284
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
247 # defaults
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
248 username = defaults.get('username')
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
249 password = defaults.get('password')
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
250 email = defaults.get('email')
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
251
597
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
252 def get_password():
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
253 password = getpass.getpass('Specify admin password '
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
254 '(min 6 chars):')
597
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
255 confirm = getpass.getpass('Confirm password:')
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
256
597
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
257 if password != confirm:
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
258 log.error('passwords mismatch')
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
259 return False
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
260 if len(password) < 6:
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
261 log.error('password is to short use at least 6 characters')
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
262 return False
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
263
597
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
264 return password
2284
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
265 if username is None:
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
266 username = raw_input('Specify admin username:')
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
267 if password is None:
597
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
268 password = get_password()
53128b6b9a4d added password validation, second try on paster setup-app,
Marcin Kuzminski <marcin@python-works.com>
parents: 569
diff changeset
269 if not password:
2284
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
270 #second try
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
271 password = get_password()
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
272 if not password:
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
273 sys.exit()
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
274 if email is None:
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
275 email = raw_input('Specify admin email:')
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 471
diff changeset
276 self.create_user(username, password, email, True)
459
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
277 else:
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
278 log.info('creating admin and regular test users')
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
279 from rhodecode.tests import TEST_USER_ADMIN_LOGIN,\
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
280 TEST_USER_ADMIN_PASS, TEST_USER_ADMIN_EMAIL,\
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
281 TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS,\
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
282 TEST_USER_REGULAR_EMAIL, TEST_USER_REGULAR2_LOGIN, \
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
283 TEST_USER_REGULAR2_PASS, TEST_USER_REGULAR2_EMAIL
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
284
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
285 self.create_user(TEST_USER_ADMIN_LOGIN, TEST_USER_ADMIN_PASS,
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
286 TEST_USER_ADMIN_EMAIL, True)
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
287
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
288 self.create_user(TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS,
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
289 TEST_USER_REGULAR_EMAIL, False)
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
290
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
291 self.create_user(TEST_USER_REGULAR2_LOGIN, TEST_USER_REGULAR2_PASS,
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
292 TEST_USER_REGULAR2_EMAIL, False)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
293
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
294 def create_ui_settings(self):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
295 """
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
296 Creates ui settings, fills out hooks
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
297 and disables dotencode
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
298 """
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1138
diff changeset
299
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
300 #HOOKS
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1399
diff changeset
301 hooks1_key = RhodeCodeUi.HOOK_UPDATE
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
302 hooks1_ = self.sa.query(RhodeCodeUi)\
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
303 .filter(RhodeCodeUi.ui_key == hooks1_key).scalar()
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
304
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
305 hooks1 = RhodeCodeUi() if hooks1_ is None else hooks1_
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
306 hooks1.ui_section = 'hooks'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
307 hooks1.ui_key = hooks1_key
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
308 hooks1.ui_value = 'hg update >&2'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
309 hooks1.ui_active = False
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
310
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1399
diff changeset
311 hooks2_key = RhodeCodeUi.HOOK_REPO_SIZE
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
312 hooks2_ = self.sa.query(RhodeCodeUi)\
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
313 .filter(RhodeCodeUi.ui_key == hooks2_key).scalar()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
314
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
315 hooks2 = RhodeCodeUi() if hooks2_ is None else hooks2_
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
316 hooks2.ui_section = 'hooks'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
317 hooks2.ui_key = hooks2_key
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
318 hooks2.ui_value = 'python:rhodecode.lib.hooks.repo_size'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
319
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
320 hooks3 = RhodeCodeUi()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
321 hooks3.ui_section = 'hooks'
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1399
diff changeset
322 hooks3.ui_key = RhodeCodeUi.HOOK_PUSH
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
323 hooks3.ui_value = 'python:rhodecode.lib.hooks.log_push_action'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
324
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
325 hooks4 = RhodeCodeUi()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
326 hooks4.ui_section = 'hooks'
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1399
diff changeset
327 hooks4.ui_key = RhodeCodeUi.HOOK_PULL
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
328 hooks4.ui_value = 'python:rhodecode.lib.hooks.log_pull_action'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
329
1694
1450ceb36aa6 enabled largefiles extension by default in rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
330 # For mercurial 1.7 set backward comapatibility with format
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
331 dotencode_disable = RhodeCodeUi()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
332 dotencode_disable.ui_section = 'format'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
333 dotencode_disable.ui_key = 'dotencode'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
334 dotencode_disable.ui_value = 'false'
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
335
1694
1450ceb36aa6 enabled largefiles extension by default in rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
336 # enable largefiles
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
337 largefiles = RhodeCodeUi()
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
338 largefiles.ui_section = 'extensions'
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
339 largefiles.ui_key = 'largefiles'
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
340 largefiles.ui_value = ''
1694
1450ceb36aa6 enabled largefiles extension by default in rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
341
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
342 self.sa.add(hooks1)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
343 self.sa.add(hooks2)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
344 self.sa.add(hooks3)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
345 self.sa.add(hooks4)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
346 self.sa.add(largefiles)
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
347
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
348 def create_ldap_options(self, skip_existing=False):
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
349 """Creates ldap settings"""
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
350
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
351 for k, v in [('ldap_active', 'false'), ('ldap_host', ''),
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
352 ('ldap_port', '389'), ('ldap_tls_kind', 'PLAIN'),
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
353 ('ldap_tls_reqcert', ''), ('ldap_dn_user', ''),
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
354 ('ldap_dn_pass', ''), ('ldap_base_dn', ''),
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
355 ('ldap_filter', ''), ('ldap_search_scope', ''),
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
356 ('ldap_attr_login', ''), ('ldap_attr_firstname', ''),
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
357 ('ldap_attr_lastname', ''), ('ldap_attr_email', '')]:
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
358
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
359 if skip_existing and RhodeCodeSetting.get_by_name(k) != None:
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
360 log.debug('Skipping option %s' % k)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
361 continue
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
362 setting = RhodeCodeSetting(k, v)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
363 self.sa.add(setting)
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
364
1985
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
365 def fixup_groups(self):
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
366 def_usr = User.get_by_username('default')
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
367 for g in RepoGroup.query().all():
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
368 g.group_name = g.get_new_name(g.name)
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
369 self.sa.add(g)
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
370 # get default perm
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
371 default = UserRepoGroupToPerm.query()\
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
372 .filter(UserRepoGroupToPerm.group == g)\
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
373 .filter(UserRepoGroupToPerm.user == def_usr)\
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
374 .scalar()
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
375
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
376 if default is None:
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
377 log.debug('missing default permission for group %s adding' % g)
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
378 ReposGroupModel()._create_default_perms(g)
40f04021fa61 Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
379
2284
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
380 def config_prompt(self, test_repo_path='', retries=3, defaults={}):
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
381 _path = defaults.get('repos_location')
1094
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
382 if retries == 3:
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
383 log.info('Setting up repositories config')
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
384
2284
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
385 if _path is not None:
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
386 path = _path
e285aa097a81 new setup-rhodecode command with optional defaults
Marcin Kuzminski <marcin@python-works.com>
parents: 2112
diff changeset
387 elif not self.tests and not test_repo_path:
1896
12135cff4c77 more user friendly message for repo path on setup
Marcin Kuzminski <marcin@python-works.com>
parents: 1835
diff changeset
388 path = raw_input(
2112
1477e048292e force and check for absolute path on rhodecode setup
Marcin Kuzminski <marcin@python-works.com>
parents: 2006
diff changeset
389 'Enter a valid absolute path to store repositories. '
1896
12135cff4c77 more user friendly message for repo path on setup
Marcin Kuzminski <marcin@python-works.com>
parents: 1835
diff changeset
390 'All repositories in that path will be added automatically:'
12135cff4c77 more user friendly message for repo path on setup
Marcin Kuzminski <marcin@python-works.com>
parents: 1835
diff changeset
391 )
459
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
392 else:
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
393 path = test_repo_path
1094
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
394 path_ok = True
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
395
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
396 # check proper dir
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: 327
diff changeset
397 if not os.path.isdir(path):
1094
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
398 path_ok = False
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
399 log.error('Given path %s is not a valid directory' % path)
1094
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
400
2112
1477e048292e force and check for absolute path on rhodecode setup
Marcin Kuzminski <marcin@python-works.com>
parents: 2006
diff changeset
401 elif not os.path.isabs(path):
1477e048292e force and check for absolute path on rhodecode setup
Marcin Kuzminski <marcin@python-works.com>
parents: 2006
diff changeset
402 path_ok = False
1477e048292e force and check for absolute path on rhodecode setup
Marcin Kuzminski <marcin@python-works.com>
parents: 2006
diff changeset
403 log.error('Given path %s is not an absolute path' % path)
1477e048292e force and check for absolute path on rhodecode setup
Marcin Kuzminski <marcin@python-works.com>
parents: 2006
diff changeset
404
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
405 # check write access
2112
1477e048292e force and check for absolute path on rhodecode setup
Marcin Kuzminski <marcin@python-works.com>
parents: 2006
diff changeset
406 elif not os.access(path, os.W_OK) and path_ok:
1094
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
407 path_ok = False
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
408 log.error('No write permission to given path %s' % path)
1094
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
409
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
410 if retries == 0:
1399
4134af931e91 Added info about sys.exit cause
Marcin Kuzminski <marcin@python-works.com>
parents: 1299
diff changeset
411 sys.exit('max retries reached')
1094
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
412 if path_ok is False:
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
413 retries -= 1
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
414 return self.config_prompt(test_repo_path, retries)
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
415
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
416 return path
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
417
44661d2a7b61 fixes #120 websetup command runs os.access on given path checking for write access
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
418 def create_settings(self, path):
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
419
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
420 self.create_ui_settings()
673
dd532af216d9 #49 Enabled anonymous access for web interface controllable from permissions pannel
Marcin Kuzminski <marcin@python-works.com>
parents: 657
diff changeset
421
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
422 #HG UI OPTIONS
549
f99075170eb4 more renames for rhode code !!
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
423 web1 = RhodeCodeUi()
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: 327
diff changeset
424 web1.ui_section = 'web'
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: 327
diff changeset
425 web1.ui_key = 'push_ssl'
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: 327
diff changeset
426 web1.ui_value = 'false'
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
427
549
f99075170eb4 more renames for rhode code !!
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
428 web2 = RhodeCodeUi()
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: 327
diff changeset
429 web2.ui_section = 'web'
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: 327
diff changeset
430 web2.ui_key = 'allow_archive'
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: 327
diff changeset
431 web2.ui_value = 'gz zip bz2'
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
432
549
f99075170eb4 more renames for rhode code !!
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
433 web3 = RhodeCodeUi()
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: 327
diff changeset
434 web3.ui_section = 'web'
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: 327
diff changeset
435 web3.ui_key = 'allow_push'
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: 327
diff changeset
436 web3.ui_value = '*'
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
437
549
f99075170eb4 more renames for rhode code !!
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
438 web4 = RhodeCodeUi()
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: 327
diff changeset
439 web4.ui_section = 'web'
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: 327
diff changeset
440 web4.ui_key = 'baseurl'
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
441 web4.ui_value = '/'
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
442
549
f99075170eb4 more renames for rhode code !!
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
443 paths = RhodeCodeUi()
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: 327
diff changeset
444 paths.ui_section = 'paths'
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: 327
diff changeset
445 paths.ui_key = '/'
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
446 paths.ui_value = path
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
447
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1510
diff changeset
448 hgsettings1 = RhodeCodeSetting('realm', 'RhodeCode authentication')
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1510
diff changeset
449 hgsettings2 = RhodeCodeSetting('title', 'RhodeCode')
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1510
diff changeset
450 hgsettings3 = RhodeCodeSetting('ga_code', '')
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
451
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
452 self.sa.add(web1)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
453 self.sa.add(web2)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
454 self.sa.add(web3)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
455 self.sa.add(web4)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
456 self.sa.add(paths)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
457 self.sa.add(hgsettings1)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
458 self.sa.add(hgsettings2)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
459 self.sa.add(hgsettings3)
837
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
460
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
461 self.create_ldap_options()
60cbde084047 fixed wrong migration schema
Marcin Kuzminski <marcin@python-works.com>
parents: 835
diff changeset
462
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: 327
diff changeset
463 log.info('created ui config')
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
464
491
fefffd6fd5f4 Added some more tests, rewrite testing schema, to autogenerate fresh db, new index.
Marcin Kuzminski <marcin@python-works.com>
parents: 471
diff changeset
465 def create_user(self, username, password, email='', admin=False):
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
466 log.info('creating user %s' % username)
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
467 UserModel().create_or_update(username, password, email,
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2285
diff changeset
468 firstname='RhodeCode', lastname='Admin',
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
469 active=True, admin=admin)
459
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
470
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
471 def create_default_user(self):
7c978511c951 implemented basic (startup) nose test suite.
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
472 log.info('creating default user')
1634
1d904d972c47 User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents: 1633
diff changeset
473 # create default user for handling default permissions.
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
474 UserModel().create_or_update(username='default',
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
475 password=str(uuid.uuid1())[:8],
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
476 email='anonymous@rhodecode.org',
2513
388843a3a3c0 Updated create_or_update method to not change API key when password is not updated
Marcin Kuzminski <marcin@python-works.com>
parents: 2285
diff changeset
477 firstname='Anonymous', lastname='User')
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
478
239
b18f89d6d17f Adde draft for permissions systems, made all needed decorators, and checks. For future usage in the system.
Marcin Kuzminski <marcin@python-works.com>
parents: 234
diff changeset
479 def create_permissions(self):
1783
dde0ef0d886f fixes #324 proper largefiles extension enable
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
480 # module.(access|create|change|delete)_[name]
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
481 # module.(none|read|write|admin)
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
482
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2513
diff changeset
483 for p in Permission.PERMS:
1987
77b5c24f1887 fixed found issues in upgrade script
Marcin Kuzminski <marcin@python-works.com>
parents: 1986
diff changeset
484 if not Permission.get_by_key(p[0]):
1986
367d76f5fcf5 added re-creation of permissions into step4 upgrade
Marcin Kuzminski <marcin@python-works.com>
parents: 1985
diff changeset
485 new_perm = Permission()
367d76f5fcf5 added re-creation of permissions into step4 upgrade
Marcin Kuzminski <marcin@python-works.com>
parents: 1985
diff changeset
486 new_perm.permission_name = p[0]
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2513
diff changeset
487 new_perm.permission_longname = p[0]
1986
367d76f5fcf5 added re-creation of permissions into step4 upgrade
Marcin Kuzminski <marcin@python-works.com>
parents: 1985
diff changeset
488 self.sa.add(new_perm)
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
489
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
490 def populate_default_permissions(self):
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
491 log.info('creating default user permissions')
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
492
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
493 default_user = self.sa.query(User)\
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
494 .filter(User.username == 'default').scalar()
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
495
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
496 reg_perm = UserToPerm()
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
497 reg_perm.user = default_user
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
498 reg_perm.permission = self.sa.query(Permission)\
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
499 .filter(Permission.permission_name == 'hg.register.manual_activate')\
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
500 .scalar()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
501
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
502 create_repo_perm = UserToPerm()
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
503 create_repo_perm.user = default_user
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
504 create_repo_perm.permission = self.sa.query(Permission)\
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
505 .filter(Permission.permission_name == 'hg.create.repository')\
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
506 .scalar()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
507
417
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
508 default_repo_perm = UserToPerm()
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
509 default_repo_perm.user = default_user
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
510 default_repo_perm.permission = self.sa.query(Permission)\
3ed2d46a2ca7 permission refactoring,
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
511 .filter(Permission.permission_name == 'repository.read')\
629
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
512 .scalar()
7e536d1af60d Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents: 597
diff changeset
513
1734
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
514 self.sa.add(reg_perm)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
515 self.sa.add(create_repo_perm)
48d4fcf04a29 another major refactoring with session management
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
516 self.sa.add(default_repo_perm)