Skip to content

Commit f3ed322

Browse files
committed
Revert "fs: detach from local filesystem (#24)"
This reverts commit 29d8341.
1 parent b449c86 commit f3ed322

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

scmrepo/fs.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import errno
22
import os
3-
import posixpath
43
from typing import (
54
TYPE_CHECKING,
65
Any,
@@ -32,6 +31,7 @@ def bytesio_len(obj: "BytesIO") -> Optional[int]:
3231

3332
class GitFileSystem(AbstractFileSystem):
3433
# pylint: disable=abstract-method
34+
sep = os.sep
3535
cachable = False
3636

3737
def __init__(
@@ -53,12 +53,20 @@ def __init__(
5353
resolved = resolver(scm, rev or "HEAD")
5454
tree_obj = scm.pygit2.get_tree_obj(rev=resolved)
5555
trie = GitTrie(tree_obj, resolved)
56+
path = scm.root_dir
57+
else:
58+
assert path
5659

5760
self.trie = trie
61+
self.root_dir = path
5862
self.rev = self.trie.rev
5963

6064
def _get_key(self, path: str) -> Tuple[str, ...]:
61-
relparts = path.split(self.sep)
65+
from scmrepo.utils import relpath
66+
67+
if os.path.isabs(path):
68+
path = relpath(path, self.root_dir)
69+
relparts = path.split(os.sep)
6270
if relparts == ["."]:
6371
return ()
6472
return tuple(relparts)
@@ -93,7 +101,7 @@ def info(self, path: str, **kwargs: Any) -> Dict[str, Any]:
93101
try:
94102
return {
95103
**self.trie.info(key),
96-
"name": path,
104+
"name": os.path.join(self.root_dir, self.sep.join(key)),
97105
}
98106
except KeyError:
99107
raise FileNotFoundError(
@@ -137,13 +145,15 @@ def walk( # pylint: disable=arguments-differ
137145

138146
key = self._get_key(top)
139147
for prefix, dirs, files in self.trie.walk(key, topdown=topdown):
140-
root = self.sep.join(prefix) if prefix else ""
148+
root = self.root_dir
141149

150+
if prefix:
151+
root = os.path.join(root, os.sep.join(prefix))
142152
if detail:
143153
yield (
144154
root,
145-
{d: self.info(posixpath.join(root, d)) for d in dirs},
146-
{f: self.info(posixpath.join(root, f)) for f in files},
155+
{d: self.info(os.path.join(root, d)) for d in dirs},
156+
{f: self.info(os.path.join(root, f)) for f in files},
147157
)
148158
else:
149159
yield root, dirs, files

tests/test_fs.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import os
2+
13
import pytest
24
from pytest_test_utils import TmpDir
35

@@ -32,15 +34,15 @@ def test_exists(tmp_dir: TmpDir, scm: Git):
3234
assert not fs.exists("foo")
3335
assert not fs.exists("тест")
3436
assert not fs.exists("data")
35-
assert not fs.exists("data/lorem")
37+
assert not fs.exists(os.path.join("data", "lorem"))
3638

3739
scm.add_commit(files, message="add")
3840

3941
fs = scm.get_fs("master")
4042
assert fs.exists("foo")
4143
assert fs.exists("тест")
4244
assert fs.exists("data")
43-
assert fs.exists("data/lorem")
45+
assert fs.exists(os.path.join("data", "lorem"))
4446
assert not fs.exists("non-existing-file")
4547

4648

@@ -73,7 +75,7 @@ def test_walk(tmp_dir: TmpDir, scm: Git):
7375
"data": {"lorem": "ipsum", "subdir": {"sub": "sub"}},
7476
}
7577
)
76-
scm.add_commit("data/subdir", message="add")
78+
scm.add_commit(os.path.join("data", "subdir"), message="add")
7779
fs = scm.get_fs("master")
7880

7981
def convert_to_sets(walk_results):
@@ -84,20 +86,22 @@ def convert_to_sets(walk_results):
8486

8587
assert convert_to_sets(fs.walk(".")) == convert_to_sets(
8688
[
87-
("", ["data"], []),
88-
("data", ["subdir"], []),
89+
(scm.root_dir, ["data"], []),
90+
(os.path.join(scm.root_dir, "data"), ["subdir"], []),
8991
(
90-
"data/subdir",
92+
os.path.join(scm.root_dir, "data", "subdir"),
9193
[],
9294
["sub"],
9395
),
9496
]
9597
)
9698

97-
assert convert_to_sets(fs.walk("data/subdir")) == convert_to_sets(
99+
assert convert_to_sets(
100+
fs.walk(os.path.join("data", "subdir"))
101+
) == convert_to_sets(
98102
[
99103
(
100-
"data/subdir",
104+
os.path.join(scm.root_dir, "data", "subdir"),
101105
[],
102106
["sub"],
103107
)
@@ -120,21 +124,21 @@ def test_ls(tmp_dir: TmpDir, scm: Git):
120124
assert fs.ls(".") == {
121125
"data": {
122126
"mode": 16384,
123-
"name": "data",
127+
"name": str(tmp_dir / "data"),
124128
"sha": "f5d6ac1955c85410b71bb6e35e4c57c54e2ad524",
125129
"size": 66,
126130
"type": "directory",
127131
},
128132
"foo": {
129133
"mode": 33188,
130-
"name": "foo",
134+
"name": str(tmp_dir / "foo"),
131135
"sha": "19102815663d23f8b75a47e7a01965dcdc96468c",
132136
"size": 3,
133137
"type": "file",
134138
},
135139
"тест": {
136140
"mode": 33188,
137-
"name": "тест",
141+
"name": str(tmp_dir / "тест"),
138142
"sha": "eeeba1738f4c12844163b89112070c6e57eb764e",
139143
"size": 16,
140144
"type": "file",

0 commit comments

Comments
 (0)