65 lines
1.5 KiB
Ruby
Executable File
65 lines
1.5 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require 'fileutils'
|
|
require 'open-uri'
|
|
require 'yaml'
|
|
|
|
BASE_DIR = File.join(File.dirname(__FILE__), '..', 'vim')
|
|
BUNDLE_DIR = File.join(BASE_DIR, 'bundle')
|
|
PACKAGES_FILE = File.join(BASE_DIR, 'packages.yml')
|
|
|
|
ACTION = ARGV[0]
|
|
exit unless [nil, 'edit', 'install', 'update'].include?(ACTION)
|
|
|
|
if ACTION == 'edit'
|
|
`subl #{PACKAGES_FILE}`
|
|
exit
|
|
end
|
|
|
|
PACKAGES = (YAML.load_file(PACKAGES_FILE) || {}).map do |package|
|
|
package['dir'] = File.join(BUNDLE_DIR, package['dir'])
|
|
package
|
|
end
|
|
INSTALLED = Dir.entries(BUNDLE_DIR).delete_if{ |f| ['.', '..'].include?(f) }
|
|
|
|
def install(meta)
|
|
`git clone git@github.com:#{meta['github']}.git #{meta['dir']} 2>/dev/null`
|
|
FileUtils.mv("#{meta['dir']}/.git", "#{meta['dir']}/_git")
|
|
end
|
|
|
|
def update(meta)
|
|
FileUtils.mv("#{meta['dir']}/_git", "#{meta['dir']}/.git")
|
|
`cd #{meta['dir']} && git pull 2>/dev/null`
|
|
FileUtils.mv("#{meta['dir']}/.git", "#{meta['dir']}/_git")
|
|
end
|
|
|
|
def remove(dir)
|
|
name = dir.split(?/).last.gsub(/\.-/, '_').split(?_).map(&:capitalize).join(' ')
|
|
puts "Removing #{name}"
|
|
FileUtils.rm_r(File.join(BUNDLE_DIR, dir))
|
|
end
|
|
|
|
# Removing packages
|
|
(INSTALLED - PACKAGES.map{ |b| b['dir'].split(?/).last }).each{ |b| remove(b) }
|
|
|
|
PACKAGES.each do |meta|
|
|
if File.exist?(meta['dir'])
|
|
if ACTION != 'install'
|
|
puts "Updating #{meta['name']}"
|
|
update(meta)
|
|
else
|
|
puts "Using #{meta['name']}"
|
|
end
|
|
else
|
|
if ACTION != 'update'
|
|
puts "Installing #{meta['name']}"
|
|
install(meta)
|
|
else
|
|
puts "Using #{meta['name']}"
|
|
end
|
|
end
|
|
end
|
|
|
|
puts
|
|
puts 'Done'
|