|  | 
| 4 | 4 | # This module is part of GitPython and is released under | 
| 5 | 5 | # the BSD License: http://www.opensource.org/licenses/bsd-license.php | 
| 6 | 6 | 
 | 
| 7 |  | -from git.exc import ( | 
| 8 |  | -    InvalidGitRepositoryError, | 
| 9 |  | -    NoSuchPathError, | 
| 10 |  | -    GitCommandError | 
| 11 |  | -) | 
| 12 |  | -from git.cmd import ( | 
| 13 |  | -    Git, | 
| 14 |  | -    handle_process_output | 
| 15 |  | -) | 
| 16 |  | -from git.refs import ( | 
| 17 |  | -    HEAD, | 
| 18 |  | -    Head, | 
| 19 |  | -    Reference, | 
| 20 |  | -    TagReference, | 
| 21 |  | -) | 
| 22 |  | -from git.objects import ( | 
| 23 |  | -    Submodule, | 
| 24 |  | -    RootModule, | 
| 25 |  | -    Commit | 
| 26 |  | -) | 
| 27 |  | -from git.util import ( | 
| 28 |  | -    Actor, | 
| 29 |  | -    finalize_process | 
| 30 |  | -) | 
| 31 |  | -from git.index import IndexFile | 
| 32 |  | -from git.config import GitConfigParser | 
| 33 |  | -from git.remote import ( | 
| 34 |  | -    Remote, | 
| 35 |  | -    add_progress, | 
| 36 |  | -    to_progress_instance | 
| 37 |  | -) | 
| 38 |  | - | 
| 39 |  | -from git.db import GitCmdObjectDB | 
|  | 7 | +from collections import namedtuple | 
|  | 8 | +import logging | 
|  | 9 | +import os | 
|  | 10 | +import re | 
|  | 11 | +import sys | 
| 40 | 12 | 
 | 
| 41 | 13 | from gitdb.util import ( | 
| 42 | 14 |     join, | 
| 43 | 15 |     isfile, | 
| 44 | 16 |     hex_to_bin | 
| 45 | 17 | ) | 
| 46 | 18 | 
 | 
| 47 |  | -from .fun import ( | 
| 48 |  | -    rev_parse, | 
| 49 |  | -    is_git_dir, | 
| 50 |  | -    find_git_dir, | 
| 51 |  | -    touch, | 
|  | 19 | +from git.cmd import ( | 
|  | 20 | +    Git, | 
|  | 21 | +    handle_process_output | 
| 52 | 22 | ) | 
| 53 | 23 | from git.compat import ( | 
| 54 | 24 |     text_type, | 
|  | 
| 58 | 28 |     range, | 
| 59 | 29 |     is_win, | 
| 60 | 30 | ) | 
|  | 31 | +from git.config import GitConfigParser | 
|  | 32 | +from git.db import GitCmdObjectDB | 
|  | 33 | +from git.exc import InvalidGitRepositoryError, NoSuchPathError, GitCommandError | 
|  | 34 | +from git.index import IndexFile | 
|  | 35 | +from git.objects import Submodule, RootModule, Commit | 
|  | 36 | +from git.refs import HEAD, Head, Reference, TagReference | 
|  | 37 | +from git.remote import Remote, add_progress, to_progress_instance | 
|  | 38 | +from git.util import Actor, finalize_process | 
|  | 39 | + | 
|  | 40 | +from .fun import rev_parse, is_git_dir, find_git_dir, touch | 
| 61 | 41 | 
 | 
| 62 |  | -import os | 
| 63 |  | -import sys | 
| 64 |  | -import re | 
| 65 |  | -import logging | 
| 66 |  | -from collections import namedtuple | 
| 67 | 42 | 
 | 
| 68 | 43 | log = logging.getLogger(__name__) | 
| 69 | 44 | 
 | 
| @@ -875,12 +850,22 @@ def _clone(cls, git, url, path, odb_default_type, progress, **kwargs): | 
| 875 | 850 |             progress = to_progress_instance(progress) | 
| 876 | 851 | 
 | 
| 877 | 852 |         odbt = kwargs.pop('odbt', odb_default_type) | 
| 878 |  | -        proc = git.clone(url, path, with_extended_output=True, as_process=True, | 
|  | 853 | + | 
|  | 854 | +        ## A bug win cygwin's Git, when `--bare` | 
|  | 855 | +        #  it prepends the basename of the `url` into the `path:: | 
|  | 856 | +        #        git clone --bare  /cygwin/a/foo.git  C:\\Work | 
|  | 857 | +        #  becomes:: | 
|  | 858 | +        #        git clone --bare  /cygwin/a/foo.git  /cygwin/a/C:\\Work | 
|  | 859 | +        # | 
|  | 860 | +        clone_path = (Git.polish_url(path) | 
|  | 861 | +                      if Git.is_cygwin() and 'bare' in kwargs | 
|  | 862 | +                      else path) | 
|  | 863 | +        proc = git.clone(Git.polish_url(url), clone_path, with_extended_output=True, as_process=True, | 
| 879 | 864 |                          v=True, **add_progress(kwargs, git, progress)) | 
| 880 | 865 |         if progress: | 
| 881 | 866 |             handle_process_output(proc, None, progress.new_message_handler(), finalize_process) | 
| 882 | 867 |         else: | 
| 883 |  | -            (stdout, stderr) = proc.communicate()  # FIXME: Will block of outputs are big! | 
|  | 868 | +            (stdout, stderr) = proc.communicate()  # FIXME: Will block if outputs are big! | 
| 884 | 869 |             log.debug("Cmd(%s)'s unused stdout: %s", getattr(proc, 'args', ''), stdout) | 
| 885 | 870 |             finalize_process(proc, stderr=stderr) | 
| 886 | 871 | 
 | 
|  | 
0 commit comments