48 lines · 1.7 KB · Rust
RawDownload
#[test]#[cfg(feature = "status")]#[cfg_attr(    windows,    ignore = "for now, windows gets Os { code: 267, kind: NotADirectory, message: 'The directory name is invalid.' } (maybe because of relative symlink)?")]fn on_nested_symlink() -> gix_testtools::Result {    let symlink_root =        gix_testtools::scripted_fixture_read_only("make_submodules.sh")?.join("link-to-dir-in-changed-parent-repo");    // Note: even though this refers to a symlink, the CWD that is actually set will be the resolved directory.    std::env::set_current_dir(&symlink_root)?;     assert!(        gix::open(&symlink_root).is_err(),        "this is not a repository directly, it's a directory within one"    );    // TODO(symlink): This should work though    // let repo = gix::discover(&repo_root)?;    let repo = gix::discover(".")?;    let sm = repo.submodules()?.into_iter().flatten().next().expect("one submodule");    assert_eq!(        sm.work_dir()?,        p("../../m1"),        "the workdir remains relative and is available"    );    let sm_repo = sm.open()?.expect("repo is present and accessible");    assert!(        sm_repo.git_dir().ends_with(".git/modules/m1"),        "gitlink resolution may preserve symlink-sensitive parent components"    );    assert_eq!(        sm_repo.workdir().expect("worktree present as we have one"),        p("../../m1")    );     for item in repo.status(gix::progress::Discard)?.into_iter(None)? {        assert!(            item.is_ok(),            "{item:?}: if there was no worktree, the changed submodule changed would fail the status computation"        );    }    Ok(())} #[cfg(feature = "status")]fn p(path: &str) -> &std::path::Path {    std::path::Path::new(path)}