From 754972b95ba2fabc082aed387c246e632a8d7434 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 12 Aug 2026 03:36:47 +0000 Subject: Preserve rootfs hardlink facts in manifests --- tests/compare.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'tests/compare.rs') diff --git a/tests/compare.rs b/tests/compare.rs index 7dd44e2..a175195 100644 --- a/tests/compare.rs +++ b/tests/compare.rs @@ -3,7 +3,7 @@ use alt_controller_image::archive::NativeTarWriter; use alt_controller_image::manifest::{ ArchiveMemberRecord, ArtifactManifest, FileRecord, InitrdRecord, PackageRecord, ServiceRecord, }; -use std::fs; +use std::fs::{self, hard_link}; use std::io::Cursor; use std::os::unix::fs::symlink; use tempfile::tempdir; @@ -253,6 +253,32 @@ fn collects_hardlink_targets_from_an_archive_for_semantic_comparison() { ); } +#[test] +fn rootfs_collection_preserves_hardlink_facts_like_archive_collection() { + let fixture = tempdir().expect("temporary directory"); + let rootfs = fixture.path().join("rootfs"); + fs::create_dir_all(rootfs.join("usr/bin")).expect("create binary directory"); + fs::write(rootfs.join("usr/bin/controller"), "controller\n").expect("write binary"); + hard_link( + rootfs.join("usr/bin/controller"), + rootfs.join("usr/bin/controller-link"), + ) + .expect("create hardlink"); + let artifact = fixture.path().join("controller.tar"); + NativeTarWriter::new() + .write(&rootfs, &artifact) + .expect("write native archive"); + + let rootfs_manifest = ArtifactManifest::collect(&rootfs, vec![], None, &artifact) + .expect("collect rootfs facts"); + let archive_manifest = ArtifactManifest::collect_archive(&artifact).expect("collect archive facts"); + + assert_eq!(rootfs_manifest.files, archive_manifest.files); + assert!(rootfs_manifest.files.iter().any(|record| { + record == &FileRecord::hardlink("usr/bin/controller-link", "usr/bin/controller") + })); +} + #[test] fn normalizes_dot_prefixed_paths_from_a_legacy_tree_archive() { let fixture = tempdir().expect("temporary directory"); -- cgit v1.2.3