feat: migrate out of the flat store layout
This commit is contained in:
@@ -306,3 +306,44 @@ fn a_link_into_an_older_store_layout_still_checks_clean_and_restores() {
|
||||
.failed()
|
||||
.says("not in the store");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn migrate_moves_only_this_checkouts_paths_out_of_the_old_layout() {
|
||||
let case = Case::new("migrate");
|
||||
let old = case.store.parent().unwrap().to_path_buf();
|
||||
fs::create_dir_all(old.join("secrets")).unwrap();
|
||||
fs::write(old.join(".env"), b"SECRET=1\n").unwrap();
|
||||
fs::write(old.join("secrets/token"), b"tok\n").unwrap();
|
||||
// another checkout's file in the same flat layout, linked from nowhere here
|
||||
fs::write(old.join("other.env"), b"OTHER\n").unwrap();
|
||||
case.link(&case.path(".env"), &old.join(".env"));
|
||||
case.link(&case.path("secrets"), &old.join("secrets"));
|
||||
case.gitignore(".env\nsecrets/\n");
|
||||
|
||||
case.ahab(&["link", "list"])
|
||||
.ok()
|
||||
.says("legacy: .env")
|
||||
.says("legacy: secrets")
|
||||
.says("ahab link migrate");
|
||||
case.ahab(&["status"]).says("legacy: 2");
|
||||
|
||||
case.ahab(&["link", "migrate"]).ok().says("migrated: .env");
|
||||
|
||||
assert_eq!(
|
||||
fs::read_link(case.path(".env")).unwrap(),
|
||||
case.store.join(".env")
|
||||
);
|
||||
assert_eq!(fs::read(case.path(".env")).unwrap(), b"SECRET=1\n");
|
||||
assert_eq!(fs::read(case.path("secrets/token")).unwrap(), b"tok\n");
|
||||
assert!(!old.join(".env").exists());
|
||||
assert!(!old.join("secrets").exists());
|
||||
assert_eq!(fs::read(old.join("other.env")).unwrap(), b"OTHER\n");
|
||||
|
||||
case.ahab(&["link", "list"])
|
||||
.ok()
|
||||
.says("linked: .env")
|
||||
.silent_about("legacy");
|
||||
case.ahab(&["link", "migrate"])
|
||||
.ok()
|
||||
.says("nothing in the old layout");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user