本文整理汇总了Python中datalad.support.annexrepo.AnnexRepo类的典型用法代码示例。如果您正苦于以下问题:Python AnnexRepo类的具体用法?Python AnnexRepo怎么用?Python AnnexRepo使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了AnnexRepo类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: repo
def repo(self):
"""Get an instance of the version control system/repo for this dataset,
or None if there is none yet.
If creating an instance of GitRepo is guaranteed to be really cheap
this could also serve as a test whether a repo is present.
Returns
-------
GitRepo
"""
if self._repo is None:
with swallow_logs():
try:
self._repo = AnnexRepo(self._path, create=False, init=False)
except (InvalidGitRepositoryError, NoSuchPathError, RuntimeError):
try:
self._repo = GitRepo(self._path, create=False)
except (InvalidGitRepositoryError, NoSuchPathError):
pass
elif not isinstance(self._repo, AnnexRepo):
# repo was initially set to be self._repo but might become AnnexRepo
# at a later moment, so check if it didn't happen
if 'git-annex' in self._repo.git_get_branches():
# we acquired git-annex branch
self._repo = AnnexRepo(self._repo.path, create=False)
return self._repo
示例2: test_publish_file_handle
def test_publish_file_handle(origin, src_path, dst_path):
# prepare src
source = install(path=src_path, source=origin, recursive=True)
# TODO: For now, circumnavigate the detached head issue.
# Figure out, what to do.
for subds in source.get_dataset_handles(recursive=True):
AnnexRepo(opj(src_path, subds), init=True, create=True).git_checkout("master")
source.repo.get('test-annex.dat')
# create plain git at target:
target = AnnexRepo(dst_path, create=True)
# actually not needed for this test, but provide same setup as
# everywhere else:
target.git_checkout("TMP", "-b")
source.repo.git_remote_add("target", dst_path)
# directly publish a file handle, not the dataset itself:
res = publish(dataset=source, dest="target", path="test-annex.dat")
eq_(res, opj(source.path, 'test-annex.dat'))
# only file was published, not the dataset itself:
assert_not_in("master", target.git_get_branches())
eq_(Dataset(dst_path).get_dataset_handles(), [])
assert_not_in("test.dat", target.git_get_files())
# content is now available from 'target':
assert_in("target",
source.repo.annex_whereis('test-annex.dat',
output="descriptions"))
source.repo.annex_drop('test-annex.dat')
eq_(source.repo.file_has_content(['test-annex.dat']), [False])
source.repo._run_annex_command('get', annex_options=['test-annex.dat',
'--from=target'])
eq_(source.repo.file_has_content(['test-annex.dat']), [True])
示例3: test_rotree
def test_rotree(d):
d2 = opj(d, 'd1', 'd2') # deep nested directory
f = opj(d2, 'f1')
os.makedirs(d2)
with open(f, 'w') as f_:
f_.write("LOAD")
with swallow_logs():
ar = AnnexRepo(d2)
rotree(d)
# we shouldn't be able to delete anything UNLESS in "crippled" situation:
# root, or filesystem is FAT etc
# Theoretically annex should declare FS as crippled when ran as root, but
# see http://git-annex.branchable.com/bugs/decides_that_FS_is_crippled_
# under_cowbuilder___40__symlinks_supported_etc__41__/#comment-60c3cbe2710d6865fb9b7d6e247cd7aa
# so explicit 'or'
if not (ar.is_crippled_fs() or (os.getuid() == 0)):
assert_raises(OSError, os.unlink, f) # OK to use os.unlink
assert_raises(OSError, unlink, f) # and even with waiting and trying!
assert_raises(OSError, shutil.rmtree, d)
# but file should still be accessible
with open(f) as f_:
eq_(f_.read(), "LOAD")
# make it RW
rotree(d, False)
unlink(f)
shutil.rmtree(d)
示例4: test_AnnexRepo_is_direct_mode
def test_AnnexRepo_is_direct_mode(path):
ar = AnnexRepo(path)
dm = ar.is_direct_mode()
if on_windows:
assert_true(dm, "AnnexRepo.is_direct_mode() returned false on windows.")
else:
assert_false(dm, "AnnexRepo.is_direct_mode() returned true on non-windows")
示例5: test_AnnexRepo_file_has_content
def test_AnnexRepo_file_has_content(src, annex_path):
ar = AnnexRepo(annex_path, src)
testfiles = ["test-annex.dat", "test.dat"]
assert_equal(ar.file_has_content(testfiles),
[("test-annex.dat", False), ("test.dat", False)])
ar.annex_get("test-annex.dat")
assert_equal(ar.file_has_content(testfiles),
[("test-annex.dat", True), ("test.dat", False)])
示例6: ok_file_under_git
def ok_file_under_git(path, filename, annexed=False):
repo = AnnexRepo(path)
assert(filename in repo.get_indexed_files()) # file is known to Git
try:
repo.get_file_key(filename)
in_annex = True
except FileNotInAnnexError as e:
in_annex = False
assert(annexed == in_annex)
示例7: test_AnnexRepo_crippled_filesystem
def test_AnnexRepo_crippled_filesystem(src, dst):
# TODO: This test is rudimentary, since platform not really determines filesystem.
# For now this should work for the buildbots. Nevertheless: Find a better way to test it.
ar = AnnexRepo(dst, src)
if on_windows:
assert_true(ar.is_crippled_fs(), "Detected non-crippled filesystem on windows.")
else:
assert_false(ar.is_crippled_fs(), "Detected crippled filesystem on non-windows.")
示例8: test_update_fetch_all
def test_update_fetch_all(src, remote_1, remote_2):
rmt1 = AnnexRepo.clone(src, remote_1)
rmt2 = AnnexRepo.clone(src, remote_2)
ds = Dataset(src)
ds.siblings('add', name="sibling_1", url=remote_1)
ds.siblings('add', name="sibling_2", url=remote_2)
# modify the remotes:
with open(opj(remote_1, "first.txt"), "w") as f:
f.write("some file load")
rmt1.add("first.txt")
rmt1.commit()
# TODO: Modify an already present file!
with open(opj(remote_2, "second.txt"), "w") as f:
f.write("different file load")
rmt2.add("second.txt", git=True)
rmt2.commit(msg="Add file to git.")
# Let's init some special remote which we couldn't really update/fetch
if not os.environ.get('DATALAD_TESTS_DATALADREMOTE'):
ds.repo.init_remote(
'datalad',
['encryption=none', 'type=external', 'externaltype=datalad'])
# fetch all remotes
assert_result_count(
ds.update(), 1, status='ok', type='dataset')
# no merge, so changes are not in active branch:
assert_not_in("first.txt",
ds.repo.get_files(ds.repo.get_active_branch()))
assert_not_in("second.txt",
ds.repo.get_files(ds.repo.get_active_branch()))
# but we know the changes in remote branches:
assert_in("first.txt", ds.repo.get_files("sibling_1/master"))
assert_in("second.txt", ds.repo.get_files("sibling_2/master"))
# no merge strategy for multiple remotes yet:
# more clever now, there is a tracking branch that provides a remote
#assert_raises(NotImplementedError, ds.update, merge=True)
# merge a certain remote:
assert_result_count(
ds.update(
sibling='sibling_1', merge=True), 1, status='ok', type='dataset')
# changes from sibling_2 still not present:
assert_not_in("second.txt",
ds.repo.get_files(ds.repo.get_active_branch()))
# changes from sibling_1 merged:
assert_in("first.txt",
ds.repo.get_files(ds.repo.get_active_branch()))
# it's known to annex, but has no content yet:
ds.repo.get_file_key("first.txt") # raises if unknown
eq_([False], ds.repo.file_has_content(["first.txt"]))
示例9: test_submodule_deinit
def test_submodule_deinit(path):
from datalad.support.annexrepo import AnnexRepo
top_repo = AnnexRepo(path, create=False)
eq_({'subm 1', '2'}, {s.name for s in top_repo.get_submodules()})
# note: here init=True is ok, since we are using it just for testing
with swallow_logs(new_level=logging.WARN) as cml:
top_repo.update_submodule('subm 1', init=True)
assert_in('Do not use update_submodule with init=True', cml.out)
top_repo.update_submodule('2', init=True)
# ok_(all([s.module_exists() for s in top_repo.get_submodules()]))
# TODO: old assertion above if non-bare? (can't use "direct mode" in test_gitrepo)
# Alternatively: New testrepo (plain git submodules) and have a dedicated
# test for annexes in addition
ok_(all([GitRepo.is_valid_repo(op.join(top_repo.path, s.path))
for s in top_repo.get_submodules()]))
# modify submodule:
with open(op.join(top_repo.path, 'subm 1', 'file_ut.dat'), "w") as f:
f.write("some content")
assert_raises(CommandError, top_repo.deinit_submodule, 'sub1')
# using force should work:
top_repo.deinit_submodule('subm 1', force=True)
ok_(not top_repo.repo.submodule('subm 1').module_exists())
示例10: test_AnnexRepo_annex_add_to_git
def test_AnnexRepo_annex_add_to_git(src, dst):
ar = AnnexRepo(dst, src)
filename = 'file_to_git.dat'
filename_abs = os.path.join(dst, filename)
with open(filename_abs, 'w') as f:
f.write("What to write?")
assert_raises(IOError, ar.get_file_key, filename)
ar.annex_add_to_git(filename)
assert_in(filename, ar.get_indexed_files())
示例11: test_AnnexRepo_get
def test_AnnexRepo_get(src, dst):
ar = AnnexRepo(dst, src)
assert_is_instance(ar, AnnexRepo, "AnnexRepo was not created.")
testfile = 'test-annex.dat'
testfile_abs = os.path.join(dst, testfile)
assert_false(ar.file_has_content("test-annex.dat")[0][1])
ar.annex_get(testfile)
assert_true(ar.file_has_content("test-annex.dat")[0][1])
f = open(testfile_abs, 'r')
assert_equal(f.readlines(), ['123\n'], "test-annex.dat's content doesn't match.")
示例12: ok_clean_git_annex_proxy
def ok_clean_git_annex_proxy(path):
"""Helper to check, whether an annex in direct mode is clean
"""
# TODO: May be let's make a method of AnnexRepo for this purpose
ar = AnnexRepoNew(path)
cwd = os.getcwd()
os.chdir(path)
try:
out = ar.annex_proxy("git status")
except CommandNotAvailableError, e:
raise SkipTest
示例13: test_publish_with_data
def test_publish_with_data(origin, src_path, dst_path):
# prepare src
source = install(path=src_path, source=origin, recursive=True)
# TODO: For now, circumnavigate the detached head issue.
# Figure out, what to do.
for subds in source.get_dataset_handles(recursive=True):
AnnexRepo(opj(src_path, subds), init=True, create=True).git_checkout("master")
source.repo.get('test-annex.dat')
# create plain git at target:
target = AnnexRepo(dst_path, create=True)
target.git_checkout("TMP", "-b")
source.repo.git_remote_add("target", dst_path)
res = publish(dataset=source, dest="target", with_data=['test-annex.dat'])
eq_(res, source)
eq_(list(target.git_get_branch_commits("master")),
list(source.repo.git_get_branch_commits("master")))
# TODO: last commit in git-annex branch differs. Probably fine,
# but figure out, when exactly to expect this for proper testing:
eq_(list(target.git_get_branch_commits("git-annex"))[1:],
list(source.repo.git_get_branch_commits("git-annex"))[1:])
# we need compare target/master:
target.git_checkout("master")
eq_(target.file_has_content(['test-annex.dat']), [True])
示例14: _handle_possible_annex_dataset
def _handle_possible_annex_dataset(dataset, reckless):
# in any case check whether we need to annex-init the installed thing:
if knows_annex(dataset.path):
# init annex when traces of a remote annex can be detected
if reckless:
lgr.debug(
"Instruct annex to hardlink content in %s from local "
"sources, if possible (reckless)", dataset.path)
dataset.config.add(
'annex.hardlink', 'true', where='local', reload=True)
lgr.debug("Initializing annex repo at %s", dataset.path)
repo = AnnexRepo(dataset.path, init=True)
if reckless:
repo._run_annex_command('untrust', annex_options=['here'])
示例15: test_AnnexRepo_set_direct_mode
def test_AnnexRepo_set_direct_mode(src, dst):
ar = AnnexRepo(dst, src)
ar.set_direct_mode(True)
assert_true(ar.is_direct_mode(), "Switching to direct mode failed.")
if ar.is_crippled_fs():
assert_raises(CommandNotAvailableError, ar.set_direct_mode, False)
assert_true(ar.is_direct_mode(), "Indirect mode on crippled fs detected. Shouldn't be possible.")
else:
ar.set_direct_mode(False)
assert_false(ar.is_direct_mode(), "Switching to indirect mode failed.")