Pre-update commands (fix #25)

This commit is contained in:
Roey Darwish Dror
2018-06-20 20:26:08 +03:00
parent ca12f8e513
commit 2ee068f4fb
3 changed files with 24 additions and 2 deletions

View File

@@ -55,6 +55,14 @@ git_repos = [
"~/dev/topgrade",
]
[pre_commands]
"Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak"
[commands]
"Python Environment" = "~/dev/.env/bin/pip install -i https://pypi.python.org/simple -U --upgrade-strategy eager jupyter"
```
* `git_repos` - A list of custom Git repositories to pull
* `pre_commands` - Commands to execute before starting any action. If any command fails, Topgrade
will not proceed
* `commands` - Custom upgrade steps. If any command fails it will be reported in the summary as all
upgrade steps are reported, but it will not cause Topgrade to stop.

View File

@@ -5,9 +5,12 @@ use std::collections::BTreeMap;
use std::fs;
use toml;
type Commands = BTreeMap<String, String>;
#[derive(Deserialize, Default)]
pub struct Config {
commands: Option<BTreeMap<String, String>>,
pre_commands: Option<Commands>,
commands: Option<Commands>,
git_repos: Option<Vec<String>>,
}
@@ -30,7 +33,11 @@ impl Config {
Ok(result)
}
pub fn commands(&self) -> &Option<BTreeMap<String, String>> {
pub fn pre_commands(&self) -> &Option<Commands> {
&self.pre_commands
}
pub fn commands(&self) -> &Option<Commands> {
&self.commands
}

View File

@@ -71,6 +71,13 @@ fn run() -> Result<(), Error> {
None
};
if let Some(commands) = config.pre_commands() {
for (name, command) in commands {
terminal.print_separator(name);
run_custom_command(&command)?;
}
}
if cfg!(target_os = "linux") {
terminal.print_separator("System update");
match linux::Distribution::detect() {