summaryrefslogtreecommitdiff
path: root/git/repo
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2011-06-07 21:27:26 +0200
committerSebastian Thiel <byronimo@gmail.com>2011-06-07 21:27:26 +0200
commit36a984803df08b0f6eb5f8a73254dd64bc616b67 (patch)
tree9b6843c3633f4a1c47c3c28589ed2ac2b6ee0b9f /git/repo
parentdfe3ba3e5c08ee88afe89cc331081bbfbf5520e0 (diff)
parentab5b6af0c2c13794525ad84b0a80be9c42e9fcf1 (diff)
downloadgitpython-36a984803df08b0f6eb5f8a73254dd64bc616b67.tar.gz
Merge branch 'progress'
Diffstat (limited to 'git/repo')
-rw-r--r--git/repo/base.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/git/repo/base.py b/git/repo/base.py
index 0405a5f9..14efabdc 100644
--- a/git/repo/base.py
+++ b/git/repo/base.py
@@ -11,13 +11,18 @@ from git.refs import *
from git.index import IndexFile
from git.objects import *
from git.config import GitConfigParser
-from git.remote import Remote
+from git.remote import (
+ Remote,
+ digest_process_messages,
+ finalize_process,
+ add_progress
+ )
+
from git.db import (
GitCmdObjectDB,
GitDB
)
-
from gitdb.util import (
join,
isfile,
@@ -652,7 +657,7 @@ class Repo(object):
return Repo(path)
@classmethod
- def _clone(cls, git, url, path, odb_default_type, **kwargs):
+ def _clone(cls, git, url, path, odb_default_type, progress, **kwargs):
# 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
@@ -679,7 +684,11 @@ class Repo(object):
# END windows handling
try:
- git.clone(url, path, **kwargs)
+ proc = git.clone(url, path, with_extended_output=True, as_process=True, v=True, **add_progress(kwargs, git, progress))
+ if progress:
+ digest_process_messages(proc.stderr, progress)
+ #END handle progress
+ finalize_process(proc)
finally:
if prev_cwd is not None:
os.chdir(prev_cwd)
@@ -703,11 +712,13 @@ class Repo(object):
# END handle remote repo
return repo
- def clone(self, path, **kwargs):
+ def clone(self, path, progress=None, **kwargs):
"""Create a clone from this repository.
:param path:
is the full path of the new repo (traditionally ends with ./<name>.git).
+ :param progress: See 'git.remote.Remote.push'.
+
:param kwargs:
odbt = ObjectDatabase Type, allowing to determine the object database
implementation used by the returned Repo instance
@@ -715,16 +726,17 @@ class Repo(object):
All remaining keyword arguments are given to the git-clone command
:return: ``git.Repo`` (the newly cloned repo)"""
- return self._clone(self.git, self.git_dir, path, type(self.odb), **kwargs)
+ return self._clone(self.git, self.git_dir, path, type(self.odb), progress, **kwargs)
@classmethod
- def clone_from(cls, url, to_path, **kwargs):
+ def clone_from(cls, url, to_path, progress=None, **kwargs):
"""Create a clone from the given URL
:param url: valid git url, see http://www.kernel.org/pub/software/scm/git/docs/git-clone.html#URLS
:param to_path: Path to which the repository should be cloned to
+ :param progress: See 'git.remote.Remote.push'.
:param kwargs: see the ``clone`` method
:return: Repo instance pointing to the cloned directory"""
- return cls._clone(Git(os.getcwd()), url, to_path, GitCmdObjectDB, **kwargs)
+ return cls._clone(Git(os.getcwd()), url, to_path, GitCmdObjectDB, progress, **kwargs)
def archive(self, ostream, treeish=None, prefix=None, **kwargs):
"""Archive the tree at the given revision.