Process a file leaf node in versions mode
(self, segments, item, root_node, hlm)
| 255 | hlm.remember(id=item.hlid, info=item.path) |
| 256 | |
| 257 | def _process_leaf_versioned(self, segments, item, root_node, hlm): |
| 258 | """Process a file leaf node in versions mode""" |
| 259 | path = b"/".join(segments) |
| 260 | original_path = item.path |
| 261 | |
| 262 | # Handle hardlinks in versions mode - check if we've seen this hardlink before |
| 263 | is_hardlink = "hlid" in item |
| 264 | link_target = None |
| 265 | if is_hardlink: |
| 266 | link_target = hlm.retrieve(id=item.hlid, default=None) |
| 267 | if link_target is None: |
| 268 | # First occurrence of this hardlink |
| 269 | hlm.remember(id=item.hlid, info=original_path) |
| 270 | |
| 271 | # Calculate version for this file |
| 272 | # If it's a hardlink to a previous file, use that version |
| 273 | if is_hardlink and link_target is not None: |
| 274 | link_target_enc = os.fsencode(link_target) |
| 275 | version = self.file_versions.get(link_target_enc) |
| 276 | else: |
| 277 | version = self._file_version(item, path) |
| 278 | |
| 279 | # Store version for this path |
| 280 | if version is not None: |
| 281 | self.file_versions[path] = version |
| 282 | |
| 283 | # Navigate to parent directory |
| 284 | node = root_node |
| 285 | for segment in segments[:-1]: |
| 286 | if not node.has_child(segment): |
| 287 | new_node = self._create_node(parent=node) |
| 288 | self.set_inode(new_node.ino, Item(internal_dict=self.default_dir.as_dict())) |
| 289 | node.add_child(segment, new_node) |
| 290 | node = node.get_child(segment) |
| 291 | |
| 292 | # Create intermediate directory with the filename |
| 293 | leaf_name = segments[-1] |
| 294 | if not node.has_child(leaf_name): |
| 295 | intermediate_node = self._create_node(parent=node) |
| 296 | self.set_inode(intermediate_node.ino, Item(internal_dict=self.default_dir.as_dict())) |
| 297 | node.add_child(leaf_name, intermediate_node) |
| 298 | else: |
| 299 | intermediate_node = node.get_child(leaf_name) |
| 300 | |
| 301 | # Create versioned filename |
| 302 | if version is not None: |
| 303 | versioned_name = self._make_versioned_name(leaf_name, version) |
| 304 | |
| 305 | # If this is a hardlink to a previous file, reuse that node |
| 306 | if is_hardlink and link_target is not None: |
| 307 | link_target_enc = os.fsencode(link_target) |
| 308 | link_segments = link_target_enc.split(b"/") |
| 309 | link_version = self.file_versions.get(link_target_enc) |
| 310 | if link_version is not None: |
| 311 | # Navigate to the link target |
| 312 | target_node = root_node |
| 313 | for seg in link_segments[:-1]: |
| 314 | if target_node.has_child(seg): |
no test coverage detected