Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/cvs/cvsclient.py
Show First 20 Lines • Show All 329 Lines • ▼ Show 20 Lines | def checkout(self, path, rev, dest_dir): | ||||
"Directory %s\n%s\n" | "Directory %s\n%s\n" | ||||
"Global_option -q\n" | "Global_option -q\n" | ||||
"Argument -r%s\n" | "Argument -r%s\n" | ||||
"Argument -kb\n" | "Argument -kb\n" | ||||
"Argument --\nArgument %s\nco \n" | "Argument --\nArgument %s\nco \n" | ||||
% (self.cvs_module_name, self.cvs_module_name, rev, path) | % (self.cvs_module_name, self.cvs_module_name, rev, path) | ||||
) | ) | ||||
while True: | while True: | ||||
if have_bytecount and bytecount > 0: | if have_bytecount: | ||||
if bytecount < 0: | |||||
raise CVSProtocolError("server sent too much file content data") | |||||
response = self.conn_read_line(require_newline=False) | response = self.conn_read_line(require_newline=False) | ||||
if response is None: | if response is None: | ||||
raise CVSProtocolError("Incomplete response from CVS server") | raise CVSProtocolError("Incomplete response from CVS server") | ||||
if len(response) > bytecount: | |||||
# When a file lacks a final newline we receive a line which | |||||
# contains file content as well as CVS protocol response data. | |||||
# Split last line of file content from CVS protocol data... | |||||
co_output.write(response[:bytecount]) | |||||
response = response[bytecount:] | |||||
bytecount = 0 | |||||
# ...and process the CVS protocol response below. | |||||
else: | |||||
co_output.write(response) | co_output.write(response) | ||||
bytecount -= len(response) | bytecount -= len(response) | ||||
if bytecount < 0: | |||||
raise CVSProtocolError( | |||||
"Overlong response from " "CVS server: %s" % response | |||||
) | |||||
continue | continue | ||||
else: | else: | ||||
response = self.conn_read_line() | response = self.conn_read_line() | ||||
if response[0:2] == b"E ": | if response[0:2] == b"E ": | ||||
raise CVSProtocolError("Error from CVS server: %s" % response) | raise CVSProtocolError("Error from CVS server: %s" % response) | ||||
if have_bytecount and bytecount == 0 and response == b"ok\n": | if response == b"ok\n": | ||||
if have_bytecount: | |||||
break | break | ||||
else: | |||||
raise CVSProtocolError("server sent 'ok' but no file contents") | |||||
if skip_line: | if skip_line: | ||||
skip_line = False | skip_line = False | ||||
continue | continue | ||||
elif expect_bytecount: | elif expect_bytecount: | ||||
try: | try: | ||||
bytecount = int(response[0:-1]) # strip trailing \n | bytecount = int(response[0:-1]) # strip trailing \n | ||||
except ValueError: | except ValueError: | ||||
raise CVSProtocolError("Bad CVS protocol response: %s" % response) | raise CVSProtocolError("Bad CVS protocol response: %s" % response) | ||||
Show All 30 Lines |