Re: [PATCH] git-remote-hg: set stdout to binary mode on win32
Felipe Contreras felipe.contre...@gmail.com writes: 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. On Mon, Jan 28, 2013 at 4:13 PM, Amit Bakshi ambak...@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 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] git-remote-hg: set stdout to binary mode on win32
On Mon, Jan 28, 2013 at 4:13 PM, Amit Bakshi ambak...@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 I tried many things, and it seems it's true that we need to set the binary mode in Windows, but it seemed to work fine cygwin. I saw in many places the workaround for 'win32', but I didn't find the one for 'cygwin'. Where did you find it? Did you test in cygwin? Is it needed there? Cheers. -- Felipe Contreras -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] git-remote-hg: set stdout to binary mode on win32
Hi, 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? On Mon, Jan 28, 2013 at 4:13 PM, Amit Bakshi ambak...@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 -- Felipe Contreras -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html