Add shell completion and manpage generation (#233)
This commit is contained in:
27
Cargo.lock
generated
27
Cargo.lock
generated
@@ -258,6 +258,15 @@ dependencies = [
|
|||||||
"textwrap",
|
"textwrap",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_complete"
|
||||||
|
version = "3.1.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da92e6facd8d73c22745a5d3cbb59bdf8e46e3235c923e516527d8e81eec14a4"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_derive"
|
name = "clap_derive"
|
||||||
version = "3.1.18"
|
version = "3.1.18"
|
||||||
@@ -280,6 +289,16 @@ dependencies = [
|
|||||||
"os_str_bytes",
|
"os_str_bytes",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_mangen"
|
||||||
|
version = "0.1.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "121b598d1b9d63d4ff3b7dae8defd88cc23e41850ee89fd2feec2e7d992e6ec8"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
"roff",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "codespan-reporting"
|
name = "codespan-reporting"
|
||||||
version = "0.11.1"
|
version = "0.11.1"
|
||||||
@@ -1533,6 +1552,12 @@ dependencies = [
|
|||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "roff"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rust-ini"
|
name = "rust-ini"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
@@ -2041,6 +2066,8 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
"chrono",
|
"chrono",
|
||||||
"clap",
|
"clap",
|
||||||
|
"clap_complete",
|
||||||
|
"clap_mangen",
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
"console",
|
"console",
|
||||||
"directories",
|
"directories",
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ toml = "0.5"
|
|||||||
which_crate = { version = "~4.1", package = "which" }
|
which_crate = { version = "~4.1", package = "which" }
|
||||||
shellexpand = "~2.1"
|
shellexpand = "~2.1"
|
||||||
clap = { version = "~3.1", features = ["cargo", "derive"] }
|
clap = { version = "~3.1", features = ["cargo", "derive"] }
|
||||||
|
clap_complete = "~3.1"
|
||||||
|
clap_mangen = "~0.1"
|
||||||
walkdir = "~2.3"
|
walkdir = "~2.3"
|
||||||
console = "~0.15"
|
console = "~0.15"
|
||||||
lazy_static = "~1.4"
|
lazy_static = "~1.4"
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use std::process::Command;
|
|||||||
use std::{env, fs};
|
use std::{env, fs};
|
||||||
|
|
||||||
use clap::{ArgEnum, Parser};
|
use clap::{ArgEnum, Parser};
|
||||||
|
use clap_complete::Shell;
|
||||||
use color_eyre::eyre;
|
use color_eyre::eyre;
|
||||||
use color_eyre::eyre::Context;
|
use color_eyre::eyre::Context;
|
||||||
use color_eyre::eyre::Result;
|
use color_eyre::eyre::Result;
|
||||||
@@ -489,6 +490,14 @@ pub struct CommandLineArgs {
|
|||||||
/// See: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/struct.EnvFilter.html
|
/// See: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/struct.EnvFilter.html
|
||||||
#[clap(long, default_value = "info")]
|
#[clap(long, default_value = "info")]
|
||||||
pub log_filter: String,
|
pub log_filter: String,
|
||||||
|
|
||||||
|
/// Print completion script for the given shell and exit
|
||||||
|
#[clap(long, arg_enum, hide = true)]
|
||||||
|
pub gen_completion: Option<Shell>,
|
||||||
|
|
||||||
|
/// Print roff manpage and exit
|
||||||
|
#[clap(long, hide = true)]
|
||||||
|
pub gen_manpage: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CommandLineArgs {
|
impl CommandLineArgs {
|
||||||
|
|||||||
13
src/main.rs
13
src/main.rs
@@ -4,6 +4,7 @@ use std::env;
|
|||||||
use std::io;
|
use std::io;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
|
||||||
|
use clap::CommandFactory;
|
||||||
use clap::{crate_version, Parser};
|
use clap::{crate_version, Parser};
|
||||||
use color_eyre::eyre::Context;
|
use color_eyre::eyre::Context;
|
||||||
use color_eyre::eyre::{eyre, Result};
|
use color_eyre::eyre::{eyre, Result};
|
||||||
@@ -42,6 +43,18 @@ fn run() -> Result<()> {
|
|||||||
|
|
||||||
let opt = CommandLineArgs::parse();
|
let opt = CommandLineArgs::parse();
|
||||||
|
|
||||||
|
if let Some(shell) = opt.gen_completion {
|
||||||
|
let cmd = &mut CommandLineArgs::command();
|
||||||
|
clap_complete::generate(shell, cmd, clap::crate_name!(), &mut std::io::stdout());
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
if opt.gen_manpage {
|
||||||
|
let man = clap_mangen::Man::new(CommandLineArgs::command());
|
||||||
|
man.render(&mut std::io::stdout())?;
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
install_tracing(&opt.tracing_filter_directives())?;
|
install_tracing(&opt.tracing_filter_directives())?;
|
||||||
|
|
||||||
for env in opt.env_variables() {
|
for env in opt.env_variables() {
|
||||||
|
|||||||
80
topgrade.8
80
topgrade.8
@@ -1,80 +0,0 @@
|
|||||||
.hy
|
|
||||||
.TH "topgrade" "8"
|
|
||||||
.SH NAME
|
|
||||||
.PP
|
|
||||||
Topgrade \- Upgrade everything
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.PP
|
|
||||||
topgrade [\fIoptions\f[]]
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.PP
|
|
||||||
Keeping your system up to date usually involves invoking multiple package managers.
|
|
||||||
This results in big, non-portable shell one-liners saved in your shell.
|
|
||||||
To remedy this, \fBTopgrade\fR detects which tools you use and runs the appropriate commands to update them.
|
|
||||||
.SH OPTIONS
|
|
||||||
.TP
|
|
||||||
.B \-\-only <only>
|
|
||||||
Run only specific steps
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-\-disable <disable>
|
|
||||||
Disable specific steps
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-c, \-\-cleanup
|
|
||||||
Cleanup temporary or old files
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-n, \-\-dry\-run
|
|
||||||
List the commands that would be run
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-\-edit\-config
|
|
||||||
Edit the configuration file
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-h, \-\-help
|
|
||||||
Print help information
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-k, \-\-keep
|
|
||||||
Prompt for a key before exiting
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-\-no\-retry
|
|
||||||
Do not ask to retry failed steps
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-t, \-\-tmux
|
|
||||||
Run inside tmux
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-V, \-\-version
|
|
||||||
Print version information
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.B \-v, \-\-verbose
|
|
||||||
Output logs
|
|
||||||
.RS
|
|
||||||
.RE
|
|
||||||
.B \-y, \-\-yes
|
|
||||||
Skip package manager's prompts (experimental)
|
|
||||||
.SH ARGUMENT FORMAT
|
|
||||||
Options can be given in any order.
|
|
||||||
A list of steps must be provided as a list of separate arguments, i.e. 'topgrade --only system shell'.
|
|
||||||
.SH BUGS
|
|
||||||
For a list of bugs see <\fIhttps://github.com/r-darwish/topgrade/issues\fR>.
|
|
||||||
.SH AUTHOR
|
|
||||||
\fBTopgrade\fR is maintained by Roey Dror (\[aq]r\-darwish\[aq]) and many other contributors.
|
|
||||||
You can view the full list at
|
|
||||||
<\fIhttps://github.com/r-darwish/topgrade/graphs/contributors\fR>
|
|
||||||
Reference in New Issue
Block a user