Marcin Kuzminski committed 6c6718c Merge

merge beta into stable

  • Participants
  • Parent commits c238df8, 3aae2f1
  • Branches default

Comments (0)

Files changed (11)

File docs/changelog.rst

File contents unchanged.

File docs/upgrade.rst

 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::

File rhodecode/

File contents unchanged.

File rhodecode/controllers/

 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):

File rhodecode/controllers/

 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, \

File rhodecode/lib/

     kill = os.kill
+# itertools.product
+    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)

File rhodecode/lib/

 # along with this program.  If not, see <>.
 import os
+import re
 import logging
 import datetime
 import traceback
 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
 #            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)

File rhodecode/model/

     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(

File rhodecode/model/

 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
         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

File rhodecode/templates/admin/repos/repos.html

-          %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">

File rhodecode/templates/index_base.html

-            %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">
-      YUD.get('repo_count').innerHTML = ${cnt};
+      YUD.get('repo_count').innerHTML = ${cnt+1};
       var func = function(node){
           return node.parentNode.parentNode.parentNode.parentNode;