本文整理汇总了Python中datalad.support.gitrepo.GitRepo.clone方法的典型用法代码示例。如果您正苦于以下问题:Python GitRepo.clone方法的具体用法?Python GitRepo.clone怎么用?Python GitRepo.clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类datalad.support.gitrepo.GitRepo
的用法示例。
在下文中一共展示了GitRepo.clone方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_GitRepo_fetch
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_fetch(test_path, orig_path, clone_path):
origin = GitRepo.clone(test_path, orig_path)
clone = GitRepo.clone(orig_path, clone_path)
filename = get_most_obscure_supported_name()
origin.checkout("new_branch", ['-b'])
with open(op.join(orig_path, filename), 'w') as f:
f.write("New file.")
origin.add(filename)
origin.commit("new file added.")
fetched = clone.fetch(remote='origin')
# test FetchInfo list returned by fetch
eq_([u'origin/' + clone.get_active_branch(), u'origin/new_branch'],
[commit.name for commit in fetched])
ok_clean_git(clone.path, annex=False)
assert_in("origin/new_branch", clone.get_remote_branches())
assert_in(filename, clone.get_files("origin/new_branch"))
assert_false(op.exists(op.join(clone_path, filename))) # not checked out
# create a remote without an URL:
origin.add_remote('not-available', 'git://example.com/not/existing')
origin.config.unset('remote.not-available.url', where='local')
# fetch without provided URL
fetched = origin.fetch('not-available')
# nothing was done, nothing returned:
eq_([], fetched)
示例2: test_GitRepo_pull
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_pull(test_path, orig_path, clone_path):
origin = GitRepo.clone(test_path, orig_path)
clone = GitRepo.clone(orig_path, clone_path)
filename = get_most_obscure_supported_name()
with open(op.join(orig_path, filename), 'w') as f:
f.write("New file.")
origin.add(filename)
origin.commit("new file added.")
clone.pull()
ok_(op.exists(op.join(clone_path, filename)))
# While at it, let's test _get_remotes_having_commit a bit
clone.add_remote("very_origin", test_path)
clone.fetch("very_origin")
eq_(
clone._get_remotes_having_commit(clone.get_hexsha()),
['origin']
)
prev_commit = clone.get_hexsha('HEAD^')
eq_(
set(clone._get_remotes_having_commit(prev_commit)),
{'origin', 'very_origin'}
)
示例3: test_knows_annex
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_knows_annex(here, there):
from datalad.support.gitrepo import GitRepo
from datalad.support.annexrepo import AnnexRepo
GitRepo(path=here, create=True)
assert_false(knows_annex(here))
AnnexRepo(path=here, create=True)
assert_true(knows_annex(here))
GitRepo.clone(path=there, url=here, create=True)
assert_true(knows_annex(there))
示例4: _clone_from_any_source
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def _clone_from_any_source(sources, dest):
# should not be the case, but we need to distinguish between failure
# of git-clone, due to existing target and an unsuccessful clone
# attempt. See below.
existed = dest and exists(dest)
for source_ in sources:
try:
lgr.debug("Retrieving a dataset from URL: "
"{0}".format(source_))
with swallow_logs():
GitRepo.clone(path=dest, url=source_, create=True)
return source_ # do not bother with other sources if succeeded
except GitCommandError as e:
lgr.debug("Failed to retrieve from URL: "
"{0}".format(source_))
if not existed and dest \
and exists(dest):
lgr.debug("Wiping out unsuccessful clone attempt at "
"{}".format(dest))
rmtree(dest)
if source_ == sources[-1]:
# Note: The following block is evaluated whenever we
# fail even with the last try. Not nice, but currently
# necessary until we get a more precise exception:
####################################
# TODO: We may want to introduce a --force option to
# overwrite the target.
# TODO: Currently assuming if `existed` and there is a
# GitCommandError means that these both things are connected.
# Need newer GitPython to get stderr from GitCommandError
# (already fixed within GitPython.)
if existed:
# rudimentary check for an installed dataset at target:
# (TODO: eventually check for being the one, that this
# is about)
dest_ds = Dataset(dest)
if dest_ds.is_installed():
lgr.info("{0} appears to be installed already."
"".format(dest_ds))
break
else:
lgr.warning("Target {0} already exists and is not "
"an installed dataset. Skipped."
"".format(dest))
# Keep original in debug output:
lgr.debug("Original failure:{0}"
"{1}".format(linesep, exc_str(e)))
return None
##################
# Re-raise if failed even with the last candidate
lgr.debug("Unable to establish repository instance at "
"{0} from {1}"
"".format(dest, sources))
raise
示例5: test_GitRepo_get_remote_url
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_get_remote_url(orig_path, path):
gr = GitRepo.clone(orig_path, path)
gr.add_remote('github', 'git://github.com/datalad/testrepo--basic--r1')
eq_(gr.get_remote_url('origin'), orig_path)
eq_(gr.get_remote_url('github'),
'git://github.com/datalad/testrepo--basic--r1')
示例6: test_GitRepo_add
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_add(src, path):
gr = GitRepo.clone(src, path)
filename = get_most_obscure_supported_name()
with open(op.join(path, filename), 'w') as f:
f.write("File to add to git")
added = gr.add(filename)
eq_(added, {'success': True, 'file': filename})
assert_in(filename, gr.get_indexed_files(),
"%s not successfully added to %s" % (filename, path))
# uncommitted:
ok_(gr.dirty)
filename = "another.txt"
with open(op.join(path, filename), 'w') as f:
f.write("Another file to add to git")
# include committing:
added2 = gr.add(filename)
gr.commit(msg="Add two files.")
eq_(added2, {'success': True, 'file': filename})
assert_in(filename, gr.get_indexed_files(),
"%s not successfully added to %s" % (filename, path))
ok_clean_git(path)
示例7: test_optimized_cloning
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_optimized_cloning(path):
# make test repo with one file and one commit
originpath = op.join(path, 'origin')
repo = GitRepo(originpath, create=True)
with open(op.join(originpath, 'test'), 'w') as f:
f.write('some')
repo.add('test')
repo.commit('init')
ok_clean_git(originpath, annex=False)
from glob import glob
def _get_inodes(repo):
return dict(
[(os.path.join(*o.split(os.sep)[-2:]),
os.stat(o).st_ino)
for o in glob(os.path.join(repo.path,
repo.get_git_dir(repo),
'objects', '*', '*'))])
origin_inodes = _get_inodes(repo)
# now clone it in different ways and see what happens to the object storage
from datalad.support.network import get_local_file_url
clonepath = op.join(path, 'clone')
for src in (originpath, get_local_file_url(originpath)):
# deprecated
assert_raises(DeprecatedError, GitRepo, url=src, path=clonepath)
clone = GitRepo.clone(url=src, path=clonepath, create=True)
clone_inodes = _get_inodes(clone)
eq_(origin_inodes, clone_inodes, msg='with src={}'.format(src))
rmtree(clonepath)
示例8: test_GitRepo_remote_remove
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_remote_remove(orig_path, path):
gr = GitRepo.clone(orig_path, path)
gr.add_remote('github', 'git://github.com/datalad/testrepo--basic--r1')
gr.remove_remote('github')
out = gr.get_remotes()
eq_(len(out), 1)
assert_in('origin', out)
示例9: test_GitRepo_remote_add
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_remote_add(orig_path, path):
gr = GitRepo.clone(orig_path, path)
out = gr.get_remotes()
assert_in('origin', out)
eq_(len(out), 1)
gr.add_remote('github', 'git://github.com/datalad/testrepo--basic--r1')
out = gr.get_remotes()
assert_in('origin', out)
assert_in('github', out)
eq_(len(out), 2)
eq_('git://github.com/datalad/testrepo--basic--r1', gr.config['remote.github.url'])
示例10: test_GitRepo_get_indexed_files
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_get_indexed_files(src, path):
gr = GitRepo.clone(src, path)
idx_list = gr.get_indexed_files()
runner = Runner()
out = runner(['git', 'ls-files'], cwd=path)
out_list = list(filter(bool, out[0].split('\n')))
for item in idx_list:
assert_in(item, out_list, "%s not found in output of git ls-files in %s" % (item, path))
for item in out_list:
assert_in(item, idx_list, "%s not found in output of get_indexed_files in %s" % (item, path))
示例11: test_GitRepo_push_n_checkout
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_push_n_checkout(orig_path, clone_path):
origin = GitRepo(orig_path)
clone = GitRepo.clone(orig_path, clone_path)
filename = get_most_obscure_supported_name()
with open(op.join(clone_path, filename), 'w') as f:
f.write("New file.")
clone.add(filename)
clone.commit("new file added.")
# TODO: need checkout first:
clone.push('origin', '+master:new-branch')
origin.checkout('new-branch')
ok_(op.exists(op.join(orig_path, filename)))
示例12: test_GitRepo_instance_from_clone
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_instance_from_clone(src, dst):
gr = GitRepo.clone(src, dst)
assert_is_instance(gr, GitRepo, "GitRepo was not created.")
assert_is_instance(gr.repo, gitpy.Repo,
"Failed to instantiate GitPython Repo object.")
ok_(op.exists(op.join(dst, '.git')))
# do it again should raise GitCommandError since git will notice there's
# already a git-repo at that path and therefore can't clone to `dst`
# Note: Since GitRepo is now a WeakSingletonRepo, this is prevented from
# happening atm. Disabling for now:
# raise SkipTest("Disabled for RF: WeakSingletonRepo")
with swallow_logs() as logs:
assert_raises(GitCommandError, GitRepo.clone, src, dst)
示例13: test_get_tracking_branch
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_get_tracking_branch(o_path, c_path):
clone = GitRepo.clone(o_path, c_path)
# Note, that the default branch might differ even if it is always 'master'.
# For direct mode annex repositories it would then be "annex/direct/master"
# for example. Therefore use whatever branch is checked out by default:
master_branch = clone.get_active_branch()
ok_(master_branch)
eq_(('origin', 'refs/heads/' + master_branch),
clone.get_tracking_branch())
clone.checkout('new_branch', ['-b'])
eq_((None, None), clone.get_tracking_branch())
eq_(('origin', 'refs/heads/' + master_branch),
clone.get_tracking_branch(master_branch))
示例14: test_GitRepo_get_files
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def test_GitRepo_get_files(url, path):
gr = GitRepo.clone(url, path)
# get the expected files via os for comparison:
os_files = set()
for (dirpath, dirnames, filenames) in os.walk(path):
rel_dir = os.path.relpath(dirpath, start=path)
if rel_dir.startswith(".git"):
continue
for file_ in filenames:
file_path = os.path.normpath(op.join(rel_dir, file_))
os_files.add(file_path)
# get the files via GitRepo:
local_files = set(gr.get_files())
remote_files = set(gr.get_files(branch="origin/master"))
eq_(local_files, set(gr.get_indexed_files()))
eq_(local_files, remote_files)
eq_(local_files, os_files)
# create a different branch:
gr.checkout('new_branch', ['-b'])
filename = 'another_file.dat'
with open(op.join(path, filename), 'w') as f:
f.write("something")
gr.add(filename)
gr.commit("Added.")
# now get the files again:
local_files = set(gr.get_files())
eq_(local_files, os_files.union({filename}))
# retrieve remote branch again, which should not have changed:
remote_files = set(gr.get_files(branch="origin/master"))
eq_(remote_files, os_files)
eq_(set([filename]), local_files.difference(remote_files))
# switch back and query non-active branch:
gr.checkout('master')
local_files = set(gr.get_files())
branch_files = set(gr.get_files(branch="new_branch"))
eq_(set([filename]), branch_files.difference(local_files))
示例15: __call__
# 需要导入模块: from datalad.support.gitrepo import GitRepo [as 别名]
# 或者: from datalad.support.gitrepo.GitRepo import clone [as 别名]
def __call__(
source,
path=None,
dataset=None,
description=None,
reckless=False,
alt_sources=None):
# TODO next ones should be there, but cannot go anywhere
# git_opts=None,
# git_clone_opts=None,
# annex_opts=None,
# annex_init_opts=None
# did we explicitly get a dataset to install into?
# if we got a dataset, path will be resolved against it.
# Otherwise path will be resolved first.
dataset = require_dataset(
dataset, check_installed=True, purpose='cloning') \
if dataset is not None else dataset
refds_path = dataset.path if dataset else None
if isinstance(source, Dataset):
source = source.path
if source == path:
# even if they turn out to be identical after resolving symlinks
# and more sophisticated witchcraft, it would still happily say
# "it appears to be already installed", so we just catch an
# obviously pointless input combination
raise ValueError(
"clone `source` and destination `path` are identical [{}]. "
"If you are trying to add a subdataset simply use `add`".format(
path))
if path is not None:
path = resolve_path(path, dataset)
# Possibly do conversion from source into a git-friendly url
# luckily GitRepo will undo any fancy file:/// url to make use of Git's
# optimization for local clones....
source_url = source
source_ = _get_git_url_from_source(source)
lgr.debug("Resolved clone source from '%s' to '%s'",
source, source_)
source = source_
# derive target from source:
if path is None:
# we got nothing but a source. do something similar to git clone
# and derive the path from the source and continue
path = _get_installationpath_from_url(source)
# since this is a relative `path`, resolve it:
path = resolve_path(path, dataset)
lgr.debug("Determined clone target path from source")
lgr.debug("Resolved clone target path to: '%s'", path)
# there is no other way -- my intoxicated brain tells me
assert(path is not None)
destination_dataset = Dataset(path)
dest_path = path
status_kwargs = dict(
action='install', ds=destination_dataset, logger=lgr,
refds=refds_path, source_url=source_url)
# important test! based on this `rmtree` will happen below after failed clone
if exists(dest_path) and listdir(dest_path):
if destination_dataset.is_installed():
# check if dest was cloned from the given source before
# this is where we would have installed this from
guessed_sources = _get_flexible_source_candidates(
source, dest_path)
# this is where it was actually installed from
track_name, track_url = _get_tracking_source(destination_dataset)
if track_url in guessed_sources or \
get_local_file_url(track_url) in guessed_sources:
yield get_status_dict(
status='notneeded',
message=("dataset %s was already cloned from '%s'",
destination_dataset,
source),
**status_kwargs)
return
# anything else is an error
yield get_status_dict(
status='error',
message='target path already exists and not empty, refuse to clone into target path',
**status_kwargs)
return
if dataset is not None and relpath(path, start=dataset.path).startswith(pardir):
yield get_status_dict(
status='error',
message=("clone target path '%s' not in specified target dataset '%s'",
path, dataset),
**status_kwargs)
return
# generate candidate URLs from source argument to overcome a few corner cases
#.........这里部分代码省略.........