Page MenuHomeSoftware Heritage

D6019.diff
No OneTemporary

D6019.diff

diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py
--- a/swh/model/identifiers.py
+++ b/swh/model/identifiers.py
@@ -857,6 +857,7 @@
```
extid_type $StrWithoutSpaces
+ [extid_version $Str]
extid $Bytes
target $CoreSwhid
```
@@ -866,6 +867,8 @@
Newlines in $Bytes are escaped as with other git fields, ie. by adding a
space after them.
+ The extid_version line is only generated if the version is non-zero.
+
Returns:
str: the intrinsic identifier for `extid`
@@ -873,9 +876,14 @@
headers = [
(b"extid_type", extid["extid_type"].encode("ascii")),
- (b"extid", extid["extid"]),
- (b"target", str(extid["target"]).encode("ascii")),
]
+ extid_version = extid.get("extid_version", 0)
+ if extid_version != 0:
+ headers.append((b"extid_version", str(extid_version).encode("ascii")))
+
+ headers.extend(
+ [(b"extid", extid["extid"]), (b"target", str(extid["target"]).encode("ascii")),]
+ )
git_object = format_git_object_from_headers("extid", headers)
return hashlib.new("sha1", git_object).hexdigest()
diff --git a/swh/model/model.py b/swh/model/model.py
--- a/swh/model/model.py
+++ b/swh/model/model.py
@@ -1133,6 +1133,7 @@
extid_type = attr.ib(type=str, validator=type_validator())
extid = attr.ib(type=bytes, validator=type_validator())
target = attr.ib(type=CoreSWHID, validator=type_validator())
+ extid_version = attr.ib(type=int, validator=type_validator(), default=0)
id = attr.ib(type=Sha1Git, validator=type_validator(), default=b"")
@@ -1142,6 +1143,7 @@
extid=d["extid"],
extid_type=d["extid_type"],
target=CoreSWHID.from_string(d["target"]),
+ extid_version=d.get("extid_version", 0),
)
def compute_hash(self) -> bytes:
diff --git a/swh/model/tests/swh_model_data.py b/swh/model/tests/swh_model_data.py
--- a/swh/model/tests/swh_model_data.py
+++ b/swh/model/tests/swh_model_data.py
@@ -138,6 +138,12 @@
EXTIDS = [
ExtID(extid_type="git256", extid=b"\x03" * 32, target=REVISIONS[0].swhid(),),
ExtID(extid_type="hg", extid=b"\x04" * 20, target=REVISIONS[1].swhid(),),
+ ExtID(
+ extid_type="hg-nodeid",
+ extid=b"\x05" * 20,
+ target=REVISIONS[1].swhid(),
+ extid_version=1,
+ ),
]
RELEASES = [
diff --git a/swh/model/tests/test_identifiers.py b/swh/model/tests/test_identifiers.py
--- a/swh/model/tests/test_identifiers.py
+++ b/swh/model/tests/test_identifiers.py
@@ -1811,6 +1811,29 @@
) == ExtendedSWHID(object_type=ExtendedObjectType.DIRECTORY, object_id=object_id,)
+def test_extid_identifier_bwcompat():
+ extid_dict = {
+ "extid_type": "test-type",
+ "extid": b"extid",
+ "target": ExtendedSWHID(
+ object_type=ExtendedObjectType.DIRECTORY, object_id=b"\x00" * 20
+ ),
+ }
+
+ assert (
+ identifiers.extid_identifier(extid_dict)
+ == "b9295e1931c31e40a7e3e1e967decd1c89426455"
+ )
+
+ assert identifiers.extid_identifier(
+ {**extid_dict, "extid_version": 0}
+ ) == identifiers.extid_identifier(extid_dict)
+
+ assert identifiers.extid_identifier(
+ {**extid_dict, "extid_version": 1}
+ ) != identifiers.extid_identifier(extid_dict)
+
+
def test_object_types():
"""Checks ExtendedObjectType is a superset of ObjectType"""
for member in ObjectType:

File Metadata

Mime Type
text/plain
Expires
Dec 20 2024, 8:57 AM (11 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3219836

Event Timeline