hgext/convert/git.py
branchstable
changeset 28661 b732e7f2aba4
parent 28660 cdda7b96afff
child 28662 80cac1de6aea
equal deleted inserted replaced
28660:cdda7b96afff 28661:b732e7f2aba4
    28 class convert_git(converter_source, commandline):
    28 class convert_git(converter_source, commandline):
    29     # Windows does not support GIT_DIR= construct while other systems
    29     # Windows does not support GIT_DIR= construct while other systems
    30     # cannot remove environment variable. Just assume none have
    30     # cannot remove environment variable. Just assume none have
    31     # both issues.
    31     # both issues.
    32     if util.safehasattr(os, 'unsetenv'):
    32     if util.safehasattr(os, 'unsetenv'):
    33         def gitopen(self, s, err=None):
       
    34             prevgitdir = os.environ.get('GIT_DIR')
       
    35             os.environ['GIT_DIR'] = self.path
       
    36             try:
       
    37                 if err == subprocess.PIPE:
       
    38                     (stdin, stdout, stderr) = util.popen3(s)
       
    39                     return stdout
       
    40                 elif err == subprocess.STDOUT:
       
    41                     return self.popen_with_stderr(s)
       
    42                 else:
       
    43                     return util.popen(s, 'rb')
       
    44             finally:
       
    45                 if prevgitdir is None:
       
    46                     del os.environ['GIT_DIR']
       
    47                 else:
       
    48                     os.environ['GIT_DIR'] = prevgitdir
       
    49 
       
    50         def gitpipe(self, s):
    33         def gitpipe(self, s):
    51             prevgitdir = os.environ.get('GIT_DIR')
    34             prevgitdir = os.environ.get('GIT_DIR')
    52             os.environ['GIT_DIR'] = self.path
    35             os.environ['GIT_DIR'] = self.path
    53             try:
    36             try:
    54                 return util.popen3(s)
    37                 return util.popen3(s)
    57                     del os.environ['GIT_DIR']
    40                     del os.environ['GIT_DIR']
    58                 else:
    41                 else:
    59                     os.environ['GIT_DIR'] = prevgitdir
    42                     os.environ['GIT_DIR'] = prevgitdir
    60 
    43 
    61     else:
    44     else:
    62         def gitopen(self, s, err=None):
       
    63             if err == subprocess.PIPE:
       
    64                 (sin, so, se) = util.popen3('GIT_DIR=%s %s' % (self.path, s))
       
    65                 return so
       
    66             elif err == subprocess.STDOUT:
       
    67                     return self.popen_with_stderr(s)
       
    68             else:
       
    69                 return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb')
       
    70 
       
    71         def gitpipe(self, s):
    45         def gitpipe(self, s):
    72             return util.popen3('GIT_DIR=%s %s' % (self.path, s))
    46             return util.popen3('GIT_DIR=%s %s' % (self.path, s))
    73 
    47 
    74     def _gitcmd(self, cmd, *args, **kwargs):
    48     def _gitcmd(self, cmd, *args, **kwargs):
    75         return cmd('--git-dir=%s' % self.path, *args, **kwargs)
    49         return cmd('--git-dir=%s' % self.path, *args, **kwargs)
    83     def gitrunlines0(self, *args, **kwargs):
    57     def gitrunlines0(self, *args, **kwargs):
    84         return self._gitcmd(self.runlines0, *args, **kwargs)
    58         return self._gitcmd(self.runlines0, *args, **kwargs)
    85 
    59 
    86     def gitrunlines(self, *args, **kwargs):
    60     def gitrunlines(self, *args, **kwargs):
    87         return self._gitcmd(self.runlines, *args, **kwargs)
    61         return self._gitcmd(self.runlines, *args, **kwargs)
    88 
       
    89     def popen_with_stderr(self, s):
       
    90         p = subprocess.Popen(s, shell=True, bufsize=-1,
       
    91                              close_fds=util.closefds,
       
    92                              stdin=subprocess.PIPE,
       
    93                              stdout=subprocess.PIPE,
       
    94                              stderr=subprocess.STDOUT,
       
    95                              universal_newlines=False,
       
    96                              env=None)
       
    97         return p.stdout
       
    98 
    62 
    99     def gitread(self, s):
    63     def gitread(self, s):
   100         fh = self.gitopen(s)
    64         fh = self.gitopen(s)
   101         data = fh.read()
    65         data = fh.read()
   102         return data, fh.close()
    66         return data, fh.close()