本文整理汇总了Python中datalad.support.gitrepo.GitRepo类的典型用法代码示例。如果您正苦于以下问题:Python GitRepo类的具体用法?Python GitRepo怎么用?Python GitRepo使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了GitRepo类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_GitRepo_pull
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'}
)
示例2: test_GitRepo_fetch
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)
示例3: test_knows_annex
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: test_GitRepo_add
def test_GitRepo_add(src, path):
gr = GitRepo(path, src)
filename = "test_git_add.dat"
with open(os.path.join(path, filename), 'w') as f:
f.write("File to add to git")
gr.git_add(filename)
assert_in(filename, gr.get_indexed_files(), "%s not successfully added to %s" % (filename, path))
示例5: _clone_from_any_source
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
示例6: test_GitRepo_commit
def test_GitRepo_commit(path):
gr = GitRepo(path)
filename = "test_git_add.dat"
with open(os.path.join(path, filename), 'w') as f:
f.write("File to add to git")
gr.git_add(filename)
gr.git_commit("Testing GitRepo.git_commit().")
ok_clean_git(path, annex=False, untracked=[])
示例7: test_GitRepo_dirty
def test_GitRepo_dirty(path):
repo = GitRepo(path, create=True)
ok_(not repo.dirty)
# untracked file
with open(op.join(path, 'file1.txt'), 'w') as f:
f.write('whatever')
ok_(repo.dirty)
# staged file
repo.add('file1.txt')
ok_(repo.dirty)
# clean again
repo.commit("file1.txt added")
ok_(not repo.dirty)
# modify to be the same
with open(op.join(path, 'file1.txt'), 'w') as f:
f.write('whatever')
ok_(not repo.dirty)
# modified file
with open(op.join(path, 'file1.txt'), 'w') as f:
f.write('something else')
ok_(repo.dirty)
# clean again
repo.add('file1.txt')
repo.commit("file1.txt modified")
ok_(not repo.dirty)
示例8: test_clone_dataladri
def test_clone_dataladri(src, topurl, path):
# make plain git repo
ds_path = opj(src, 'ds')
gr = GitRepo(ds_path, create=True)
gr.add('test.txt')
gr.commit('demo')
Runner(cwd=gr.path)(['git', 'update-server-info'])
# now install it somewhere else
with patch('datalad.consts.DATASETS_TOPURL', topurl):
ds = clone('///ds', path, result_xfm='datasets', return_type='item-or-list')
eq_(ds.path, path)
ok_clean_git(path, annex=False)
ok_file_has_content(opj(path, 'test.txt'), 'some')
示例9: test_GitRepo_get_toppath
def test_GitRepo_get_toppath(repo, tempdir, repo2):
reporeal = op.realpath(repo)
eq_(GitRepo.get_toppath(repo, follow_up=False), reporeal)
eq_(GitRepo.get_toppath(repo), repo)
# Generate some nested directory
GitRepo(repo2, create=True)
repo2real = op.realpath(repo2)
nested = op.join(repo2, "d1", "d2")
os.makedirs(nested)
eq_(GitRepo.get_toppath(nested, follow_up=False), repo2real)
eq_(GitRepo.get_toppath(nested), repo2)
# and if not under git, should return None
eq_(GitRepo.get_toppath(tempdir), None)
示例10: test_GitRepo_get_indexed_files
def test_GitRepo_get_indexed_files(src, path):
gr = GitRepo(path, src)
idx_list = gr.get_indexed_files()
runner = Runner()
out = runner(['git', 'ls-files'], cwd=path)
out_list = out[0].split()
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: knows_annex
def knows_annex(path):
"""Returns whether at a given path there is information about an annex
This includes actually present annexes, but also uninitialized ones, or
even the presence of a remote annex branch.
"""
from os.path import exists
if not exists(path):
lgr.debug("No annex: test path {0} doesn't exist".format(path))
return False
from datalad.support.gitrepo import GitRepo
repo = GitRepo(path, create=False)
return "origin/git-annex" in repo.git_get_remote_branches() \
or "git-annex" in repo.git_get_branches()
示例12: test_hierarchy
def test_hierarchy(topdir):
# GH 1178
from datalad.api import create_test_dataset
with swallow_logs(), swallow_outputs():
dss = create_test_dataset(topdir, spec='1/1')
eq_(len(dss), 3)
eq_(dss[0], topdir)
for ids, ds in enumerate(dss):
ok_clean_git(ds, annex=False)
# each one should have 2 commits (but the last one)-- one for file and
# another one for sub-dataset
repo = GitRepo(ds)
eq_(len(list(repo.get_branch_commits())), 1 + int(ids<2))
示例13: test_GitRepo_push_n_checkout
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)))
示例14: test_install_dataladri
def test_install_dataladri(src, topurl, path):
# make plain git repo
ds_path = opj(src, 'ds')
gr = GitRepo(ds_path, create=True)
gr.add('test.txt')
gr.commit('demo')
Runner(cwd=gr.path)(['git', 'update-server-info'])
# now install it somewhere else
with patch('datalad.consts.DATASETS_TOPURL', topurl), \
swallow_logs():
ds = install(path, source='///ds')
eq_(ds.path, path)
ok_clean_git(path, annex=False)
ok_file_has_content(opj(path, 'test.txt'), 'some')
示例15: _parse_git_submodules
def _parse_git_submodules(ds, paths):
"""All known ones with some properties"""
if not (ds.pathobj / ".gitmodules").exists():
# easy way out. if there is no .gitmodules file
# we cannot have (functional) subdatasets
return
if paths:
paths = [
p.relative_to(ds.pathobj)
for p in paths
if ds.pathobj == p or ds.pathobj in p.parents]
if not paths:
# we had path contraints, but none matched this dataset
return
for path, props in iteritems(ds.repo.get_content_info(
paths=paths,
ref=None,
untracked='no',
eval_file_type=False)):
if props.get('type', None) != 'dataset':
continue
if ds.pathobj != ds.repo.pathobj:
props['path'] = ds.pathobj / path.relative_to(ds.repo.pathobj)
else:
props['path'] = path
if not path.exists() or not GitRepo.is_valid_repo(text_type(path)):
props['state'] = 'absent'
# TODO kill this after some time. We used to do custom things here
# and gitshasum was called revision. Be nice and duplicate for a bit
# wipe out when patience is gone
props['revision'] = props['gitshasum']
yield props