diff --git a/Allura/allura/command/base.py b/Allura/allura/command/base.py
index 536159d..38bb0d5 100644
--- a/Allura/allura/command/base.py
+++ b/Allura/allura/command/base.py
@@ -20,7 +20,6 @@
 import logging
 import shlex
 from multiprocessing import Process
-from pkg_resources import iter_entry_points
 
 import pylons
 from paste.script import command
@@ -31,6 +30,7 @@
 import ming
 from allura.config.environment import load_environment
 from allura.lib.decorators import task
+from allura.lib.helpers import iter_entry_points
 
 log = None
 
@@ -117,4 +117,3 @@
 
     def teardown_globals(self):
         self.registry.cleanup()
-
diff --git a/Allura/allura/config/middleware.py b/Allura/allura/config/middleware.py
index 1e9b0c7..7395f93 100644
--- a/Allura/allura/config/middleware.py
+++ b/Allura/allura/config/middleware.py
@@ -161,15 +161,17 @@
     #    streaming=true ensures they won't be cleaned up till
     #    the WSGI application's iterator is exhausted
     app = RegistryManager(app, streaming=True)
-    # Make sure that the wsgi.scheme is set appropriately when we
-    # have the funky HTTP_X_SFINC_SSL  environ var
-    if asbool(app_conf.get('auth.method', 'local')=='sfx'):
-        app = set_scheme_middleware(app)
     # "task" wsgi would get a 2nd request to /error/document if we used this middleware
     if config.get('override_root') != 'task':
         # Converts exceptions to HTTP errors, shows traceback in debug mode
         tg.error.footer_html = '<!-- %s %s -->'  # don't use TG footer with extra CSS & images that take time to load
         app = tg.error.ErrorHandler(app, global_conf, **config['pylons.errorware'])
+
+        # Make sure that the wsgi.scheme is set appropriately when we
+        # have the funky HTTP_X_SFINC_SSL  environ var
+        if asbool(app_conf.get('auth.method', 'local')=='sfx'):
+            app = set_scheme_middleware(app)
+        
         # Redirect some status codes to /error/document
         if asbool(config['debug']):
             app = StatusCodeRedirect(app, base_config.handle_status_codes)
diff --git a/Allura/allura/config/resources.py b/Allura/allura/config/resources.py
index 9122687..6e231e4 100644
--- a/Allura/allura/config/resources.py
+++ b/Allura/allura/config/resources.py
@@ -20,6 +20,8 @@
 
 import pkg_resources
 
+from allura.lib.helpers import iter_entry_points
+
 log = logging.getLogger(__name__)
 
 def register_ew_resources(manager):
@@ -29,7 +31,7 @@
         'css', pkg_resources.resource_filename('allura', 'lib/widgets/resources/css'))
     manager.register_directory(
         'allura', pkg_resources.resource_filename('allura', 'public/nf'))
