summaryrefslogtreecommitdiff
path: root/git
diff options
context:
space:
mode:
Diffstat (limited to 'git')
-rw-r--r--git/repo/base.py7
-rw-r--r--git/repo/fun.py6
-rw-r--r--git/util.py10
3 files changed, 15 insertions, 8 deletions
diff --git a/git/repo/base.py b/git/repo/base.py
index 111a350e..5a85cc4e 100644
--- a/git/repo/base.py
+++ b/git/repo/base.py
@@ -29,7 +29,7 @@ from git.remote import Remote, add_progress, to_progress_instance
from git.util import (
Actor,
finalize_process,
- decygpath,
+ cygpath,
hex_to_bin,
expand_path,
remove_password_if_present,
@@ -175,7 +175,10 @@ class Repo(object):
if not epath:
epath = os.getcwd()
if Git.is_cygwin():
- epath = decygpath(epath)
+ # Given how the tests are written, this seems more likely to catch
+ # Cygwin git used from Windows than Windows git used from Cygwin.
+ # Therefore changing to Cygwin-style paths is the relevant operation.
+ epath = cygpath(epath)
epath = epath or path or os.getcwd()
if not isinstance(epath, str):
diff --git a/git/repo/fun.py b/git/repo/fun.py
index 8a07c2ab..2ca2e3d6 100644
--- a/git/repo/fun.py
+++ b/git/repo/fun.py
@@ -7,7 +7,7 @@ from string import digits
from git.exc import WorkTreeRepositoryUnsupported
from git.objects import Object
from git.refs import SymbolicReference
-from git.util import hex_to_bin, bin_to_hex, decygpath
+from git.util import hex_to_bin, bin_to_hex, cygpath
from gitdb.exc import (
BadObject,
BadName,
@@ -109,7 +109,9 @@ def find_submodule_git_dir(d: "PathLike") -> Optional["PathLike"]:
if Git.is_cygwin():
## Cygwin creates submodules prefixed with `/cygdrive/...` suffixes.
- path = decygpath(path)
+ # Cygwin git understands Cygwin paths much better than Windows ones
+ # Also the Cygwin tests are assuming Cygwin paths.
+ path = cygpath(path)
if not osp.isabs(path):
path = osp.normpath(osp.join(osp.dirname(d), path))
return find_submodule_git_dir(path)
diff --git a/git/util.py b/git/util.py
index 11139156..6a4a6557 100644
--- a/git/util.py
+++ b/git/util.py
@@ -310,7 +310,7 @@ def _cygexpath(drive: Optional[str], path: str) -> str:
else:
p = cygpath(p)
elif drive:
- p = "/cygdrive/%s/%s" % (drive.lower(), p)
+ p = "/proc/cygdrive/%s/%s" % (drive.lower(), p)
p_str = str(p) # ensure it is a str and not AnyPath
return p_str.replace("\\", "/")
@@ -334,7 +334,7 @@ def cygpath(path: str) -> str:
"""Use :meth:`git.cmd.Git.polish_url()` instead, that works on any environment."""
path = str(path) # ensure is str and not AnyPath.
# Fix to use Paths when 3.5 dropped. or to be just str if only for urls?
- if not path.startswith(("/cygdrive", "//")):
+ if not path.startswith(("/cygdrive", "//", "/proc/cygdrive")):
for regex, parser, recurse in _cygpath_parsers:
match = regex.match(path)
if match:
@@ -348,7 +348,7 @@ def cygpath(path: str) -> str:
return path
-_decygpath_regex = re.compile(r"/cygdrive/(\w)(/.*)?")
+_decygpath_regex = re.compile(r"(?:/proc)?/cygdrive/(\w)(/.*)?")
def decygpath(path: PathLike) -> str:
@@ -377,7 +377,9 @@ def is_cygwin_git(git_executable: PathLike) -> bool:
def is_cygwin_git(git_executable: Union[None, PathLike]) -> bool:
- if not is_win:
+ if is_win:
+ # is_win seems to be true only for Windows-native pythons
+ # cygwin has os.name = posix, I think
return False
if git_executable is None: