From cc6529cc694688145cc176585764c5ba1d10d326 Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Sat, 1 Oct 2016 20:14:50 +0200 Subject: [PATCH] repo, cmd: DROP UNEEDED Win path for chcwd & check for '~' homedir + Do not abspath twice when contructing cloned repo. + Add `git.repo.base` logger. --- git/cmd.py | 15 +++----------- git/repo/base.py | 52 +++++++++++------------------------------------- 2 files changed, 15 insertions(+), 52 deletions(-) diff --git a/git/cmd.py b/git/cmd.py index 88d62aa45..b1c18998c 100644 --- a/git/cmd.py +++ b/git/cmd.py @@ -42,12 +42,12 @@ ) -execute_kwargs = set(('istream', 'with_keep_cwd', 'with_extended_output', +execute_kwargs = set(('istream', 'with_extended_output', 'with_exceptions', 'as_process', 'stdout_as_string', 'output_stream', 'with_stdout', 'kill_after_timeout', 'universal_newlines', 'shell')) -log = logging.getLogger('git.cmd') +log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) __all__ = ('Git',) @@ -413,7 +413,6 @@ def version_info(self): def execute(self, command, istream=None, - with_keep_cwd=False, with_extended_output=False, with_exceptions=True, as_process=False, @@ -436,11 +435,6 @@ def execute(self, command, :param istream: Standard input filehandle passed to subprocess.Popen. - :param with_keep_cwd: - Whether to use the current working directory from os.getcwd(). - The cmd otherwise uses its own working_dir that it has been initialized - with if possible. - :param with_extended_output: Whether to return a (status, stdout, stderr) tuple. @@ -513,10 +507,7 @@ def execute(self, command, log.info(' '.join(command)) # Allow the user to have the command executed in their working dir. - if with_keep_cwd or self._working_dir is None: - cwd = os.getcwd() - else: - cwd = self._working_dir + cwd = self._working_dir or os.getcwd() # Start the process env = os.environ.copy() diff --git a/git/repo/base.py b/git/repo/base.py index 8b68b5ff2..4e9549eea 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -62,8 +62,11 @@ import os import sys import re +import logging from collections import namedtuple +log = logging.getLogger(__name__) + DefaultDBType = GitCmdObjectDB if sys.version_info[:2] < (2, 5): # python 2.4 compatiblity DefaultDBType = GitCmdObjectDB @@ -871,46 +874,15 @@ def _clone(cls, git, url, path, odb_default_type, progress, **kwargs): if progress is not None: progress = to_progress_instance(progress) - # special handling for windows for path at which the clone should be - # created. - # tilde '~' will be expanded to the HOME no matter where the ~ occours. Hence - # we at least give a proper error instead of letting git fail - prev_cwd = None - prev_path = None odbt = kwargs.pop('odbt', odb_default_type) - if is_win: - if '~' in path: - raise OSError("Git cannot handle the ~ character in path %r correctly" % path) - - # on windows, git will think paths like c: are relative and prepend the - # current working dir ( before it fails ). We temporarily adjust the working - # dir to make this actually work - match = re.match("(\w:[/\\\])(.*)", path) - if match: - prev_cwd = os.getcwd() - prev_path = path - drive, rest_of_path = match.groups() - os.chdir(drive) - path = rest_of_path - kwargs['with_keep_cwd'] = True - # END cwd preparation - # END windows handling - - try: - proc = git.clone(url, path, with_extended_output=True, as_process=True, - v=True, **add_progress(kwargs, git, progress)) - if progress: - handle_process_output(proc, None, progress.new_message_handler(), finalize_process) - else: - (stdout, stderr) = proc.communicate() # FIXME: Will block of outputs are big! - finalize_process(proc, stderr=stderr) - # end handle progress - finally: - if prev_cwd is not None: - os.chdir(prev_cwd) - path = prev_path - # END reset previous working dir - # END bad windows handling + proc = git.clone(url, path, with_extended_output=True, as_process=True, + v=True, **add_progress(kwargs, git, progress)) + if progress: + handle_process_output(proc, None, progress.new_message_handler(), finalize_process) + else: + (stdout, stderr) = proc.communicate() # FIXME: Will block of outputs are big! + log.debug("Cmd(%s)'s unused stdout: %s", getattr(proc, 'args', ''), stdout) + finalize_process(proc, stderr=stderr) # our git command could have a different working dir than our actual # environment, hence we prepend its working dir if required @@ -922,7 +894,7 @@ def _clone(cls, git, url, path, odb_default_type, progress, **kwargs): # that contains the remote from which we were clones, git stops liking it # as it will escape the backslashes. Hence we undo the escaping just to be # sure - repo = cls(os.path.abspath(path), odbt=odbt) + repo = cls(path, odbt=odbt) if repo.remotes: with repo.remotes[0].config_writer as writer: writer.set_value('url', repo.remotes[0].url.replace("\\\\", "\\").replace("\\", "/")) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy