diff --git a/docs/upgrade.rst b/docs/upgrade.rst
--- a/docs/upgrade.rst
+++ b/docs/upgrade.rst
@@ -29,12 +29,13 @@ to make a backup of your configuration f
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::
diff --git a/rhodecode/controllers/changeset.py b/rhodecode/controllers/changeset.py
--- a/rhodecode/controllers/changeset.py
+++ b/rhodecode/controllers/changeset.py
@@ -53,7 +53,7 @@ log = logging.getLogger(__name__)
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):
diff --git a/rhodecode/controllers/summary.py b/rhodecode/controllers/summary.py
--- a/rhodecode/controllers/summary.py
+++ b/rhodecode/controllers/summary.py
@@ -28,8 +28,8 @@ import calendar
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
diff --git a/rhodecode/lib/compat.py b/rhodecode/lib/compat.py
--- a/rhodecode/lib/compat.py
+++ b/rhodecode/lib/compat.py
@@ -379,3 +379,21 @@ if __platform__ in PLATFORM_WIN:
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)
diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py
--- a/rhodecode/lib/utils.py
+++ b/rhodecode/lib/utils.py
@@ -24,6 +24,7 @@
# along with this program. If not, see