summaryrefslogtreecommitdiff
path: root/unix-socket.h
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2014-03-14 22:26:21 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2014-03-17 15:01:25 -0700
commit657673f125008da1ef92d2054c9536722c42f73b (patch)
tree6c1d2cece6587e8a89bab371bd6905266cd7828d /unix-socket.h
parentUpdate draft release notes to Git 2.0 (diff)
downloadtgif-657673f125008da1ef92d2054c9536722c42f73b.tar.xz
pack-objects: show progress for reused packfiles
When the "--all-progress" option is in effect, pack-objects shows a progress report for the "writing" phase. If the repository has bitmaps and we are reusing a packfile, the user sees no progress update until the whole packfile is sent. Since this is typically the bulk of what is being written, it can look like git hangs during this phase, even though the transfer is proceeding. This generally only happens with "git push" from a repository with bitmaps. We do not use "--all-progress" for fetch (since the result is going to index-pack on the client, which takes care of progress reporting). And for regular repacks to disk, we do not reuse packfiles. We already have the progress meter setup during write_reused_pack; we just need to call display_progress whiel we are writing out the pack. The progress meter is attached to our output descriptor, so it automatically handles the throughput measurements. However, we need to update the object count as we go, since that is what feeds the percentage we show. We aren't actually parsing the packfile as we send it, so we have no idea how many objects we have sent; we only know that at the end of N bytes, we will have sent M objects. So we cheat a little and assume each object is M/N bytes (i.e., the mean of the objects we are sending). While this isn't strictly true, it actually produces a more pleasing progress meter for the user, as it moves smoothly and predictably (and nobody really cares about the object count; they care about the percentage, and the object count is a proxy for that). One alternative would be to actually show two progress meters: one for the reused pack, and one for the rest of the objects. That would more closely reflect the data we have (the first would be measured in bytes, and the second measured in objects). But it would also be more complex and annoying to the user; rather than seeing one progress meter counting up to 100%, they would finish one meter, then start another one at zero. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'unix-socket.h')
0 files changed, 0 insertions, 0 deletions