changeset 52988:5ec596c91086

branching: merge stable into default
author Rapha?l Gom?s <rgomes@octobus.net>
date Wed, 19 Feb 2025 23:18:17 +0100
parents 688665425496 (current diff) b36db7fc132f (diff)
children d7174b43f3e6
files mercurial/sshpeer.py
diffstat 4 files changed, 53 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Fri Feb 03 11:01:23 2023 +0100
+++ b/.hgsigs	Wed Feb 19 23:18:17 2025 +0100
@@ -270,3 +270,4 @@
 31d45a1cbc479ac73fc8b355abe99e090eb6c747 0 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
+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
--- a/.hgtags	Fri Feb 03 11:01:23 2023 +0100
+++ b/.hgtags	Wed Feb 19 23:18:17 2025 +0100
@@ -286,3 +286,4 @@
 31d45a1cbc479ac73fc8b355abe99e090eb6c747 6.9rc1
 b267c5764cc6b804c619a42067405f27e8705beb 6.9
 9751b9ccd74d8386687f88fbdfe280877840ec7d 6.9.1
+b964f92261d4fbb64f19aa6af2b072f7730b913a 6.9.2
--- a/mercurial/sshpeer.py	Fri Feb 03 11:01:23 2023 +0100
+++ b/mercurial/sshpeer.py	Wed Feb 19 23:18:17 2025 +0100
@@ -11,6 +11,8 @@
 import typing
 import uuid
 
+from typing import Callable, Optional
+
 from .i18n import _
 from . import (
     error,
@@ -53,6 +55,31 @@
                 display(_(b"remote: "), l, b'\n')
 
 
+def _write_all(
+    write_once: Callable[[bytes], Optional[int]],
+    data: bytes,
+) -> Optional[int]:
+    """write data with a non blocking function
+
+    In case not all data were written, keep writing until everything is
+    written.
+    """
+    to_write = len(data)
+    written = write_once(data)
+    if written is None:
+        written = 0
+    if written < to_write:
+        data = memoryview(data)
+        while written < to_write:
+            wrote = write_once(data[written:])
+            # XXX if number of written bytes is "None", the destination is
+            # full. Some `select` call would be better than the current active
+            # polling.
+            if wrote is not None:
+                written += wrote
+    return written
+
+
 class doublepipe:
     """Operate a side-channel pipe in addition of a main one
 
@@ -97,9 +124,14 @@
             act = fds
         return (self._main.fileno() in act, self._side.fileno() in act)
 
-    def write(self, data):
+    def _write_once(self, data: bytes) -> Optional[int]:
+        """Write as much data as possible in a non blocking way"""
         return self._call(b'write', data)
 
+    def write(self, data: bytes) -> Optional[int]:
+        """write all data in a blocking way"""
+        return _write_all(self._write_once, data)
+
     def read(self, size):
         r = self._call(b'read', size)
         if size != 0 and not r:
@@ -130,6 +162,8 @@
         # data can be '' or 0
         if (data is not None and not data) or self._main.closed:
             _forwardoutput(self._ui, self._side)
+            if methname == b'write':
+                return 0
             return b''
         while True:
             mainready, sideready = self._wait()
@@ -314,7 +348,7 @@
         ui.debug(b'sending hello command\n')
         ui.debug(b'sending between command\n')
 
-        stdin.write(b''.join(handshake))
+        _write_all(stdin.write, b''.join(handshake))
         stdin.flush()
     except OSError:
         badresponse()
--- a/relnotes/6.9	Fri Feb 03 11:01:23 2023 +0100
+++ b/relnotes/6.9	Wed Feb 19 23:18:17 2025 +0100
@@ -1,3 +1,18 @@
+= Mercurial 6.9.2 =
+
+ * narrow: stricter validation of narrowspec patterns
+ * narrow: stricter validation of narrowspec patterns in rhg
+ * rhg: fix a bug where only the first pattern in narrowspec was validated
+ * extensions: allow wrapping a function with a bytes name again
+ * upgrade: fix a reference to a missing attribute
+ * bundles: filter out unsupported requirements for non-packed1 format
+ * dirstate-race: add more output to highlight a "to-be-revealed" bug
+ * dirstate-race: simplify some output match to highligh an error
+ * dirstate-race: fix a missing synchronisation in the python code
+ * dirstatemap: stop setting identity after reading the data
+ * sshpeer: fix deadlock on short writes
+ * sshpeer: fix another occurrence of short write handling
+
 = Mercurial 6.9.1 =
 
  * ci: disable caching of the wheels that get built to save space