##// END OF EJS Templates
merge beta into stable
marcink -
r2074:6c6718c0 merge default
parent child Browse files
Show More
@@ -29,12 +29,13 b' to make a backup of your configuration f'
29 29 content after the automerge.
30 30
31 31 .. note::
32 The next steps only apply to upgrading from non bugfix releases eg. from
33 any minor or major releases. Bugfix releases (eg. 1.1.2->1.1.3) will
34 not have any database schema changes or whoosh library updates.
32 Please always make sure your .ini files are upto date. Often errors are
33 caused by missing params added in new versions.
34
35 35
36 36 It is also recommended that you rebuild the whoosh index after upgrading since
37 the new whoosh version could introduce some incompatible index changes.
37 the new whoosh version could introduce some incompatible index changes. Please
38 Read the changelog to see if there were any changes to whoosh.
38 39
39 40
40 41 The final step is to upgrade the database. To do this simply run::
@@ -53,7 +53,7 b' log = logging.getLogger(__name__)'
53 53
54 54 def anchor_url(revision, path):
55 55 fid = h.FID(revision, path)
56 return h.url.current(anchor=fid, **request.GET)
56 return h.url.current(anchor=fid, **dict(request.GET))
57 57
58 58
59 59 def get_ignore_ws(fid, GET):
@@ -28,8 +28,8 b' import calendar'
28 28 import logging
29 29 from time import mktime
30 30 from datetime import timedelta, date
31 from itertools import product
32 31 from urlparse import urlparse
32 from rhodecode.lib.compat import product
33 33
34 34 from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \
35 35 NodeDoesNotExistError
@@ -379,3 +379,21 b' if __platform__ in PLATFORM_WIN:'
379 379
380 380 else:
381 381 kill = os.kill
382
383
384 #==============================================================================
385 # itertools.product
386 #==============================================================================
387
388 try:
389 from itertools import product
390 except ImportError:
391 def product(*args, **kwds):
392 # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
393 # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
394 pools = map(tuple, args) * kwds.get('repeat', 1)
395 result = [[]]
396 for pool in pools:
397 result = [x + [y] for x in result for y in pool]
398 for prod in result:
399 yield tuple(prod)
@@ -24,6 +24,7 b''
24 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26 26 import os
27 import re
27 28 import logging
28 29 import datetime
29 30 import traceback
@@ -56,6 +57,8 b' from rhodecode.model.repos_group import '
56 57
57 58 log = logging.getLogger(__name__)
58 59
60 REMOVED_REPO_PAT = re.compile(r'rm__\d{8}_\d{6}_\d{6}__.*')
61
59 62
60 63 def recursive_replace(str_, replace=' '):
61 64 """Recursive replace of given sign to just one instance
@@ -393,6 +396,10 b' def map_groups(groups):'
393 396 # group = rgm.create(group_name, desc, parent, just_db=True)
394 397 # sa.commit()
395 398
399 # skip folders that are now removed repos
400 if REMOVED_REPO_PAT.match(group_name):
401 break
402
396 403 if group is None:
397 404 log.debug('creating group level: %s group_name: %s' % (lvl, group_name))
398 405 group = RepoGroup(group_name, parent)
@@ -487,7 +487,7 b' def UniqSystemEmail(old_data):'
487 487 class _UniqSystemEmail(formencode.validators.FancyValidator):
488 488 def to_python(self, value, state):
489 489 value = value.lower()
490 if old_data.get('email', '').lower() != value:
490 if (old_data.get('email') or '').lower() != value:
491 491 user = User.get_by_email(value, case_insensitive=True)
492 492 if user:
493 493 raise formencode.Invalid(
@@ -38,7 +38,7 b' from rhodecode.lib import helpers as h'
38 38 from rhodecode.lib import safe_str
39 39 from rhodecode.lib.auth import HasRepoPermissionAny, HasReposGroupPermissionAny
40 40 from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, \
41 action_logger, EmptyChangeset
41 action_logger, EmptyChangeset, REMOVED_REPO_PAT
42 42 from rhodecode.model import BaseModel
43 43 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
44 44 UserFollowing, UserLog, User, RepoGroup
@@ -182,6 +182,9 b' class ScmModel(BaseModel):'
182 182 repos = {}
183 183
184 184 for name, path in get_filesystem_repos(repos_path, recursive=True):
185 # skip removed repos
186 if REMOVED_REPO_PAT.match(name):
187 continue
185 188
186 189 # name need to be decomposed and put back together using the /
187 190 # since this is internal storage separator for rhodecode
@@ -42,8 +42,8 b''
42 42 </tr>
43 43 </thead>
44 44
45 %for cnt,repo in enumerate(c.repos_list,1):
46 <tr class="parity${cnt%2}">
45 %for cnt,repo in enumerate(c.repos_list):
46 <tr class="parity${(cnt+1)%2}">
47 47 <td class="quick_repo_menu">
48 48 ${dt.quick_menu(repo['name'])}
49 49 </td>
@@ -69,8 +69,8 b''
69 69 </tr>
70 70 </thead>
71 71 <tbody>
72 %for cnt,repo in enumerate(c.repos_list,1):
73 <tr class="parity${cnt%2}">
72 %for cnt,repo in enumerate(c.repos_list):
73 <tr class="parity${(cnt+1)%2}">
74 74 ##QUICK MENU
75 75 <td class="quick_repo_menu">
76 76 ${dt.quick_menu(repo['name'])}
@@ -115,7 +115,7 b''
115 115 </div>
116 116 </div>
117 117 <script>
118 YUD.get('repo_count').innerHTML = ${cnt};
118 YUD.get('repo_count').innerHTML = ${cnt+1};
119 119 var func = function(node){
120 120 return node.parentNode.parentNode.parentNode.parentNode;
121 121 }
General Comments 0
You need to be logged in to leave comments. Login now