D2902: wireproto: define frame to represent progress updates

2018-04-03 Thread indygreg (Gregory Szorc)
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGb0041036214e: wireproto: define frame to represent progress 
updates (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2902?vs=7438=7552

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

AFFECTED FILES
  mercurial/help/internals/wireprotocol.txt
  mercurial/wireprotoframing.py

CHANGE DETAILS

diff --git a/mercurial/wireprotoframing.py b/mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py
+++ b/mercurial/wireprotoframing.py
@@ -45,6 +45,7 @@
 FRAME_TYPE_BYTES_RESPONSE = 0x04
 FRAME_TYPE_ERROR_RESPONSE = 0x05
 FRAME_TYPE_TEXT_OUTPUT = 0x06
+FRAME_TYPE_PROGRESS = 0x07
 FRAME_TYPE_STREAM_SETTINGS = 0x08
 
 FRAME_TYPES = {
@@ -54,6 +55,7 @@
 b'bytes-response': FRAME_TYPE_BYTES_RESPONSE,
 b'error-response': FRAME_TYPE_ERROR_RESPONSE,
 b'text-output': FRAME_TYPE_TEXT_OUTPUT,
+b'progress': FRAME_TYPE_PROGRESS,
 b'stream-settings': FRAME_TYPE_STREAM_SETTINGS,
 }
 
@@ -107,6 +109,7 @@
 FRAME_TYPE_BYTES_RESPONSE: FLAGS_BYTES_RESPONSE,
 FRAME_TYPE_ERROR_RESPONSE: FLAGS_ERROR_RESPONSE,
 FRAME_TYPE_TEXT_OUTPUT: {},
+FRAME_TYPE_PROGRESS: {},
 FRAME_TYPE_STREAM_SETTINGS: {},
 }
 
diff --git a/mercurial/help/internals/wireprotocol.txt 
b/mercurial/help/internals/wireprotocol.txt
--- a/mercurial/help/internals/wireprotocol.txt
+++ b/mercurial/help/internals/wireprotocol.txt
@@ -740,6 +740,44 @@
 The last atom in the frame SHOULD end with a newline (``\n``). If it
 doesn't, clients MAY add a newline to facilitate immediate printing.
 
+Progress Update (``0x07``)
+--
+
+This frame holds the progress of an operation on the peer. Consumption
+of these frames allows clients to display progress bars, estimated
+completion times, etc.
+
+Each frame defines the progress of a single operation on the peer. The
+payload consists of a CBOR map with the following bytestring keys:
+
+topic
+   Topic name (string)
+pos
+   Current numeric position within the topic (integer)
+total
+   Total/end numeric position of this topic (unsigned integer)
+label (optional)
+   Unit label (string)
+item (optional)
+   Item name (string)
+
+Progress state is created when a frame is received referencing a
+*topic* that isn't currently tracked. Progress tracking for that
+*topic* is finished when a frame is received reporting the current
+position of that topic as ``-1``.
+
+Multiple *topics* may be active at any given time.
+
+Rendering of progress information is not mandated or governed by this
+specification: implementations MAY render progress information however
+they see fit, including not at all.
+
+The string data describing the topic SHOULD be static strings to
+facilitate receivers localizing that string data. The emitter
+MUST normalize all string data to valid UTF-8 and receivers SHOULD
+validate that received data conforms to UTF-8. The topic name
+SHOULD be ASCII.
+
 Stream Encoding Settings (``0x08``)
 ---
 



To: indygreg, #hg-reviewers, durin42
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2902: wireproto: define frame to represent progress updates

2018-03-30 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 7438.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2902?vs=7311=7438

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

AFFECTED FILES
  mercurial/help/internals/wireprotocol.txt
  mercurial/wireprotoframing.py

CHANGE DETAILS

diff --git a/mercurial/wireprotoframing.py b/mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py
+++ b/mercurial/wireprotoframing.py
@@ -45,6 +45,7 @@
 FRAME_TYPE_BYTES_RESPONSE = 0x04
 FRAME_TYPE_ERROR_RESPONSE = 0x05
 FRAME_TYPE_TEXT_OUTPUT = 0x06
+FRAME_TYPE_PROGRESS = 0x07
 FRAME_TYPE_STREAM_SETTINGS = 0x08
 
 FRAME_TYPES = {
@@ -54,6 +55,7 @@
 b'bytes-response': FRAME_TYPE_BYTES_RESPONSE,
 b'error-response': FRAME_TYPE_ERROR_RESPONSE,
 b'text-output': FRAME_TYPE_TEXT_OUTPUT,
+b'progress': FRAME_TYPE_PROGRESS,
 b'stream-settings': FRAME_TYPE_STREAM_SETTINGS,
 }
 
