path: root/progress.c
AgeCommit message (Collapse)Author
2009-10-14change throughput display units with fast linksNicolas Pitre
Switch to MiB/s when the connection is fast enough (i.e. on a LAN). Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2009-09-14Nicolas Pitre has a new email addressNicolas Pitre
Due to problems at, my email address is no longer valid. From now on, should be used instead. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2009-04-25progress bar: round to the nearest instead of truncating downNicolas Pitre
Often the throughput output is requested when the data read so far is one smaller than multiple of 1024; because 1023/1024 is ~0.999, it often shows up as 0.99 because the code currently truncates. Signed-off-by: Junio C Hamano <>
2008-06-08progress.c: avoid use of dynamic-sized arrayBoyd Lynn Gerber
Dynamically sized arrays are gcc and C99 construct. Using them hurts portability to older compilers, although using them is nice in this case it is not desirable. This patch removes the only use of the construct in stop_progress_msg(); the function is about writing out a single line of a message, and the existing callers of this function feed messages of only bounded size anyway, so use of dynamic array is simply overkill. Signed-off-by: Boyd Lynn Gerber <> Signed-off-by: Junio C Hamano <>
2007-11-20Flush progress message buffer in display().Johannes Sixt
This will make progress display from pack-objects (invoked via upload-pack) more responsive on platforms with an implementation of stdio whose stderr is line buffered. The standard error stream is defined to be merely "not fully buffered"; this is different from "unbuffered". If the implementation of the stdio library chooses to make it line buffered, progress reports that end with CR but do not contain LF will accumulate in the stdio buffer before written out. A fflush() after each progress display gives a nice continuous progress. Signed-off-by: Johannes Sixt <> Signed-off-by: Junio C Hamano <>
2007-11-08nicer display of thin pack completionNicolas Pitre
In the same spirit of prettifying Git's output display for mere mortals, here's a simple extension to the progress API allowing for a final message to be provided when terminating a progress line, and use it for the display of the number of objects needed to complete a thin pack, saving yet one more line of screen display. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-11-08make display of total transferred fully accurateNicolas Pitre
The minimum delay of 1/2 sec between successive throughput updates might not have been elapsed when display_throughput() is called for the last time, potentially making the display of total transferred bytes not right when progress is said to be done. Let's force an update of the throughput display as well when the progress is complete. As a side effect, the total transferred will always be displayed even if the actual transfer rate doesn't have time to kickin. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-11-05make display of total transferred more accurateNicolas Pitre
The throughput display needs a delay period before accounting and displaying anything. Yet it might be called after some amount of data has already been transferred. The display of total data is therefore accounted late and therefore smaller than the reality. Let's call display_throughput() with an absolute amount of transferred data instead of a relative number, and let the throughput code find the relative amount of data by itself as needed. This way the displayed total is always exact. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-11-01Show total transferred as part of throughput progressNicolas Pitre
Right now it is infeasible to offer to the user a reasonable concept of when a clone will be complete as we aren't able to come up with the final pack size until after we have actually transferred the entire thing to the client. However in many cases users can work with a rough rule-of-thumb; for example it is somewhat well known that git.git is about 16 MiB today and that linux-2.6.git is over 120 MiB. We now show the total amount of data we have transferred over the network as part of the throughput meter, organizing it in "human friendly" terms like `ls -h` would do. Users can glance at this, see that the total transferred size is about 3 MiB, see the throughput of X KiB/sec, and determine a reasonable figure of about when the clone will be complete, assuming they know the rough size of the source repository or are able to obtain it. This is also a helpful indicator that there is progress being made even if we stall on a very large object. The thoughput meter may remain relatively constant and the percentage complete and object count won't be changing, but the total transferred will be increasing as additional data is received for this object. [from an initial proposal from Shawn O. Pearce] Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-11-01make sure throughput display gets updated even if progress doesn't moveNicolas Pitre
Currently the progress/throughput display update happens only through display_progress(). If the progress based on object count remains unchanged because a large object is being received, the latest throughput won't be displayed. The display update should occur through display_throughput() as well. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-10-30add some copyright notice to the progress display codeNicolas Pitre
Some self patting on the back to keep my ego alive. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-10-30add throughput to progress displayNicolas Pitre
This adds the ability for the progress code to also display transfer throughput when that makes sense. The math was inspired by commit c548cf4ee0737a321ffe94f6a97c65baf87281be from Linus. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-10-30make struct progress an opaque typeNicolas Pitre
This allows for better management of progress "object" existence, as well as making the progress display implementation more independent from its callers. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-10-17more compact progress displayNicolas Pitre
Each progress can be on a single line instead of two. [sp: Changed "Checking files out" to "Checking out files" at Johannes Sixt's suggestion as it better explains the action that is taking place] Signed-off-by: Nicolas Pitre <> Signed-off-by: Shawn O. Pearce <>
2007-05-23Fix the progress code to output LF only when it is really neededAlex Riesen
Signed-off-by: Alex Riesen <> Signed-off-by: Junio C Hamano <>
2007-04-23provide a facility for "delayed" progress reportingNicolas Pitre
This allows for progress to be displayed only if the progress has not reached a specified percentage treshold within a given delay in seconds. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-04-23make progress "title" part of the common progress interfaceNicolas Pitre
If the progress bar ends up in a box, better provide a title for it too. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
2007-04-23common progress display supportNicolas Pitre
Instead of having this code duplicated in multiple places, let's have a common interface for progress display. If someday someone wishes to display a cheezy progress bar instead then only one file will have to be changed. Note: I left merge-recursive.c out since it has a strange notion of progress as it apparently increase the expected total number as it goes. Someone with more intimate knowledge of what that is supposed to mean might look at converting it to the common progress interface. Signed-off-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>