git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-remote-hg: set stdout to binary mode on win32

From
Junio C Hamano <gitster@pobox.com>
Date
May 19, 2013, 07:48 UTC
Message-ID
<7v8v3bz9yd.fsf@alter.siamese.dyndns.org>
In-Reply-To
<CAMP44s3H5e3ffoA04pdJx-pfKMGiRBTmjAn6NceP+s6_TYo1GA@mail.gmail.com>
Felipe Contreras <felipe.contreras@gmail.com> writes:
Show 9 quoted lines
> Sorry Amit, I assumed this patch made it to the list, but I just
> realized it didn't; it doesn't allow HTML, and mails and silently
> dropped (I hate that).
>
> So I'm sending it so the list can see it:
>
> It seems OK for me, but I would like to try it, and so far I haven't
> managed to access Mercurial libraries at all from python scripts in
> Windows. What steps did you follow?

Thanks for keeping an eye on this part of the system. It seems that having an extra -rc cycle turned out to be not so bad an idea.

Show 51 quoted lines
> On Mon, Jan 28, 2013 at 4:13 PM, Amit Bakshi <ambakshi@gmail.com> wrote:
>> git clone hangs on windows (msysgit/cygwin), and
>> file.write would return errno 22 inside of mercurial's
>> windows.winstdout wrapper class. This patch sets
>> stdout's mode to binary, fixing both issues.
>> ---
>>  contrib/remote-helpers/git-remote-hg | 21 +++++++++++++++++++++
>>  1 file changed, 21 insertions(+)
>>
>> diff --git a/contrib/remote-helpers/git-remote-hg
>> b/contrib/remote-helpers/git-remote-hg
>> index 328c2dc..95f4c1f 100755
>> --- a/contrib/remote-helpers/git-remote-hg
>> +++ b/contrib/remote-helpers/git-remote-hg
>> @@ -62,6 +62,24 @@ def get_config(config):
>>      output, _ = process.communicate()
>>      return output
>>
>> +#
>> +# On Windows (msysgit/cygwin) have to set stdout to binary
>> +# mode (_O_BINARY is 32768). Otherwise clone hangs, and pushing
>> +# to remote fails when doing a write to mercurial's wrapper
>> +# windows.winstdout wrapper class.
>> +#
>> +def set_binmode(fd):
>> +    try:
>> +        if sys.platform == "win32":
>> +            import msvcrt
>> +            msvcrt.setmode(fd, os.O_BINARY)
>> +        elif sys.platform  == 'cygwin':
>> +            import ctypes
>> +            msvcrt = ctypes.CDLL('msvcrt.dll')
>> +            msvcrt._setmode(fd, 32768) # On Cygwin os.O_BINARY is different
>> +    except OSError:
>> +        pass
>> +
>>  class Marks:
>>
>>      def __init__(self, path):
>> @@ -764,6 +782,9 @@ def main(args):
>>      else:
>>          is_tmp = False
>>
>> +    if sys.platform in ['win32','cygwin']:
>> +        set_binmode(sys.stdout.fileno())
>> +
>>      gitdir = os.environ['GIT_DIR']
>>      dirname = os.path.join(gitdir, 'hg', alias)
>>      branches = {}
>> --
>> 1.8.1
Previous: Felipe ContrerasNext: Felipe Contreras
Message 2 of 3 in “Re: [PATCH] git-remote-hg: set stdout to binary mode on win32”
  1. Felipe ContrerasMay 19, 2013
  2. Junio C HamanoMay 19, 2013
  3. Felipe ContrerasMay 19, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.