aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command/home_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/command/home_command.rs')
-rw-r--r--crates/shirabe/src/command/home_command.rs85
1 files changed, 69 insertions, 16 deletions
diff --git a/crates/shirabe/src/command/home_command.rs b/crates/shirabe/src/command/home_command.rs
index 12ea759..142f868 100644
--- a/crates/shirabe/src/command/home_command.rs
+++ b/crates/shirabe/src/command/home_command.rs
@@ -3,7 +3,7 @@
use anyhow::Result;
use shirabe_external_packages::symfony::console::input::input_interface::InputInterface;
use shirabe_external_packages::symfony::console::output::output_interface::OutputInterface;
-use shirabe_php_shim::{filter_var, FILTER_VALIDATE_URL};
+use shirabe_php_shim::{FILTER_VALIDATE_URL, filter_var};
use crate::command::base_command::BaseCommand;
use crate::command::completion_trait::CompletionTrait;
@@ -37,31 +37,60 @@ impl HomeCommand {
None,
self.suggest_installed_package(),
),
- InputOption::new("homepage", Some(shirabe_php_shim::PhpMixed::String("H".to_string())), Some(InputOption::VALUE_NONE), "Open the homepage instead of the repository URL.", None, vec![]),
- InputOption::new("show", Some(shirabe_php_shim::PhpMixed::String("s".to_string())), Some(InputOption::VALUE_NONE), "Only show the homepage or repository URL.", None, vec![]),
+ InputOption::new(
+ "homepage",
+ Some(shirabe_php_shim::PhpMixed::String("H".to_string())),
+ Some(InputOption::VALUE_NONE),
+ "Open the homepage instead of the repository URL.",
+ None,
+ vec![],
+ ),
+ InputOption::new(
+ "show",
+ Some(shirabe_php_shim::PhpMixed::String("s".to_string())),
+ Some(InputOption::VALUE_NONE),
+ "Only show the homepage or repository URL.",
+ None,
+ vec![],
+ ),
])
.set_help(
"The home command opens or shows a package's repository URL or\n\
homepage in your default browser.\n\n\
To open the homepage by default, use -H or --homepage.\n\
To show instead of open the repository or homepage URL, use -s or --show.\n\n\
- Read more at https://getcomposer.org/doc/03-cli.md#browse-home"
+ Read more at https://getcomposer.org/doc/03-cli.md#browse-home",
);
}
- pub fn execute(&self, input: &dyn InputInterface, _output: &dyn OutputInterface) -> Result<i64> {
+ pub fn execute(
+ &self,
+ input: &dyn InputInterface,
+ _output: &dyn OutputInterface,
+ ) -> Result<i64> {
let repos = self.initialize_repos()?;
let io = self.inner.get_io();
let mut return_code: i64 = 0;
- let packages: Vec<String> = input.get_argument("packages")
+ let packages: Vec<String> = input
+ .get_argument("packages")
.as_list()
- .map(|l| l.iter().filter_map(|v| v.as_string().map(|s| s.to_string())).collect())
+ .map(|l| {
+ l.iter()
+ .filter_map(|v| v.as_string().map(|s| s.to_string()))
+ .collect()
+ })
.unwrap_or_default();
let packages = if packages.is_empty() {
io.write_error("No package specified, opening homepage for the root package");
- vec![self.inner.require_composer()?.get_package().get_name().to_string()]
+ vec![
+ self.inner
+ .require_composer()?
+ .get_package()
+ .get_name()
+ .to_string(),
+ ]
} else {
packages
};
@@ -87,12 +116,19 @@ impl HomeCommand {
if !package_exists {
return_code = 1;
- io.write_error(&format!("<warning>Package {} not found</warning>", package_name));
+ io.write_error(&format!(
+ "<warning>Package {} not found</warning>",
+ package_name
+ ));
}
if !handled {
return_code = 1;
- let msg = if show_homepage { "Invalid or missing homepage" } else { "Invalid or missing repository URL" };
+ let msg = if show_homepage {
+ "Invalid or missing homepage"
+ } else {
+ "Invalid or missing repository URL"
+ };
io.write_error(&format!("<warning>{} for {}</warning>", msg, package_name));
}
}
@@ -100,9 +136,17 @@ impl HomeCommand {
Ok(return_code)
}
- fn handle_package(&self, package: &dyn CompletePackageInterface, show_homepage: bool, show_only: bool) -> bool {
+ fn handle_package(
+ &self,
+ package: &dyn CompletePackageInterface,
+ show_homepage: bool,
+ show_only: bool,
+ ) -> bool {
let support = package.get_support();
- let mut url = support.get("source").and_then(|v| v.as_string()).map(|s| s.to_string())
+ let mut url = support
+ .get("source")
+ .and_then(|v| v.as_string())
+ .map(|s| s.to_string())
.or_else(|| package.get_source_url().map(|s| s.to_string()));
if url.as_deref().map_or(true, |s| s.is_empty()) || show_homepage {
url = package.get_homepage().map(|s| s.to_string());
@@ -143,7 +187,10 @@ impl HomeCommand {
} else if osx == 0 {
process.execute(&["open", url], None);
} else {
- io.write_error(&format!("No suitable browser opening command found, open yourself: {}", url));
+ io.write_error(&format!(
+ "No suitable browser opening command found, open yourself: {}",
+ url
+ ));
}
}
@@ -152,14 +199,20 @@ impl HomeCommand {
if let Some(composer) = composer {
let mut repos: Vec<Box<dyn RepositoryInterface>> = vec![];
- repos.push(Box::new(RootPackageRepository::new(composer.get_package().clone_package())));
- repos.push(Box::new(composer.get_repository_manager().get_local_repository()));
+ repos.push(Box::new(RootPackageRepository::new(
+ composer.get_package().clone_package(),
+ )));
+ repos.push(Box::new(
+ composer.get_repository_manager().get_local_repository(),
+ ));
for repo in composer.get_repository_manager().get_repositories() {
repos.push(repo);
}
return Ok(repos);
}
- Ok(RepositoryFactory::default_repos_with_default_manager(self.inner.get_io()))
+ Ok(RepositoryFactory::default_repos_with_default_manager(
+ self.inner.get_io(),
+ ))
}
}