summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Brown <ben.brown@codethink.co.uk>2013-12-18 13:52:11 +0000
committerBen Brown <ben.brown@codethink.co.uk>2013-12-18 13:52:11 +0000
commitae0bb5ac1245fe124560fa7dc1f53656da190ac2 (patch)
tree8f8b74763b2e86866994ddf09c4b58d5e92e82af
parent8ba03d5ce830968cd38f445bb942af72871448b6 (diff)
parent08281eece1dc4a814dff6bb44509dfd026e7241c (diff)
downloadmorph-ae0bb5ac1245fe124560fa7dc1f53656da190ac2.tar.gz
Merge branch 'benbrown/quote-filename-and-ref'
-rw-r--r--morphlib/remoterepocache.py18
-rw-r--r--morphlib/remoterepocache_tests.py7
2 files changed, 15 insertions, 10 deletions
diff --git a/morphlib/remoterepocache.py b/morphlib/remoterepocache.py
index 6c7cbd7f..b1544b03 100644
--- a/morphlib/remoterepocache.py
+++ b/morphlib/remoterepocache.py
@@ -52,7 +52,7 @@ class RemoteRepoCache(object):
self._resolver = resolver
def resolve_ref(self, repo_name, ref):
- repo_url = urllib.quote(self._resolver.pull_url(repo_name))
+ repo_url = self._resolver.pull_url(repo_name)
try:
return self._resolve_ref_for_repo_url(repo_url, ref)
except BaseException, e:
@@ -60,7 +60,7 @@ class RemoteRepoCache(object):
raise ResolveRefError(repo_name, ref)
def cat_file(self, repo_name, ref, filename):
- repo_url = urllib.quote(self._resolver.pull_url(repo_name))
+ repo_url = self._resolver.pull_url(repo_name)
try:
return self._cat_file_for_repo_url(repo_url, ref, filename)
except BaseException, e:
@@ -68,7 +68,7 @@ class RemoteRepoCache(object):
raise CatFileError(repo_name, ref, filename)
def ls_tree(self, repo_name, ref):
- repo_url = urllib.quote(self._resolver.pull_url(repo_name))
+ repo_url = self._resolver.pull_url(repo_name)
try:
info = json.loads(self._ls_tree_for_repo_url(repo_url, ref))
return info['tree'].keys()
@@ -77,17 +77,23 @@ class RemoteRepoCache(object):
raise LsTreeError(repo_name, ref)
def _resolve_ref_for_repo_url(self, repo_url, ref): # pragma: no cover
- data = self._make_request('sha1s?repo=%s&ref=%s' % (repo_url, ref))
+ data = self._make_request(
+ 'sha1s?repo=%s&ref=%s' % self._quote_strings(repo_url, ref))
info = json.loads(data)
return info['sha1'], info['tree']
def _cat_file_for_repo_url(self, repo_url, ref,
filename): # pragma: no cover
return self._make_request(
- 'files?repo=%s&ref=%s&filename=%s' % (repo_url, ref, filename))
+ 'files?repo=%s&ref=%s&filename=%s'
+ % self._quote_strings(repo_url, ref, filename))
def _ls_tree_for_repo_url(self, repo_url, ref): # pragma: no cover
- return self._make_request('trees?repo=%s&ref=%s' % (repo_url, ref))
+ return self._make_request(
+ 'trees?repo=%s&ref=%s' % self._quote_strings(repo_url, ref))
+
+ def _quote_strings(self, *args): # pragma: no cover
+ return tuple(urllib.quote(string) for string in args)
def _make_request(self, path): # pragma: no cover
server_url = self.server_url
diff --git a/morphlib/remoterepocache_tests.py b/morphlib/remoterepocache_tests.py
index 22c89bf9..0b1a183b 100644
--- a/morphlib/remoterepocache_tests.py
+++ b/morphlib/remoterepocache_tests.py
@@ -17,23 +17,22 @@
import json
import unittest
-import urllib
import morphlib
class RemoteRepoCacheTests(unittest.TestCase):
def _resolve_ref_for_repo_url(self, repo_url, ref):
- return self.sha1s[urllib.unquote(repo_url)][ref]
+ return self.sha1s[repo_url][ref]
def _cat_file_for_repo_url(self, repo_url, sha1, filename):
- return self.files[urllib.unquote(repo_url)][sha1][filename]
+ return self.files[repo_url][sha1][filename]
def _ls_tree_for_repo_url(self, repo_url, sha1):
return json.dumps({
'repo': repo_url,
'ref': sha1,
- 'tree': self.files[urllib.unquote(repo_url)][sha1]
+ 'tree': self.files[repo_url][sha1]
})
def setUp(self):