From c0797dd607513ef4057568c8b2d33e1a17f68139 Mon Sep 17 00:00:00 2001 From: Joshua Nichols Date: Thu, 1 Apr 2010 21:59:15 -0400 Subject: [PATCH] Cloning will now try to init and update git submodules, if they exist. --- lib/homesick.rb | 19 +++++++++++++++++-- lib/homesick/actions.rb | 12 +++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/homesick.rb b/lib/homesick.rb index dbec486..b02b9c4 100644 --- a/lib/homesick.rb +++ b/lib/homesick.rb @@ -19,13 +19,28 @@ class Homesick < Thor desc "clone URI", "Clone +uri+ as a castle for homesick" def clone(uri) inside repos_dir do + destination = nil if File.exist?(uri) - ln_s uri, File.basename(uri) + destination = Pathname.new(uri).basename + + ln_s uri, destination elsif uri =~ GITHUB_NAME_REPO_PATTERN - git_clone "git://github.com/#{$1}.git", :destination => $1 + destination = Pathname.new($1) + git_clone "git://github.com/#{$1}.git", :destination => destination else + if uri =~ /\/([^\/]*).git\Z/ + destination = Pathname.new($1) + end + git_clone uri end + + if destination.join('.gitmodules').exist? + inside destination do + git_submodule_init + git_submodule_update + end + end end end diff --git a/lib/homesick/actions.rb b/lib/homesick/actions.rb index df7fa1d..e92e688 100644 --- a/lib/homesick/actions.rb +++ b/lib/homesick/actions.rb @@ -5,7 +5,7 @@ class Homesick config ||= {} destination = config[:destination] || begin repo =~ /([^\/]+)\.git$/ - $1 + $1 end destination = Pathname.new(destination) unless destination.kind_of?(Pathname) @@ -19,6 +19,16 @@ class Homesick end end + def git_submodule_init(config = {}) + say_status 'git submodule', 'init', :green unless options[:quiet] + system "git submodule --quiet init" unless options[:pretend] + end + + def git_submodule_update(config = {}) + say_status 'git submodule', 'update', :green unless options[:quiet] + system "git submodule --quiet update >/dev/null 2>&1" unless options[:pretend] + end + def ln_s(source, destination, config = {}) source = Pathname.new(source) destination = Pathname.new(destination)