gitview: Fix the blame interface.
The async reading from the pipe was skipping some of the input lines. Fix the same by making sure that we add the partial content of the previous read to the newly read data. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4175e9e3a8
commit
30a844874d
@ -352,6 +352,7 @@ class AnnotateWindow(object):
|
||||
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
self.window.set_border_width(0)
|
||||
self.window.set_title("Git repository browser annotation window")
|
||||
self.prev_read = ""
|
||||
|
||||
# Use two thirds of the screen by default
|
||||
screen = self.window.get_screen()
|
||||
@ -401,7 +402,10 @@ class AnnotateWindow(object):
|
||||
def data_ready(self, source, condition):
|
||||
while (1):
|
||||
try :
|
||||
buffer = source.read(8192)
|
||||
# A simple readline doesn't work
|
||||
# a readline bug ??
|
||||
buffer = source.read(100)
|
||||
|
||||
except:
|
||||
# resource temporary not available
|
||||
return True
|
||||
@ -411,6 +415,19 @@ class AnnotateWindow(object):
|
||||
source.close()
|
||||
return False
|
||||
|
||||
if (self.prev_read != ""):
|
||||
buffer = self.prev_read + buffer
|
||||
self.prev_read = ""
|
||||
|
||||
if (buffer[len(buffer) -1] != '\n'):
|
||||
try:
|
||||
newline_index = buffer.rindex("\n")
|
||||
except ValueError:
|
||||
newline_index = 0
|
||||
|
||||
self.prev_read = buffer[newline_index:(len(buffer))]
|
||||
buffer = buffer[0:newline_index]
|
||||
|
||||
for buff in buffer.split("\n"):
|
||||
annotate_line = re.compile('^([0-9a-f]{40}) (.+) (.+) (.+)$')
|
||||
m = annotate_line.match(buff)
|
||||
|
Loading…
Reference in New Issue
Block a user