sapling/edenscm/mercurial
Arun Kulshreshtha 60f8a0938f edenapi: improve progress reporting
Summary:
This diff adds a new progress reporting framework to the Eden API crate and uses it to power progress bars for HTTP file downloads in Mercurial.

The new `ProgressManager` type is designed to aggregate progress values across multiple concurrent HTTP transfers. The API is currently designed to integrate well with libcurl's progress callback API, allowing all of the curl handles within a curl multi session to concurrently report their progress.

This progress can then be reported (in aggregate) to a user-provided callback. In most cases, this callback will be a Rust wrapper around a callback provided by the Python code. The `EdenAPI` trait and FFI bindings have been updated accordingly to allow optionally passing in a callback for long-running operations.

Lastly, in `remotefilelog`'s Python code, the callback is specified as a Python closure that simply updates the progress bar.

Reviewed By: quark-zju

Differential Revision: D15179983

fbshipit-source-id: ee677b71beff730f91aafe0364124f7ea0671387
2019-05-02 14:20:55 -07:00
..
cext osutil: detect fuse on Linux 2019-02-06 18:34:30 -08:00
cffi flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
commands retry when failed fetching from contentstore 2019-04-30 16:04:58 -07:00
default.d codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
help automigrate: add automigrate for mutation and visibility 2019-04-24 12:04:08 -07:00
hgweb subrepo: remove subrepo support 2019-03-11 10:43:55 -07:00
httpclient codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
pure codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
rust edenapi: improve progress reporting 2019-05-02 14:20:55 -07:00
templates codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
thirdparty codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
__init__.py codemod: import from the edenscm package 2019-01-29 17:25:32 -08:00
ancestor.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
archival.py archive: prefetch remotefilelog files before executing archive 2019-03-14 14:57:50 -07:00
bdiff.c codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
bdiff.h codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
bitmanipulation.h codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
bookmarks.py bookmarks: remove branch name collision check 2019-03-08 16:33:20 -08:00
branchmap.py branchmap: drop revbranchcache and other unused logic 2019-02-22 21:02:41 -08:00
bundle2.py pushrebase: don't create transaction during pushkey 2019-04-26 15:42:27 -07:00
bundlerepo.py pushrebase: fix pushrebase for treeonly lfs pushes 2019-03-29 13:57:54 -07:00
byterange.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
changegroup.py mutation: create mutation store entries for local commits 2019-03-27 04:49:12 -07:00
changelog.py changelog: cache commit files list 2019-02-05 15:52:00 -08:00
chgserver.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
cmdutil.py mutation: correctly detect split completion 2019-04-24 12:04:10 -07:00
color.py metrics: make ui.metrics.gauge log to the sampling extension 2019-03-20 22:49:18 -07:00
commandserver.py commandserver: import mercurial.__version__ from the right place 2019-02-05 09:47:34 -08:00
compat.h codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
config.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
configitems.py visibility: make enabling or disabling of tracking a command 2019-04-11 02:45:15 -07:00
connectionpool.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
context.py context: add loginfo for committable contexts 2019-04-04 11:29:50 -07:00
copies.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
crecord.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
dagop.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
dagparser.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
dagutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
debugcommands.py flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
destutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
dirstate.py dirstate: remove hgignore features 2019-04-29 18:22:37 -07:00
dirstateguard.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
discovery.py flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
dispatch.py blackbox: clean up blackbox logging and log more during rage 2019-04-23 02:48:50 -07:00
drawdag.py mutation: prefix predecessor hashes with hashing scheme 2019-03-27 04:49:12 -07:00
dummycert.pem codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
eden_dirstate_map.py subrepo: remove subrepo support 2019-03-11 10:43:55 -07:00
eden_dirstate.py subrepo: remove subrepo support 2019-03-11 10:43:55 -07:00
eden_update.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
edenfs.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
EdenThriftClient.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
encoding.py encoding: alias cp65001 to utf-8 on Windows 2019-02-11 09:16:02 -08:00
entrypoint.py chg: make it incompatible with upstream chg server 2019-02-08 16:12:53 -08:00
error.py hook: make it possible to record stderr of failed python hooks 2019-02-22 05:10:46 -08:00
exchange.py remove accidentally added lines 2019-04-10 00:45:56 -07:00
executionmodel.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
extensions.py extension: support inlined extensions 2019-04-29 13:52:19 -07:00
fancyopts.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
filelog.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
filemerge.py config: enable merge.printcandidatecommmits 2019-03-08 19:55:46 -08:00
fileset.py ignore: disable hgignore by default 2019-03-20 22:32:58 -07:00
formatter.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
fscap.py fscap: mark "fuse.ntfs" (ntfs-3g) as not supporting symlinks 2019-02-06 18:34:30 -08:00
graphmod.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
hbisect.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
help.py ignore: disable hgignore by default 2019-03-20 22:32:58 -07:00
hg.py tracing: add various tracing across the code base 2019-03-25 19:31:13 -07:00
hintutil.py commands: replace "branch" command with deprecation warnings 2019-02-14 17:44:40 -08:00
hook.py hook: make "mercurial" module available for Python hooks 2019-03-08 16:04:38 -08:00
httpconnection.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
httppeer.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
i18n.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
identity.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
interpreter.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
json.py codemod: import from the edenscm package 2019-01-29 17:25:32 -08:00
keepalive.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
localrepo.py automigrate: add automigrate for mutation and visibility 2019-04-24 12:04:08 -07:00
lock.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
lsprof.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
lsprofcalltree.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
mail.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
manifest.py manifest: drop manifestv2 support 2019-03-26 13:32:45 -07:00
match.py subrepo: remove subrepo support 2019-03-11 10:43:55 -07:00
mdiff.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
merge.py blackbox: clean up blackbox logging and log more during rage 2019-04-23 02:48:50 -07:00
mergeutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
metrics.py metrics: make ui.metrics.gauge log to the sampling extension 2019-03-20 22:49:18 -07:00
minirst.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
mpatch.c codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
mpatch.h codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
mutation.py tracing: add tracing for obsolescence computation 2019-05-01 11:21:07 -07:00
namespaces.py remotenames: add markaccessed method to the API 2019-04-30 09:26:11 -07:00
node.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
obsolete.py tracing: add tracing for obsolescence computation 2019-05-01 11:21:07 -07:00
obsutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
parser.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
patch.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
pathutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
peer.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
perftrace.py tracing: log perftraces to the blackbox 2019-03-25 17:12:42 -07:00
phases.py tracing: add various tracing across the code base 2019-03-25 19:31:13 -07:00
policy.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
posix.py posix: detect fuse.ntfs on Linux 2019-02-06 18:34:30 -08:00
profiling.py flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
progress.py progress: reduce overhead when a nested bar is used in a loop 2019-03-29 20:32:22 -07:00
pushkey.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
pvec.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
pycompat.py posix: detect fuse.ntfs on Linux 2019-02-06 18:34:30 -08:00
rcutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
registrar.py registrar: document 'subonly' option to the command decorator 2019-04-11 07:49:21 -07:00
repair.py visibility: update visibility when commits are modified 2019-03-08 03:05:58 -08:00
replay.py replay: only expect timestamp and not timezone 2019-02-20 08:47:25 -08:00
repository.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
repoview.py visibility: update visibility when commits are modified 2019-03-08 03:05:58 -08:00
revlog.py revlog: drop v0 and v2 support 2019-03-26 13:32:45 -07:00
revset.py revset: use path instead of relpath in follow() 2019-04-24 17:33:43 -07:00
revsetlang.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
rewriteutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
scmposix.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
scmutil.py subrepo: remove subrepo support 2019-03-11 10:43:55 -07:00
scmwindows.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
server.py subrepo: remove subrepo support 2019-03-11 10:43:55 -07:00
setdiscovery.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
similar.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
simplemerge.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
smartset.py smartset: fix a possible StopIteration exception 2019-04-18 19:32:54 -07:00
sparse.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
sshpeer.py metrics: add metrics about fetching remote data 2019-03-20 22:49:18 -07:00
sshserver.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
sslutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
statichttprepo.py branchmap: drop revbranchcache and other unused logic 2019-02-22 21:02:41 -08:00
statprof.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
store.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
streamclone.py flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
tagmerge.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
tags.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
templatefilters.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
templatekw.py visibility: use graphnode '-' for all invisible commits 2019-04-24 12:04:09 -07:00
templater.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
transaction.py flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
treedirstate.py blackbox: clean up blackbox logging and log more during rage 2019-04-23 02:48:50 -07:00
treediscovery.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
treestate.py flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
txnutil.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
ui.py tracing: add tracing for editors 2019-05-01 11:21:07 -07:00
unionrepo.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
upgrade.py manifest: drop manifestv2 support 2019-03-26 13:32:45 -07:00
url.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
urllibcompat.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
util.py util: extract makerandomidentifier from clienttelemetry 2019-04-04 11:29:49 -07:00
verify.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
vfs.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
visibility.py visibility: convert from obsmarkers only when starting tracking 2019-04-24 12:04:09 -07:00
win32.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
windows.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00
wireproto.py flake8: fix lints for unused imports and variables 2019-02-27 06:26:06 -08:00
worker.py codemod: move Python packages to edenscm 2019-01-28 18:35:41 -08:00