Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F6930321
D6102.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
D6102.diff
View Options
diff --git a/swh/vault/cookers/git_bare.py b/swh/vault/cookers/git_bare.py
--- a/swh/vault/cookers/git_bare.py
+++ b/swh/vault/cookers/git_bare.py
@@ -18,6 +18,7 @@
"""
import datetime
+import enum
import logging
import os.path
import re
@@ -56,27 +57,36 @@
logger = logging.getLogger(__name__)
+class RootObjectType(enum.Enum):
+ DIRECTORY = "directory"
+ REVISION = "revision"
+ SNAPSHOT = "snapshot"
+
+
class GitBareCooker(BaseVaultCooker):
use_fsck = True
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.obj_type = RootObjectType(self.bundle_type.split("_")[0])
+
def cache_type_key(self) -> str:
return self.bundle_type
def check_exists(self):
- obj_type = self.bundle_type.split("_")[0]
- if obj_type == "revision":
+ if self.obj_type == RootObjectType.REVISION:
return not list(self.storage.revision_missing([self.obj_id]))
- elif obj_type == "directory":
+ elif self.obj_type == RootObjectType.DIRECTORY:
return not list(self.storage.directory_missing([self.obj_id]))
- if obj_type == "snapshot":
+ elif self.obj_type == RootObjectType.SNAPSHOT:
return not list(self.storage.snapshot_missing([self.obj_id]))
else:
- raise NotImplementedError(f"GitBareCooker for {obj_type}")
+ assert False, f"Unexpected root object type: {self.obj_type}"
def obj_swhid(self) -> identifiers.CoreSWHID:
- obj_type = self.bundle_type.split("_")[0]
return identifiers.CoreSWHID(
- object_type=identifiers.ObjectType[obj_type.upper()], object_id=self.obj_id,
+ object_type=identifiers.ObjectType[self.obj_type.name],
+ object_id=self.obj_id,
)
def _push(self, stack: List[Sha1Git], obj_ids: Iterable[Sha1Git]) -> None:
@@ -112,7 +122,7 @@
self.init_git()
# Add the root object to the stack of objects to visit
- self.push_subgraph(self.bundle_type.split("_")[0], self.obj_id)
+ self.push_subgraph(self.obj_type, self.obj_id)
# Load and write all the objects to disk
self.load_objects()
@@ -173,8 +183,7 @@
def write_refs(self, snapshot=None):
refs: Dict[bytes, bytes] # ref name -> target
- obj_type = self.bundle_type.split("_")[0]
- if obj_type == "directory":
+ if self.obj_type == RootObjectType.DIRECTORY:
# We need a synthetic revision pointing to the directory
author = Person.from_fullname(
b"swh-vault, git-bare cooker <robot@softwareheritage.org>"
@@ -194,9 +203,9 @@
)
self.write_revision_node(revision.to_dict())
refs = {b"refs/heads/master": hash_to_bytehex(revision.id)}
- elif obj_type == "revision":
+ elif self.obj_type == RootObjectType.REVISION:
refs = {b"refs/heads/master": hash_to_bytehex(self.obj_id)}
- elif obj_type == "snapshot":
+ elif self.obj_type == RootObjectType.SNAPSHOT:
if snapshot is None:
# refs were already written in a previous step
return
@@ -217,7 +226,7 @@
for (branch_name, branch) in branches
}
else:
- assert False, obj_type
+ assert False, f"Unexpected root object type: {self.obj_type}"
for (ref_name, ref_target) in refs.items():
path = os.path.join(self.gitdir.encode(), ref_name)
@@ -253,17 +262,15 @@
fd.write(data)
return True
- def push_subgraph(self, obj_type, obj_id) -> None:
- if obj_type == "revision":
+ def push_subgraph(self, obj_type: RootObjectType, obj_id) -> None:
+ if self.obj_type == RootObjectType.REVISION:
self.push_revision_subgraph(obj_id)
- elif obj_type == "directory":
+ elif self.obj_type == RootObjectType.DIRECTORY:
self._push(self._dir_stack, [obj_id])
- elif obj_type == "snapshot":
+ elif self.obj_type == RootObjectType.SNAPSHOT:
self.push_snapshot_subgraph(obj_id)
else:
- raise NotImplementedError(
- f"GitBareCooker.queue_subgraph({obj_type!r}, ...)"
- )
+ assert False, f"Unexpected root object type: {self.obj_type}"
def load_objects(self) -> None:
while self._rel_stack or self._rev_stack or self._dir_stack or self._cnt_stack:
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Jul 27 2024, 2:14 PM (11 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3218295
Attached To
D6102: git_bare: Use an enum to represent the root object type
Event Timeline
Log In to Comment