diff --git a/lib/homesick.rb b/lib/homesick.rb index f19aca9..4c8711c 100644 --- a/lib/homesick.rb +++ b/lib/homesick.rb @@ -1,3 +1,4 @@ +# -*- encoding : utf-8 -*- require 'thor' class Homesick < Thor @@ -102,7 +103,7 @@ class Homesick < Thor castle = Pathname.new(castle) file = Pathname.new(file) check_castle_existance(castle, 'track') - + absolute_path = file.expand_path castle_path = castle_dir(castle) mv absolute_path, castle_path @@ -141,6 +142,23 @@ class Homesick < Thor end end + desc "destroy CASTLE", "Delete all symlnks and remove the cloned repository" + def destroy(name) + check_castle_existance name, "destroy" + + inside castle_dir(name) do + files = Pathname.glob('{.*,*}').reject{|a| [".",".."].include?(a.to_s)} + files.each do |path| + + inside home_dir do + adjusted_path = (home_dir + path).basename + rm adjusted_path + end + end + rm_r castle_dir(name) + end + + end protected diff --git a/lib/homesick/actions.rb b/lib/homesick/actions.rb index 603ad68..9d15c5a 100644 --- a/lib/homesick/actions.rb +++ b/lib/homesick/actions.rb @@ -1,3 +1,4 @@ +# -*- encoding : utf-8 -*- class Homesick module Actions # TODO move this to be more like thor's template, empty_directory, etc @@ -75,6 +76,16 @@ class Homesick end end + def rm(file) + say_status "rm #{file}", '', :green unless options[:quiet] + system "rm #{file}" + end + + def rm_r(dir) + say_status "rm -r #{dir}", '', :green unless options[:quiet] + system "rm -r #{dir}" + end + def ln_s(source, destination, config = {}) source = Pathname.new(source) destination = Pathname.new(destination) diff --git a/spec/homesick_spec.rb b/spec/homesick_spec.rb index 5dd2b6d..4e912da 100644 --- a/spec/homesick_spec.rb +++ b/spec/homesick_spec.rb @@ -1,4 +1,5 @@ -require 'spec_helper' +# -*- encoding : utf-8 -*- +require 'spec_helper' describe "homesick" do let(:home) { create_construct } @@ -158,4 +159,24 @@ describe "homesick" do some_rc_file.readlink.should == tracked_file end end + + describe "destroy" do + it "removes the symlink files" do + given_castle("stronghold") + some_rc_file = home.file '.some_rc_file' + homesick.track(some_rc_file.to_s, "stronghold") + homesick.destroy('stronghold') + + some_rc_file.should_not be_exist + end + + it "deletes the cloned repository" do + castle = given_castle("stronghold") + some_rc_file = home.file '.some_rc_file' + homesick.track(some_rc_file.to_s, "stronghold") + homesick.destroy('stronghold') + + castle.should_not be_exist + end + end end