equal
deleted
inserted
replaced
11 """ |
11 """ |
12 |
12 |
13 import os, errno |
13 import os, errno |
14 from i18n import gettext as _ |
14 from i18n import gettext as _ |
15 from demandload import * |
15 from demandload import * |
16 demandload(globals(), "re cStringIO shutil popen2 sys tempfile threading time") |
16 demandload(globals(), "cStringIO errno popen2 re shutil sys tempfile") |
|
17 demandload(globals(), "threading time") |
17 |
18 |
18 def pipefilter(s, cmd): |
19 def pipefilter(s, cmd): |
19 '''filter string S through command CMD, returning its output''' |
20 '''filter string S through command CMD, returning its output''' |
20 (pout, pin) = popen2.popen2(cmd, -1, 'b') |
21 (pout, pin) = popen2.popen2(cmd, -1, 'b') |
21 def writer(): |
22 def writer(): |
440 |
441 |
441 # Platform specific variants |
442 # Platform specific variants |
442 if os.name == 'nt': |
443 if os.name == 'nt': |
443 demandload(globals(), "msvcrt") |
444 demandload(globals(), "msvcrt") |
444 nulldev = 'NUL:' |
445 nulldev = 'NUL:' |
445 |
446 |
|
447 class winstdout: |
|
448 '''stdout on windows misbehaves if sent through a pipe''' |
|
449 |
|
450 def __init__(self, fp): |
|
451 self.fp = fp |
|
452 |
|
453 def __getattr__(self, key): |
|
454 return getattr(self.fp, key) |
|
455 |
|
456 def close(self): |
|
457 try: |
|
458 self.fp.close() |
|
459 except: pass |
|
460 |
|
461 def write(self, s): |
|
462 try: |
|
463 return self.fp.write(s) |
|
464 except IOError, inst: |
|
465 if inst.errno != 0: raise |
|
466 self.close() |
|
467 raise IOError(errno.EPIPE, 'Broken pipe') |
|
468 |
|
469 sys.stdout = winstdout(sys.stdout) |
|
470 |
446 try: |
471 try: |
447 import win32api, win32process |
472 import win32api, win32process |
448 filename = win32process.GetModuleFileNameEx(win32api.GetCurrentProcess(), 0) |
473 filename = win32process.GetModuleFileNameEx(win32api.GetCurrentProcess(), 0) |
449 systemrc = os.path.join(os.path.dirname(filename), 'mercurial.ini') |
474 systemrc = os.path.join(os.path.dirname(filename), 'mercurial.ini') |
450 |
475 |
451 except ImportError: |
476 except ImportError: |
452 systemrc = r'c:\mercurial\mercurial.ini' |
477 systemrc = r'c:\mercurial\mercurial.ini' |
453 pass |
478 pass |
454 |
479 |
455 rcpath = (systemrc, |
480 rcpath = (systemrc, |