Vim (fixes #17)
This commit is contained in:
@@ -22,6 +22,10 @@ Just invoke `topgrade`. It will invoke the following steps:
|
|||||||
* *Unix*: Upgrade tmux plugins with [TPM](https://github.com/tmux-plugins/tpm)
|
* *Unix*: Upgrade tmux plugins with [TPM](https://github.com/tmux-plugins/tpm)
|
||||||
* Invoke Cargo [install-update](https://github.com/nabijaczleweli/cargo-update)
|
* Invoke Cargo [install-update](https://github.com/nabijaczleweli/cargo-update)
|
||||||
* Upgrade Emacs packages
|
* Upgrade Emacs packages
|
||||||
|
* Upgrade Vim packages. Works with the following plugin frameworks:
|
||||||
|
* [NeoBundle](https://github.com/Shougo/neobundle.vim)
|
||||||
|
* [Vundle](https://github.com/VundleVim/Vundle.vim)
|
||||||
|
* [Plug](https://github.com/junegunn/vim-plug)
|
||||||
* Upgrade NPM globally installed packages
|
* Upgrade NPM globally installed packages
|
||||||
* Upgrade Atom packages
|
* Upgrade Atom packages
|
||||||
* Upgrade RubyGems globally installed packages
|
* Upgrade RubyGems globally installed packages
|
||||||
|
|||||||
14
src/main.rs
14
src/main.rs
@@ -9,6 +9,7 @@ mod git;
|
|||||||
mod report;
|
mod report;
|
||||||
mod steps;
|
mod steps;
|
||||||
mod terminal;
|
mod terminal;
|
||||||
|
mod vim;
|
||||||
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
use git::Git;
|
use git::Git;
|
||||||
@@ -110,7 +111,18 @@ fn main() -> Result<(), Error> {
|
|||||||
let init_file = home_path(".emacs.d/init.el");
|
let init_file = home_path(".emacs.d/init.el");
|
||||||
if init_file.exists() {
|
if init_file.exists() {
|
||||||
terminal.print_separator("Emacs");
|
terminal.print_separator("Emacs");
|
||||||
run_emacs(&emacs, &home_path(".emacs.d/init.el")).report("Emacs", &mut reports);
|
run_emacs(&emacs, &init_file).report("Emacs", &mut reports);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Ok(vim) = which("Vim") {
|
||||||
|
let vimrc = home_path(".vimrc");
|
||||||
|
if vimrc.exists() {
|
||||||
|
if let Some(plugin_framework) = vim::PluginFramework::detect(&vimrc) {
|
||||||
|
terminal.print_separator(&format!("vim ({:?})", plugin_framework));
|
||||||
|
run_vim(&vim, &vimrc, plugin_framework.upgrade_command())
|
||||||
|
.report("Vim", &mut reports);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
25
src/steps.rs
25
src/steps.rs
@@ -48,6 +48,31 @@ pub fn run_emacs(emacs: &PathBuf, init: &PathBuf) -> Result<(), failure::Error>
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn run_vim(
|
||||||
|
vim: &PathBuf,
|
||||||
|
vimrc: &PathBuf,
|
||||||
|
upgrade_command: &str,
|
||||||
|
) -> Result<(), failure::Error> {
|
||||||
|
Command::new(&vim)
|
||||||
|
.args(&[
|
||||||
|
"-N",
|
||||||
|
"-u",
|
||||||
|
vimrc.to_str().unwrap(),
|
||||||
|
"-c",
|
||||||
|
upgrade_command,
|
||||||
|
"-c",
|
||||||
|
"quitall",
|
||||||
|
"-e",
|
||||||
|
"-s",
|
||||||
|
"-V1",
|
||||||
|
])
|
||||||
|
.spawn()?
|
||||||
|
.wait()?
|
||||||
|
.check()?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run_gem(gem: &PathBuf) -> Result<(), failure::Error> {
|
pub fn run_gem(gem: &PathBuf) -> Result<(), failure::Error> {
|
||||||
Command::new(&gem)
|
Command::new(&gem)
|
||||||
.args(&["update"])
|
.args(&["update"])
|
||||||
|
|||||||
33
src/vim.rs
Normal file
33
src/vim.rs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
use std::fs;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub enum PluginFramework {
|
||||||
|
Plug,
|
||||||
|
Vundle,
|
||||||
|
NeoBundle,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PluginFramework {
|
||||||
|
pub fn detect(vimrc: &PathBuf) -> Option<PluginFramework> {
|
||||||
|
let content = fs::read_to_string(vimrc).ok()?;
|
||||||
|
|
||||||
|
if content.contains("NeoBundle") {
|
||||||
|
Some(PluginFramework::NeoBundle)
|
||||||
|
} else if content.contains("Vundle") {
|
||||||
|
Some(PluginFramework::Vundle)
|
||||||
|
} else if content.contains("plug#begin") {
|
||||||
|
Some(PluginFramework::Plug)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn upgrade_command(self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
PluginFramework::NeoBundle => "NeoBundleUpdate",
|
||||||
|
PluginFramework::Vundle => "PluginUpdate",
|
||||||
|
PluginFramework::Plug => "PlugUpdate",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user