@@ -107,6 +109,7 @@
 FRAME_TYPE_BYTES_RESPONSE: FLAGS_BYTES_RESPONSE,
 FRAME_TYPE_ERROR_RESPONSE: FLAGS_ERROR_RESPONSE,
 FRAME_TYPE_TEXT_OUTPUT: {},
+FRAME_TYPE_PROGRESS: {},
 FRAME_TYPE_STREAM_SETTINGS: {},
 }
 
diff --git a/mercurial/help/internals/wireprotocol.txt 
b/mercurial/help/internals/wireprotocol.txt
--- a/mercurial/help/internals/wireprotocol.txt
+++ b/mercurial/help/internals/wireprotocol.txt
@@ -740,6 +740,44 @@
 The last atom in the frame SHOULD end with a newline (``\n``). If it
 doesn't, clients MAY add a newline to facilitate immediate printing.
 
+Progress Update (``0x07``)
+--
+
+This frame holds the progress of an operation on the peer. Consumption
+of these frames allows clients to display progress bars, estimated
+completion times, etc.
+
+Each frame defines the progress of a single operation on the peer. The
+payload consists of a CBOR map with the following bytestring keys:
+
+topic
+   Topic name (string)
+pos
+   Current numeric position within the topic (integer)
+total
+   Total/end numeric position of this topic (unsigned integer)
+label (optional)
+   Unit label (string)
+item (optional)
+   Item name (string)
+
+Progress state is created when a frame is received referencing a
+*topic* that isn't currently tracked. Progress tracking for that
+*topic* is finished when a frame is received reporting the current
+position of that topic as ``-1``.
+
+Multiple *topics* may be active at any given time.
+
+Rendering of progress information is not mandated or governed by this
+specification: implementations MAY render progress information however
+they see fit, including not at all.
+
+The string data describing the topic SHOULD be static strings to
+facilitate receivers localizing that string data. The emitter
+MUST normalize all string data to valid UTF-8 and receivers SHOULD
+validate that received data conforms to UTF-8. The topic name
+SHOULD be ASCII.
+
 Stream Encoding Settings (``0x08``)
 ---
 



To: indygreg, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2902: wireproto: define frame to represent progress updates

2018-03-26 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 7311.
indygreg edited the summary of this revision.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2902?vs=7295=7311

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

AFFECTED FILES
  mercurial/help/internals/wireprotocol.txt
  mercurial/wireprotoframing.py

CHANGE DETAILS

diff --git a/mercurial/wireprotoframing.py b/mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py
+++ b/mercurial/wireprotoframing.py
@@ -46,6 +46,7 @@
 FRAME_TYPE_BYTES_RESPONSE = 0x04
 FRAME_TYPE_ERROR_RESPONSE = 0x05
 FRAME_TYPE_TEXT_OUTPUT = 0x06
+FRAME_TYPE_PROGRESS = 0x07
 FRAME_TYPE_STREAM_SETTINGS = 0x08
 
 FRAME_TYPES = {
@@ -55,6 +56,7 @@
 b'bytes-response': FRAME_TYPE_BYTES_RESPONSE,
 b'error-response': FRAME_TYPE_ERROR_RESPONSE,
 b'text-output': FRAME_TYPE_TEXT_OUTPUT,
+b'progress': FRAME_TYPE_PROGRESS,
 b'stream-settings': FRAME_TYPE_STREAM_SETTINGS,
 }
 
@@ -108,6 +110,7 @@
 FRAME_TYPE_BYTES_RESPONSE: FLAGS_BYTES_RESPONSE,
 FRAME_TYPE_ERROR_RESPONSE: FLAGS_ERROR_RESPONSE,
 FRAME_TYPE_TEXT_OUTPUT: {},
+FRAME_TYPE_PROGRESS: {},
 FRAME_TYPE_STREAM_SETTINGS: {},
 }
 
diff --git a/mercurial/help/internals/wireprotocol.txt 
b/mercurial/help/internals/wireprotocol.txt
--- a/mercurial/help/internals/wireprotocol.txt
+++ b/mercurial/help/internals/wireprotocol.txt
@@ -740,6 +740,44 @@
 The last atom in the frame SHOULD end with a newline (``\n``). If it
 doesn't, clients MAY add a newline to facilitate immediate printing.
 
+Progress Update (``0x07``)
+--
+
+This frame holds the progress of an operation on the peer. Consumption
+of these frames allows clients to display progress bars, estimated
+completion times, etc.
+
+Each frame defines the progress of a single operation on the peer. The
+payload consists of a CBOR map with the following bytestring keys:
+
+topic
+   Topic name (string)
+pos
+   Current numeric position within the topic (integer)
+total
+   Total/end numeric position of this topic (unsigned integer)
+label (optional)
+   Unit label (string)
+item (optional)
+   Item name (string)
+
+Progress state is created when a frame is received referencing a
+*topic* that isn't currently tracked. Progress tracking for that
+*topic* is finished when a frame is received reporting the current
+position of that topic as ``-1``.
+
+Multiple *topics* may be active at any given time.
+
+Rendering of progress information is not mandated or governed by this
+specification: implementations MAY render progress information however
+they see fit, including not at all.
+
+The string data describing the topic SHOULD be static strings to
+facilitate receivers localizing that string data. The emitter
+MUST normalize all string data to valid UTF-8 and receivers SHOULD
+validate that received data conforms to UTF-8. The topic name
+SHOULD be ASCII.
+
 Stream Encoding Settings (``0x08``)
 ---
 



