D7046: phabricator: add the uploadchunks function

Kwan (Ian Moody) phabricator at mercurial-scm.org
Thu Oct 10 21:52:30 UTC 2019


Kwan created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D7046

AFFECTED FILES
  hgext/phabricator.py

CHANGE DETAILS

diff --git a/hgext/phabricator.py b/hgext/phabricator.py
--- a/hgext/phabricator.py
+++ b/hgext/phabricator.py
@@ -41,6 +41,7 @@
 
 from __future__ import absolute_import
 
+import base64
 import contextlib
 import itertools
 import json
@@ -579,6 +580,34 @@
         )
 
 
+def uploadchunks(fctx, fphid):
+    """upload large binary files as separate chunks.
+    Phab requests chunking over 8MiB, and splits into 4MiB chunks
+    """
+    ui = fctx.repo().ui
+    chunks = callconduit(ui, b'file.querychunks', {b'filePHID': fphid})
+    progress = ui.makeprogress(
+        _(b'uploading file chunks'), unit=_(b'chunks'), total=len(chunks)
+    )
+    for chunk in chunks:
+        progress.increment()
+        if chunk[b'complete']:
+            continue
+        bstart = int(chunk[b'byteStart'])
+        bend = int(chunk[b'byteEnd'])
+        callconduit(
+            ui,
+            b'file.uploadchunk',
+            {
+                b'filePHID': fphid,
+                b'byteStart': bstart,
+                b'data': base64.b64encode(fctx.data()[bstart:bend]),
+                b'dataEncoding': b'base64',
+            },
+        )
+    progress.complete()
+
+
 def creatediff(ctx):
     """create a Differential Diff"""
     repo = ctx.repo()



To: Kwan, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list