Skip to content

Commit d3fddc9

Browse files
committed
Assert per-copy applied events in multi-copy test
The apply JSON envelope reports per-copy outcomes as events, not results; count the applied events for the patched release. Assisted-by: Claude Code:claude-opus-5-5
1 parent 4e63fa8 commit d3fddc9

126 files changed

Lines changed: 2092 additions & 760 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎crates/socket-patch-cli/src/commands/apply.rs‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ use clap::Args;
22
use socket_patch_core::api::blob_fetcher::get_missing_blobs;
33
use socket_patch_core::api::client::{get_api_client_with_overrides, ApiClient};
44
use socket_patch_core::crawlers::ruby_crawler::config_path_ignored_warning;
5-
use socket_patch_core::crawlers::{
6-
detect_npm_pkg_manager, Ecosystem, NpmPkgManager, RubyCrawler,
7-
};
5+
use socket_patch_core::crawlers::{detect_npm_pkg_manager, Ecosystem, NpmPkgManager, RubyCrawler};
86
use socket_patch_core::manifest::operations::read_manifest;
97
use socket_patch_core::manifest::schema::{PatchFileInfo, PatchManifest, PatchRecord};
108
use socket_patch_core::patch::apply::{

‎crates/socket-patch-cli/src/commands/list.rs‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,10 @@ pub async fn run(args: ListArgs) -> i32 {
431431
detail: detail.clone(),
432432
});
433433
} else if !args.common.silent {
434-
eprintln!("Warning: {}", crate::commands::rollback::capitalize_first(detail));
434+
eprintln!(
435+
"Warning: {}",
436+
crate::commands::rollback::capitalize_first(detail)
437+
);
435438
}
436439
}
437440
let vendor_state = crate::commands::vendor_state_lenient(&loaded.vendor, args.common.silent);
@@ -773,12 +776,18 @@ mod tests {
773776
let listings = HostedListing::from_pins(
774777
&[
775778
pin("pkg:npm/minimist@1.2.2", &record.uuid),
776-
pin("pkg:npm/other@1.0.0", "33333333-3333-4333-8333-333333333333"),
779+
pin(
780+
"pkg:npm/other@1.0.0",
781+
"33333333-3333-4333-8333-333333333333",
782+
),
777783
],
778784
Some(&legacy),
779785
);
780786
assert_eq!(listings[0].record, record);
781-
assert_eq!(listings[1].record.uuid, "33333333-3333-4333-8333-333333333333");
787+
assert_eq!(
788+
listings[1].record.uuid,
789+
"33333333-3333-4333-8333-333333333333"
790+
);
782791
assert!(listings[1].record.vulnerabilities.is_empty());
783792
assert_eq!(listings[1].lockfiles, vec!["yarn.lock".to_string()]);
784793
}

‎crates/socket-patch-cli/src/commands/mod.rs‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
pub mod apply;
22
pub(crate) mod bun_preflight;
3-
pub(crate) mod context;
43
pub(crate) mod composer_hints;
4+
pub(crate) mod context;
55
pub(crate) mod fetch_stage;
66
pub mod get;
77
pub mod hosted_bundle;
88
pub mod list;
99
pub(crate) mod lock_cli;
1010
pub mod remove;
1111
pub mod repair;
12-
pub(crate) mod vendored_backend;
1312
pub mod rollback;
1413
pub mod scan;
1514
pub mod update;
1615
pub mod vendor;
16+
pub(crate) mod vendored_backend;
1717
pub mod vex;
1818
pub(crate) mod vex_consumed;
1919
pub(crate) mod vex_sources;
@@ -135,9 +135,11 @@ pub(crate) async fn hosted_state_from_lockfiles(
135135
common: &crate::args::GlobalArgs,
136136
root: &Path,
137137
) -> socket_patch_core::patch::redirect::RedirectState {
138-
hosted_state_from_pins(&socket_patch_core::patch::redirect::upstream::HostedPin::all(
139-
&discover_wiring(common, root).await,
140-
))
138+
hosted_state_from_pins(
139+
&socket_patch_core::patch::redirect::upstream::HostedPin::all(
140+
&discover_wiring(common, root).await,
141+
),
142+
)
141143
}
142144

