[PATCH STABLE] commandserver: drop tell() and seek() from channels (issue5049)

Yuya Nishihara yuya at tcha.org
Tue Jan 19 15:52:30 UTC 2016


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1453216080 -32400
#      Wed Jan 20 00:08:00 2016 +0900
# Branch stable
# Node ID 148f033b0f1a53a644b1ed3c85c9feae5b0fdf60
# Parent  d2c5ad3deccb5a504e2553652b66a4110db68afb
commandserver: drop tell() and seek() from channels (issue5049)

These operations are obviously invalid for file-like channels because they
will read or write protocol headers.

This patch works around the issue that "hg archive" generates a corrupted
zip file on Windows commandserver because of unusable tell() implementation.
But the problem still occurs without using a commandserver.

  $ hg archive -R not-small-repo -t zip - | cat > invalid.zip

So, this patch cannot fix the issue5049 completely.

diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py
--- a/mercurial/commandserver.py
+++ b/mercurial/commandserver.py
@@ -55,7 +55,7 @@ class channeledoutput(object):
         self.out.flush()
 
     def __getattr__(self, attr):
-        if attr in ('isatty', 'fileno'):
+        if attr in ('isatty', 'fileno', 'tell', 'seek'):
             raise AttributeError(attr)
         return getattr(self.out, attr)
 
@@ -139,7 +139,7 @@ class channeledinput(object):
         return l
 
     def __getattr__(self, attr):
-        if attr in ('isatty', 'fileno'):
+        if attr in ('isatty', 'fileno', 'tell', 'seek'):
             raise AttributeError(attr)
         return getattr(self.in_, attr)
 


More information about the Mercurial-devel mailing list