summaryrefslogtreecommitdiffstats
path: root/subcmds/sync.py
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2022-05-20 23:34:44 -0400
committerMike Frysinger <vapier@google.com>2022-07-28 17:44:21 +0000
commit5951e3043f8d9567bfcd6e0f328ae057e1dfad11 (patch)
tree8fdf3cc7a4f94d2c862c22e19abec2ccab391032 /subcmds/sync.py
parent48ea25c6a7f9ca601dc23ca8e32cc2d0dd3f26c2 (diff)
downloadgit-repo-5951e3043f8d9567bfcd6e0f328ae057e1dfad11.tar.gz
sync: handle smartsync HTML responses better
If the server responds with an HTML page, we should show that to the user instead of crashing with XML errors. Bug: https://crbug.com/gerrit/15936 Change-Id: I52e6b781c3bb6a6c9f6ecbe2e0907044876cdc8d Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/337519 Reviewed-by: Raman Tenneti <rtenneti@google.com> Tested-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'subcmds/sync.py')
-rw-r--r--subcmds/sync.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 507d1c94..a2b376bc 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -28,6 +28,7 @@ import time
28import urllib.error 28import urllib.error
29import urllib.parse 29import urllib.parse
30import urllib.request 30import urllib.request
31import xml.parsers.expat
31import xmlrpc.client 32import xmlrpc.client
32 33
33try: 34try:
@@ -1431,11 +1432,16 @@ class PersistentTransport(xmlrpc.client.Transport):
1431 raise 1432 raise
1432 1433
1433 p, u = xmlrpc.client.getparser() 1434 p, u = xmlrpc.client.getparser()
1434 while 1: 1435 # Response should be fairly small, so read it all at once.
1435 data = response.read(1024) 1436 # This way we can show it to the user in case of error (e.g. HTML).
1436 if not data: 1437 data = response.read()
1437 break 1438 try:
1438 p.feed(data) 1439 p.feed(data)
1440 except xml.parsers.expat.ExpatError as e:
1441 raise IOError(
1442 f'Parsing the manifest failed: {e}\n'
1443 f'Please report this to your manifest server admin.\n'
1444 f'Here is the full response:\n{data.decode("utf-8")}')
1439 p.close() 1445 p.close()
1440 return u.close() 1446 return u.close()
1441 1447