diff options
author | Kostis Anagnostopoulos <ankostis@gmail.com> | 2016-10-14 17:42:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-14 17:42:46 +0200 |
commit | e12ef59c559e3be8fa4a65e17c9c764da535716e (patch) | |
tree | e37739f510a328496230859cb316ce263b78e470 /git/repo/base.py | |
parent | e3165753f9d0d69caabac74eee195887f3fea482 (diff) | |
parent | c8e914eb0dfe6a0eb2de66b6826af5f715aeed6d (diff) | |
download | gitpython-e12ef59c559e3be8fa4a65e17c9c764da535716e.tar.gz |
Merge pull request #530 fixing some #525 Windows errors
+ git-daemon:
+ Use git-daemon PORT above 10k; on Windows all below need Admin rights.
+ Used relative daemon-paths with `--base-pth`.
+ Simplify git-daemon start/stop/ex-hanlding.
+FIXED git-daemon @with_rw_and_rw_remote_repo():
+ "Polish" most remote & config urls, converting \-->/.
+ test_base.test_with_rw_remote_and_rw_repo() PASS.
+ Remote:
+ test_remote: apply polish-urls on `_do_test_fetch()` checking function.
+ test_remote.test_base() now freezes on Windows! (so still hidden win_err).
pump fetch-infos instead of GIL-reading stderr.
+ Push-cmd also keep (and optionally raise) any error messages.
+ `cmd.handle_process_output()` accepts null-finalizer, to pump completely
stderr before raising any errors.
+ test: Enable `TestGit.test_environment()` on Windows (to checks stderr
consumption).
+ util: delete unused `absolute_project_path()`.
+ Control separately *freezing* TCs on Windows with `git.util.HIDE_WINDOWS_FREEZE_ERRORS` flag.
Diffstat (limited to 'git/repo/base.py')
-rw-r--r-- | git/repo/base.py | 54 |
1 files changed, 13 insertions, 41 deletions
diff --git a/git/repo/base.py b/git/repo/base.py index 8b68b5ff..c5cdce7c 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -62,8 +62,11 @@ from git.compat import ( 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 @@ class Repo(object): 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,10 +894,10 @@ class Repo(object): # 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("\\", "/")) + writer.set_value('url', Git.polish_url(repo.remotes[0].url)) # END handle remote repo return repo |