143145
/// [`hosted_state_from_lockfiles`] over already-discovered pins. A purl
@@ -147,18 +149,17 @@ pub(crate) fn hosted_state_from_pins(
147149
) -> socket_patch_core::patch::redirect::RedirectState {
148150
let mut state = socket_patch_core::patch::redirect::RedirectState::new();
149151
for pin in pins {
150-
state
151-
.records
152-
.entry(pin.purl.clone())
153-
.or_insert_with(|| socket_patch_core::manifest::schema::PatchRecord {
152+
state.records.entry(pin.purl.clone()).or_insert_with(|| {
153+
socket_patch_core::manifest::schema::PatchRecord {
154154
uuid: pin.uuid.clone(),
155155
exported_at: String::new(),
156156
files: Default::default(),
157157
vulnerabilities: Default::default(),
158158
description: String::new(),
159159
license: String::new(),
160160
tier: String::new(),
161-
});
161+
}
162+
});
162163
}
163164
state
164165
}
@@ -185,4 +186,3 @@ pub(crate) fn vendor_state_lenient(
185186
}
186187
}
187188
}
188-

‎crates/socket-patch-cli/src/commands/remove.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ use super::rollback::{
1717
pin_before_hash_blobs, rollback_patches_inner, run_hosted_leg, sweep_failure,
1818
sweep_unused_artifacts, HostedLegOutcome, InnerSelection,
1919
};
20-
use crate::commands::vendored_backend::{RevertedEntry, VendorRevertStep, VendoredBackend};
2120
use crate::args::{apply_env_toggles, GlobalArgs};
2221
use crate::commands::lock_cli::acquire_or_emit;
22+
use crate::commands::vendored_backend::{RevertedEntry, VendorRevertStep, VendoredBackend};
2323
use crate::json_envelope::{Command, Envelope, EnvelopeError, PatchAction, PatchEvent, Status};
2424
use crate::ui::plural;
2525

‎crates/socket-patch-cli/src/commands/rollback.rs‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ use socket_patch_core::manifest::operations::{
1010
};
1111
use socket_patch_core::manifest::schema::{PatchFileInfo, PatchManifest, PatchRecord};
1212
use socket_patch_core::patch::apply::select_installed_variants;
13+
use socket_patch_core::patch::redirect::upstream::HostedPin;
1314
use socket_patch_core::patch::rollback::{
1415
cannot_rollback_error, rollback_package_patch, verify_file_rollback, RollbackResult,
1516
VerifyRollbackResult, VerifyRollbackStatus,
1617
};
1718
use socket_patch_core::telemetry::{track_patch_rollback_failed, track_patch_rolled_back};
1819
use socket_patch_core::utils::purl::{patch_matches, strip_purl_qualifiers};
19-
use socket_patch_core::patch::redirect::upstream::HostedPin;
2020
use socket_patch_core::vendor::{purl_keys_cover, RevertOpts, VendorState};
2121
use std::collections::{HashMap, HashSet};
2222
use std::path::{Path, PathBuf};
@@ -1026,7 +1026,8 @@ pub(crate) async fn run_hosted_leg(common: &GlobalArgs, pins: &[HostedPin]) -> H
10261026
.iter()
10271027
.map(|(code, detail)| (code.to_string(), detail.clone())),
10281028
);
1029-
out.edited_files.extend(outcome.reverted_files.iter().cloned());
1029+
out.edited_files
1030+
.extend(outcome.reverted_files.iter().cloned());
10301031
let unwound: Vec<_> = vlt_targets
10311032
.into_iter()
10321033
.filter(|t| out.reverted.iter().any(|p| p == &t.purl))
@@ -1170,7 +1171,11 @@ pub async fn run(args: RollbackArgs) -> i32 {
11701171
} else if !args.common.silent {
11711172
println!(
11721173
"{} the pre-v5 hosted ledger {}: no lockfile pins a hosted patch.",
1173-
if args.common.dry_run { "Would remove" } else { "Removed" },
1174+
if args.common.dry_run {
1175+
"Would remove"
1176+
} else {
1177+
"Removed"
1178+
},
11741179
socket_patch_core::patch::redirect::REDIRECT_STATE_REL
11751180
);
11761181
}