To: indygreg, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2902: wireproto: define frame to represent progress updates

2018-03-26 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 7295.
indygreg edited the summary of this revision.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2902?vs=7151=7295

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

AFFECTED FILES
  mercurial/help/internals/wireprotocol.txt
  mercurial/wireprotoframing.py

CHANGE DETAILS

diff --git a/mercurial/wireprotoframing.py b/mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py
+++ b/mercurial/wireprotoframing.py
@@ -34,14 +34,16 @@
 FRAME_TYPE_BYTES_RESPONSE = 0x04
 FRAME_TYPE_ERROR_RESPONSE = 0x05
 FRAME_TYPE_TEXT_OUTPUT = 0x06
+FRAME_TYPE_PROGRESS = 0x07
 
 FRAME_TYPES = {
 b'command-name': FRAME_TYPE_COMMAND_NAME,
 b'command-argument': FRAME_TYPE_COMMAND_ARGUMENT,
 b'command-data': FRAME_TYPE_COMMAND_DATA,
 b'bytes-response': FRAME_TYPE_BYTES_RESPONSE,
 b'error-response': FRAME_TYPE_ERROR_RESPONSE,
 b'text-output': FRAME_TYPE_TEXT_OUTPUT,
+b'progress': FRAME_TYPE_PROGRESS,
 }
 
 FLAG_COMMAND_NAME_EOS = 0x01
@@ -94,6 +96,7 @@
 FRAME_TYPE_BYTES_RESPONSE: FLAGS_BYTES_RESPONSE,
 FRAME_TYPE_ERROR_RESPONSE: FLAGS_ERROR_RESPONSE,
 FRAME_TYPE_TEXT_OUTPUT: {},
+FRAME_TYPE_PROGRESS: {},
 }
 
 ARGUMENT_FRAME_HEADER = struct.Struct(r'

D2902: wireproto: define frame to represent progress updates

2018-03-19 Thread indygreg (Gregory Szorc)
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Today, a long-running operation on a server may run without any sign
  of progress on the client. This can lead to the conclusion that the
  server has hung or the connection has dropped. In fact, connections
  can and do time out due to inactivity. And a long-running server
  operation can result in the connection dropping prematurely because
  no data is being sent!
  
  While we're inventing the new wire protocol, let's provide a mechanism
  for communicating progress on potentially expensive server-side events.
  
  We introduce a new frame type that conveys "progress" updates. This
  frame type essentially holds the data required to formulate a
  ``ui.progress()`` call.
  
  We only define the frame right now. Implementing it will be a bit of
  work since there is no analog to progress frames in the existing
  wire protocol. We'll need to teach the ui object to write to the
  wire protocol, etc.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/help/internals/wireprotocol.txt
  mercurial/wireprotoframing.py

CHANGE DETAILS

diff --git a/mercurial/wireprotoframing.py b/mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py
+++ b/mercurial/wireprotoframing.py
@@ -31,14 +31,16 @@
 FRAME_TYPE_BYTES_RESPONSE = 0x04
 FRAME_TYPE_ERROR_RESPONSE = 0x05
 FRAME_TYPE_TEXT_OUTPUT = 0x06
+FRAME_TYPE_PROGRESS = 0x07
 
 FRAME_TYPES = {
 b'command-name': FRAME_TYPE_COMMAND_NAME,
 b'command-argument': FRAME_TYPE_COMMAND_ARGUMENT,
 b'command-data': FRAME_TYPE_COMMAND_DATA,
 b'bytes-response': FRAME_TYPE_BYTES_RESPONSE,
 b'error-response': FRAME_TYPE_ERROR_RESPONSE,
 b'text-output': FRAME_TYPE_TEXT_OUTPUT,
+b'progress': FRAME_TYPE_PROGRESS,
 }
 
 FLAG_COMMAND_NAME_EOS = 0x01
@@ -91,6 +93,7 @@
 FRAME_TYPE_BYTES_RESPONSE: FLAGS_BYTES_RESPONSE,
 FRAME_TYPE_ERROR_RESPONSE: FLAGS_ERROR_RESPONSE,
 FRAME_TYPE_TEXT_OUTPUT: {},
+FRAME_TYPE_PROGRESS: {},
 }
 
 ARGUMENT_FRAME_HEADER = struct.Struct(r'