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