lib/vim-flavor/facade.rb in vim-flavor-0.0.4 vs lib/vim-flavor/facade.rb in vim-flavor-1.0.0
- old
+ new
@@ -1,60 +1,89 @@
require 'fileutils'
module Vim
module Flavor
class Facade
- attr_reader :flavorfile
- attr_accessor :flavorfile_path
- attr_reader :lockfile
- attr_accessor :lockfile_path
- attr_accessor :traced
+ def trace message
+ print message
+ end
- def initialize()
- @flavorfile = nil # FlavorFile
- @flavorfile_path = "#{Dir.getwd()}/VimFlavor"
- @lockfile = nil # LockFile
- @lockfile_path = "#{Dir.getwd()}/VimFlavor.lock"
- @traced = false
+ def refresh_flavors(mode, vimfiles_path)
+ flavorfile = FlavorFile.load(Dir.getwd().to_flavorfile_path)
+ lockfile = LockFile.load_or_new(Dir.getwd().to_lockfile_path)
+
+ lockfile.update(
+ complete(
+ flavorfile.flavor_table,
+ lockfile.flavor_table,
+ mode
+ )
+ )
+ lockfile.save()
+
+ deploy_flavors(lockfile.flavors, vimfiles_path)
+
+ trace "Completed.\n"
end
- def trace(message)
- print(message) if @traced
+ def install(vimfiles_path)
+ refresh_flavors(:install, vimfiles_path)
end
- def load()
- @flavorfile = FlavorFile.new()
- @flavorfile.eval_flavorfile(@flavorfile_path)
-
- @lockfile = LockFile.new(@lockfile_path)
- @lockfile.load() if File.exists?(@lockfile_path)
+ def upgrade(vimfiles_path)
+ refresh_flavors(:upgrade, vimfiles_path)
end
- def make_new_flavors(current_flavors, locked_flavors, mode)
- new_flavors = {}
+ def complete(current_flavor_table, locked_flavor_table, mode)
+ completed_flavor_table = {}
- current_flavors.each do |repo_uri, cf|
- lf = locked_flavors[repo_uri]
- nf = cf.dup()
+ trace "Checking versions...\n"
- nf.locked_version =
- if (not lf) or
- cf.version_contraint != lf.version_contraint or
- mode == :update then
- cf.locked_version
- else
- lf.locked_version
- end
+ current_flavor_table.values.map(&:dup).sort_by(&:repo_name).
+ before_each {|nf| trace " Use #{nf.repo_name} ..."}.
+ after_each {|nf| trace " #{nf.locked_version}\n"}.
+ on_failure {trace " failed\n"}.
+ each do |nf|
+ lf = locked_flavor_table[nf.repo_name]
- new_flavors[repo_uri] = nf
+ already_cached = nf.cached?
+ nf.clone() unless already_cached
+
+ if mode == :install and lf and nf.satisfied_with?(lf)
+ nf.use_specific_version(lf.locked_version)
+ else
+ nf.fetch() if already_cached
+ nf.use_appropriate_version()
+ end
+
+ completed_flavor_table[nf.repo_name] = nf
end
- new_flavors
+ completed_flavor_table
end
+ def deploy_flavors(flavors, vimfiles_path)
+ trace "Deploying plugins...\n"
+
+ FileUtils.rm_rf(
+ ["#{vimfiles_path.to_flavors_path}"],
+ :secure => true
+ )
+
+ create_vim_script_for_bootstrap(vimfiles_path)
+
+ flavors.
+ before_each {|f| trace " #{f.repo_name} #{f.locked_version} ..."}.
+ after_each {|f| trace " done\n"}.
+ on_failure {trace " failed\n"}.
+ each do |f|
+ f.deploy(vimfiles_path)
+ end
+ end
+
def create_vim_script_for_bootstrap(vimfiles_path)
- bootstrap_path = "#{vimfiles_path.to_flavors_path()}/bootstrap.vim"
+ bootstrap_path = vimfiles_path.to_flavors_path.to_bootstrap_path
FileUtils.mkdir_p(File.dirname(bootstrap_path))
File.open(bootstrap_path, 'w') do |f|
f.write(<<-'END')
function! s:bootstrap()
let current_rtp = &runtimepath
@@ -82,75 +111,9 @@
call s:bootstrap()
END
end
end
-
- def deploy_flavors(flavor_list, vimfiles_path)
- FileUtils.rm_rf(
- ["#{vimfiles_path.to_flavors_path()}"],
- :secure => true
- )
-
- create_vim_script_for_bootstrap(vimfiles_path)
- flavor_list.each do |f|
- trace("Deploying #{f.repo_name} (#{f.locked_version})\n")
- f.deploy(vimfiles_path)
- end
- end
-
- def save_lockfile()
- @lockfile.save()
- end
-
- def complete_locked_flavors(mode)
- nfs = {}
- @flavorfile.flavors.each do |repo_uri, cf|
- nf = cf.dup()
- lf = @lockfile.flavors[repo_uri]
-
- trace("Using #{nf.repo_name} ... ")
- begin
- if not File.exists?(nf.cached_repo_path)
- nf.clone()
- end
-
- if mode == :upgrade_all or
- (not lf) or
- nf.version_contraint != lf.version_contraint then
- nf.fetch()
- nf.update_locked_version()
- else
- nf.locked_version = lf.locked_version
- end
- end
- trace("(#{nf.locked_version})\n")
-
- nfs[repo_uri] = nf
- end
-
- @lockfile.instance_eval do
- @flavors = nfs
- end
- end
-
- def get_default_vimfiles_path()
- # FIXME: Compute more appropriate value.
- "#{ENV['HOME']}/.vim"
- end
-
- def install(vimfiles_path)
- load()
- complete_locked_flavors(:upgrade_if_necessary)
- save_lockfile()
- deploy_flavors(lockfile.flavors.values, vimfiles_path)
- end
-
- def upgrade(vimfiles_path)
- load()
- complete_locked_flavors(:upgrade_all)
- save_lockfile()
- deploy_flavors(lockfile.flavors.values, vimfiles_path)
- end
end
end
end
+