Switch to smart HTTP mode.
Gerrit actually only speaks smart http, but we were assuming dumb HTTP (which is provided in OpenStack's configuration). Change-Id: Id299f53a6be6fc1670edf1da4b3353115bf1e31e Reviewed-on: https://review.openstack.org/13146 Reviewed-by: Clark Boylan <clark.boylan@gmail.com> Reviewed-by: Monty Taylor <mordred@inaugust.com> Approved: James E. Blair <corvus@inaugust.com> Tested-by: Jenkins
This commit is contained in:
parent
7ee88a225d
commit
35956c5ac7
|
@ -580,11 +580,16 @@ class FakeURLOpener(object):
|
|||
res = urlparse.urlparse(self.url)
|
||||
path = res.path
|
||||
project = '/'.join(path.split('/')[2:-2])
|
||||
ret = ''
|
||||
ret = '001e# service=git-upload-pack\n'
|
||||
ret += ('000000a31270149696713ba7e06f1beb760f20d359c4abed HEAD\x00'
|
||||
'multi_ack thin-pack side-band side-band-64k ofs-delta '
|
||||
'shallow no-progress include-tag multi_ack_detailed no-done\n')
|
||||
path = os.path.join(UPSTREAM_ROOT, project)
|
||||
repo = git.Repo(path)
|
||||
for ref in repo.refs:
|
||||
ret += ref.object.hexsha + '\t' + ref.path + '\n'
|
||||
r = ref.object.hexsha + ' ' + ref.path + '\n'
|
||||
ret += '%04x%s' % (len(r) + 4, r)
|
||||
ret += '0000'
|
||||
return ret
|
||||
|
||||
|
||||
|
|
|
@ -117,12 +117,41 @@ class Gerrit(object):
|
|||
message, action)
|
||||
|
||||
def _getInfoRefs(self, project):
|
||||
url = "https://%s/p/%s/info/refs" % (self.server, project)
|
||||
url = "https://%s/p/%s/info/refs?service=git-upload-pack" % (
|
||||
self.server, project)
|
||||
data = urllib2.urlopen(url).read()
|
||||
ret = {}
|
||||
for line in data.split('\n'):
|
||||
if not line:
|
||||
read_headers = False
|
||||
read_advertisement = False
|
||||
if data[4] != '#':
|
||||
raise Exception("Gerrit repository does not support "
|
||||
"git-upload-pack")
|
||||
i = 0
|
||||
while i < len(data):
|
||||
if len(data) - i < 4:
|
||||
raise Exception("Invalid length in info/refs")
|
||||
plen = int(data[i:i + 4], 16)
|
||||
i += 4
|
||||
# It's the length of the packet, including the 4 bytes of the
|
||||
# length itself, unless it's null, in which case the length is
|
||||
# not included.
|
||||
if plen > 0:
|
||||
plen -= 4
|
||||
if len(data) - i < plen:
|
||||
raise Exception("Invalid data in info/refs")
|
||||
line = data[i:i + plen]
|
||||
i += plen
|
||||
if not read_headers:
|
||||
if plen == 0:
|
||||
read_headers = True
|
||||
continue
|
||||
if not read_advertisement:
|
||||
read_advertisement = True
|
||||
continue
|
||||
if plen == 0:
|
||||
# The terminating null
|
||||
continue
|
||||
line = line.strip()
|
||||
revision, ref = line.split()
|
||||
ret[ref] = revision
|
||||
return ret
|
||||
|
|
Loading…
Reference in New Issue