Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7343090
D4309.id15244.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
42 KB
Subscribers
None
D4309.id15244.diff
View Options
diff --git a/docs/design.md b/docs/design.md
--- a/docs/design.md
+++ b/docs/design.md
@@ -102,6 +102,9 @@
- `parent` (note the singular): present if and only if the current commit has a
single parent commit (which is the most common case). When present it is a
symlink pointing into `archive/` to the SWHID for the sole parent commit
+- `history`: a virtual directory containing all the parents commit until the
+root commit (entries are listed as symlinks with the SWHID as directory name,
+pointing into `archive/SWHID`).
- `meta.json`: metadata for the current node, as a symlink pointing to the
relevant `meta/<SWHID>.json` file
@@ -219,3 +222,12 @@
happen. For instance, when first opening a rev virtual directory a recursive
listing of all its ancestor can be retrieved from the remote backend and used to
recursively populate the parents cache for all ancestors.
+
+
+### History cache
+
+ rev SWHID → all parents SWHIDs
+
+The history cache map SWHIDs of type `rev` to a list of all their parent commits
+(until root commit). As the parents cache, the history cache is lazily populated
+and can be prefetched.
diff --git a/swh/fuse/cache.py b/swh/fuse/cache.py
--- a/swh/fuse/cache.py
+++ b/swh/fuse/cache.py
@@ -5,11 +5,13 @@
from abc import ABC
import json
+import logging
from pathlib import Path
-from typing import Any, AsyncGenerator, Dict, Optional
+from typing import Any, AsyncGenerator, Dict, List, Optional
import aiosqlite
+from swh.model.exceptions import ValidationError
from swh.model.identifiers import SWHID, parse_swhid
from swh.web.client.client import typify_json
@@ -38,13 +40,16 @@
async def __aenter__(self):
self.metadata = MetadataCache(self.cache_conf["metadata"])
self.blob = BlobCache(self.cache_conf["blob"])
+ self.history = HistoryCache(self.cache_conf["history"])
await self.metadata.__aenter__()
await self.blob.__aenter__()
+ await self.history.__aenter__()
return self
async def __aexit__(self, type=None, val=None, tb=None) -> None:
await self.metadata.__aexit__()
await self.blob.__aexit__()
+ await self.history.__aexit__()
async def get_cached_swhids(self) -> AsyncGenerator[SWHID, None]:
""" Return a list of all previously cached SWHID """
@@ -139,3 +144,37 @@
await self.conn.execute(
"insert into blob_cache values (?, ?)", (str(swhid), blob)
)
+
+
+class HistoryCache(AbstractCache):
+ """ The history cache map SWHIDs of type `rev` to a list of all their parent
+ commits (until root commit). """
+
+ async def __aenter__(self):
+ await super().__aenter__()
+ await self.conn.execute(
+ "create table if not exists history_cache (swhid, history)"
+ )
+ return self
+
+ async def get(self, swhid: SWHID) -> Optional[List[SWHID]]:
+ cursor = await self.conn.execute(
+ "select history from history_cache where swhid=?", (str(swhid),)
+ )
+ cache = await cursor.fetchone()
+ if not cache:
+ return None
+
+ history = []
+ for parent in cache[0].split("\n"):
+ try:
+ history.append(parse_swhid(parent))
+ except ValidationError:
+ logging.warning(f"Cannot parse object from history cache: {parent}")
+ return history
+
+ async def set(self, swhid: SWHID, history: str) -> None:
+ history = history.strip()
+ await self.conn.execute(
+ "insert into history_cache values (?, ?)", (str(swhid), history)
+ )
diff --git a/swh/fuse/cli.py b/swh/fuse/cli.py
--- a/swh/fuse/cli.py
+++ b/swh/fuse/cli.py
@@ -30,6 +30,7 @@
"cache": {
"metadata": {"path": CACHE_HOME_DIR / "swh/fuse/metadata.sqlite"},
"blob": {"path": CACHE_HOME_DIR / "swh/fuse/blob.sqlite"},
+ "history": {"path": CACHE_HOME_DIR / "swh/fuse/history.sqlite"},
},
"web-api": {
"url": "https://archive.softwareheritage.org/api/1",
@@ -194,5 +195,5 @@
pass
conf = ctx.obj["config"]
- for cache_name in ["blob", "metadata"]:
+ for cache_name in ["blob", "metadata", "history"]:
rm_cache(conf, cache_name)
diff --git a/swh/fuse/fs/artifact.py b/swh/fuse/fs/artifact.py
--- a/swh/fuse/fs/artifact.py
+++ b/swh/fuse/fs/artifact.py
@@ -139,6 +139,7 @@
- `parent` (note the singular): present if and only if the current commit
has at least one parent commit (which is the most common case). When
present it is a symlink pointing into `parents/1/`
+ - TODO: history
- `meta.json`: metadata for the current node, as a symlink pointing to the
relevant `meta/<SWHID>.json` file """
@@ -173,6 +174,13 @@
FuseSymlinkEntry, name="parent", target="parents/1/",
)
+ yield self.create_child(
+ RevisionHistory,
+ name="history",
+ mode=int(EntryMode.RDONLY_DIR),
+ history=await self.fuse.get_history(self.swhid),
+ )
+
@dataclass
class RevisionParents(FuseDirEntry):
@@ -190,6 +198,22 @@
)
+@dataclass
+class RevisionHistory(FuseDirEntry):
+ """ Revision virtual `history/` directory """
+
+ history: List[SWHID]
+
+ async def __aiter__(self) -> AsyncIterator[FuseEntry]:
+ root_path = self.get_relative_root_path()
+ for swhid in self.history:
+ yield self.create_child(
+ FuseSymlinkEntry,
+ name=str(swhid),
+ target=Path(root_path, f"archive/{swhid}"),
+ )
+
+
@dataclass
class Release(FuseDirEntry):
""" Software Heritage release artifact.
diff --git a/swh/fuse/fuse.py b/swh/fuse/fuse.py
--- a/swh/fuse/fuse.py
+++ b/swh/fuse/fuse.py
@@ -18,7 +18,7 @@
from swh.fuse.cache import FuseCache
from swh.fuse.fs.entry import FuseDirEntry, FuseEntry, FuseFileEntry, FuseSymlinkEntry
from swh.fuse.fs.mountpoint import Root
-from swh.model.identifiers import CONTENT, SWHID
+from swh.model.identifiers import CONTENT, REVISION, SWHID
from swh.web.client.client import WebAPIClient
@@ -76,7 +76,6 @@
return cache
try:
- # TODO: swh-graph API
typify = False # Get the raw JSON from the API
# TODO: async web API
loop = asyncio.get_event_loop()
@@ -112,6 +111,26 @@
logging.error(f"Cannot fetch blob for object {swhid}: {err}")
raise
+ async def get_history(self, swhid: SWHID) -> List[SWHID]:
+ if swhid.object_type != REVISION:
+ raise pyfuse3.FUSEError(errno.EINVAL)
+
+ cache = await self.cache.history.get(swhid)
+ if cache:
+ return cache
+
+ try:
+ # Use the swh-graph API to retrieve the full history very fast
+ call = f"graph/visit/nodes/{swhid}?edges=rev:rev"
+ loop = asyncio.get_event_loop()
+ history = await loop.run_in_executor(None, self.web_api._call, call)
+ await self.cache.history.set(swhid, history.text)
+ # Retrieve it from cache so it is correctly typed
+ return await self.cache.history.get(swhid)
+ except requests.HTTPError as err:
+ logging.error(f"Cannot fetch history for object {swhid}: {err}")
+ raise
+
async def get_attrs(self, entry: FuseEntry) -> pyfuse3.EntryAttributes:
""" Return entry attributes """
diff --git a/swh/fuse/tests/conftest.py b/swh/fuse/tests/conftest.py
--- a/swh/fuse/tests/conftest.py
+++ b/swh/fuse/tests/conftest.py
@@ -23,7 +23,7 @@
def web_api_mock(requests_mock):
for api_call, data in MOCK_ARCHIVE.items():
# Convert Python dict JSON into a string (only for non-raw API call)
- if not api_call.endswith("raw/"):
+ if not api_call.endswith("raw/") and not api_call.startswith("graph/"):
data = json.dumps(data)
requests_mock.get(f"{API_URL}/{api_call}", text=data)
return requests_mock
@@ -35,7 +35,11 @@
tmpfile = NamedTemporaryFile(suffix=".swh-fuse-test.yml")
config = {
- "cache": {"metadata": {"in-memory": True}, "blob": {"in-memory": True}},
+ "cache": {
+ "metadata": {"in-memory": True},
+ "blob": {"in-memory": True},
+ "history": {"in-memory": True},
+ },
"web-api": {"url": API_URL, "auth-token": None},
}
diff --git a/swh/fuse/tests/data/api_data.py b/swh/fuse/tests/data/api_data.py
--- a/swh/fuse/tests/data/api_data.py
+++ b/swh/fuse/tests/data/api_data.py
@@ -31,9 +31,9 @@
"length": 10084,
"status": "visible",
"checksums": {
- "sha256": "7152be0097b003d148f773ce0be0a695219c636f4f20073993335758c810166c",
- "sha1": "0d84ad5f5167010347a13cf0be95f47a3cb99dfa",
"blake2s256": "fe43b0ad08a9bf943a912f67b5e7d98e58fbd4ff318dcd9a1edaceceefe9ebca",
+ "sha1": "0d84ad5f5167010347a13cf0be95f47a3cb99dfa",
+ "sha256": "7152be0097b003d148f773ce0be0a695219c636f4f20073993335758c810166c",
"sha1_git": "61d3c9e1157203f0c4ed5165608d92294eaca808",
},
"data_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:61d3c9e1157203f0c4ed5165608d92294eaca808/raw/",
@@ -52,8 +52,8 @@
"status": "visible",
"length": 357,
"checksums": {
- "sha256": "59a397e1ac39dd858750476ebd621ad0b468e511c3bea56fb8b507849409bdde",
"sha1": "ce9cce2dad1505a8d35c229943925046d3a4cbc8",
+ "sha256": "59a397e1ac39dd858750476ebd621ad0b468e511c3bea56fb8b507849409bdde",
"sha1_git": "a7de7ce85593c140267bd3bafa3812859d8f259f",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:a7de7ce85593c140267bd3bafa3812859d8f259f/",
@@ -67,8 +67,8 @@
"status": "visible",
"length": 1054,
"checksums": {
- "sha256": "d0d262bc2f18bda49a434222ff508f8fe43da72b31b06138cb81b9d8fc6c471a",
"sha1": "874e94541299f36e7d45d5e60252cc360421d921",
+ "sha256": "d0d262bc2f18bda49a434222ff508f8fe43da72b31b06138cb81b9d8fc6c471a",
"sha1_git": "d9761ce40927ce92d29daa23b4496e04b9e97e4f",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:d9761ce40927ce92d29daa23b4496e04b9e97e4f/",
@@ -82,8 +82,8 @@
"status": "visible",
"length": 1638,
"checksums": {
- "sha256": "429734af1b42ca1d4e7b8112a9fbcb0d13ec8a89cc92864bddd6a4036a68ead9",
"sha1": "2728096a9234a05c2e246dbf437cc99969a7ed73",
+ "sha256": "429734af1b42ca1d4e7b8112a9fbcb0d13ec8a89cc92864bddd6a4036a68ead9",
"sha1_git": "003e50d0788e4c6efb0d4315556a8c1ce0cf73ef",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:003e50d0788e4c6efb0d4315556a8c1ce0cf73ef/",
@@ -97,8 +97,8 @@
"status": "visible",
"length": 16168,
"checksums": {
- "sha256": "8b0443f512c8540b2942bfad7b2057bf05d3718c8d00e4e04099575a1b3cba1d",
"sha1": "272e26eb45fbe4d57d2b3ef771b728aa37d45f04",
+ "sha256": "8b0443f512c8540b2942bfad7b2057bf05d3718c8d00e4e04099575a1b3cba1d",
"sha1_git": "6ab6be26cf101388162fbec2a942d5352ecea49a",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:6ab6be26cf101388162fbec2a942d5352ecea49a/",
@@ -112,8 +112,8 @@
"status": "visible",
"length": 131,
"checksums": {
- "sha256": "3c4d1c4de2e6991695f5dc495f7530ecb188dfafdb1f47a1323ce7159987accd",
"sha1": "8242335087079c2fafb18c1f6f89bcdb8f6ba647",
+ "sha256": "3c4d1c4de2e6991695f5dc495f7530ecb188dfafdb1f47a1323ce7159987accd",
"sha1_git": "e3708bc485399fd42b32c6a1c24491771afa1a04",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:e3708bc485399fd42b32c6a1c24491771afa1a04/",
@@ -127,8 +127,8 @@
"status": "visible",
"length": 21302,
"checksums": {
- "sha256": "0ce1302f56e93ac9cee754253690d5400f907e80d63d175e603ef26a537c5131",
"sha1": "3439b8ccdf39af7b95a646c6ae3fa18fe86e6420",
+ "sha256": "0ce1302f56e93ac9cee754253690d5400f907e80d63d175e603ef26a537c5131",
"sha1_git": "fc8ca5d07b21280c575477457b8e4e3e953b26b4",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:fc8ca5d07b21280c575477457b8e4e3e953b26b4/",
@@ -142,8 +142,8 @@
"status": "visible",
"length": 9322,
"checksums": {
- "sha256": "401266ab45019fe25d501eb10f11b85140ecf54a739fc1e3d26800ed276f899a",
"sha1": "9fa123623c5ecf1fa171c3a211c41dc1b4767fe8",
+ "sha256": "401266ab45019fe25d501eb10f11b85140ecf54a739fc1e3d26800ed276f899a",
"sha1_git": "dc9abf84b8e5a4d3b6ab5472883f0997fa0454cc",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:dc9abf84b8e5a4d3b6ab5472883f0997fa0454cc/",
@@ -157,8 +157,8 @@
"status": "visible",
"length": 116575,
"checksums": {
- "sha256": "8a0f9f9557435540a797032ae005fa40cae933cf906730bf95cf1d12e850e0a0",
"sha1": "cb30c3049af7a34291af1fff80ecb91f8728879a",
+ "sha256": "8a0f9f9557435540a797032ae005fa40cae933cf906730bf95cf1d12e850e0a0",
"sha1_git": "80c90243e5db7130efa10f96e19fb65a9cbcf140",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:80c90243e5db7130efa10f96e19fb65a9cbcf140/",
@@ -172,8 +172,8 @@
"status": "visible",
"length": 2436,
"checksums": {
- "sha256": "5eefbe2e4fad05f80b63450a764b646dd3c691376cbe8aaf7ef68b9911ea5704",
"sha1": "037cc780fa9836ec344fe02b47ab5c3642fe26b1",
+ "sha256": "5eefbe2e4fad05f80b63450a764b646dd3c691376cbe8aaf7ef68b9911ea5704",
"sha1_git": "9d5c27b96df5d435daaded1ece44d1c8b6b613c1",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:9d5c27b96df5d435daaded1ece44d1c8b6b613c1/",
@@ -187,8 +187,8 @@
"status": "visible",
"length": 9723,
"checksums": {
- "sha256": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
"sha1": "6e5c4711bcae04967d7f5b5e01cf56ae03bebe7a",
+ "sha256": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
"sha1_git": "1b5ec8b78e237b5c3b3d812a7c0a6589d0f7161d",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:1b5ec8b78e237b5c3b3d812a7c0a6589d0f7161d/",
@@ -202,8 +202,8 @@
"status": "visible",
"length": 1023,
"checksums": {
- "sha256": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
"sha1": "ce3a2603094e799f42ce99c40941544dfcc5c4a5",
+ "sha256": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
"sha1_git": "31aa79387f27e730e33d871925e152e35e428031",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:31aa79387f27e730e33d871925e152e35e428031/",
@@ -217,8 +217,8 @@
"status": "visible",
"length": 10084,
"checksums": {
- "sha256": "7152be0097b003d148f773ce0be0a695219c636f4f20073993335758c810166c",
"sha1": "0d84ad5f5167010347a13cf0be95f47a3cb99dfa",
+ "sha256": "7152be0097b003d148f773ce0be0a695219c636f4f20073993335758c810166c",
"sha1_git": "61d3c9e1157203f0c4ed5165608d92294eaca808",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:61d3c9e1157203f0c4ed5165608d92294eaca808/",
@@ -232,8 +232,8 @@
"status": "visible",
"length": 436110,
"checksums": {
- "sha256": "9efd0b82142e37f24948d185a359c84d57c8894ef32480a98e963c5076400f7f",
"sha1": "971916d3e574a3b1caa332e144d3cd85d396aa39",
+ "sha256": "9efd0b82142e37f24948d185a359c84d57c8894ef32480a98e963c5076400f7f",
"sha1_git": "77d0bbe57912bed5a90c2f1d3628eb7bdcab0dd8",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:77d0bbe57912bed5a90c2f1d3628eb7bdcab0dd8/",
@@ -247,8 +247,8 @@
"status": "visible",
"length": 22148,
"checksums": {
- "sha256": "f77840688189e2a3fb1f7921886e763382d7c65b7b044bb4d92f21957c7773e2",
"sha1": "604c62c6a08002c18795f0e3c70bdc454ad8889c",
+ "sha256": "f77840688189e2a3fb1f7921886e763382d7c65b7b044bb4d92f21957c7773e2",
"sha1_git": "c9e17337ee23f801857093ec1237bbb833ae17b3",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:c9e17337ee23f801857093ec1237bbb833ae17b3/",
@@ -262,8 +262,8 @@
"status": "visible",
"length": 275,
"checksums": {
- "sha256": "5f6e26a0f2993b96749fce11791631e8b0085f344f8c135b710e182c4d6dd420",
"sha1": "f6a766df481855359c1dac80c0262a5e6c3f3aab",
+ "sha256": "5f6e26a0f2993b96749fce11791631e8b0085f344f8c135b710e182c4d6dd420",
"sha1_git": "eeb8d081d34549f5ca2b19f703bbb4e547264e46",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:eeb8d081d34549f5ca2b19f703bbb4e547264e46/",
@@ -277,8 +277,8 @@
"status": "visible",
"length": 1014,
"checksums": {
- "sha256": "37bcf3d674319038e17f9d607a5df81b93ea2b96408db43ba9920c6bbafad47a",
"sha1": "b778b5d9c139074d0eba57486419d2513af537ec",
+ "sha256": "37bcf3d674319038e17f9d607a5df81b93ea2b96408db43ba9920c6bbafad47a",
"sha1_git": "73f8cc1ff68c68bbbbfe6216f4b0f00626701672",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:73f8cc1ff68c68bbbbfe6216f4b0f00626701672/",
@@ -301,8 +301,8 @@
"status": "visible",
"length": 971,
"checksums": {
- "sha256": "f405f6325384e99729cc883ff871512f1be4829259059d2d59a7b47e3062ef90",
"sha1": "07d3df8565a55d2ddf1502b7fb0b173d128e3fda",
+ "sha256": "f405f6325384e99729cc883ff871512f1be4829259059d2d59a7b47e3062ef90",
"sha1_git": "7ece7f977ce2a39b76c002105aacb1598885a36a",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:7ece7f977ce2a39b76c002105aacb1598885a36a/",
@@ -316,8 +316,8 @@
"status": "visible",
"length": 270,
"checksums": {
- "sha256": "3573a0e5a4def372ad5800b3f76aa4163b60bce4596fac892de737e409380baf",
"sha1": "6eb663ee7ac8d3849139dca2e60c00f2935915eb",
+ "sha256": "3573a0e5a4def372ad5800b3f76aa4163b60bce4596fac892de737e409380baf",
"sha1_git": "7973730ef177cd600aaf4baebe1b40a81ed1b085",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:7973730ef177cd600aaf4baebe1b40a81ed1b085/",
@@ -342,8 +342,8 @@
"status": "visible",
"length": 92,
"checksums": {
- "sha256": "3cfb6483c2ff498754aa2cf9ef41347cc5fe41c7753bc74c1db5f3160d07d0b4",
"sha1": "a5f982a0831d5c563610de8d3f82ab3a574e6f97",
+ "sha256": "3cfb6483c2ff498754aa2cf9ef41347cc5fe41c7753bc74c1db5f3160d07d0b4",
"sha1_git": "f4898dc676530356e86b287c42018a2ad4cd5699",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:f4898dc676530356e86b287c42018a2ad4cd5699/",
@@ -357,8 +357,8 @@
"status": "visible",
"length": 94,
"checksums": {
- "sha256": "10e8220d761c9ff87954417effad9c6c381739732e12e7975129c845beda6721",
"sha1": "609a26fbd8a91083d7fb551d5e1096ed7e95987d",
+ "sha256": "10e8220d761c9ff87954417effad9c6c381739732e12e7975129c845beda6721",
"sha1_git": "920c6edc389fe8aafdd17f582df8af6aed80cf2e",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:920c6edc389fe8aafdd17f582df8af6aed80cf2e/",
@@ -372,8 +372,8 @@
"status": "visible",
"length": 93,
"checksums": {
- "sha256": "0d402aa08c59e2f134f0bc6696c4d81cbda379772a8b4a4f959270ef1713ed42",
"sha1": "dd14bfdaf0b97f433c6a107942b4bfb3f9080a86",
+ "sha256": "0d402aa08c59e2f134f0bc6696c4d81cbda379772a8b4a4f959270ef1713ed42",
"sha1_git": "b44de8e2cb32d3cd72213bcb4228870f1edcf0dc",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:b44de8e2cb32d3cd72213bcb4228870f1edcf0dc/",
@@ -405,8 +405,8 @@
"status": "visible",
"length": 72,
"checksums": {
- "sha256": "6ce1630d627e002c01e21bb1c14994cf814ebe00fab6ca6e97d4c051a9fccc83",
"sha1": "f054d111eeef94a0337a06e2d2b81b9a276cdab3",
+ "sha256": "6ce1630d627e002c01e21bb1c14994cf814ebe00fab6ca6e97d4c051a9fccc83",
"sha1_git": "8f881657bdc1a1965140ab4941436a06bee2f3ba",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:8f881657bdc1a1965140ab4941436a06bee2f3ba/",
@@ -420,8 +420,8 @@
"status": "visible",
"length": 362,
"checksums": {
- "sha256": "93aa2c5f3a3a890581870a66d6233b5fdb181901694c8f95c8155ed621ada30c",
"sha1": "c255bb1015b2da689f615cd4b8dd0a8c04eab4fd",
+ "sha256": "93aa2c5f3a3a890581870a66d6233b5fdb181901694c8f95c8155ed621ada30c",
"sha1_git": "77e151235e822d4281d365d6908d13bf8073a231",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:77e151235e822d4281d365d6908d13bf8073a231/",
@@ -435,8 +435,8 @@
"status": "visible",
"length": 265,
"checksums": {
- "sha256": "7fea658f27efcb8eea07748e98b2fbc80523ff5c2aadd39556f65c7ccd9da4bc",
"sha1": "1e450161ad277053fe76c03a209de22b59a4b534",
+ "sha256": "7fea658f27efcb8eea07748e98b2fbc80523ff5c2aadd39556f65c7ccd9da4bc",
"sha1_git": "604a65dc8a9b98cd797e6555d1802a49c6067cef",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:604a65dc8a9b98cd797e6555d1802a49c6067cef/",
@@ -450,8 +450,8 @@
"status": "visible",
"length": 267,
"checksums": {
- "sha256": "da97f73a003c3a658500547e8a97be80b0481c5aa753681f8391e9fd24a28349",
"sha1": "26b33551387b7defe83d0ec2f69e70bc2df5a4df",
+ "sha256": "da97f73a003c3a658500547e8a97be80b0481c5aa753681f8391e9fd24a28349",
"sha1_git": "4501d74073e900846f0bcf13196bfca39f6e9484",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:4501d74073e900846f0bcf13196bfca39f6e9484/",
@@ -465,8 +465,8 @@
"status": "visible",
"length": 139,
"checksums": {
- "sha256": "5aa7054e3c2238dc093c46547604beece9b91e186364b1fe2bd5029a9676643b",
"sha1": "a5481e1cb75eed8d90663e33d3ac6d9c4ac47c56",
+ "sha256": "5aa7054e3c2238dc093c46547604beece9b91e186364b1fe2bd5029a9676643b",
"sha1_git": "85badc11d64f03de8b2fd9262b1fb2cf0470cbcb",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:85badc11d64f03de8b2fd9262b1fb2cf0470cbcb/",
@@ -480,8 +480,8 @@
"status": "visible",
"length": 126,
"checksums": {
- "sha256": "17b521b83aef7183c2c22841ebf2ac1e2f5a42712de7467e859dc4c7b752fbb1",
"sha1": "0212ebfaed13a7847a49588c6197d02f7198efcc",
+ "sha256": "17b521b83aef7183c2c22841ebf2ac1e2f5a42712de7467e859dc4c7b752fbb1",
"sha1_git": "fd71d3e3c8e79e1030039dc17f587cda6018df3a",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:fd71d3e3c8e79e1030039dc17f587cda6018df3a/",
@@ -495,8 +495,8 @@
"status": "visible",
"length": 132,
"checksums": {
- "sha256": "aade247c7f69aba4248450f5f1a8be77ae87c94fc73e597d1edfe134df911214",
"sha1": "88e47f1c32dd2df8d338ccfa378e056ac5979dfd",
+ "sha256": "aade247c7f69aba4248450f5f1a8be77ae87c94fc73e597d1edfe134df911214",
"sha1_git": "1130a10bd1c5540c1f3f5be2a0da56fda1acb444",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:1130a10bd1c5540c1f3f5be2a0da56fda1acb444/",
@@ -510,8 +510,8 @@
"status": "visible",
"length": 115,
"checksums": {
- "sha256": "194a44f13a9806027e6f39fdd3cf2d32cea9591ebf8eed88eac76bfd70a76c17",
"sha1": "9ba9912b177cb33b2a42651780fdb597e1ded091",
+ "sha256": "194a44f13a9806027e6f39fdd3cf2d32cea9591ebf8eed88eac76bfd70a76c17",
"sha1_git": "228cb3c624f8958abc5526886745f03dbf912fac",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:228cb3c624f8958abc5526886745f03dbf912fac/",
@@ -525,8 +525,8 @@
"status": "visible",
"length": 143,
"checksums": {
- "sha256": "df1ea1cff3fe6082222840754dbb440980cd9cf04d85e5287d9f23d5db5ea863",
"sha1": "3c1ec7447489a516cd4d9e1389073e1862d5ff22",
+ "sha256": "df1ea1cff3fe6082222840754dbb440980cd9cf04d85e5287d9f23d5db5ea863",
"sha1_git": "767dafc5baf9208e3927680947fe3da83c493201",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:767dafc5baf9208e3927680947fe3da83c493201/",
@@ -540,8 +540,8 @@
"status": "visible",
"length": 135,
"checksums": {
- "sha256": "b8b132edf8d80694638dbb85f84ca8a098103618fc92ca1a2c2f06f45cdbd955",
"sha1": "7a5ecf2d63691280e4fb433ed6dc2c9335d3b917",
+ "sha256": "b8b132edf8d80694638dbb85f84ca8a098103618fc92ca1a2c2f06f45cdbd955",
"sha1_git": "6c511548789b73656a9303f5dbf153274d62f4de",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:6c511548789b73656a9303f5dbf153274d62f4de/",
@@ -555,8 +555,8 @@
"status": "visible",
"length": 293,
"checksums": {
- "sha256": "9eb9ba201ac0a4c1347db17e89cdbdfdf7e682cf9ecb26dc5aa7d86454facfd2",
"sha1": "6abd35d1edcb1569ce8fa82c87b71ecef5ba49e2",
+ "sha256": "9eb9ba201ac0a4c1347db17e89cdbdfdf7e682cf9ecb26dc5aa7d86454facfd2",
"sha1_git": "bafdb2fe0bbc3790867d1e8a117226f033c298ae",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:bafdb2fe0bbc3790867d1e8a117226f033c298ae/",
@@ -570,8 +570,8 @@
"status": "visible",
"length": 120,
"checksums": {
- "sha256": "4a9a99fe8de30d497d3995b2767ded900449a56153da144bc5d78eec30262d79",
"sha1": "d70b2391cc30674d1b0d32f69a02f87ce59d961f",
+ "sha256": "4a9a99fe8de30d497d3995b2767ded900449a56153da144bc5d78eec30262d79",
"sha1_git": "d030614489bccfd3ad87f3619003fe43ed65a7f6",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:d030614489bccfd3ad87f3619003fe43ed65a7f6/",
@@ -585,8 +585,8 @@
"status": "visible",
"length": 139,
"checksums": {
- "sha256": "cacfb85fcf58614e40a91b112ae7e6d7a3132a4d5d43c24d2163a03a183b7eb1",
"sha1": "0c649ef00ae61445fde8f6509b82b1b3998e14cf",
+ "sha256": "cacfb85fcf58614e40a91b112ae7e6d7a3132a4d5d43c24d2163a03a183b7eb1",
"sha1_git": "21217bf54d7693e50a4777601536f2fca935edc0",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:21217bf54d7693e50a4777601536f2fca935edc0/",
@@ -600,8 +600,8 @@
"status": "visible",
"length": 125,
"checksums": {
- "sha256": "61af0dc860ae011b5a4e8eba990d3bc581ace146736247b8e450f4c663f664cd",
"sha1": "d85d294a9ed8d11d31e2e25b6272e8e6e3058e00",
+ "sha256": "61af0dc860ae011b5a4e8eba990d3bc581ace146736247b8e450f4c663f664cd",
"sha1_git": "28d9fb48b73e74485f6a8b930428a7fbb6db81ef",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:28d9fb48b73e74485f6a8b930428a7fbb6db81ef/",
@@ -615,8 +615,8 @@
"status": "visible",
"length": 134,
"checksums": {
- "sha256": "4a5e663d343fcbd8fb69bbbd4a1b0566862cea079c7517cafdb261b775e6195a",
"sha1": "5122f12a66652ebc5d2357a25695590eb6a60b4f",
+ "sha256": "4a5e663d343fcbd8fb69bbbd4a1b0566862cea079c7517cafdb261b775e6195a",
"sha1_git": "3c1a82d0174494f9c276eca6c20801fc2fdb1a6b",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:3c1a82d0174494f9c276eca6c20801fc2fdb1a6b/",
@@ -630,8 +630,8 @@
"status": "visible",
"length": 108,
"checksums": {
- "sha256": "b25c83b21ca63b3c896ba37452d5b1f1b6d159b4458ec53f72972d56ab19de3f",
"sha1": "cb4ff4bf5f73aabeb72b51fae345a355d047381c",
+ "sha256": "b25c83b21ca63b3c896ba37452d5b1f1b6d159b4458ec53f72972d56ab19de3f",
"sha1_git": "b9e70e7cfd7e06f27160657e9bb509011b5bf89a",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:b9e70e7cfd7e06f27160657e9bb509011b5bf89a/",
@@ -645,8 +645,8 @@
"status": "visible",
"length": 4366,
"checksums": {
- "sha256": "353459533ed0b76facfb75b57f690d754360b9cd8d7bce8195191d3e5d40ac1b",
"sha1": "cede6ea0203a41976e3a729426e94c769d8af9ea",
+ "sha256": "353459533ed0b76facfb75b57f690d754360b9cd8d7bce8195191d3e5d40ac1b",
"sha1_git": "0a2a80e8fd6e2b4d62dcf9a93f2dc5983b0da249",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:0a2a80e8fd6e2b4d62dcf9a93f2dc5983b0da249/",
@@ -660,8 +660,8 @@
"status": "visible",
"length": 150,
"checksums": {
- "sha256": "0d48afe88e4ff6e88b7b09b35f02f368ca29a80a8a823be9051746e8dc279059",
"sha1": "e51eb22fb0afc96a6cda88204bd37ef363518d4c",
+ "sha256": "0d48afe88e4ff6e88b7b09b35f02f368ca29a80a8a823be9051746e8dc279059",
"sha1_git": "48712d8d49b55f3f70c5134247dfc54ce46744e2",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:48712d8d49b55f3f70c5134247dfc54ce46744e2/",
@@ -693,8 +693,8 @@
"status": "visible",
"length": 2639,
"checksums": {
- "sha256": "3e12811e42249800a98e69e31d1b9ed7941749981f77f618f97c707a5c24b7e8",
"sha1": "9656218548d47dda0b43ad16f617914a283ae804",
+ "sha256": "3e12811e42249800a98e69e31d1b9ed7941749981f77f618f97c707a5c24b7e8",
"sha1_git": "d26fcfc0168d7676138a74ac2ef336b115268b30",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:d26fcfc0168d7676138a74ac2ef336b115268b30/",
@@ -708,8 +708,8 @@
"status": "visible",
"length": 118,
"checksums": {
- "sha256": "254be837de875bb8bf0e650ad1c94090eebf52c754e174e9c3fade6867263a88",
"sha1": "05a24674274e70062bdc0088a31f3126a0f898fc",
+ "sha256": "254be837de875bb8bf0e650ad1c94090eebf52c754e174e9c3fade6867263a88",
"sha1_git": "33e3860c2a4340ba428e789a980bafeeb7982b02",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:33e3860c2a4340ba428e789a980bafeeb7982b02/",
@@ -732,8 +732,8 @@
"status": "visible",
"length": 137,
"checksums": {
- "sha256": "f7e15476ea21caf0a81e74a7e2389e88eaa8e177268924b04b7619dc9ef92f0f",
"sha1": "4b7736799c39dc3636fe0c8d4494bfef774f8e79",
+ "sha256": "f7e15476ea21caf0a81e74a7e2389e88eaa8e177268924b04b7619dc9ef92f0f",
"sha1_git": "fdeea17ed1124bde8b8453bd4c6b0a6035079074",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:fdeea17ed1124bde8b8453bd4c6b0a6035079074/",
@@ -747,8 +747,8 @@
"status": "visible",
"length": 762,
"checksums": {
- "sha256": "1d5fc8b3d3dc393ba1e67b4b0b267ec4b14357fb6c3990ace2e0f03c4aa7c719",
"sha1": "0590cfcec734441c5d9f1ea46f445c80becd27c6",
+ "sha256": "1d5fc8b3d3dc393ba1e67b4b0b267ec4b14357fb6c3990ace2e0f03c4aa7c719",
"sha1_git": "61ee12739fb37426603b65e857060f03aefb3434",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:61ee12739fb37426603b65e857060f03aefb3434/",
@@ -771,8 +771,8 @@
"status": "visible",
"length": 7604,
"checksums": {
- "sha256": "029da15998da9bf0bd9c6ea190cdfbf3a3563ae18bfe50674efd99eca62a3a85",
"sha1": "6e86ec1077ef0c268a373b42ecf173de45e4891f",
+ "sha256": "029da15998da9bf0bd9c6ea190cdfbf3a3563ae18bfe50674efd99eca62a3a85",
"sha1_git": "a92d4ff54db837a6e64dd260d66b3bc5e2e60f43",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:a92d4ff54db837a6e64dd260d66b3bc5e2e60f43/",
@@ -786,8 +786,8 @@
"status": "visible",
"length": 108,
"checksums": {
- "sha256": "c474313aabfbc668f205eaf146c31bc47470fb322d1fd96008ac8ddbb585273f",
"sha1": "014d60b4041b6135c2e2c6a2c47d99334de473f6",
+ "sha256": "c474313aabfbc668f205eaf146c31bc47470fb322d1fd96008ac8ddbb585273f",
"sha1_git": "5008b228c5c85fe04df289f4180a83fd4f5ce7b9",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:5008b228c5c85fe04df289f4180a83fd4f5ce7b9/",
@@ -819,8 +819,8 @@
"status": "visible",
"length": 5192,
"checksums": {
- "sha256": "0898345d1f94b6b15f324a1c9afa4df85fc45fb05960879ac61e9a9ac0b47835",
"sha1": "e584054db3a809e089d84b1680d78cadb7eacb1f",
+ "sha256": "0898345d1f94b6b15f324a1c9afa4df85fc45fb05960879ac61e9a9ac0b47835",
"sha1_git": "dfd8e9db3c5c9cacb236c7d1cacc84791649920f",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:dfd8e9db3c5c9cacb236c7d1cacc84791649920f/",
@@ -843,8 +843,8 @@
"status": "visible",
"length": 84,
"checksums": {
- "sha256": "5d5ebec01e6606b7f0f8ff2fac793a8b870847b715d069c1ff88b81ddb1ecdc1",
"sha1": "85f5f5a92b0904bcfcf0eb4b54dae893b2b17d52",
+ "sha256": "5d5ebec01e6606b7f0f8ff2fac793a8b870847b715d069c1ff88b81ddb1ecdc1",
"sha1_git": "d4a25efec17f6895baeed32178ca69baad319159",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:d4a25efec17f6895baeed32178ca69baad319159/",
@@ -858,8 +858,8 @@
"status": "visible",
"length": 177,
"checksums": {
- "sha256": "6d2a400c36e46a97acadeecac8103ef603cd1bf5533df453cf519d4a4a769193",
"sha1": "98bbf3d1c8e78e1ab161de9a5385499668d516f1",
+ "sha256": "6d2a400c36e46a97acadeecac8103ef603cd1bf5533df453cf519d4a4a769193",
"sha1_git": "320283f31b51feb3e3fd24a632195fcb42a5181a",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:320283f31b51feb3e3fd24a632195fcb42a5181a/",
@@ -882,8 +882,8 @@
"status": "visible",
"length": 342,
"checksums": {
- "sha256": "5c43d83bf45d7a0e8e10f2f66730d8e8a737c77668e1f7a522444d46e613efcf",
"sha1": "4b4cfe57c5e1aab39eac235699a14dded2c565b0",
+ "sha256": "5c43d83bf45d7a0e8e10f2f66730d8e8a737c77668e1f7a522444d46e613efcf",
"sha1_git": "7215e4f13c9bb4d914032eda4192430e69c51a41",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:7215e4f13c9bb4d914032eda4192430e69c51a41/",
@@ -1229,9 +1229,9 @@
"length": 5279,
"status": "visible",
"checksums": {
- "sha256": "d3923bc07a944321af5eb781c1ae7b86b1f8c07385dce3adad1eee052f2cda47",
- "sha1": "c640e23feb6f93b02878de5b02d70e87388a2bd2",
"blake2s256": "6f515bb07318b5730f7c2d0aa4dbe24fe1b65ed4f38cf3500a8ffbdbb1ea3cfe",
+ "sha1": "c640e23feb6f93b02878de5b02d70e87388a2bd2",
+ "sha256": "d3923bc07a944321af5eb781c1ae7b86b1f8c07385dce3adad1eee052f2cda47",
"sha1_git": "be5effea679c057aec2bb020f0241b1d1d660840",
},
"data_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:be5effea679c057aec2bb020f0241b1d1d660840/raw/",
@@ -1274,8 +1274,8 @@
"status": "visible",
"length": 27,
"checksums": {
- "sha256": "28d6e007e8ba8de537247c2e4dce5ea081919da9eabd2a1cd580afd02425275b",
"sha1": "e757103bdac5b2be6e8f28b47595862dd3d36b2b",
+ "sha256": "28d6e007e8ba8de537247c2e4dce5ea081919da9eabd2a1cd580afd02425275b",
"sha1_git": "53ea710b37aef348b3e09478b18e2bfd180efb43",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:53ea710b37aef348b3e09478b18e2bfd180efb43/",
@@ -1298,8 +1298,8 @@
"status": "visible",
"length": 1216,
"checksums": {
- "sha256": "e6ab5dc18e4ca7612439c28a991d5a5c09ed2006a5efa2e9034ced6ee995cf1e",
"sha1": "37a14e4c123ae1d5006665ef867f84bc23ca2fe8",
+ "sha256": "e6ab5dc18e4ca7612439c28a991d5a5c09ed2006a5efa2e9034ced6ee995cf1e",
"sha1_git": "5ddf82d3f5330bad8c830ac6b21bab2e912bee6e",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:5ddf82d3f5330bad8c830ac6b21bab2e912bee6e/",
@@ -1313,8 +1313,8 @@
"status": "visible",
"length": 915,
"checksums": {
- "sha256": "c63c6cbe41d8fc6fcc3401f0d4d993e42a7ae873dd97fda9dc4cfc2132d61c03",
"sha1": "bf83eda0827a970c3cccc9d3ba681c497b1108e9",
+ "sha256": "c63c6cbe41d8fc6fcc3401f0d4d993e42a7ae873dd97fda9dc4cfc2132d61c03",
"sha1_git": "d8d2804032211fec42ec197827b049d5dea40ea7",
},
"target_url": "https://archive.softwareheritage.org/api/1/content/sha1_git:d8d2804032211fec42ec197827b049d5dea40ea7/",
@@ -1531,4 +1531,6 @@
"history_url": "https://archive.softwareheritage.org/api/1/revision/430a9fd4c797c50cea26157141b2408073b2ed91/log/",
"directory_url": "https://archive.softwareheritage.org/api/1/directory/1ac29db0e7280af41064676569a96d1f88ccfa96/",
},
+ "graph/visit/nodes/swh:1:rev:b8cedc00407a4c56a3bda1ed605c6fc166655447": "swh:1:rev:b08d07143d2b61777d341f8658281adc0f2ac809\nswh:1:rev:133f659766c60ff7a33288ae6f33b0c272792f57",
+ "graph/visit/nodes/swh:1:rev:430a9fd4c797c50cea26157141b2408073b2ed91": "swh:1:rev:d03456183e85fe7bd465bbe7c8f67885a2528444\nswh:1:rev:3430532a8ee8fd5a7f47647c8c29403384647095",
}
diff --git a/swh/fuse/tests/data/gen-api-data.py b/swh/fuse/tests/data/gen-api-data.py
--- a/swh/fuse/tests/data/gen-api-data.py
+++ b/swh/fuse/tests/data/gen-api-data.py
@@ -11,7 +11,7 @@
import requests
-from swh.fuse.tests.data.config import ALL_ENTRIES
+from swh.fuse.tests.data.config import ALL_ENTRIES, ROOT_REV, ROOT_SNP_MASTER_BRANCH
from swh.model.identifiers import (
CONTENT,
DIRECTORY,
@@ -90,6 +90,18 @@
swhid = parse_swhid(entry)
generate_archive_data(swhid, recursive=True)
+# XXX: temporary fix, this should be retrieved from the public archive but at
+# the moment the /graph API is only for authorized accounts
+# TODO: pick a revision with very few parents and put all history
+MOCK_ARCHIVE[
+ f"graph/visit/nodes/{ROOT_REV}"
+] = """swh:1:rev:b08d07143d2b61777d341f8658281adc0f2ac809
+swh:1:rev:133f659766c60ff7a33288ae6f33b0c272792f57"""
+MOCK_ARCHIVE[
+ f"graph/visit/nodes/{ROOT_SNP_MASTER_BRANCH}"
+] = """swh:1:rev:d03456183e85fe7bd465bbe7c8f67885a2528444
+swh:1:rev:3430532a8ee8fd5a7f47647c8c29403384647095"""
+
print("# GENERATED FILE, DO NOT EDIT.")
print("# Run './gen-api-data.py > api_data.py' instead.")
print("# flake8: noqa")
diff --git a/swh/fuse/tests/test_release.py b/swh/fuse/tests/test_release.py
--- a/swh/fuse/tests/test_release.py
+++ b/swh/fuse/tests/test_release.py
@@ -20,7 +20,7 @@
def test_access_rev_target(fuse_mntdir):
target_path = fuse_mntdir / "archive" / ROOT_REL / "target"
- expected = ["meta.json", "root", "parent", "parents"]
+ expected = ["meta.json", "root", "parent", "parents", "history"]
actual = os.listdir(target_path)
assert set(actual) == set(expected)
diff --git a/swh/fuse/tests/test_snapshot.py b/swh/fuse/tests/test_snapshot.py
--- a/swh/fuse/tests/test_snapshot.py
+++ b/swh/fuse/tests/test_snapshot.py
@@ -17,6 +17,6 @@
def test_access_rev_target(fuse_mntdir):
branch_name = urllib.parse.quote_plus("refs/heads/master")
dir_path = fuse_mntdir / "archive" / ROOT_SNP / branch_name
- expected = ["meta.json", "root", "parent", "parents"]
+ expected = ["meta.json", "root", "parent", "parents", "history"]
actual = os.listdir(dir_path)
assert set(actual) == set(expected)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mar 17 2025, 7:18 PM (7 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3234968
Attached To
D4309: Add flat commit view in a history/ virtual dir
Event Timeline
Log In to Comment