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 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
Re: [PATCH] git-remote-hg: set stdout to binary mode on win32
Felipe Contreras 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 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 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