homesick 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,16 @@
1
+ # 2.0.0
2
+
3
+ * Better support for recognizing git urls (thanks jacobat!)
4
+ * if it looks like a github user/repo, do that
5
+ * otherwise hand off to git clone
6
+ * Listing now displays in color, and show git remote
7
+ * Support pretend, force, and quiet modes
8
+
1
9
  # 0.1.1
2
10
 
3
11
  * Fixed trying to link against castles that don't exist
4
12
  * Fixed linking, which tries to exclude . and .. from the list of files to
5
- link (thanks Martinos)
13
+ link (thanks Martinos!)
6
14
 
7
15
  # 0.1.0
8
16
 
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ Jeweler::Tasks.new do |gem|
22
22
  gem.email = "josh@technicalpickles.com"
23
23
  gem.homepage = "http://github.com/technicalpickles/homesick"
24
24
  gem.authors = ["Joshua Nichols"]
25
- gem.version = "0.1.1"
25
+ gem.version = "0.2.0"
26
26
  # Have dependencies? Add them to Gemfile
27
27
 
28
28
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{homesick}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joshua Nichols"]
12
- s.date = %q{2010-03-17}
12
+ s.date = %q{2010-03-19}
13
13
  s.default_executable = %q{homesick}
14
14
  s.description = %q{
15
15
  A man’s home (directory) is his castle, so don’t leave home with out it.
@@ -35,6 +35,8 @@ Gem::Specification.new do |s|
35
35
  "bin/homesick",
36
36
  "homesick.gemspec",
37
37
  "lib/homesick.rb",
38
+ "lib/homesick/actions.rb",
39
+ "lib/homesick/shell.rb",
38
40
  "spec/homesick/homesick_spec.rb",
39
41
  "spec/spec.opts",
40
42
  "spec/spec_helper.rb"
@@ -1,40 +1,29 @@
1
1
  require 'thor'
2
2
 
3
3
  class Homesick < Thor
4
- include Thor::Actions
4
+ autoload :Shell, 'homesick/shell'
5
+ autoload :Actions, 'homesick/actions'
5
6
 
6
- # Hack in support for diffing symlinks
7
- class Shell < Thor::Shell::Color
7
+ include Thor::Actions
8
+ include Homesick::Actions
8
9
 
9
- def show_diff(destination, content)
10
- destination = Pathname.new(destination)
10
+ add_runtime_options!
11
11
 
12
- if destination.symlink?
13
- say "- #{destination.readlink}", :red, true
14
- say "+ #{content.expand_path}", :green, true
15
- else
16
- super
17
- end
18
- end
19
-
20
- end
12
+ GITHUB_NAME_REPO_PATTERN = /\A([A-Za-z_-]+)\/([A-Za-z_-]+)\Z/
21
13
 
22
14
  def initialize(args=[], options={}, config={})
23
15
  super
24
16
  self.shell = Homesick::Shell.new
25
17
  end
26
18
 
27
- GIT_URI_PATTERN = /^git:\/\//
28
- GITHUB_NAME_REPO_PATTERN = /([A-Za-z_-]+)\/([A-Za-z_-]+)/
29
-
30
19
  desc "clone URI", "Clone +uri+ as a castle for homesick"
31
20
  def clone(uri)
32
21
  empty_directory repos_dir, :verbose => false
33
22
  inside repos_dir do
34
- if uri =~ GIT_URI_PATTERN
23
+ if uri =~ GITHUB_NAME_REPO_PATTERN
24
+ git_clone "git://github.com/#{$1}/#{$2}.git", :destination => "#{$1}_#{$2}"
25
+ else
35
26
  git_clone uri
36
- elsif uri =~ GITHUB_NAME_REPO_PATTERN
37
- git_clone "git://github.com/#{$1}/#{$2}.git", "#{$1}_#{$2}"
38
27
  end
39
28
  end
40
29
  end
@@ -67,7 +56,9 @@ class Homesick < Thor
67
56
  def list
68
57
  inside repos_dir do
69
58
  Pathname.glob('*') do |home|
70
- puts home
59
+ inside home do
60
+ say_status home, `git config remote.origin.url`, :cyan
61
+ end
71
62
  end
72
63
  end
73
64
  end
@@ -90,43 +81,6 @@ class Homesick < Thor
90
81
 
91
82
  protected
92
83
 
93
- # TODO move this to be more like thor's template, empty_directory, etc
94
- def git_clone(repo, config = {})
95
- config ||= {}
96
- destination = config[:destination] || begin
97
- repo =~ /([^\/]+)\.git$/
98
- $1
99
- end
100
-
101
- destination = Pathname.new(destination) unless destination.kind_of?(Pathname)
102
-
103
- if ! destination.directory?
104
- say_status 'git clone', "#{repo} to #{destination.expand_path}", :green if config.fetch(:verbose, true)
105
- system "git clone #{repo} #{destination}" unless options[:pretend]
106
- else
107
- say_status :exist, destination.expand_path, :blue
108
- end
109
- end
110
-
111
- def symlink(source, destination, config = {})
112
- destination = Pathname.new(destination)
113
-
114
- if destination.symlink?
115
- if destination.readlink == source
116
- say_status :identical, destination.expand_path, :blue
117
- else
118
- say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red
119
-
120
- if shell.file_collision(destination) { source }
121
- system "ln -sf #{source} #{destination}"
122
- end
123
- end
124
- else
125
- say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green
126
- system "ln -s #{source} #{destination}"
127
- end
128
- end
129
-
130
84
  def user_dir
131
85
  self.class.user_dir
132
86
  end
@@ -0,0 +1,40 @@
1
+ class Homesick
2
+ module Actions
3
+ # TODO move this to be more like thor's template, empty_directory, etc
4
+ def git_clone(repo, config = {})
5
+ config ||= {}
6
+ destination = config[:destination] || begin
7
+ repo =~ /([^\/]+)\.git$/
8
+ $1
9
+ end
10
+
11
+ destination = Pathname.new(destination) unless destination.kind_of?(Pathname)
12
+
13
+ if ! destination.directory?
14
+ say_status 'git clone', "#{repo} to #{destination.expand_path}", :green unless options[:quiet]
15
+ system "git clone -q #{repo} #{destination}" unless options[:pretend]
16
+ else
17
+ say_status :exist, destination.expand_path, :blue unless options[:quiet]
18
+ end
19
+ end
20
+
21
+ def symlink(source, destination, config = {})
22
+ destination = Pathname.new(destination)
23
+
24
+ if destination.symlink?
25
+ if destination.readlink == source
26
+ say_status :identical, destination.expand_path, :blue unless options[:quiet]
27
+ else
28
+ say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red unless options[:quiet]
29
+
30
+ if shell.file_collision(destination) { source }
31
+ system "ln -sf #{source} #{destination}" unless options[:pretend]
32
+ end
33
+ end
34
+ else
35
+ say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green unless options[:quiet]
36
+ system "ln -s #{source} #{destination}" unless options[:pretend]
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ class Homesick
2
+ # Hack in support for diffing symlinks
3
+ class Shell < Thor::Shell::Color
4
+
5
+ def show_diff(destination, content)
6
+ destination = Pathname.new(destination)
7
+
8
+ if destination.symlink?
9
+ say "- #{destination.readlink}", :red, true
10
+ say "+ #{content.expand_path}", :green, true
11
+ else
12
+ super
13
+ end
14
+ end
15
+
16
+ end
17
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joshua Nichols
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-17 00:00:00 -04:00
17
+ date: 2010-03-19 00:00:00 -04:00
18
18
  default_executable: homesick
19
19
  dependencies: []
20
20
 
@@ -39,6 +39,8 @@ files:
39
39
  - bin/homesick
40
40
  - homesick.gemspec
41
41
  - lib/homesick.rb
42
+ - lib/homesick/actions.rb
43
+ - lib/homesick/shell.rb
42
44
  - spec/homesick/homesick_spec.rb
43
45
  - spec/spec.opts
44
46
  - spec/spec_helper.rb