Mercurial > kallithea
changeset 2074:6c6718c06ea2
merge beta into stable
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 29 Feb 2012 23:11:13 +0200 |
parents | c238df8ceb24 (current diff) 3aae2f18e5ab (diff) |
children | ecd59c28f432 |
files | docs/changelog.rst docs/upgrade.rst rhodecode/__init__.py rhodecode/controllers/changeset.py rhodecode/controllers/summary.py rhodecode/lib/utils.py rhodecode/model/forms.py rhodecode/model/scm.py rhodecode/templates/admin/repos/repos.html |
diffstat | 9 files changed, 42 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/docs/upgrade.rst Wed Feb 29 21:43:54 2012 +0100 +++ b/docs/upgrade.rst Wed Feb 29 23:11:13 2012 +0200 @@ -29,12 +29,13 @@ content after the automerge. .. note:: - The next steps only apply to upgrading from non bugfix releases eg. from - any minor or major releases. Bugfix releases (eg. 1.1.2->1.1.3) will - not have any database schema changes or whoosh library updates. + Please always make sure your .ini files are upto date. Often errors are + caused by missing params added in new versions. + It is also recommended that you rebuild the whoosh index after upgrading since -the new whoosh version could introduce some incompatible index changes. +the new whoosh version could introduce some incompatible index changes. Please +Read the changelog to see if there were any changes to whoosh. The final step is to upgrade the database. To do this simply run::
--- a/rhodecode/controllers/changeset.py Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/controllers/changeset.py Wed Feb 29 23:11:13 2012 +0200 @@ -53,7 +53,7 @@ def anchor_url(revision, path): fid = h.FID(revision, path) - return h.url.current(anchor=fid, **request.GET) + return h.url.current(anchor=fid, **dict(request.GET)) def get_ignore_ws(fid, GET):
--- a/rhodecode/controllers/summary.py Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/controllers/summary.py Wed Feb 29 23:11:13 2012 +0200 @@ -28,8 +28,8 @@ import logging from time import mktime from datetime import timedelta, date -from itertools import product from urlparse import urlparse +from rhodecode.lib.compat import product from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \ NodeDoesNotExistError
--- a/rhodecode/lib/compat.py Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/lib/compat.py Wed Feb 29 23:11:13 2012 +0200 @@ -379,3 +379,21 @@ else: kill = os.kill + + +#============================================================================== +# itertools.product +#============================================================================== + +try: + from itertools import product +except ImportError: + def product(*args, **kwds): + # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy + # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 + pools = map(tuple, args) * kwds.get('repeat', 1) + result = [[]] + for pool in pools: + result = [x + [y] for x in result for y in pool] + for prod in result: + yield tuple(prod)
--- a/rhodecode/lib/utils.py Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/lib/utils.py Wed Feb 29 23:11:13 2012 +0200 @@ -24,6 +24,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import os +import re import logging import datetime import traceback @@ -56,6 +57,8 @@ log = logging.getLogger(__name__) +REMOVED_REPO_PAT = re.compile(r'rm__\d{8}_\d{6}_\d{6}__.*') + def recursive_replace(str_, replace=' '): """Recursive replace of given sign to just one instance @@ -393,6 +396,10 @@ # group = rgm.create(group_name, desc, parent, just_db=True) # sa.commit() + # skip folders that are now removed repos + if REMOVED_REPO_PAT.match(group_name): + break + if group is None: log.debug('creating group level: %s group_name: %s' % (lvl, group_name)) group = RepoGroup(group_name, parent)
--- a/rhodecode/model/forms.py Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/model/forms.py Wed Feb 29 23:11:13 2012 +0200 @@ -487,7 +487,7 @@ class _UniqSystemEmail(formencode.validators.FancyValidator): def to_python(self, value, state): value = value.lower() - if old_data.get('email', '').lower() != value: + if (old_data.get('email') or '').lower() != value: user = User.get_by_email(value, case_insensitive=True) if user: raise formencode.Invalid(
--- a/rhodecode/model/scm.py Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/model/scm.py Wed Feb 29 23:11:13 2012 +0200 @@ -38,7 +38,7 @@ from rhodecode.lib import safe_str from rhodecode.lib.auth import HasRepoPermissionAny, HasReposGroupPermissionAny from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, \ - action_logger, EmptyChangeset + action_logger, EmptyChangeset, REMOVED_REPO_PAT from rhodecode.model import BaseModel from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \ UserFollowing, UserLog, User, RepoGroup @@ -182,6 +182,9 @@ repos = {} for name, path in get_filesystem_repos(repos_path, recursive=True): + # skip removed repos + if REMOVED_REPO_PAT.match(name): + continue # name need to be decomposed and put back together using the / # since this is internal storage separator for rhodecode
--- a/rhodecode/templates/admin/repos/repos.html Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/templates/admin/repos/repos.html Wed Feb 29 23:11:13 2012 +0200 @@ -42,8 +42,8 @@ </tr> </thead> - %for cnt,repo in enumerate(c.repos_list,1): - <tr class="parity${cnt%2}"> + %for cnt,repo in enumerate(c.repos_list): + <tr class="parity${(cnt+1)%2}"> <td class="quick_repo_menu"> ${dt.quick_menu(repo['name'])} </td>
--- a/rhodecode/templates/index_base.html Wed Feb 29 21:43:54 2012 +0100 +++ b/rhodecode/templates/index_base.html Wed Feb 29 23:11:13 2012 +0200 @@ -69,8 +69,8 @@ </tr> </thead> <tbody> - %for cnt,repo in enumerate(c.repos_list,1): - <tr class="parity${cnt%2}"> + %for cnt,repo in enumerate(c.repos_list): + <tr class="parity${(cnt+1)%2}"> ##QUICK MENU <td class="quick_repo_menu"> ${dt.quick_menu(repo['name'])} @@ -115,7 +115,7 @@ </div> </div> <script> - YUD.get('repo_count').innerHTML = ${cnt}; + YUD.get('repo_count').innerHTML = ${cnt+1}; var func = function(node){ return node.parentNode.parentNode.parentNode.parentNode; }