mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
took the functionality of the third party subcommand from the list_commands function (#15075)
Hey there, I just moved the functionality of the third-party subcommand from the [list_commands](https://github.com/rust-lang/cargo/blob/master/src/bin/cargo/main.rs#L184) function to another new function by the name of third_party_subcommand name and called that function in the list_commands function. From my understanding regarding the third-party subcommand from this [tracking issue](https://github.com/rust-lang/cargo/issues/14520), following points should be performed. - The code that gathers third-party subcommands in list_commands should be moved into a separate function that I did. - This new function will be called both by list_commands and the code for adding subcommand completions. Although I called the function in the list_commands but didn't understand the second point. - Test the change that I made in the first place but it gave me this error:  <!-- Thanks for submitting a pull request 🎉! Here are some tips for you: * If this is your first contribution, read "Cargo Contribution Guide" first: https://doc.crates.io/contrib/ * Run `cargo fmt --all` to format your code changes. * Small commits and pull requests are always preferable and easy to review. * If your idea is large and needs feedback from the community, read how: https://doc.crates.io/contrib/process/#working-on-large-features * Cargo takes care of compatibility. Read our design principles: https://doc.crates.io/contrib/design.html * When changing help text of cargo commands, follow the steps to generate docs: https://github.com/rust-lang/cargo/tree/master/src/doc#building-the-man-pages * If your PR is not finished, set it as "draft" PR or add "WIP" in its title. * It's ok to use the CI resources to test your PR, but please don't abuse them. ### What does this PR try to resolve? Explain the motivation behind this change. A clear overview along with an in-depth explanation are helpful. You can use `Fixes #<issue number>` to associate this PR to an existing issue. ### How should we test and review this PR? Demonstrate how you test this change and guide reviewers through your PR. With a smooth review process, a pull request usually gets reviewed quicker. If you don't know how to write and run your tests, please read the guide: https://doc.crates.io/contrib/tests ### Additional information Other information you want to mention in this PR, such as prior arts, future extensions, an unresolved problem, or a TODO list. -->
This commit is contained in:
commit
531215f6ac
@ -182,33 +182,7 @@ fn aliased_command(gctx: &GlobalContext, command: &str) -> CargoResult<Option<Ve
|
|||||||
|
|
||||||
/// List all runnable commands
|
/// List all runnable commands
|
||||||
fn list_commands(gctx: &GlobalContext) -> BTreeMap<String, CommandInfo> {
|
fn list_commands(gctx: &GlobalContext) -> BTreeMap<String, CommandInfo> {
|
||||||
let prefix = "cargo-";
|
let mut commands = third_party_subcommands(gctx);
|
||||||
let suffix = env::consts::EXE_SUFFIX;
|
|
||||||
let mut commands = BTreeMap::new();
|
|
||||||
for dir in search_directories(gctx) {
|
|
||||||
let entries = match fs::read_dir(dir) {
|
|
||||||
Ok(entries) => entries,
|
|
||||||
_ => continue,
|
|
||||||
};
|
|
||||||
for entry in entries.filter_map(|e| e.ok()) {
|
|
||||||
let path = entry.path();
|
|
||||||
let Some(filename) = path.file_name().and_then(|s| s.to_str()) else {
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
let Some(name) = filename
|
|
||||||
.strip_prefix(prefix)
|
|
||||||
.and_then(|s| s.strip_suffix(suffix))
|
|
||||||
else {
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
if is_executable(entry.path()) {
|
|
||||||
commands.insert(
|
|
||||||
name.to_string(),
|
|
||||||
CommandInfo::External { path: path.clone() },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for cmd in commands::builtin() {
|
for cmd in commands::builtin() {
|
||||||
commands.insert(
|
commands.insert(
|
||||||
@ -253,6 +227,37 @@ fn list_commands(gctx: &GlobalContext) -> BTreeMap<String, CommandInfo> {
|
|||||||
commands
|
commands
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn third_party_subcommands(gctx: &GlobalContext) -> BTreeMap<String, CommandInfo> {
|
||||||
|
let prefix = "cargo-";
|
||||||
|
let suffix = env::consts::EXE_SUFFIX;
|
||||||
|
let mut commands = BTreeMap::new();
|
||||||
|
for dir in search_directories(gctx) {
|
||||||
|
let entries = match fs::read_dir(dir) {
|
||||||
|
Ok(entries) => entries,
|
||||||
|
_ => continue,
|
||||||
|
};
|
||||||
|
for entry in entries.filter_map(|e| e.ok()) {
|
||||||
|
let path = entry.path();
|
||||||
|
let Some(filename) = path.file_name().and_then(|s| s.to_str()) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
let Some(name) = filename
|
||||||
|
.strip_prefix(prefix)
|
||||||
|
.and_then(|s| s.strip_suffix(suffix))
|
||||||
|
else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
if is_executable(entry.path()) {
|
||||||
|
commands.insert(
|
||||||
|
name.to_string(),
|
||||||
|
CommandInfo::External { path: path.clone() },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commands
|
||||||
|
}
|
||||||
|
|
||||||
fn find_external_subcommand(gctx: &GlobalContext, cmd: &str) -> Option<PathBuf> {
|
fn find_external_subcommand(gctx: &GlobalContext, cmd: &str) -> Option<PathBuf> {
|
||||||
let command_exe = format!("cargo-{}{}", cmd, env::consts::EXE_SUFFIX);
|
let command_exe = format!("cargo-{}{}", cmd, env::consts::EXE_SUFFIX);
|
||||||
search_directories(gctx)
|
search_directories(gctx)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user