Merge branch 'master' of git://github.com/technicalpickles/homesick

This commit is contained in:
Jorge Dias
2011-05-31 14:09:35 +02:00
10 changed files with 150 additions and 52 deletions

View File

@@ -21,7 +21,12 @@ class Homesick < Thor
inside repos_dir do
destination = nil
if File.exist?(uri)
destination = Pathname.new(uri).basename
uri = Pathname.new(uri).expand_path
if uri.to_s.start_with?(repos_dir)
raise "Castle already cloned to #{uri}"
end
destination = uri.basename
ln_s uri, destination
elsif uri =~ GITHUB_NAME_REPO_PATTERN
@@ -60,14 +65,17 @@ class Homesick < Thor
end
desc "pull NAME", "Update the specified castle"
def pull(name)
check_castle_existance(name, "pull")
inside repos_dir.join(name) do
git_pull
git_submodule_init
git_submodule_update
method_option :all, :type => :boolean, :default => false, :required => false, :desc => "Update all cloned castles"
def pull(name="")
if options[:all]
inside_each_castle do |castle|
shell.say castle.to_s.gsub(repos_dir.to_s + '/', '') + ':'
update_castle castle
end
else
update_castle name
end
end
desc "symlink NAME", "Symlinks all dotfiles from the specified castle"
@@ -107,12 +115,8 @@ class Homesick < Thor
desc "list", "List cloned castles"
def list
#require 'ruby-debug'; breakpoint
Pathname.glob("#{repos_dir}/**/*/.git") do |git_dir|
castle = git_dir.dirname
Dir.chdir castle do # so we can call git config from the right contxt
say_status castle.relative_path_from(repos_dir), `git config remote.origin.url`.chomp, :cyan
end
inside_each_castle do |castle|
say_status castle.relative_path_from(repos_dir), `git config remote.origin.url`.chomp, :cyan
end
end
@@ -159,4 +163,29 @@ class Homesick < Thor
end
end
def all_castles
dirs = Pathname.glob("#{repos_dir}/**/*/.git")
# reject paths that lie inside another castle, like git submodules
return dirs.reject do |dir|
dirs.any? {|other| dir != other && dir.fnmatch(other.parent.join('*').to_s) }
end
end
def inside_each_castle(&block)
all_castles.each do |git_dir|
castle = git_dir.dirname
Dir.chdir castle do # so we can call git config from the right contxt
yield castle
end
end
end
def update_castle(castle)
check_castle_existance(castle, "pull")
inside repos_dir.join(castle) do
git_pull
git_submodule_init
git_submodule_update
end
end
end