Browse Source

Support python3 for compat client tests.

Jelmer Vernooij 10 years ago
parent
commit
2219553f37
2 changed files with 46 additions and 36 deletions
  1. 5 5
      dulwich/client.py
  2. 41 31
      dulwich/tests/compat/test_client.py

+ 5 - 5
dulwich/client.py

@@ -132,10 +132,10 @@ class ReportStatusParser(object):
                 else:
                     ok.add(ref)
                 ref_status[ref] = status
-            raise UpdateRefsError(b', '.join([ref for ref in ref_status
-                                              if ref not in ok]) +
-                                              b' failed to update',
-                                  ref_status=ref_status)
+            # TODO(jelmer): don't assume encoding of refs is ascii.
+            raise UpdateRefsError(', '.join([
+                ref.decode('ascii') for ref in ref_status if ref not in ok]) +
+                ' failed to update', ref_status=ref_status)
 
     def handle_packet(self, pkt):
         """Handle a packet.
@@ -281,7 +281,7 @@ class GitClient(object):
                 else:
                     ok.add(ref)
                 ref_status[ref] = status
-            raise UpdateRefsError(b', '.join([ref for ref in ref_status
+            raise UpdateRefsError(', '.join([ref for ref in ref_status
                                              if ref not in ok]) +
                                              b' failed to update',
                                   ref_status=ref_status)

+ 41 - 31
dulwich/tests/compat/test_client.py

@@ -30,7 +30,12 @@ import sys
 import tarfile
 import tempfile
 import threading
-import urllib
+
+try:
+    from urlparse import unquote
+except ImportError:
+    from urllib.parse import unquote
+
 
 try:
     import BaseHTTPServer
@@ -68,7 +73,6 @@ from dulwich.tests.compat.utils import (
     )
 
 
-@skipIfPY3
 class DulwichClientTestBase(object):
     """Tests for client/server compatibility."""
 
@@ -97,7 +101,7 @@ class DulwichClientTestBase(object):
         srcpath = os.path.join(self.gitroot, 'server_new.export')
         src = repo.Repo(srcpath)
         sendrefs = dict(src.get_refs())
-        del sendrefs['HEAD']
+        del sendrefs[b'HEAD']
         c.send_pack(self._build_path('/dest'), lambda _: sendrefs,
                     src.object_store.generate_pack_contents)
 
@@ -113,24 +117,24 @@ class DulwichClientTestBase(object):
 
     def test_send_without_report_status(self):
         c = self._client()
-        c._send_capabilities.remove('report-status')
+        c._send_capabilities.remove(b'report-status')
         srcpath = os.path.join(self.gitroot, 'server_new.export')
         src = repo.Repo(srcpath)
         sendrefs = dict(src.get_refs())
-        del sendrefs['HEAD']
+        del sendrefs[b'HEAD']
         c.send_pack(self._build_path('/dest'), lambda _: sendrefs,
                     src.object_store.generate_pack_contents)
         self.assertDestEqualsSrc()
 
     def make_dummy_commit(self, dest):
-        b = objects.Blob.from_string('hi')
+        b = objects.Blob.from_string(b'hi')
         dest.object_store.add_object(b)
-        t = index.commit_tree(dest.object_store, [('hi', b.id, 0o100644)])
+        t = index.commit_tree(dest.object_store, [(b'hi', b.id, 0o100644)])
         c = objects.Commit()
-        c.author = c.committer = 'Foo Bar <foo@example.com>'
+        c.author = c.committer = b'Foo Bar <foo@example.com>'
         c.author_time = c.commit_time = 0
         c.author_timezone = c.commit_timezone = 0
-        c.message = 'hi'
+        c.message = b'hi'
         c.tree = t
         dest.object_store.add_object(c)
         return c.id
@@ -147,18 +151,19 @@ class DulwichClientTestBase(object):
         srcpath = os.path.join(self.gitroot, 'server_new.export')
         src = repo.Repo(srcpath)
         sendrefs = dict(src.get_refs())
-        del sendrefs['HEAD']
+        del sendrefs[b'HEAD']
         return sendrefs, src.object_store.generate_pack_contents
 
     def test_send_pack_one_error(self):
         dest, dummy_commit = self.disable_ff_and_make_dummy_commit()
-        dest.refs['refs/heads/master'] = dummy_commit
+        dest.refs[b'refs/heads/master'] = dummy_commit
         sendrefs, gen_pack = self.compute_send()
         c = self._client()
         try:
             c.send_pack(self._build_path('/dest'), lambda _: sendrefs, gen_pack)
         except errors.UpdateRefsError as e:
-            self.assertEqual(b'refs/heads/master failed to update', str(e))
+            self.assertEqual('refs/heads/master failed to update',
+                             e.args[0])
             self.assertEqual({b'refs/heads/branch': b'ok',
                               b'refs/heads/master': b'non-fast-forward'},
                              e.ref_status)
@@ -166,7 +171,7 @@ class DulwichClientTestBase(object):
     def test_send_pack_multiple_errors(self):
         dest, dummy = self.disable_ff_and_make_dummy_commit()
         # set up for two non-ff errors
-        branch, master = 'refs/heads/branch', 'refs/heads/master'
+        branch, master = b'refs/heads/branch', b'refs/heads/master'
         dest.refs[branch] = dest.refs[master] = dummy
         sendrefs, gen_pack = self.compute_send()
         c = self._client()
@@ -174,16 +179,18 @@ class DulwichClientTestBase(object):
             c.send_pack(self._build_path('/dest'), lambda _: sendrefs, gen_pack)
         except errors.UpdateRefsError as e:
             self.assertIn(str(e),
-                          ['{0}, {1} failed to update'.format(branch, master),
-                           '{1}, {0} failed to update'.format(branch, master)])
-            self.assertEqual({branch: 'non-fast-forward',
-                              master: 'non-fast-forward'},
+                          ['{0}, {1} failed to update'.format(
+                              branch.decode('ascii'), master.decode('ascii')),
+                           '{1}, {0} failed to update'.format(
+                               branch.decode('ascii'), master.decode('ascii'))])
+            self.assertEqual({branch: b'non-fast-forward',
+                              master: b'non-fast-forward'},
                              e.ref_status)
 
     def test_archive(self):
         c = self._client()
         f = BytesIO()
-        c.archive(self._build_path('/server_new.export'), 'HEAD', f.write)
+        c.archive(self._build_path('/server_new.export'), b'HEAD', f.write)
         f.seek(0)
         tf = tarfile.open(fileobj=f)
         self.assertEqual(['baz', 'foo'], tf.getnames())
@@ -199,7 +206,7 @@ class DulwichClientTestBase(object):
     def test_incremental_fetch_pack(self):
         self.test_fetch_pack()
         dest, dummy = self.disable_ff_and_make_dummy_commit()
-        dest.refs['refs/heads/master'] = dummy
+        dest.refs[b'refs/heads/master'] = dummy
         c = self._client()
         dest = repo.Repo(os.path.join(self.gitroot, 'server_new.export'))
         refs = c.fetch(self._build_path('/dest'), dest)
@@ -209,7 +216,7 @@ class DulwichClientTestBase(object):
 
     def test_fetch_pack_no_side_band_64k(self):
         c = self._client()
-        c._fetch_capabilities.remove('side-band-64k')
+        c._fetch_capabilities.remove(b'side-band-64k')
         dest = repo.Repo(os.path.join(self.gitroot, 'dest'))
         refs = c.fetch(self._build_path('/server_new.export'), dest)
         for r in refs.items():
@@ -229,18 +236,19 @@ class DulwichClientTestBase(object):
     def test_send_remove_branch(self):
         dest = repo.Repo(os.path.join(self.gitroot, 'dest'))
         dummy_commit = self.make_dummy_commit(dest)
-        dest.refs['refs/heads/master'] = dummy_commit
-        dest.refs['refs/heads/abranch'] = dummy_commit
+        dest.refs[b'refs/heads/master'] = dummy_commit
+        dest.refs[b'refs/heads/abranch'] = dummy_commit
         sendrefs = dict(dest.refs)
-        sendrefs['refs/heads/abranch'] = "00" * 20
-        del sendrefs['HEAD']
+        sendrefs[b'refs/heads/abranch'] = b"00" * 20
+        del sendrefs[b'HEAD']
         gen_pack = lambda have, want: []
         c = self._client()
-        self.assertEqual(dest.refs["refs/heads/abranch"], dummy_commit)
+        self.assertEqual(dest.refs[b"refs/heads/abranch"], dummy_commit)
         c.send_pack(self._build_path('/dest'), lambda _: sendrefs, gen_pack)
-        self.assertFalse("refs/heads/abranch" in dest.refs)
+        self.assertFalse(b"refs/heads/abranch" in dest.refs)
 
 
+@skipIfPY3
 class DulwichTCPClientTest(CompatTestCase, DulwichClientTestBase):
 
     def setUp(self):
@@ -300,6 +308,7 @@ class TestSSHVendor(object):
         return client.SubprocessWrapper(p)
 
 
+@skipIfPY3
 class DulwichMockSSHClientTest(CompatTestCase, DulwichClientTestBase):
 
     def setUp(self):
@@ -379,7 +388,7 @@ class GitHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
         env['GIT_PROJECT_ROOT'] = self.server.root_path
         env["GIT_HTTP_EXPORT_ALL"] = "1"
         env['REQUEST_METHOD'] = self.command
-        uqrest = urllib.unquote(rest)
+        uqrest = unquote(rest)
         env['PATH_INFO'] = uqrest
         env['SCRIPT_NAME'] = "/"
         if query:
@@ -388,7 +397,7 @@ class GitHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
         if host != self.client_address[0]:
             env['REMOTE_HOST'] = host
         env['REMOTE_ADDR'] = self.client_address[0]
-        authorization = self.headers.getheader("authorization")
+        authorization = self.headers.get("authorization")
         if authorization:
             authorization = authorization.split()
             if len(authorization) == 2:
@@ -408,10 +417,10 @@ class GitHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
             env['CONTENT_TYPE'] = self.headers.type
         else:
             env['CONTENT_TYPE'] = self.headers.typeheader
-        length = self.headers.getheader('content-length')
+        length = self.headers.get('content-length')
         if length:
             env['CONTENT_LENGTH'] = length
-        referer = self.headers.getheader('referer')
+        referer = self.headers.get('referer')
         if referer:
             env['HTTP_REFERER'] = referer
         accept = []
@@ -421,7 +430,7 @@ class GitHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
             else:
                 accept = accept + line[7:].split(',')
         env['HTTP_ACCEPT'] = ','.join(accept)
-        ua = self.headers.getheader('user-agent')
+        ua = self.headers.get('user-agent')
         if ua:
             env['HTTP_USER_AGENT'] = ua
         co = filter(None, self.headers.getheaders('cookie'))
@@ -470,6 +479,7 @@ class HTTPGitServer(BaseHTTPServer.HTTPServer):
         return 'http://%s:%s/' % (self.server_name, self.server_port)
 
 
+@skipIfPY3
 class DulwichHttpClientTest(CompatTestCase, DulwichClientTestBase):
 
     min_git_version = (1, 7, 0, 2)