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 = [