Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions crates/forge/tests/cli/cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2642,7 +2642,7 @@ contract GasReportFallbackTest is Test {
+========================================================================================================+
| Deployment Cost | Deployment Size | | | | |
|---------------------------------------------------+-----------------+-------+--------+-------+---------|
| 117159 | 471 | | | | |
| 117171 | 471 | | | | |
|---------------------------------------------------+-----------------+-------+--------+-------+---------|
| | | | | | |
|---------------------------------------------------+-----------------+-------+--------+-------+---------|
Expand Down Expand Up @@ -2681,7 +2681,7 @@ Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests)
{
"contract": "test/DelegateProxyTest.sol:DelegateProxy",
"deployment": {
"gas": 117159,
"gas": 117171,
"size": 471
},
"functions": {
Expand Down
52 changes: 40 additions & 12 deletions crates/forge/tests/cli/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -603,29 +603,57 @@ forgetest_init!(sync_on_forge_update, |prj, cmd| {
let forge_std = lockfile.get(&PathBuf::from("lib/forge-std")).unwrap();
assert!(forge_std.rev() == FORGE_STD_REVISION);

// cd into the forge-std submodule and reset the master branch
// cd into the forge-std submodule
let forge_std_path = prj.root().join("lib/forge-std");
let git = Git::new(&forge_std_path);
git.checkout(false, "master").unwrap();
// Get the master head commit
let origin_master_head = git.head().unwrap();
// Reset the master branch to HEAD~1
git.reset(true, "HEAD~1").unwrap();
let local_master_head = git.head().unwrap();
assert_ne!(origin_master_head, local_master_head, "Master head should have changed");
// Now checkout back to the release tag

// Ensure we're on the release tag first (known starting point)
git.checkout(false, forge_std.name()).unwrap();
assert!(git.head().unwrap() == forge_std.rev(), "Forge std should be at the release tag");
assert_eq!(git.head().unwrap(), forge_std.rev(), "Forge std should be at the release tag");

// Make sure origin/master is up to date, then resolve its commit hash deterministically.
git.fetch(false, "origin", Some("master")).unwrap();
let origin_master_head = git.get_rev("refs/remotes/origin/master", &forge_std_path).unwrap();

// Run update and assert the output matches the dynamically resolved hash.
let expected_output = format!(
r#"Updated dep at 'lib/forge-std', (from: tag={}@{}, to: branch=master@{})
"#,
"Updated dep at 'lib/forge-std', (from: tag={}@{}, to: branch=master@{})\n",
forge_std.name(),
forge_std.rev(),
origin_master_head
);

cmd.forge_fuse()
.args(["update", "foundry-rs/forge-std@master"])
.assert_success()
.stdout_eq(expected_output);

let git = Git::new(&forge_std_path);
assert_eq!(
git.head().unwrap(),
origin_master_head,
"Submodule HEAD should match resolved origin/master after update"
);

let root_git = Git::new(prj.root());
let submodules_after = root_git.submodules().unwrap();
let forge_sm = submodules_after
.0
.iter()
.find(|s| s.path().as_path() == Path::new("lib/forge-std"))
.expect("forge-std submodule should exist");
assert_eq!(
forge_sm.rev(),
origin_master_head,
"Root submodule status should match resolved origin/master after update"
);

let mut lockfile = Lockfile::new(prj.root());
lockfile.read().unwrap();
let forge_std_after = lockfile.get(&PathBuf::from("lib/forge-std")).unwrap();
assert_eq!(
forge_std_after.rev(),
origin_master_head,
"Lockfile rev should match resolved origin/master after update"
);
});
2 changes: 1 addition & 1 deletion testdata/forge-std-rev
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7117c90c8cf6c68e5acce4f09a6b24715cea4de6
c29afdd40a82db50a3d3709d324416be50050e5e
Loading