77 lines
2.7 KiB
Python
77 lines
2.7 KiB
Python
|
import os
|
||
|
import shutil
|
||
|
import subprocess
|
||
|
import tempfile
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
import fsspec
|
||
|
from fsspec.implementations.local import make_path_posix
|
||
|
|
||
|
pygit2 = pytest.importorskip("pygit2")
|
||
|
|
||
|
|
||
|
@pytest.fixture()
|
||
|
def repo():
|
||
|
orig_dir = os.getcwd()
|
||
|
d = tempfile.mkdtemp()
|
||
|
try:
|
||
|
os.chdir(d)
|
||
|
subprocess.call("git init -b master", shell=True, cwd=d)
|
||
|
subprocess.call("git init -b master", shell=True, cwd=d)
|
||
|
subprocess.call('git config user.email "you@example.com"', shell=True, cwd=d)
|
||
|
subprocess.call('git config user.name "Your Name"', shell=True, cwd=d)
|
||
|
open(os.path.join(d, "file1"), "wb").write(b"data0")
|
||
|
subprocess.call("git add file1", shell=True, cwd=d)
|
||
|
subprocess.call('git commit -m "init"', shell=True, cwd=d)
|
||
|
sha = open(os.path.join(d, ".git/refs/heads/master"), "r").read().strip()
|
||
|
open(os.path.join(d, "file1"), "wb").write(b"data00")
|
||
|
subprocess.check_output('git commit -a -m "tagger"', shell=True, cwd=d)
|
||
|
subprocess.call('git tag -a thetag -m "make tag"', shell=True, cwd=d)
|
||
|
open(os.path.join(d, "file2"), "wb").write(b"data000")
|
||
|
subprocess.call("git add file2", shell=True)
|
||
|
subprocess.call('git commit -m "master tip"', shell=True, cwd=d)
|
||
|
subprocess.call("git checkout -b abranch", shell=True, cwd=d)
|
||
|
os.mkdir("inner")
|
||
|
open(os.path.join(d, "inner", "file1"), "wb").write(b"data3")
|
||
|
subprocess.call("git add inner/file1", shell=True, cwd=d)
|
||
|
subprocess.call('git commit -m "branch tip"', shell=True, cwd=d)
|
||
|
os.chdir(orig_dir)
|
||
|
yield d, sha
|
||
|
finally:
|
||
|
os.chdir(orig_dir)
|
||
|
shutil.rmtree(d)
|
||
|
|
||
|
|
||
|
def test_refs(repo):
|
||
|
d, sha = repo
|
||
|
with fsspec.open("git://file1", path=d, ref=sha) as f:
|
||
|
assert f.read() == b"data0"
|
||
|
|
||
|
with fsspec.open("git://file1", path=d, ref="thetag") as f:
|
||
|
assert f.read() == b"data00"
|
||
|
|
||
|
with fsspec.open("git://file2", path=d, ref="master") as f:
|
||
|
assert f.read() == b"data000"
|
||
|
|
||
|
with fsspec.open("git://file2", path=d, ref=None) as f:
|
||
|
assert f.read() == b"data000"
|
||
|
|
||
|
with fsspec.open("git://inner/file1", path=d, ref="abranch") as f:
|
||
|
assert f.read() == b"data3"
|
||
|
|
||
|
|
||
|
def test_url(repo):
|
||
|
d, sha = repo
|
||
|
fs, _, paths = fsspec.core.get_fs_token_paths(f"git://file1::file://{d}")
|
||
|
assert make_path_posix(d) in make_path_posix(fs.repo.path)
|
||
|
assert paths == ["file1"]
|
||
|
with fsspec.open(f"git://file1::file://{d}") as f:
|
||
|
assert f.read() == b"data00"
|
||
|
|
||
|
fs, _, paths = fsspec.core.get_fs_token_paths(f"git://{d}:master@file1")
|
||
|
assert make_path_posix(d) in make_path_posix(fs.repo.path)
|
||
|
assert paths == ["file1"]
|
||
|
with fsspec.open(f"git://{d}:master@file1") as f:
|
||
|
assert f.read() == b"data00"
|