[#8375] git py3 fixes
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index 4959af7..3104e07 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -797,7 +797,7 @@
         next = h.really_unicode(unquote(next))
         if not rest:
             # Might be a file rather than a dir
-            filename = h.really_unicode(request.environ['PATH_INFO'].rsplit(str('/'))[-1])
+            filename = h.really_unicode(request.path_info.rsplit(str('/'))[-1])
             if filename:
                 try:
                     obj = self._tree[filename]
@@ -809,7 +809,7 @@
                         self._tree,
                         filename), rest
         elif rest == ('index', ):
-            rest = (request.environ['PATH_INFO'].rsplit(str('/'))[-1],)
+            rest = (request.path_info.rsplit(str('/'))[-1],)
         try:
             tree = self._tree[next]
         except KeyError:
@@ -899,10 +899,11 @@
             diff = "Cannot display: file marked as a binary type."
             return dict(a=a, b=b, diff=diff)
 
-        la = list(a)
-        lb = list(b)
-        adesc = ('a' + h.really_unicode(apath)).encode('utf-8')
-        bdesc = ('b' + h.really_unicode(b.path())).encode('utf-8')
+        # could consider making Blob.__iter__ do unicode conversion?
+        la = [h.really_unicode(line) for line in a]
+        lb = [h.really_unicode(line) for line in b]
+        adesc = 'a' + h.really_unicode(apath)
+        bdesc = 'b' + h.really_unicode(b.path())
 
         if not fmt:
             fmt = web_session.get('diformat', '')
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 11638f3..7c5827b 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -353,7 +353,7 @@
         If id_only is True, returns only the commit ID, otherwise it returns
         detailed information about each commit.
         """
-        path = path.strip('/').encode("utf-8") if path else None
+        path = path.strip('/') if path else None
         if exclude is not None:
             revs.extend(['^%s' % e for e in exclude])
         args = ['--follow', '--name-status', revs, '--', path or '.']
@@ -634,7 +634,7 @@
         skip = 0
         while commit_id and not files:
             output = self._git.git.log(
-                commit_id, '--', *[p.encode('utf-8') for p in paths],
+                commit_id, '--', *[p for p in paths],
                 pretty='format:%H',
                 name_only=True,
                 max_count=1,
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index c5050c7..f65a823 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -302,13 +302,13 @@
         url = ci + 'tree/' + h.urlquote('with%2Furlquote-literal.txt') + '?format=raw'
         resp = self.app.get(url)
         assert_in('%2F means /', resp.body.decode('utf-8'))
-        assert_equal(resp.headers.get('Content-Disposition').decode('utf-8'),
+        assert_equal(resp.headers.get('Content-Disposition'),
                      'attachment;filename="with%252Furlquote-literal.txt"')
 
         url = ci + 'tree/' + h.urlquote('with"&:specials.txt') + '?format=raw'
         resp = self.app.get(url)
         assert_in('"&: encodes as %22%26%3A', resp.body.decode('utf-8'))
-        assert_equal(resp.headers.get('Content-Disposition').decode('utf-8'),
+        assert_equal(resp.headers.get('Content-Disposition'),
                      'attachment;filename="with%22%26%3Aspecials.txt"')
 
     def test_invalid_file(self):
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index 30672f3..39b055c 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -748,7 +748,7 @@
         tmp_repo.git.checkout.assert_called_once_with('target-branch')
         assert_equal(
             tmp_repo.git.config.call_args_list,
-            [mock.call('user.name', 'Test Admin'),
+            [mock.call('user.name', b'Test Admin'),
              mock.call('user.email', 'allura@localhost')])
         msg = 'Merge downstream-repo-url branch source-branch into target-branch'
         msg += '\n\nhttp://localhost/merge-request/1/'