diff options
author | Guangxiong Lin <[email protected]> | 2021-12-12 10:58:36 +0800 |
---|---|---|
committer | Guangxiong Lin <[email protected]> | 2021-12-12 10:58:36 +0800 |
commit | 1da1c7f36c4201c4f24e89eb3c4e41828f61258b (patch) | |
tree | 9106a718b825d8fa970ebcd1532e977224b85d00 /bin/vim-pack | |
parent | 1c20457aaf832ac3867b6b8baa93ba84b9162680 (diff) | |
download | dotfiles-1da1c7f36c4201c4f24e89eb3c4e41828f61258b.tar.gz dotfiles-1da1c7f36c4201c4f24e89eb3c4e41828f61258b.tar.bz2 dotfiles-1da1c7f36c4201c4f24e89eb3c4e41828f61258b.zip |
Add vim plug nnn.vim. Use packadd to manage new package
Diffstat (limited to 'bin/vim-pack')
-rwxr-xr-x | bin/vim-pack | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/bin/vim-pack b/bin/vim-pack new file mode 100755 index 0000000..25bc165 --- /dev/null +++ b/bin/vim-pack @@ -0,0 +1,104 @@ +#!/usr/bin/env python + +import os +import glob +import asyncio +import subprocess + +INTSTALL_DIR=os.path.expandvars("$HOME/.vim/pack/vendor") + +class Package(object): + def __init__(self, name, location, type='opt', posthook=None): + self.name = name + self.location = location + self.type = type + self.posthook = posthook + self.path = self.get_path() + + def fail(self): + print("%s : FAIL" % self.name) + + def get_path(self): + return os.path.expandvars("$HOME/.vim/pack/vendor/%s/%s" % (self.type, self.name)) + + async def update(self): + cmd = "cd %s && git pull" % self.path + print("%s : Updating ..." % self.name) + + if not os.path.exists(self.path): + os.mkdir(self.path) + cmd = "git clone --depth 1 %s %s" % (self.location, self.path) + if not os.path.isdir(self.path): + print("ERROR: package directory error: %s" % self.name) + self.fail() + return + + process = await asyncio.create_subprocess_shell( + cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, + ) + + stdout, stderr = await process.communicate() + + if process.returncode != 0: + print("ERROR: git command error") + print(stdout) + print(stderr) + self.fail() + return + + if self.posthook: + self.posthook() + + print("%s : Done" % (self.name)) + + return "" + +packages = [ + Package( + "nnn.vim", + "[email protected]:mcchrish/nnn.vim.git", + "opt", + ), +] + +def update_packages(packages): + tasks = [ package.update() for package in packages ] + loop = asyncio.get_event_loop() + commands = asyncio.gather(*tasks) + result = loop.run_until_complete(commands) + loop.close() + # print(result) + +def clean(packages): + paths = [ package.path for package in packages ] + to_clean = [ + path + for path in glob.glob(os.path.expandvars("$HOME/.vim/pack/vendor/*/*")) + if path not in paths + ] + + if not to_clean: + return + + print("The following directory will be cleaned: [y/N]") + print(to_clean) + if input() not in ["y", "Yes", "yes"]: + return + + cmd = ["rm", "-rf"] + to_clean + result = subprocess.run(cmd, capture_output=True, shell=False) + print(' '.join(cmd)) + if result.returncode != 0: + print("FAIL on cleaning the following directory:") + print(result.stdout) + print(result.stderr) + else: + print("DONE") + + +def main(): + update_packages(packages) + clean(packages) + +if __name__ == "__main__": + main() |