lib/vim-flavor/facade.rb in vim-flavor-1.0.2 vs lib/vim-flavor/facade.rb in vim-flavor-1.0.3
- old
+ new
@@ -52,10 +52,16 @@
already_cached = nf.cached?
nf.clone() unless already_cached
if mode == :install and lf and nf.satisfied_with?(lf)
+ if not nf.cached_version?(lf.locked_version)
+ nf.fetch()
+ if not nf.cached_version?(lf.locked_version)
+ raise RuntimeError, "#{nf.repo_name} is locked to #{lf.locked_version}, but no such version exists"
+ end
+ end
nf.use_specific_version(lf.locked_version)
else
nf.fetch() if already_cached
nf.use_appropriate_version()
end
@@ -68,24 +74,52 @@
def deploy_flavors(flavors, flavors_path)
trace "Deploying plugins...\n"
a_flavors_path = File.absolute_path(flavors_path)
+ deployment_memo = LockFile.load_or_new(a_flavors_path.to_lockfile_path)
+ # To uninstall flavors which were deployed by vim-flavor 1.0.2 or
+ # older, the whole deployed flavors have to be removed. Because
+ # deployment_memo is recorded since 1.0.3.
FileUtils.rm_rf(
[a_flavors_path],
:secure => true
- )
+ ) if deployment_memo.flavors.empty?
create_vim_script_for_bootstrap(a_flavors_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(a_flavors_path)
+ df = deployment_memo.flavor_table[f.repo_name]
+ deployed_version = (df and df.locked_version)
+ if f.locked_version == deployed_version
+ trace " skipped (already deployed)\n"
+ else
+ FileUtils.rm_rf(
+ [f.make_deployment_path(a_flavors_path)],
+ :secure => true
+ )
+ f.deploy(a_flavors_path)
+ trace " done\n"
+ end
end
+
+ deployment_memo.flavors.each do |df|
+ if flavors.all? {|f| f.repo_name != df.repo_name}
+ trace " #{df.repo_name} ..."
+ FileUtils.rm_rf(
+ [df.make_deployment_path(a_flavors_path)],
+ :secure => true
+ )
+ trace " uninstalled\n"
+ end
+ end
+
+ deployment_memo.flavors = flavors
+ deployment_memo.save()
end
def create_vim_script_for_bootstrap(flavors_path)
bootstrap_path = flavors_path.to_bootstrap_path
FileUtils.mkdir_p(File.dirname(bootstrap_path))