On Sat, 3 Jan 2009, Robin Rosenberg wrote: > onsdag 31 december 2008 20:04:01 skrev Shawn O. Pearce: > > By matching only whole lines we should be able to improve the > > progress scaper so we avoid ugly output like we had been seeing: > > > > EGIT.contrib/jgit clone git://repo.or.cz/libgit2.git LIBGIT2 > > Initialized empty Git repository in /home/me/SW/LIBGIT2/.git > > Counting objects: 547 > > Compressing objects: 100% (192/192) > > ts: 100% (192/192) > > Compressing objects: 100% (192/192) > > ng objects: 100% (192/192) > > > > Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> > > --- > > Robin Rosenberg <robin.rosenberg@xxxxxxxxxx> wrote: > > > Would it be hard to get the progress look better? > > > > Maybe this does the trick. Its hard to reproduce so its hard to > > come up with the condition that was giving us the problem before. > > I suspect its because we were getting line fragments on the sideband > > channel, but I'm not sure that was really the case. > > Nasty. I couldn't reproduce it myself. I'll hold onto this one for a while and > see if I'll get the opportunity to test it live with this problem. There may indeed be line fragments sent over the sideband channel, as well as the opposite which is multiple lines sent at once in a single packet. If you look at sideband.c you'll find about all those cases. In general, what you have to do is: - for each packet: - split into multiple chunks on line breaks ('\r' or '\n') - for each chunk: - if last chunk didn't end with a line break, or if current chunk is empty or only contains a line break, then skip printing the "remote:" prefix. Otherwise print it. - print the current chunk up to any line break - if current chunk contains a line break and other characters then print a sequence to clear the remaining of the screen line - print the line break if any That should cover all cases. Note that the case where a previous chunk didn't end with a line break is always seen when moving from one packet to another, so that state cannot be local to the inner loop. Nicolas -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html