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))