@@ -364,7 +364,6 @@ class RemoteProgress(object):
364364'_seen_ops' ,
365365'error_lines' ,# Lines that started with 'error:' or 'fatal:'.
366366'other_lines' )# Lines not denoting progress (i.e.g. push-infos).
367- re_ansi_escape = re .compile (r'\x1B[@-_][0-?]*[ -/]*[@-~]' )
368367re_op_absolute = re .compile (r"(remote: )?([\w\s]+):\s+()(\d+)()(.*)" )
369368re_op_relative = re .compile (r"(remote: )?([\w\s]+):\s+(\d+)% \((\d+)/(\d+)\)(.*)" )
370369
@@ -393,7 +392,17 @@ def _parse_progress_line(self, line):
393392
394393# find escape characters and cut them away - regex will not work with
395394# them as they are non-ascii. As git might expect a tty, it will send them
396- line = self .re_ansi_escape .sub ('' ,line )
395+ last_valid_index = None
396+ for i ,c in enumerate (reversed (line )):
397+ if ord (c )< 32 :
398+ # its a slice index
399+ last_valid_index = - i - 1
400+ # END character was non-ascii
401+ # END for each character in line
402+ if last_valid_index is not None :
403+ line = line [:last_valid_index ]
404+ # END cut away invalid part
405+ line = line .rstrip ()
397406
398407cur_count ,max_count = None ,None
399408match = self .re_op_relative .match (line )