summaryrefslogtreecommitdiff
path: root/git/repo/base.py
diff options
context:
space:
mode:
authorKostis Anagnostopoulos <ankostis@gmail.com>2016-10-14 17:42:46 +0200
committerGitHub <noreply@github.com>2016-10-14 17:42:46 +0200
commite12ef59c559e3be8fa4a65e17c9c764da535716e (patch)
treee37739f510a328496230859cb316ce263b78e470 /git/repo/base.py
parente3165753f9d0d69caabac74eee195887f3fea482 (diff)
parentc8e914eb0dfe6a0eb2de66b6826af5f715aeed6d (diff)
downloadgitpython-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.py54
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