-    for ep in pkg_resources.iter_entry_points('allura'):
+    for ep in iter_entry_points('allura'):
         try:
             manager.register_directory(
                 'tool/%s' % ep.name.lower(),
@@ -39,7 +41,7 @@
         except ImportError:
             log.warning('Cannot import entry point %s', ep)
             raise
-    for ep in pkg_resources.iter_entry_points('allura.theme'):
+    for ep in iter_entry_points('allura.theme'):
         try:
             theme = ep.load()
             theme.register_ew_resources(manager, ep.name)
diff --git a/Allura/allura/controllers/project.py b/Allura/allura/controllers/project.py
index 5f293a6..9914dc9 100644
--- a/Allura/allura/controllers/project.py
+++ b/Allura/allura/controllers/project.py
@@ -20,7 +20,6 @@
 from datetime import datetime, timedelta
 from urllib import unquote
 from itertools import chain, islice
-from pkg_resources import iter_entry_points
 
 from bson import ObjectId
 from tg import expose, flash, redirect, validate, request, response, config
@@ -38,6 +37,7 @@
 from allura.app import SitemapEntry
 from allura.lib.base import WsgiDispatchController
 from allura.lib import helpers as h
+from allura.lib.helpers import iter_entry_points
 from allura.lib import utils
 from allura.lib.decorators import require_post
 from allura.controllers.error import ErrorController
@@ -310,7 +310,7 @@
         for s in c.project.grouped_navbar_entries():
             entry = dict(name=s.label, url=s.url, icon=s.ui_icon, tool_name=s.tool_name)
             if s.children:
-                entry['children'] = [dict(name=child.label, url=child.url, icon=child.ui_icon, tool_name=child.tool_name) 
+                entry['children'] = [dict(name=child.label, url=child.url, icon=child.ui_icon, tool_name=child.tool_name)
                                     for child in s.children]
             menu.append(entry)
         return dict(menu=menu)
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index f984a91..14ce77a 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -20,7 +20,7 @@
 import logging
 import re
 import difflib
-from urllib import quote, unquote
+from urllib import quote, unquote, quote_plus
 from collections import defaultdict
 from itertools import islice
 
@@ -459,24 +459,24 @@
             result.update(self._commit.context())
         return result
 
-    @require_post()
     @expose('jinja:allura:templates/repo/tarball.html')
     def tarball(self, **kw):
-        path = kw.pop('path', None)
+        path = request.params.get('path')
         if not asbool(tg.config.get('scm.repos.tarball.enable', False)):
             raise exc.HTTPNotFound()
         rev = self._commit.url().split('/')[-2]
         status = c.app.repo.get_tarball_status(rev, path)
-        if status is None:
+        if status is None and request.method == 'POST':
             allura.tasks.repo_tasks.tarball.post(revision=rev, path=path)
-        return dict(commit=self._commit, revision=rev, status=status)
+            redirect('tarball' + '?path={0}'.format(path) if path else '')
+        return dict(commit=self._commit, revision=rev, status=status or 'na')
 
     @expose('json:')
     def tarball_status(self, path=None, **kw):
         if not asbool(tg.config.get('scm.repos.tarball.enable', False)):
             raise exc.HTTPNotFound()
         rev = self._commit.url().split('/')[-2]
-        return dict(status=c.app.repo.get_tarball_status(rev, path))
+        return dict(status=c.app.repo.get_tarball_status(rev, path) or 'na')
 
 
     @expose('jinja:allura:templates/repo/log.html')
diff --git a/Allura/allura/ext/admin/admin_main.py b/Allura/allura/ext/admin/admin_main.py
index 22bd228..314c3a9 100644
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -292,7 +292,7 @@
                 '<input name="source_url">'
                 '<input type="submit">'
                 '</form>')
-        for ep in pkg_resources.iter_entry_points('allura', repo_type):
+        for ep in h.iter_entry_points('allura', repo_type):
             break
         if ep is None or source_url is None:
             raise exc.HTTPNotFound
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index 7f45f69..276af63 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -178,7 +178,7 @@
         # Cache some loaded entry points
         def _cache_eps(section_name, dict_cls=dict):
             d = dict_cls()
-            for ep in pkg_resources.iter_entry_points(section_name):
+            for ep in h.iter_entry_points(section_name):
                 value = ep.load()
                 d[ep.name] = value
             return d
diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py
index 4458c48..d4652ab 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -35,7 +35,7 @@
 log = logging.getLogger(__name__)
 
 
-tool_entry_points = list(pkg_resources.iter_entry_points('allura'))
+tool_entry_points = list(h.iter_entry_points('allura'))
 
 class StaticFilesMiddleware(object):
     '''Custom static file middleware
@@ -169,7 +169,7 @@
         if not resp:
             resp = self.app
         return resp(environ, start_response)
-    
+
 class AlluraTimerMiddleware(TimerMiddleware):
     def timers(self):
         import genshi
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index b7b0060..3715de6 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -49,7 +49,7 @@
 from formencode.variabledecode import variable_decode
 import formencode
 from jinja2 import Markup
-from paste.deploy.converters import asbool
+from paste.deploy.converters import asbool, aslist
 
 from webhelpers import date, feedgenerator, html, number, misc, text
 
@@ -984,3 +984,13 @@
     text = re_angle_bracket_open.sub('&lt;', text)
     text = re_angle_bracket_close.sub('&gt;', text)
     return text
+
+
+def iter_entry_points(group, *a, **kw):
+    '''
+    yield entry points that have not been disabled in the config
+    '''
+    disabled = aslist(tg.config.get('disable_entry_points.' + group), sep=',')
+    for ep in pkg_resources.iter_entry_points(group, *a, **kw):
+        if ep.name not in disabled:
+            yield ep
diff --git a/Allura/allura/lib/package_path_loader.py b/Allura/allura/lib/package_path_loader.py
index 9bee4c4..8272acf 100644
--- a/Allura/allura/lib/package_path_loader.py
+++ b/Allura/allura/lib/package_path_loader.py
@@ -124,12 +124,11 @@
 """
 import pkg_resources
 import os
-from collections import defaultdict
 
 import jinja2
 from ming.utils import LazyProperty
 
-from allura.lib.helpers import topological_sort
+from allura.lib.helpers import topological_sort, iter_entry_points
 
 
 class PackagePathLoader(jinja2.BaseLoader):
@@ -163,7 +162,7 @@
         paths = self.default_paths[:]  # copy default_paths
         paths[-1:0] = [  # insert all eps just before last item, by default
                 [ep.name, pkg_resources.resource_filename(ep.module_name, "")]
-                for ep in pkg_resources.iter_entry_points(self.override_entrypoint)
+                for ep in iter_entry_points(self.override_entrypoint)
             ]
         return paths
 
@@ -190,7 +189,7 @@
         """
         order_rules = []
         replacement_rules = {}
-        for ep in pkg_resources.iter_entry_points(self.override_entrypoint):
+        for ep in iter_entry_points(self.override_entrypoint):
             for rule in getattr(ep.load(), 'template_path_rules', []):
                 if rule[0] == '>':
                     order_rules.append((ep.name, rule[1]))
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index fb58ce9..b048ce6 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -28,7 +28,6 @@
 import uuid
 from pytz import timezone
 from datetime import timedelta, date, datetime, time
-from pkg_resources import iter_entry_points
 
 import iso8601
 import pymongo
diff --git a/Allura/allura/templates/repo/tarball.html b/Allura/allura/templates/repo/tarball.html
index e4a9cad..f929433 100644
--- a/Allura/allura/templates/repo/tarball.html
+++ b/Allura/allura/templates/repo/tarball.html
@@ -53,19 +53,23 @@
             left: 10 // Left position relative to parent in px
         };
         var spinner = new Spinner(opts).spin($('#snapshot_status')[0]);
-        var delay = 5000;
-        // Check tarball status every 5 seconds
+        var delay = 500;
         function check_status() {
             $.get('{{commit.url()}}tarball_status?path={{path}}', function(data) {
-                if (data.status === 'ready') {
+                if (data.status !== 'na') {
                     spinner.stop();
-                    $('#snapshot_status h2').toggle();
+                    $('#snapshot_status h2').hide();
+                    $('#snapshot_status h2.' + data.status).show();
                     {% if 'no-redirect' not in request.params %}
                         window.location.href = '{{c.app.repo.tarball_url(revision, path)}}';
                     {% endif %}
                 } else {
-                    if (delay < 600000){
-                        delay = delay * 2
+                    if (delay < 60000){
+                        delay = delay * 2;
+                    }
+                    if (delay >= 16000) {
+                      // we've been waiting at least 15 seconds
+                      $('#snapshot_status form').show();
                     }
                     window.setTimeout(check_status, delay);
                 }
@@ -82,6 +86,12 @@
 <div id='snapshot_status'>
     <h2 class="busy">Generating snapshot...</h2>
     <h2 class="ready">Your download will begin shortly, or use this <a href="{{c.app.repo.tarball_url(revision, path)}}">direct link</a>.</h2>
+    <h2 class="na">Checking snapshot status...</h2>
+    <form action="tarball" method="post">
+      <p>We're having trouble finding that snapshot. Would you like to resubmit?</p>
+      <input type="hidden" name="path" value="{{path}}" />
+      <input type="submit" value="Resubmit Snapshot Request" />
+    </form>
 </div>
 {% endblock %}
 
@@ -89,9 +99,17 @@
 <style type="text/css">
     #snapshot_status h2 {
         padding-left: 33px;
-    }
-    #snapshot_status .{{ 'busy' if status == 'ready' else 'ready' }} {
         display: none;
     }
+    #snapshot_status .{{ status }} {
+        display: block;
+    }
+    #snapshot_status form {
+      display: none;
+      margin-left: 20px;
+    }
+    #snapshot_status form p {
+      padding-left: 0;
+    }
 </style>
 {% endblock %}
diff --git a/Allura/allura/templates/widgets/repo/log.html b/Allura/allura/templates/widgets/repo/log.html
index 69d7129..ec6b048 100644
--- a/Allura/allura/templates/widgets/repo/log.html
+++ b/Allura/allura/templates/widgets/repo/log.html
@@ -54,6 +54,14 @@
                 pushed by {{ user_link(commit.committed.email, commit.committed.name) }}
                 {% endif %}
                 {{g.markdown.convert(commit.message)}}
+                {% if commit.rename_details %}
+                    <div>
+                      <b>renamed from</b>
+                      <a href={{commit.rename_details['commit_url']}}log/?path={{ commit.rename_details['path'] }}>
+                        {{ commit.rename_details['path'] }}
+                      </a>
+                    </div>
+                {% endif %}
             </div>
           </td>
           <td style="vertical-align: text-top">
diff --git a/Allura/docs/extending.rst b/Allura/docs/extending.rst
index a430202..6a6abe0 100644
--- a/Allura/docs/extending.rst
+++ b/Allura/docs/extending.rst
@@ -37,7 +37,15 @@
 
 A listing of available 3rd-party extensions is at https://sourceforge.net/p/allura/wiki/Extensions/
 
-Other entry points are used to provider ``paster`` commands and ``easy_widget`` configuration.
+To disable any Allura entry point, simply add an entry in your ``.ini`` config file
+with names and values corresponding to entry points defined in any ``setup.py`` file.
+For example if you have ForgeImporter set up, but want to disable the google code importers::
+
+    disable_entry_points.allura.project_importers = google-code
+    disable_entry_points.allura.importers = google-code-tracker, google-code-repo
+
+Other entry points are used to provide ``paster`` commands and ``easy_widget`` configuration,
+which are not part of Allura but are used by Allura.
 
 
 Event Handlers
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index e0e47b8..7262efa 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -301,13 +301,22 @@
         path = path.strip('/') if path else None
         if exclude is not None:
             revs.extend(['^%s' % e for e in exclude])
-
-        for ci, refs in self._iter_commits_with_refs(revs, '--', path):
+        args = ['--name-status', revs, '--', path]
+        if path:
+            args = ['--follow'] + args
+        for ci, refs, renamed in self._iter_commits_with_refs(*args):
             if id_only:
                 yield ci.hexsha
             else:
                 size = None
+                rename_details = {}
                 if path:
+                    if renamed and renamed['to'] == path:
+                        rename_details['path'] = '/' + renamed['from']
+                        rename_details['commit_url'] = self._repo.url_for_commit(
+                            ci.hexsha
+                        )
+
                     try:
                         node = ci.tree/path
                         size = node.size if node.type == 'blob' else None
@@ -329,7 +338,11 @@
                         'refs': refs,
                         'parents': [pci.hexsha for pci in ci.parents],
                         'size': size,
+                        'rename_details': rename_details,
                     }
+                if rename_details:
+                    # we do not need to show commits before rename
+                    break
 
     def _iter_commits_with_refs(self, *args, **kwargs):
         """
@@ -349,16 +362,46 @@
         of lazy-loading the commit data is probably fine.  But if this
         ends up being a bottleneck, that would be one possibile
         optimization.
+
+        Renaming
+        Detection of renaming can be implemented using diff with parent
+        with create_path=True. But taking diffs is slow. That's why
+        --name-status is added to log.
+        Then log returns something like this:
+            <commit hash>x00 <refs>
+            \n # empty line
+            R100 <renamed from path> <renamed to path> # when rename happens
+            A\t<some path> # other cases
+            D\t<some path> # other cases
+            etc
         """
         proc = self._git.git.log(*args, format='%H%x00%d', as_process=True, **kwargs)
         stream = proc.stdout
+        commit_lines = []
         while True:
             line = stream.readline()
-            if not line:
-                break
-            hexsha, decoration = line.strip().split('\x00')
-            refs = decoration.strip(' ()').split(', ') if decoration else []
-            yield (git.Commit(self._git, gitdb.util.hex_to_bin(hexsha)), refs)
+            if '\x00' in line or not(len(line)):
+                # hash line read, need to yield previous commit
+                # first, cleaning lines a bit
+                commit_lines = [
+                    ln.strip('\n\ ').replace('\t', ' ')
+                    for ln in commit_lines if ln.strip('\n ')
+                ]
+                if commit_lines:
+                    hexsha, decoration = commit_lines[0].split('\x00')
+                    refs = decoration.strip(' ()').split(', ') if decoration else []
+                    name_stat_parts = commit_lines[1].split(' ')
+                    renamed = {}
+                    if name_stat_parts[0] == 'R100':
+                        renamed['from'] = name_stat_parts[1]
+                        renamed['to'] = name_stat_parts[2]
+                    yield (git.Commit(self._git, gitdb.util.hex_to_bin(hexsha)), refs, renamed)
+                if not(len(line)):
+                    # if all lines have been read
+                    break
+                commit_lines = [line]
+            else:
+                commit_lines.append(line)
 
     def open_blob(self, blob):
         return _OpenedGitBlob(
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/.SOURCEFORGE-REPOSITORY b/ForgeGit/forgegit/tests/data/testrename.git/.SOURCEFORGE-REPOSITORY
new file mode 100644
index 0000000..0899c29
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/.SOURCEFORGE-REPOSITORY
@@ -0,0 +1 @@
+git
\ No newline at end of file
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/HEAD b/ForgeGit/forgegit/tests/data/testrename.git/HEAD
new file mode 100644
index 0000000..cb089cd
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/config b/ForgeGit/forgegit/tests/data/testrename.git/config
new file mode 100644
index 0000000..164a3ce
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/config
@@ -0,0 +1,7 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = true
+	sharedrepository = 2
+[receive]
+	denyNonFastforwards = true
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/description b/ForgeGit/forgegit/tests/data/testrename.git/description
new file mode 100644
index 0000000..498b267
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/applypatch-msg.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/applypatch-msg.sample
new file mode 100755
index 0000000..8b2a2fe
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/applypatch-msg.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/commit-msg.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/commit-msg.sample
new file mode 100755
index 0000000..b58d118
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/commit-msg.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-receive b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-receive
new file mode 100755
index 0000000..3ab92f5
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-receive
@@ -0,0 +1,9 @@
+#!/bin/bash
+# The following is required for site integration, do not remove/modify.
+# Place user hook code in post-receive-user and it will be called from here.
+curl -s http://localhost:8080/auth/refresh_repo/p/test2/code/
+
+DIR="$(dirname "${BASH_SOURCE[0]}")"
+if [ -x $DIR/post-receive-user ]; then
+  exec $DIR/post-receive-user
+fi
\ No newline at end of file
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-update.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-update.sample
new file mode 100755
index 0000000..ec17ec1
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-update.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-applypatch.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-applypatch.sample
new file mode 100755
index 0000000..b1f187c
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-applypatch.sample
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-commit.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-commit.sample
new file mode 100755
index 0000000..18c4829
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-commit.sample
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-rebase.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-rebase.sample
new file mode 100755
index 0000000..33730ca
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-rebase.sample
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/prepare-commit-msg.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/prepare-commit-msg.sample
new file mode 100755
index 0000000..f093a02
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/prepare-commit-msg.sample
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/update.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/update.sample
new file mode 100755
index 0000000..71ab04e
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/update.sample
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/info/exclude b/ForgeGit/forgegit/tests/data/testrename.git/info/exclude
new file mode 100644
index 0000000..a5196d1
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3 b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3
new file mode 100644
index 0000000..c2ab918
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/25/ac990c253975ab297e9955825e4ef9dc515d82 b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/ac990c253975ab297e9955825e4ef9dc515d82
new file mode 100644
index 0000000..3fabb2c
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/ac990c253975ab297e9955825e4ef9dc515d82
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4 b/ForgeGit/forgegit/tests/data/testrename.git/objects/72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4
new file mode 100644
index 0000000..d7cc85e
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8 b/ForgeGit/forgegit/tests/data/testrename.git/objects/7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8
new file mode 100644
index 0000000..71d6c5a
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/7c/09182e61af959e4f1fb0e354bab49f14ef810d b/ForgeGit/forgegit/tests/data/testrename.git/objects/7c/09182e61af959e4f1fb0e354bab49f14ef810d
new file mode 100644
index 0000000..7d51fe9
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/7c/09182e61af959e4f1fb0e354bab49f14ef810d
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/89/b97e3324e20b57543ae48ced731e31a052548c b/ForgeGit/forgegit/tests/data/testrename.git/objects/89/b97e3324e20b57543ae48ced731e31a052548c
new file mode 100644
index 0000000..8c65cdd
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/89/b97e3324e20b57543ae48ced731e31a052548c
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8 b/ForgeGit/forgegit/tests/data/testrename.git/objects/9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8
new file mode 100644
index 0000000..c2eeea8
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/b1/20505a61225e6c14bee3e5b5862db81628c35c b/ForgeGit/forgegit/tests/data/testrename.git/objects/b1/20505a61225e6c14bee3e5b5862db81628c35c
new file mode 100644
index 0000000..c1249a0
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/b1/20505a61225e6c14bee3e5b5862db81628c35c
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/c5/5a64046f8618a4c84c74dc834eb5722dabd58a b/ForgeGit/forgegit/tests/data/testrename.git/objects/c5/5a64046f8618a4c84c74dc834eb5722dabd58a
new file mode 100644
index 0000000..5068b35
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/c5/5a64046f8618a4c84c74dc834eb5722dabd58a
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/dd/633a6dd42e52a66b277324fb75d83295d20f98 b/ForgeGit/forgegit/tests/data/testrename.git/objects/dd/633a6dd42e52a66b277324fb75d83295d20f98
new file mode 100644
index 0000000..297abfc
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/dd/633a6dd42e52a66b277324fb75d83295d20f98
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6 b/ForgeGit/forgegit/tests/data/testrename.git/objects/fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6
new file mode 100644
index 0000000..4eef534
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6
Binary files differ
diff --git a/ForgeGit/forgegit/tests/data/testrename.git/refs/heads/master b/ForgeGit/forgegit/tests/data/testrename.git/refs/heads/master
new file mode 100644
index 0000000..e83ab53
--- /dev/null
+++ b/ForgeGit/forgegit/tests/data/testrename.git/refs/heads/master
@@ -0,0 +1 @@
+259c77dd6ee0e6091d11e429b56c44ccbf1e64a3
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index 1222429..638fd90 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -53,6 +53,8 @@
         # ThreadLocalORMSession.close_all()
         h.set_context('test', 'src-git', neighborhood='Projects')
         c.app.repo.refresh()
+        if os.path.isdir(c.app.repo.tarball_path):
+            shutil.rmtree(c.app.repo.tarball_path)
         ThreadLocalORMSession.flush_all()
         # ThreadLocalORMSession.close_all()
 
@@ -343,14 +345,18 @@
         r = self.app.get(ci + 'tree/')
         assert '/p/test/src-git/ci/master/tarball' in r
         assert 'Download Snapshot' in r
-        r = self.app.post('/p/test/src-git/ci/master/tarball')
-        assert 'Generating snapshot...' in r
+        r = self.app.post('/p/test/src-git/ci/master/tarball').follow()
+        assert 'Checking snapshot status...' in r
+        r = self.app.get('/p/test/src-git/ci/master/tarball')
+        assert 'Checking snapshot status...' in r
         M.MonQTask.run_ready()
         ThreadLocalORMSession.flush_all()
         r = self.app.get(ci + 'tarball_status')
         assert '{"status": "ready"}' in r
         r = self.app.get('/p/test/src-git/ci/master/tarball_status')
         assert '{"status": "ready"}' in r
+        r = self.app.get('/p/test/src-git/ci/master/tarball')
+        assert 'Your download will begin shortly' in r
 
     def test_tarball_link_in_subdirs(self):
         '''Go to repo subdir and check 'Download Snapshot' link'''
@@ -560,3 +566,27 @@
         r = self.app.get('/src-git/ci/d961abbbf10341ee18a668c975842c35cfc0bef2/tree/1.png?diff=2ce83a24e52c21e8d2146b1a04a20717c0bb08d7')
         assert 'alt="2ce83a2..."' in r
         assert 'alt="d961abb..."' in r
+
+class TestGitRename(TestController):
+
+    def setUp(self):
+        super(TestGitRename, self).setUp()
+        self.setup_with_tools()
+
+    @with_git
+    def setup_with_tools(self):
+        h.set_context('test', 'src-git', neighborhood='Projects')
+        repo_dir = pkg_resources.resource_filename(
+            'forgegit', 'tests/data')
+        c.app.repo.fs_path = repo_dir
+        c.app.repo.status = 'ready'
+        c.app.repo.name = 'testrename.git'
+        ThreadLocalORMSession.flush_all()
+        h.set_context('test', 'src-git', neighborhood='Projects')
+        c.app.repo.refresh()
+        ThreadLocalORMSession.flush_all()
+
+    def test_log(self):
+        resp = self.app.get('/src-git/ci/259c77dd6ee0e6091d11e429b56c44ccbf1e64a3/log/?path=/f2.txt')
+        assert '<b>renamed from</b>' in resp
+        assert '/f.txt' in resp
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index 85777e2..e55fed7 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -240,7 +240,8 @@
              'message': u'Change README\n',
              'parents': ['df30427c488aeab84b2352bdf88a3b19223f9d7a'],
              'refs': ['HEAD', 'foo', 'master'],
-             'size': None},
+             'size': None,
+             'rename_details': {}},
             {'authored': {'date': datetime.datetime(2010, 10, 7, 18, 44, 1),
                           'email': u'rcopeland@geek.net',
                           'name': u'Rick Copeland'},
@@ -251,7 +252,8 @@
              'message': u'Add README\n',
              'parents': ['6a45885ae7347f1cac5103b0050cc1be6a1496c8'],
              'refs': [],
-             'size': None},
+             'size': None,
+             'rename_details': {}},
             {'authored': {'date': datetime.datetime(2010, 10, 7, 18, 43, 26),
                           'email': u'rcopeland@geek.net',
                           'name': u'Rick Copeland'},
@@ -262,7 +264,8 @@
              'message': u'Remove file\n',
              'parents': ['9a7df788cf800241e3bb5a849c8870f2f8259d98'],
              'refs': [],
-             'size': None},
+             'size': None,
+             'rename_details': {}},
             {'authored': {'date': datetime.datetime(2010, 10, 7, 18, 42, 54),
                           'email': u'rcopeland@geek.net',
                           'name': u'Rick Copeland'},
@@ -273,7 +276,8 @@
              'message': u'Initial commit\n',
              'parents': [],
              'refs': [],
-             'size': None},
+             'size': None,
+             'rename_details': {}},
             ])
 
     def test_log_file(self):
@@ -289,7 +293,8 @@
              'message': u'Change README\n',
              'parents': ['df30427c488aeab84b2352bdf88a3b19223f9d7a'],
              'refs': ['HEAD', 'foo', 'master'],
-             'size': 28},
+             'size': 28,
+             'rename_details': {}},
             {'authored': {'date': datetime.datetime(2010, 10, 7, 18, 44, 1),
                           'email': u'rcopeland@geek.net',
                           'name': u'Rick Copeland'},
@@ -300,7 +305,8 @@
              'message': u'Add README\n',
              'parents': ['6a45885ae7347f1cac5103b0050cc1be6a1496c8'],
              'refs': [],
-             'size': 15},
+             'size': 15,
+             'rename_details': {}},
             ])
 
     def test_commit(self):
@@ -534,3 +540,38 @@
         assert b.has_html_view
         b = self.rev.tree.get_blob_by_path('test.spec.in')
         assert b.has_html_view
+
+
+class TestGitRename(unittest.TestCase):
+
+    def setUp(self):
+        setup_basic_test()
+        self.setup_with_tools()
+
+    @with_git
+    def setup_with_tools(self):
+        setup_global_objects()
+        h.set_context('test', 'src-git', neighborhood='Projects')
+        repo_dir = pkg_resources.resource_filename(
+            'forgegit', 'tests/data')
+        self.repo = GM.Repository(
+            name='testrename.git',
+            fs_path=repo_dir,
+            url_path='/test/',
+            tool='git',
+            status='creating')
+        self.repo.refresh()
+        self.rev = self.repo.commit('HEAD')
+        ThreadLocalORMSession.flush_all()
+        ThreadLocalORMSession.close_all()
+
+    def test_renamed_file(self):
+        # There was a file f.txt, then it was renamed to f2.txt.
+        commits = list(self.repo.log(id_only=False, path='/f2.txt'))
+        self.assertEqual(len(commits), 2)
+        rename_commit = commits[1]
+        self.assertEqual(rename_commit['rename_details']['path'], '/f.txt')
+        self.assertEqual(
+            rename_commit['rename_details']['commit_url'],
+            self.repo.url_for_commit(rename_commit['id'])
+        )
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index bdff43b..7f25e69 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -20,8 +20,6 @@
 import urllib2
 from collections import defaultdict
 
-from pkg_resources import iter_entry_points
-
 from BeautifulSoup import BeautifulSoup
 from tg import expose, validate, flash, redirect, config
 from tg.decorators import with_trailing_slash
@@ -176,7 +174,7 @@
         as this project importer.
         """
         tools = {}
-        for ep in iter_entry_points('allura.importers'):
+        for ep in h.iter_entry_points('allura.importers'):
             epv = ep.load()
             if epv.source == self.source:
                 tools[ep.name] = epv()
@@ -289,7 +287,7 @@
         """
         Return a ToolImporter subclass instance given its entry-point name.
         """
-        for ep in iter_entry_points('allura.importers', name):
+        for ep in h.iter_entry_points('allura.importers', name):
             return ep.load()()
 
     @staticmethod
@@ -298,7 +296,7 @@
         Return a ToolImporter subclass instance given its target_app class.
         """
         importers = {}
-        for ep in iter_entry_points('allura.importers'):
+        for ep in h.iter_entry_points('allura.importers'):
             importer = ep.load()
             if app in aslist(importer.target_app):
                 importers[ep.name] = importer()
@@ -370,7 +368,7 @@
     def index(self, *a, **kw):
         importer_matrix = defaultdict(dict)
         tools_with_importers = set()
-        for ep in iter_entry_points('allura.importers'):
+        for ep in h.iter_entry_points('allura.importers'):
             importer = ep.load()
             for tool in aslist(importer.target_app):
                 tools_with_importers.add(tool.tool_label)
diff --git a/ForgeImporters/forgeimporters/tests/test_base.py b/ForgeImporters/forgeimporters/tests/test_base.py
index f1c93ad..92fb0cc 100644
--- a/ForgeImporters/forgeimporters/tests/test_base.py
+++ b/ForgeImporters/forgeimporters/tests/test_base.py
@@ -66,7 +66,7 @@
 
 
 class TestProjectImporter(TestCase):
-    @mock.patch.object(base, 'iter_entry_points')
+    @mock.patch.object(base.h, 'iter_entry_points')
     def test_tool_importers(self, iep):
         eps = iep.return_value = [ep('ep1', 'foo'), ep('ep2', 'bar'), ep('ep3', 'foo')]
         pi = base.ProjectImporter(mock.Mock(name='neighborhood'))
@@ -100,7 +100,7 @@
 class TestToolImporter(TestCase):
 
 
-    @mock.patch.object(base, 'iter_entry_points')
+    @mock.patch.object(base.h, 'iter_entry_points')
     def test_by_name(self, iep):
         eps = iep.return_value = [ep('my-name', 'my-source')]
         importer = base.ToolImporter.by_name('my-name')
@@ -113,7 +113,7 @@
         iep.assert_called_once_with('allura.importers', 'other-name')
         self.assertEqual(importer, None)
 
-    @mock.patch.object(base, 'iter_entry_points')
+    @mock.patch.object(base.h, 'iter_entry_points')
     def test_by_app(self, iep):
         eps = iep.return_value = [
                 ep('importer1', importer=TI1),
@@ -190,7 +190,7 @@
 
     def test_pages(self):
         admin_page = self.app.get('/admin/')
-        with mock.patch.object(base, 'iter_entry_points') as iep:
+        with mock.patch.object(base.h, 'iter_entry_points') as iep:
             iep.return_value = [
                 ep('importer1', importer=TI1),
                 ep('importer2', importer=TI2),
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 9074946..3e6ea25 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -533,28 +533,39 @@
         while revno > exclude:
             rev = pysvn.Revision(pysvn.opt_revision_kind.number, revno)
             try:
-                logs = self._svn.log(url, revision_start=rev, limit=page_size)
+                logs = self._svn.log(url, revision_start=rev, limit=page_size,
+                    discover_changed_paths=True)
             except pysvn.ClientError as e:
                 if 'Unable to connect' in e.message:
                     raise  # repo error
                 return  # no (more) history for this path
             for ci in logs:
+
                 if ci.revision.number <= exclude:
                     return
                 if id_only:
                     yield ci.revision.number
                 else:
-                    yield self._map_log(ci, url)
+                    yield self._map_log(ci, url, path)
             if len(logs) < page_size:
                 return  # we didn't get a full page, don't bother calling SVN again
             revno = ci.revision.number - 1
 
-    def _map_log(self, ci, url):
+    def _map_log(self, ci, url, path=None):
         revno = ci.revision.number
         try:
             size = int(self._svn.list(url)[0][0].size)
-        except pysvn.ClientError as e:
+        except pysvn.ClientError:
             size = None
+        rename_details = {}
+        changed_paths = ci.get('changed_paths', [])
+        for changed_path in changed_paths:
+            if changed_path['copyfrom_path'] and changed_path['path'] == path and changed_path['action'] == 'A':
+                rename_details['path'] = changed_path['copyfrom_path']
+                rename_details['commit_url'] = self._repo.url_for_commit(
+                    changed_path['copyfrom_revision'].number
+                )
+                break
         return {
                 'id': revno,
                 'message': h.really_unicode(ci.get('message', '--none--')),
@@ -571,6 +582,7 @@
                 'refs': ['HEAD'] if revno == self.head else [],
                 'parents': [revno-1] if revno > 1 else [],
                 'size': size,
+                'rename_details': rename_details,
             }
 
     def open_blob(self, blob):
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/.SOURCEFORGE-REPOSITORY b/ForgeSVN/forgesvn/tests/data/testsvn-rename/.SOURCEFORGE-REPOSITORY
new file mode 100644
index 0000000..f2990b4
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/.SOURCEFORGE-REPOSITORY
@@ -0,0 +1 @@
+svn
\ No newline at end of file
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/README.txt b/ForgeSVN/forgesvn/tests/data/testsvn-rename/README.txt
new file mode 100644
index 0000000..3bf5a57
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/README.txt
@@ -0,0 +1,5 @@
+This is a Subversion repository; use the 'svnadmin' tool to examine
+it.  Do not add, delete, or modify files here unless you know how
+to avoid corrupting the repository.
+
+Visit http://subversion.tigris.org/ for more information.
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/authz b/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/authz
new file mode 100644
index 0000000..0b9a410
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/authz
@@ -0,0 +1,32 @@
+### This file is an example authorization file for svnserve.
+### Its format is identical to that of mod_authz_svn authorization
+### files.
+### As shown below each section defines authorizations for the path and
+### (optional) repository specified by the section name.
+### The authorizations follow. An authorization line can refer to:
+###  - a single user,
+###  - a group of users defined in a special [groups] section,
+###  - an alias defined in a special [aliases] section,
+###  - all authenticated users, using the '$authenticated' token,
+###  - only anonymous users, using the '$anonymous' token,
+###  - anyone, using the '*' wildcard.
+###
+### A match can be inverted by prefixing the rule with '~'. Rules can
+### grant read ('r') access, read-write ('rw') access, or no access
+### ('').
+
+[aliases]
+# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
+
+[groups]
+# harry_and_sally = harry,sally
+# harry_sally_and_joe = harry,sally,&joe
+
+# [/foo/bar]
+# harry = rw
+# &joe = r
+# * =
+
+# [repository:/baz/fuz]
+# @harry_and_sally = rw
+# * = r
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/passwd b/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/passwd
new file mode 100644
index 0000000..ecaa08d
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/passwd
@@ -0,0 +1,8 @@
+### This file is an example password file for svnserve.
+### Its format is similar to that of svnserve.conf. As shown in the
+### example below it contains one section labelled [users].
+### The name and password for each user follow, one account per line.
+
+[users]
+# harry = harryssecret
+# sally = sallyssecret
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/svnserve.conf b/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/svnserve.conf
new file mode 100644
index 0000000..e62a01e
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/conf/svnserve.conf
@@ -0,0 +1,47 @@
+### This file controls the configuration of the svnserve daemon, if you
+### use it to allow access to this repository.  (If you only allow
+### access through http: and/or file: URLs, then this file is
+### irrelevant.)
+
+### Visit http://subversion.tigris.org/ for more information.
+
+[general]
+### These options control access to the repository for unauthenticated
+### and authenticated users.  Valid values are "write", "read",
+### and "none".  The sample settings below are the defaults.
+# anon-access = read
+# auth-access = write
+### The password-db option controls the location of the password
+### database file.  Unless you specify a path starting with a /,
+### the file's location is relative to the directory containing
+### this configuration file.
+### If SASL is enabled (see below), this file will NOT be used.
+### Uncomment the line below to use the default password file.
+# password-db = passwd
+### The authz-db option controls the location of the authorization
+### rules for path-based access control.  Unless you specify a path
+### starting with a /, the file's location is relative to the the
+### directory containing this file.  If you don't specify an
+### authz-db, no path-based access control is done.
+### Uncomment the line below to use the default authorization file.
+# authz-db = authz
+### This option specifies the authentication realm of the repository.
+### If two repositories have the same authentication realm, they should
+### have the same password database, and vice versa.  The default realm
+### is repository's uuid.
+# realm = My First Repository
+
+[sasl]
+### This option specifies whether you want to use the Cyrus SASL
+### library for authentication. Default is false.
+### This section will be ignored if svnserve is not built with Cyrus
+### SASL support; to check, run 'svnserve --version' and look for a line
+### reading 'Cyrus SASL authentication is available.'
+# use-sasl = true
+### These options specify the desired strength of the security layer
+### that you want SASL to provide. 0 means no encryption, 1 means
+### integrity-checking only, values larger than 1 are correlated
+### to the effective key length for encryption (e.g. 128 means 128-bit
+### encryption). The values below are the defaults.
+# min-encryption = 0
+# max-encryption = 256
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/current b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/current
new file mode 100644
index 0000000..00750ed
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/current
@@ -0,0 +1 @@
+3
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/format b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/format
new file mode 100644
index 0000000..db06890
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/format
@@ -0,0 +1,2 @@
+4
+layout sharded 1000
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/fs-type b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/fs-type
new file mode 100644
index 0000000..4fdd953
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/fs-type
@@ -0,0 +1 @@
+fsfs
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/fsfs.conf b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/fsfs.conf
new file mode 100644
index 0000000..0a5f1fe
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/fsfs.conf
@@ -0,0 +1,37 @@
+### This file controls the configuration of the FSFS filesystem.
+
+[memcached-servers]
+### These options name memcached servers used to cache internal FSFS
+### data.  See http://www.danga.com/memcached/ for more information on
+### memcached.  To use memcached with FSFS, run one or more memcached
+### servers, and specify each of them as an option like so:
+# first-server = 127.0.0.1:11211
+# remote-memcached = mymemcached.corp.example.com:11212
+### The option name is ignored; the value is of the form HOST:PORT.
+### memcached servers can be shared between multiple repositories;
+### however, if you do this, you *must* ensure that repositories have
+### distinct UUIDs and paths, or else cached data from one repository
+### might be used by another accidentally.  Note also that memcached has
+### no authentication for reads or writes, so you must ensure that your
+### memcached servers are only accessible by trusted users.
+
+[caches]
+### When a cache-related error occurs, normally Subversion ignores it
+### and continues, logging an error if the server is appropriately
+### configured (and ignoring it with file:// access).  To make
+### Subversion never ignore cache errors, uncomment this line.
+# fail-stop = true
+
+[rep-sharing]
+### To conserve space, the filesystem can optionally avoid storing
+### duplicate representations.  This comes at a slight cost in performace,
+### as maintaining a database of shared representations can increase
+### commit times.  The space savings are dependent upon the size of the
+### repository, the number of objects it contains and the amount of
+### duplication between them, usually a function of the branching and
+### merging process.
+###
+### The following parameter enables rep-sharing in the repository.  It can
+### be switched on and off at will, but for best space-saving results
+### should be enabled consistently over the life of the repository.
+# enable-rep-sharing = false
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/min-unpacked-rev b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/min-unpacked-rev
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/min-unpacked-rev
@@ -0,0 +1 @@
+0
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/0 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/0
new file mode 100644
index 0000000..8d3fd9e
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/0
@@ -0,0 +1,5 @@
+K 8
+svn:date
+V 27
+2013-08-08T12:37:19.542781Z
+END
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/1 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/1
new file mode 100644
index 0000000..2a381d9
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/1
@@ -0,0 +1,13 @@
+K 10
+svn:author
+V 4
+root
+K 8
+svn:date
+V 27
+2013-08-08T12:38:04.489552Z
+K 7
+svn:log
+V 23
+Add initial directories
+END
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/2 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/2
new file mode 100644
index 0000000..144e101
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/2
@@ -0,0 +1,13 @@
+K 10
+svn:author
+V 4
+root
+K 8
+svn:date
+V 27
+2013-08-08T12:39:43.351248Z
+K 7
+svn:log
+V 11
+file in dir
+END
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/3 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/3
new file mode 100644
index 0000000..a3a76ba
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revprops/0/3
@@ -0,0 +1,13 @@
+K 10
+svn:author
+V 4
+root
+K 8
+svn:date
+V 27
+2013-08-08T12:40:01.848949Z
+K 7
+svn:log
+V 6
+rename
+END
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/0 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/0
new file mode 100644
index 0000000..10f5c45
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/0
@@ -0,0 +1,11 @@
+PLAIN
+END
+ENDREP
+id: 0.0.r0/17
+type: dir
+count: 0
+text: 0 0 4 4 2d2977d1c96f487abe4a1e202dd03b4e
+cpath: /
+
+
+17 107
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/1 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/1
new file mode 100644
index 0000000..f2ad9f2
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/1
@@ -0,0 +1,49 @@
+id: 2-1.0.r1/0
+type: dir
+count: 0
+cpath: /tags
+copyroot: 0 /
+
+id: 3-1.0.r1/62
+type: dir
+count: 0
+cpath: /trunk
+copyroot: 0 /
+
+id: 0-1.0.r1/126
+type: dir
+count: 0
+cpath: /branches
+copyroot: 0 /
+
+PLAIN
+K 8
+branches
+V 16
+dir 0-1.0.r1/126
+K 4
+tags
+V 14
+dir 2-1.0.r1/0
+K 5
+trunk
+V 15
+dir 3-1.0.r1/62
+END
+ENDREP
+id: 0.0.r1/306
+type: dir
+pred: 0.0.r0/17
+count: 1
+text: 1 194 99 99 2a9153030baf0be3d36129055b365771
+cpath: /
+copyroot: 0 /
+
+_3.0.t0-0 add-dir false false /trunk
+
+_0.0.t0-0 add-dir false false /branches
+
+_2.0.t0-0 add-dir false false /tags
+
+
+306 431
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/2 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/2
new file mode 100644
index 0000000..3621d6e
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/2
Binary files differ
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/3 b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/3
new file mode 100644
index 0000000..dfc2340
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/revs/0/3
@@ -0,0 +1,56 @@
+id: 2-2.0-3.r3/0
+type: file
+pred: 2-2.0.r2/31
+count: 1
+text: 2 0 18 6 58e3b26452d39a3b59fb382c0ba03bac 415b4467aab97d19ad3fd7beb8eeaa42c8330abc 1-1/_4
+cpath: /dir/b.txt
+copyfrom: 2 /dir/a.txt
+
+PLAIN
+K 5
+b.txt
+V 17
+file 2-2.0-3.r3/0
+END
+ENDREP
+id: 0-2.0.r3/243
+type: dir
+pred: 0-2.0.r2/245
+count: 1
+text: 3 193 37 37 1f4ffb88b2b1a84f68f687f7c6234093
+cpath: /dir
+copyroot: 0 /
+
+PLAIN
+K 8
+branches
+V 16
+dir 0-1.0.r1/126
+K 3
+dir
+V 16
+dir 0-2.0.r3/243
+K 4
+tags
+V 14
+dir 2-1.0.r1/0
+K 5
+trunk
+V 15
+dir 3-1.0.r1/62
+END
+ENDREP
+id: 0.0.r3/518
+type: dir
+pred: 0.0.r2/501
+count: 3
+text: 3 376 129 129 a5fed55ce83e9aefbeb6199207438b16
+cpath: /
+copyroot: 0 /
+
+2-2.0.r2/31 delete-file false false /dir/a.txt
+
+2-2._0.t2-2 add-file false false /dir/b.txt
+2 /dir/a.txt
+
+518 646
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/txn-current b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/txn-current
new file mode 100644
index 0000000..00750ed
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/txn-current
@@ -0,0 +1 @@
+3
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/txn-current-lock b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/txn-current-lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/txn-current-lock
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/uuid b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/uuid
new file mode 100644
index 0000000..b82b6b3
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/uuid
@@ -0,0 +1 @@
+7dc01617-2ce1-4b3d-96af-f7038e33c0a2
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/write-lock b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/write-lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/db/write-lock
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/format b/ForgeSVN/forgesvn/tests/data/testsvn-rename/format
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/format
@@ -0,0 +1 @@
+5
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-commit b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-commit
new file mode 100755
index 0000000..5c81f51
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-commit
@@ -0,0 +1,8 @@
+#!/bin/bash
+# The following is required for site integration, do not remove/modify.
+# Place user hook code in post-commit-user and it will be called from here.
+curl -s http://localhost:8080/auth/refresh_repo/p/test2/code/
+
+DIR="$(dirname "${BASH_SOURCE[0]}")"
+if [ -x $DIR/post-commit-user ]; then  exec $DIR/post-commit-user "$@"
+fi
\ No newline at end of file
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-commit.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-commit.tmpl
new file mode 100644
index 0000000..93c92ad
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-commit.tmpl
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# POST-COMMIT HOOK
+#
+# The post-commit hook is invoked after a commit.  Subversion runs
+# this hook by invoking a program (script, executable, binary, etc.)
+# named 'post-commit' (for which this file is a template) with the 
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] REV          (the number of the revision just committed)
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# Because the commit has already completed and cannot be undone,
+# the exit code of the hook program is ignored.  The hook program
+# can use the 'svnlook' utility to help it examine the
+# newly-committed tree.
+#
+# On a Unix system, the normal procedure is to have 'post-commit'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-commit' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-commit.bat' or 'post-commit.exe',
+# but the basic idea is the same.
+# 
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# /usr/share/subversion/hook-scripts, and in the repository at
+# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
+# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+REV="$2"
+
+"$REPOS"/hooks/mailer.py commit "$REPOS" $REV "$REPOS"/mailer.conf
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-lock.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-lock.tmpl
new file mode 100644
index 0000000..beae9d7
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-lock.tmpl
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# POST-LOCK HOOK
+#
+# The post-lock hook is run after a path is locked.  Subversion runs
+# this hook by invoking a program (script, executable, binary, etc.)
+# named 'post-lock' (for which this file is a template) with the 
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] USER         (the user who created the lock)
+#
+# The paths that were just locked are passed to the hook via STDIN (as
+# of Subversion 1.2, only one path is passed per invocation, but the
+# plan is to pass all locked paths at once, so the hook program
+# should be written accordingly).
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# Because the lock has already been created and cannot be undone,
+# the exit code of the hook program is ignored.  The hook program
+# can use the 'svnlook' utility to help it examine the
+# newly-created lock.
+#
+# On a Unix system, the normal procedure is to have 'post-lock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-lock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-lock.bat' or 'post-lock.exe',
+# but the basic idea is the same.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+USER="$2"
+
+# Send email to interested parties, let them know a lock was created:
+"$REPOS"/hooks/mailer.py lock \
+  "$REPOS" "$USER" "$REPOS"/hooks/mailer.conf
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-revprop-change.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-revprop-change.tmpl
new file mode 100644
index 0000000..cf7aedd
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-revprop-change.tmpl
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+# POST-REVPROP-CHANGE HOOK
+#
+# The post-revprop-change hook is invoked after a revision property
+# has been added, modified or deleted.  Subversion runs this hook by
+# invoking a program (script, executable, binary, etc.) named
+# 'post-revprop-change' (for which this file is a template), with the
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] REV          (the revision that was tweaked)
+#   [3] USER         (the username of the person tweaking the property)
+#   [4] PROPNAME     (the property that was changed)
+#   [5] ACTION       (the property was 'A'dded, 'M'odified, or 'D'eleted)
+#
+#   [STDIN] PROPVAL  ** the old property value is passed via STDIN.
+#
+# Because the propchange has already completed and cannot be undone,
+# the exit code of the hook program is ignored.  The hook program
+# can use the 'svnlook' utility to help it examine the
+# new property value.
+#
+# On a Unix system, the normal procedure is to have 'post-revprop-change'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-revprop-change' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-revprop-change.bat' or 'post-revprop-change.exe',
+# but the basic idea is the same.
+# 
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# /usr/share/subversion/hook-scripts, and in the repository at
+# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
+# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+REV="$2"
+USER="$3"
+PROPNAME="$4"
+ACTION="$5"
+
+"$REPOS"/hooks/mailer.py propchange2 "$REPOS" $REV \
+  "$USER" "$PROPNAME" "$ACTION" "$REPOS"/hooks/mailer.conf
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-unlock.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-unlock.tmpl
new file mode 100644
index 0000000..277569f
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/post-unlock.tmpl
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# POST-UNLOCK HOOK
+#
+# The post-unlock hook runs after a path is unlocked.  Subversion runs
+# this hook by invoking a program (script, executable, binary, etc.)
+# named 'post-unlock' (for which this file is a template) with the 
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] USER         (the user who destroyed the lock)
+#
+# The paths that were just unlocked are passed to the hook via STDIN
+# (as of Subversion 1.2, only one path is passed per invocation, but
+# the plan is to pass all unlocked paths at once, so the hook program
+# should be written accordingly).
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# Because the lock has already been destroyed and cannot be undone,
+# the exit code of the hook program is ignored.
+#
+# On a Unix system, the normal procedure is to have 'post-unlock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-unlock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-unlock.bat' or 'post-unlock.exe',
+# but the basic idea is the same.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+USER="$2"
+
+# Send email to interested parties, let them know a lock was removed:
+"$REPOS"/hooks/mailer.py unlock \
+  "$REPOS" "$USER" "$REPOS"/hooks/mailer.conf
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-commit.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-commit.tmpl
new file mode 100644
index 0000000..44c24b9
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-commit.tmpl
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+# PRE-COMMIT HOOK
+#
+# The pre-commit hook is invoked before a Subversion txn is
+# committed.  Subversion runs this hook by invoking a program
+# (script, executable, binary, etc.) named 'pre-commit' (for which
+# this file is a template), with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] TXN-NAME     (the name of the txn about to be committed)
+#
+#   [STDIN] LOCK-TOKENS ** the lock tokens are passed via STDIN.
+#
+#   If STDIN contains the line "LOCK-TOKENS:\n" (the "\n" denotes a
+#   single newline), the lines following it are the lock tokens for
+#   this commit.  The end of the list is marked by a line containing
+#   only a newline character.
+#
+#   Each lock token line consists of a URI-escaped path, followed
+#   by the separator character '|', followed by the lock token string,
+#   followed by a newline.
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the txn is committed; but
+# if it exits with failure (non-zero), the txn is aborted, no commit
+# takes place, and STDERR is returned to the client.   The hook
+# program can use the 'svnlook' utility to help it examine the txn.
+#
+# On a Unix system, the normal procedure is to have 'pre-commit'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+#   ***  NOTE: THE HOOK PROGRAM MUST NOT MODIFY THE TXN, EXCEPT  ***
+#   ***  FOR REVISION PROPERTIES (like svn:log or svn:author).   ***
+#
+#   This is why we recommend using the read-only 'svnlook' utility.
+#   In the future, Subversion may enforce the rule that pre-commit
+#   hooks should not modify the versioned data in txns, or else come
+#   up with a mechanism to make it safe to do so (by informing the
+#   committing client of the changes).  However, right now neither
+#   mechanism is implemented, so hook writers just have to be careful.
+#
+# Note that 'pre-commit' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-commit.bat' or 'pre-commit.exe',
+# but the basic idea is the same.
+#
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# /usr/share/subversion/hook-scripts, and in the repository at
+# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
+# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+TXN="$2"
+
+# Make sure that the log message contains some text.
+SVNLOOK=/usr/bin/svnlook
+$SVNLOOK log -t "$TXN" "$REPOS" | \
+   grep "[a-zA-Z0-9]" > /dev/null || exit 1
+
+# Exit on all errors.
+set -e
+
+# Check that the author of this commit has the rights to perform
+# the commit on the files and directories being modified.
+"$REPOS"/hooks/commit-access-control.pl "$REPOS" $TXN \
+  "$REPOS"/hooks/commit-access-control.cfg
+
+# All checks passed, so allow the commit.
+exit 0
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-lock.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-lock.tmpl
new file mode 100644
index 0000000..13827fb
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-lock.tmpl
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+# PRE-LOCK HOOK
+#
+# The pre-lock hook is invoked before an exclusive lock is
+# created.  Subversion runs this hook by invoking a program 
+# (script, executable, binary, etc.) named 'pre-lock' (for which
+# this file is a template), with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] PATH         (the path in the repository about to be locked)
+#   [3] USER         (the user creating the lock)
+#   [4] COMMENT      (the comment of the lock)
+#   [5] STEAL-LOCK   (1 if the user is trying to steal the lock, else 0)
+#
+# If the hook program outputs anything on stdout, the output string will
+# be used as the lock token for this lock operation.  If you choose to use
+# this feature, you must guarantee the tokens generated are unique across
+# the repository each time.
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the lock is created; but
+# if it exits with failure (non-zero), the lock action is aborted
+# and STDERR is returned to the client.
+
+# On a Unix system, the normal procedure is to have 'pre-lock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'pre-lock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-lock.bat' or 'pre-lock.exe',
+# but the basic idea is the same.
+#
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+PATH="$2"
+USER="$3"
+
+# If a lock exists and is owned by a different person, don't allow it
+# to be stolen (e.g., with 'svn lock --force ...').
+
+# (Maybe this script could send email to the lock owner?)
+SVNLOOK=/usr/bin/svnlook
+GREP=/bin/grep
+SED=/bin/sed
+
+LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \
+            $GREP '^Owner: ' | $SED 's/Owner: //'`
+
+# If we get no result from svnlook, there's no lock, allow the lock to
+# happen:
+if [ "$LOCK_OWNER" = "" ]; then
+  exit 0
+fi
+
+# If the person locking matches the lock's owner, allow the lock to
+# happen:
+if [ "$LOCK_OWNER" = "$USER" ]; then
+  exit 0
+fi
+
+# Otherwise, we've got an owner mismatch, so return failure:
+echo "Error: $PATH already locked by ${LOCK_OWNER}." 1>&2
+exit 1
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-revprop-change.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-revprop-change.tmpl
new file mode 100644
index 0000000..576fb36
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-revprop-change.tmpl
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# PRE-REVPROP-CHANGE HOOK
+#
+# The pre-revprop-change hook is invoked before a revision property
+# is added, modified or deleted.  Subversion runs this hook by invoking
+# a program (script, executable, binary, etc.) named 'pre-revprop-change'
+# (for which this file is a template), with the following ordered
+# arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] REVISION     (the revision being tweaked)
+#   [3] USER         (the username of the person tweaking the property)
+#   [4] PROPNAME     (the property being set on the revision)
+#   [5] ACTION       (the property is being 'A'dded, 'M'odified, or 'D'eleted)
+#
+#   [STDIN] PROPVAL  ** the new property value is passed via STDIN.
+#
+# If the hook program exits with success, the propchange happens; but
+# if it exits with failure (non-zero), the propchange doesn't happen.
+# The hook program can use the 'svnlook' utility to examine the 
+# existing value of the revision property.
+#
+# WARNING: unlike other hooks, this hook MUST exist for revision
+# properties to be changed.  If the hook does not exist, Subversion 
+# will behave as if the hook were present, but failed.  The reason
+# for this is that revision properties are UNVERSIONED, meaning that
+# a successful propchange is destructive;  the old value is gone
+# forever.  We recommend the hook back up the old value somewhere.
+#
+# On a Unix system, the normal procedure is to have 'pre-revprop-change'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'pre-revprop-change' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-revprop-change.bat' or 'pre-revprop-change.exe',
+# but the basic idea is the same.
+#
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# /usr/share/subversion/hook-scripts, and in the repository at
+# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
+# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+REV="$2"
+USER="$3"
+PROPNAME="$4"
+ACTION="$5"
+
+if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
+
+echo "Changing revision properties other than svn:log is prohibited" >&2
+exit 1
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-unlock.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-unlock.tmpl
new file mode 100644
index 0000000..d1aa858
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/pre-unlock.tmpl
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+# PRE-UNLOCK HOOK
+#
+# The pre-unlock hook is invoked before an exclusive lock is
+# destroyed.  Subversion runs this hook by invoking a program 
+# (script, executable, binary, etc.) named 'pre-unlock' (for which
+# this file is a template), with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] PATH         (the path in the repository about to be unlocked)
+#   [3] USER         (the user destroying the lock)
+#   [4] TOKEN        (the lock token to be destroyed)
+#   [5] BREAK-UNLOCK (1 if the user is breaking the lock, else 0)
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the lock is destroyed; but
+# if it exits with failure (non-zero), the unlock action is aborted
+# and STDERR is returned to the client.
+
+# On a Unix system, the normal procedure is to have 'pre-unlock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'pre-unlock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-unlock.bat' or 'pre-unlock.exe',
+# but the basic idea is the same.
+#
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+PATH="$2"
+USER="$3"
+
+# If a lock is owned by a different person, don't allow it be broken.
+# (Maybe this script could send email to the lock owner?)
+
+SVNLOOK=/usr/bin/svnlook
+GREP=/bin/grep
+SED=/bin/sed
+
+LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \
+            $GREP '^Owner: ' | $SED 's/Owner: //'`
+
+# If we get no result from svnlook, there's no lock, return success:
+if [ "$LOCK_OWNER" = "" ]; then
+  exit 0
+fi
+
+# If the person unlocking matches the lock's owner, return success:
+if [ "$LOCK_OWNER" = "$USER" ]; then
+  exit 0
+fi
+
+# Otherwise, we've got an owner mismatch, so return failure:
+echo "Error: $PATH locked by ${LOCK_OWNER}." 1>&2
+exit 1
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/start-commit.tmpl b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/start-commit.tmpl
new file mode 100644
index 0000000..c10868f
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/hooks/start-commit.tmpl
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+# START-COMMIT HOOK
+#
+# The start-commit hook is invoked before a Subversion txn is created
+# in the process of doing a commit.  Subversion runs this hook
+# by invoking a program (script, executable, binary, etc.) named
+# 'start-commit' (for which this file is a template)
+# with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] USER         (the authenticated user attempting to commit)
+#   [3] CAPABILITIES (a colon-separated list of capabilities reported
+#                     by the client; see note below)
+#
+# Note: The CAPABILITIES parameter is new in Subversion 1.5, and 1.5
+# clients will typically report at least the "mergeinfo" capability.
+# If there are other capabilities, then the list is colon-separated,
+# e.g.: "mergeinfo:some-other-capability" (the order is undefined).
+#
+# The list is self-reported by the client.  Therefore, you should not
+# make security assumptions based on the capabilities list, nor should
+# you assume that clients reliably report every capability they have.
+#
+# The working directory for this hook program's invocation is undefined,
+# so the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the commit continues; but
+# if it exits with failure (non-zero), the commit is stopped before
+# a Subversion txn is created, and STDERR is returned to the client.
+#
+# On a Unix system, the normal procedure is to have 'start-commit'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'start-commit' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'start-commit.bat' or 'start-commit.exe',
+# but the basic idea is the same.
+# 
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# /usr/share/subversion/hook-scripts, and in the repository at
+# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
+# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+USER="$2"
+
+# Exit on all errors.
+set -e
+
+"$REPOS"/hooks/commit-allower.pl --repository "$REPOS" --user "$USER"
+"$REPOS"/hooks/special-auth-check.py --user "$USER" --auth-level 3
+
+# All checks passed, so allow the commit.
+exit 0
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/locks/db-logs.lock b/ForgeSVN/forgesvn/tests/data/testsvn-rename/locks/db-logs.lock
new file mode 100644
index 0000000..20dd636
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/locks/db-logs.lock
@@ -0,0 +1,3 @@
+This file is not used by Subversion 1.3.x or later.
+However, its existence is required for compatibility with
+Subversion 1.2.x or earlier.
diff --git a/ForgeSVN/forgesvn/tests/data/testsvn-rename/locks/db.lock b/ForgeSVN/forgesvn/tests/data/testsvn-rename/locks/db.lock
new file mode 100644
index 0000000..20dd636
--- /dev/null
+++ b/ForgeSVN/forgesvn/tests/data/testsvn-rename/locks/db.lock
@@ -0,0 +1,3 @@
+This file is not used by Subversion 1.3.x or later.
+However, its existence is required for compatibility with
+Subversion 1.2.x or earlier.
diff --git a/ForgeSVN/forgesvn/tests/functional/test_controllers.py b/ForgeSVN/forgesvn/tests/functional/test_controllers.py
index cc37545..eb7d409 100644
--- a/ForgeSVN/forgesvn/tests/functional/test_controllers.py
+++ b/ForgeSVN/forgesvn/tests/functional/test_controllers.py
@@ -38,29 +38,24 @@
         TestController.setUp(self)
         self.setup_with_tools()
 
-    @with_svn
-    @with_tool('test', 'SVN', 'svn-tags', 'SVN with tags')
-    def setup_with_tools(self):
-        h.set_context('test', 'src', neighborhood='Projects')
+    def _make_app(self, mount_point, name):
+        h.set_context('test', mount_point, neighborhood='Projects')
         repo_dir = pkg_resources.resource_filename(
             'forgesvn', 'tests/data/')
         c.app.repo.fs_path = repo_dir
         c.app.repo.status = 'ready'
-        c.app.repo.name = 'testsvn'
-        ThreadLocalORMSession.flush_all()
-        ThreadLocalORMSession.close_all()
-        h.set_context('test', 'src', neighborhood='Projects')
+        c.app.repo.name = name
         c.app.repo.refresh()
+        if os.path.isdir(c.app.repo.tarball_path):
+            shutil.rmtree(c.app.repo.tarball_path)
         ThreadLocalORMSession.flush_all()
         ThreadLocalORMSession.close_all()
-        h.set_context('test', 'svn-tags', neighborhood='Projects')
-        c.app.repo.fs_path = repo_dir
-        c.app.repo.status = 'ready'
-        c.app.repo.name = 'testsvn-trunk-tags-branches'
-        c.app.repo.refresh()
-        ThreadLocalORMSession.flush_all()
-        ThreadLocalORMSession.close_all()
-        h.set_context('test', 'src', neighborhood='Projects')
+
+    @with_svn
+    @with_tool('test', 'SVN', 'svn-tags', 'SVN with tags')
+    def setup_with_tools(self):
+        self._make_app('svn-tags', 'testsvn-trunk-tags-branches')
+        self._make_app('src', 'testsvn')
 
 
 class TestRootController(SVNTestController):
@@ -194,12 +189,16 @@
     def test_tarball(self):
         r = self.app.get('/src/3/tree/')
         assert 'Download Snapshot' in r
-        r = self.app.post('/src/3/tarball')
-        assert 'Generating snapshot...' in r
+        r = self.app.post('/src/3/tarball').follow()
+        assert 'Checking snapshot status...' in r
+        r = self.app.get('/src/3/tarball')
+        assert 'Checking snapshot status...' in r
         M.MonQTask.run_ready()
         ThreadLocalORMSession.flush_all()
         r = self.app.get('/src/3/tarball_status')
         assert '{"status": "ready"}' in r
+        r = self.app.get('/src/3/tarball')
+        assert 'Your download will begin shortly' in r
 
     @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing')
     def test_tarball_tags_aware(self):
@@ -217,23 +216,23 @@
         assert_equal(form.find('input', attrs=dict(name='path')).get('value'), '/tags/tag-1.0')
 
         r = self.app.get('/p/test/svn-tags/19/tarball_status?path=/tags/tag-1.0')
-        assert_equal(r.json['status'], None)
-        r = self.app.post('/p/test/svn-tags/19/tarball', dict(path='/tags/tag-1.0'))
-        assert 'Generating snapshot...' in r
+        assert_equal(r.json['status'], 'na')
+        r = self.app.post('/p/test/svn-tags/19/tarball', dict(path='/tags/tag-1.0')).follow()
+        assert 'Checking snapshot status...' in r
         M.MonQTask.run_ready()
         r = self.app.get('/p/test/svn-tags/19/tarball_status?path=/tags/tag-1.0')
         assert_equal(r.json['status'], 'ready')
 
         r = self.app.get('/p/test/svn-tags/19/tarball_status?path=/trunk')
-        assert_equal(r.json['status'], None)
-        r = self.app.post('/p/test/svn-tags/19/tarball', dict(path='/trunk/'))
-        assert 'Generating snapshot...' in r
+        assert_equal(r.json['status'], 'na')
+        r = self.app.post('/p/test/svn-tags/19/tarball', dict(path='/trunk/')).follow()
+        assert 'Checking snapshot status...' in r
         M.MonQTask.run_ready()
         r = self.app.get('/p/test/svn-tags/19/tarball_status?path=/trunk')
         assert_equal(r.json['status'], 'ready')
 
         r = self.app.get('/p/test/svn-tags/19/tarball_status?path=/branches/aaa/')
-        assert_equal(r.json['status'], None)
+        assert_equal(r.json['status'], 'na')
 
         # All of the following also should be ready because...
         # ...this is essentially the same as trunk snapshot
@@ -275,3 +274,30 @@
         r = self.app.post('/p/test/admin/empty/importer/do_import',
                           {'checkout_url': 'http://fake.svn/'})
         assert tasks.reclone.post.called
+
+
+class SVNTestRenames(TestController):
+    def setUp(self):
+        TestController.setUp(self)
+        self.setup_with_tools()
+
+    @with_svn
+    def setup_with_tools(self):
+        h.set_context('test', 'src', neighborhood='Projects')
+        repo_dir = pkg_resources.resource_filename(
+            'forgesvn', 'tests/data/')
+        c.app.repo.fs_path = repo_dir
+        c.app.repo.status = 'ready'
+        c.app.repo.name = 'testsvn'
+        ThreadLocalORMSession.flush_all()
+        ThreadLocalORMSession.close_all()
+        h.set_context('test', 'src', neighborhood='Projects')
+        c.app.repo.refresh()
+        ThreadLocalORMSession.flush_all()
+        ThreadLocalORMSession.close_all()
+        h.set_context('test', 'src', neighborhood='Projects')
+
+    def test_log(self):
+        r = self.app.get('/src/3/log/?path=/dir/b.txt')
+        assert '<b>renamed from</b>' in r
+        assert '/dir/a.txt' in r
diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py b/ForgeSVN/forgesvn/tests/model/test_repository.py
index e47158f..2ed5de3 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -237,7 +237,8 @@
              'message': u'Copied a => b',
              'parents': [4],
              'refs': ['HEAD'],
-             'size': 0},
+             'size': 0,
+             'rename_details':{}},
             {'authored': {'date': datetime(2010, 10, 8, 15, 32, 59, 383719),
                           'email': '',
                           'name': u'rick446'},
@@ -248,7 +249,8 @@
              'message': u'Remove hello.txt',
              'parents': [3],
              'refs': [],
-             'size': 0},
+             'size': 0,
+             'rename_details':{}},
             {'authored': {'date': datetime(2010, 10, 8, 15, 32, 48, 272296),
                           'email': '',
                           'name': u'rick446'},
@@ -259,7 +261,8 @@
              'message': u'Modify readme',
              'parents': [2],
              'refs': [],
-             'size': 0},
+             'size': 0,
+             'rename_details':{}},
             {'authored': {'date': datetime(2010, 10, 8, 15, 32, 36, 221863),
                           'email': '',
                           'name': u'rick446'},
@@ -270,7 +273,8 @@
              'message': u'Add path',
              'parents': [1],
              'refs': [],
-             'size': 0},
+             'size': 0,
+             'rename_details':{}},
             {'authored': {'date': datetime(2010, 10, 8, 15, 32, 7, 238375),
                           'email': '',
                           'name': u'rick446'},
@@ -281,7 +285,8 @@
              'message': u'Create readme',
              'parents': [],
              'refs': [],
-             'size': 0},
+             'size': 0,
+             'rename_details':{}},
             ])
 
     def test_log_file(self):
@@ -297,7 +302,8 @@
              'message': u'Modify readme',
              'parents': [2],
              'refs': [],
-             'size': 28},
+             'size': 28,
+             'rename_details': {}},
             {'authored': {'date': datetime(2010, 10, 8, 15, 32, 7, 238375),
                           'email': '',
                           'name': u'rick446'},
@@ -308,7 +314,8 @@
              'message': u'Create readme',
              'parents': [],
              'refs': [],
-             'size': 28},
+             'size': 28,
+             'rename_details': {}},
             ])
 
     def test_is_file(self):
@@ -846,7 +853,7 @@
             assert_equal(_svn().log.call_args[0], ('file:///tmp/svn/p/test/test2',))
             assert_equal(_svn().log.call_args[1]['revision_start'].number, 2)
             assert_equal(_svn().log.call_args[1]['limit'], 25)
-            _map_log.assert_called_once_with(_svn().log.return_value[0], 'file:///tmp/svn/p/test/test2')
+            _map_log.assert_called_once_with(_svn().log.return_value[0], 'file:///tmp/svn/p/test/test2', None)
 
 class TestRepoObject(_TestWithRepoAndCommit):
 
@@ -1010,3 +1017,36 @@
 
     def test_context(self):
         self.ci.context()
+
+
+class TestRename(unittest.TestCase):
+
+    def setUp(self):
+        setup_basic_test()
+        self.setup_with_tools()
+
+    @with_svn
+    def setup_with_tools(self):
+        setup_global_objects()
+        h.set_context('test', 'src', neighborhood='Projects')
+        repo_dir = pkg_resources.resource_filename(
+            'forgesvn', 'tests/data/')
+        self.repo = SM.Repository(
+            name='testsvn-rename',
+            fs_path=repo_dir,
+            url_path = '/test/',
+            tool = 'svn',
+            status = 'creating')
+        self.repo.refresh()
+        self.rev = self.repo.commit('HEAD')
+        ThreadLocalORMSession.flush_all()
+        ThreadLocalORMSession.close_all()
+
+    def test_log_file_with_rename(self):
+        entry = list(self.repo.log(path='/dir/b.txt', id_only=False))[0]
+        assert_equal(entry['id'], 3)
+        assert_equal(entry['rename_details']['path'], '/dir/a.txt')
+        assert_equal(
+            entry['rename_details']['commit_url'],
+            self.repo.url_for_commit(2)  # previous revision
+        )
diff --git a/requirements-sf.txt b/requirements-sf.txt
index a77c839..6115291 100644
--- a/requirements-sf.txt
+++ b/requirements-sf.txt
@@ -4,9 +4,9 @@
 amqplib==0.6.1
 kombu==1.0.4
 coverage==3.5a1-20110413
-ForgeHg==0.1.15
+ForgeHg==0.1.16
 ForgePastebin==0.2.7
-GoogleCodeWikiImporter==0.2.0
+GoogleCodeWikiImporter==0.3.0
 mechanize==0.2.4
 mercurial==1.4.3
 MySQL-python==1.2.3c1
@@ -20,7 +20,7 @@
 pyzmq==2.1.7
 html2text==3.200.3dev-20121112
 PyMollom==0.1
-TracWikiImporter==0.1.0
+TracWikiImporter==0.2.0
 
 # use version built from https://github.com/johnsca/GitPython/commits/tv/6000
 # for unmerged fixes for [#5411], [#6000], and [#6078]
diff --git a/scripts/rethumb.py b/scripts/rethumb.py
index 5f753ff..6ee190a 100644
--- a/scripts/rethumb.py
+++ b/scripts/rethumb.py
@@ -18,14 +18,16 @@
 import sys
 import time
 
-import pkg_resources
 import PIL
 import tg
 from pylons import tmpl_context as c
 from paste.deploy.converters import asint
 
 from ming.orm import mapper, ThreadLocalORMSession, session, state, Mapper
+
 from allura.command import base
+from allura.lib.helpers import iter_entry_points
+
 import forgetracker.model
 
 
@@ -109,7 +111,7 @@
                 self.process_att_of_type(M.DiscussionAttachment, {'app_config_id': app._id, 'discussion_id': {'$ne': None}})
 
                 # Otherwise, we'll take attachment classes belonging to app's package
-                ep = pkg_resources.iter_entry_points('allura', app.tool_name).next()
+                ep = iter_entry_points('allura', app.tool_name).next()
                 app_package = ep.module_name.split('.', 1)[0]
                 if app_package == 'allura':
                     # Apps in allura known to not define own attachment types