‎crates/socket-patch-cli/src/commands/scan/hosted.rs‎

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,8 @@ pub(crate) async fn run_redirect_selected(
934934
socket_patch_core::utils::fs::read_regular_to_string_sync(path).ok()
935935
})
936936
};
937-
let rewrite_options = || RewriteOptions {
937+
let rewrite_options = || {
938+
RewriteOptions {
938939
dry_run: common.dry_run,
939940
targets_pipenv_lock,
940941
pipenv_major,
@@ -946,6 +947,7 @@ pub(crate) async fn run_redirect_selected(
946947
npm_allow_remote_config: !common.no_npm_allow_remote_config,
947948
npm_outer: &npm_outer,
948949
blocking: true,
950+
}
949951
};
950952
// The rollout gate plans again without its deferred rows: keep what
951953
// the second pass needs.
@@ -2171,13 +2173,19 @@ fn join_names(names: &[String], max: usize) -> String {
21712173
/// artifacts, then verify with `vex`. After a vendored→hosted takeover
21722174
/// (`vendored_removed`) the commit also has to carry the deleted vendored
21732175
/// ledger entries and artifacts.
2174-
fn format_next_steps(files: &[String], edits: &[socket_patch_core::patch::redirect::FileEdit], vendored_removed: bool) -> Vec<String> {
2176+
fn format_next_steps(
2177+
files: &[String],
2178+
edits: &[socket_patch_core::patch::redirect::FileEdit],
2179+
vendored_removed: bool,
2180+
) -> Vec<String> {
21752181
if files.is_empty() && !vendored_removed {
21762182
return Vec::new();
21772183
}
21782184
let mut commit: Vec<String> = Vec::new();
21792185
if vendored_removed {
2180-
commit.push(".socket/vendor/ (the removed vendored ledger entries and artifacts)".to_string());
2186+
commit.push(
2187+
".socket/vendor/ (the removed vendored ledger entries and artifacts)".to_string(),
2188+
);
21812189
}
21822190
commit.extend(files.iter().cloned());
21832191
let npm = files
@@ -4162,19 +4170,43 @@ mod tests {
41624170
use super::npm_allow_remote_one_line;
41634171
let hosts = ["patch.socket.dev"];
41644172
let cases = [
4165-
(npm_allow_remote_configured_detail(&hosts, true, false), "Note: set"),
4166-
(npm_allow_remote_configured_detail(&hosts, false, false), "Note: set"),
4167-
(npm_allow_remote_configured_detail(&hosts, true, true), "Note: would set"),
4168-
(npm_allow_remote_already_detail(&hosts), "Note: .npmrc already"),
4169-
(npm_allow_remote_user_set_detail(&hosts, "none"), "Warning: npm >=12"),
4170-
(npm_allow_remote_env_set_detail(&hosts, "npm_config_allow_remote", "none"), "Warning: npm >=12"),
4173+
(
4174+
npm_allow_remote_configured_detail(&hosts, true, false),
4175+
"Note: set",
4176+
),
4177+
(
4178+
npm_allow_remote_configured_detail(&hosts, false, false),
4179+
"Note: set",
4180+
),
4181+
(
4182+
npm_allow_remote_configured_detail(&hosts, true, true),
4183+
"Note: would set",
4184+
),
4185+
(
4186+
npm_allow_remote_already_detail(&hosts),
4187+
"Note: .npmrc already",
4188+
),
4189+
(
4190+
npm_allow_remote_user_set_detail(&hosts, "none"),
4191+
"Warning: npm >=12",
4192+
),
4193+
(
4194+
npm_allow_remote_env_set_detail(&hosts, "npm_config_allow_remote", "none"),
4195+
"Warning: npm >=12",
4196+
),
41714197
(npm_allow_remote_manual_detail(&hosts), "Warning: npm >=12"),
4172-
(npm_allow_remote_unreadable_detail(&hosts, "is a symlink"), "Warning: npm >=12"),
4198+
(
4199+
npm_allow_remote_unreadable_detail(&hosts, "is a symlink"),
4200+
"Warning: npm >=12",
4201+
),
41734202
];
41744203
for (detail, start) in cases {
41754204
let line = npm_allow_remote_one_line(&detail);
41764205
assert!(line.starts_with(start), "{line}");
4177-
assert!(!line.contains('\n') && line.ends_with("(details: --verbose)."), "{line}");
4206+
assert!(
4207+
!line.contains('\n') && line.ends_with("(details: --verbose)."),
4208+
"{line}"
4209+
);
41784210
}
41794211
}
41804212
}

0 commit comments

Comments
 (0)