dit 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dit +1 -1
  3. data/lib/dit.rb +51 -32
  4. metadata +2 -3
  5. data/lib/dit/cmd.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 842ec58e97f7f0b07c8d2d246fccf573f4414675
4
- data.tar.gz: 9d8810fca2dee2624ba6f0c30c245cb199a7a32b
3
+ metadata.gz: 0edc19b873a4cf7c2ae46ab6e96eb0dbc8c08a24
4
+ data.tar.gz: 9520d2931559df0dc4b1455a7ea5cdedbfab2b02
5
5
  SHA512:
6
- metadata.gz: 5aba260ee163c1120040d36fe400994645eaa2decca5e399f4b9d6f085175257bb99a0203314ff2ed2897dd8aa9b76550b097de438e7098ee9462e752ce1700d
7
- data.tar.gz: 939a7a10e38c2fae3e510be92ab8c9ee07862fd000a926c760368c67f45f55d8b3792f543dc396534a9b0968d4cf30776269e0087f2964271802c08214317c32
6
+ metadata.gz: 6c5638af480f07cf7218ae2d76f040d43eaa7e4f04dfa64e5026093987cd44421d26c440f5e6892e5a680898b6d091e5e125e374ada3af3617d42e2a33543464
7
+ data.tar.gz: b30b5f71ceaa05926160959ab829cfd1ac9086829fd7031d01e260cda6253195a82e672242bebb1c9d8e9aa4ea2194de1b668161d21f7b7ffd0e7c2cd8fc1de2
data/bin/dit CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'dit/cmd'
3
+ require 'dit'
4
4
  DitCMD.start(ARGV)
data/lib/dit.rb CHANGED
@@ -34,7 +34,7 @@ class Dit
34
34
  end
35
35
 
36
36
  def self.prompt_for_symlink_all
37
- puts 'Dit has detected an existing git repo, and will initialize it to ' +
37
+ puts 'Dit has detected an existing git repo, and will initialize it to ' \
38
38
  'populate your ~ directory with symlinks.'
39
39
  puts 'Please confirm this by typing y, or anything else to cancel.'
40
40
  response = STDIN.gets.chomp.upcase
@@ -60,19 +60,25 @@ class Dit
60
60
  end
61
61
 
62
62
  def self.symlink_list(list)
63
+ list = get_roots list
64
+ list.each do |f|
65
+ wd_f = File.expand_path f
66
+ home_f = File.expand_path(f).gsub(Dir.getwd, Dir.home)
67
+ symlink wd_f, home_f
68
+ end
69
+ end
70
+
71
+ def self.get_roots(list)
63
72
  root_list = Set[]
64
73
  list.each do |f|
65
74
  f.strip!
66
75
  root = f.split('/')[0]
67
76
  root ||= f
68
- root_list = root_list | Set[root]
77
+ root_list |= Set[root]
69
78
  end
70
79
  root_list.delete?('')
71
- root_list.each do |f|
72
- wd_f = File.absolute_path f
73
- home_f = File.absolute_path(f).gsub(Dir.getwd, Dir.home)
74
- symlink wd_f, home_f
75
- end
80
+ %w(.gitignore README.md README).each { |i| root_list.delete(i) }
81
+ root_list
76
82
  end
77
83
 
78
84
  def self.symlink_unlinked
@@ -86,16 +92,34 @@ class Dit
86
92
 
87
93
  def self.symlink(a, b)
88
94
  if File.exist?(b)
89
- return if (File.symlink?(b) && File.readlink(b).include(Dir.getwd))
90
- puts "#{b} conflicts with #{a}. Remove #{b}? [yN]"
91
- response = STDIN.gets.upcase
92
- return unless response == 'Y'
95
+ return if File.symlink?(b) && File.readlink(b).include?(Dir.getwd)
96
+ return unless prompt_for_overwrite a, b
93
97
  end
94
98
  File.symlink(a, b)
95
99
  rescue
96
100
  puts "Failed to symlink #{a} to #{b}"
97
101
  end
98
102
 
103
+ def self.prompt_for_overwrite(a, b)
104
+ return false if @never
105
+ (FileUtils.rm(b); return true) if @always # just this once;
106
+ puts "#{b} conflicts with #{a}. Remove #{b}? [y/n/a/s]"
107
+ puts "To always overwrite, type \"A\". To never overwrite, type \"S\""
108
+ response = STDIN.gets.upcase
109
+ case response
110
+ when 'Y'
111
+ FileUtils.rm(b)
112
+ return true
113
+ when 'A'
114
+ @always = true
115
+ FileUtils.rm(b)
116
+ return true
117
+ when 'S'
118
+ @never = true
119
+ end
120
+ false
121
+ end
122
+
99
123
  def self.detect_hook(hook)
100
124
  return [false, false] unless File.exist?(hook)
101
125
 
@@ -105,11 +129,11 @@ class Dit
105
129
  puts 'Dit hook already installed.'
106
130
  cannot_hook = true
107
131
  elsif `cat #{hook}`.include?('#!/usr/bin/env bash')
108
- puts "You have #{hook} hooks already that use bash, so we'll " +
132
+ puts "You have #{hook} hooks already that use bash, so we'll " \
109
133
  'append ourselves to the file.'
110
134
  append_to_hook = true
111
135
  else
112
- puts "You have #{hook} hooks that use some foreign language, " +
136
+ puts "You have #{hook} hooks that use some foreign language, " \
113
137
  "so we won't interfere, but we can't hook in there."
114
138
  cannot_hook = true
115
139
  end
@@ -119,16 +143,16 @@ class Dit
119
143
 
120
144
  def self.write_hook(hook_file, do_append)
121
145
  File.open(hook_file, 'a') do |f|
122
- f.write "#!/usr/bin/env bash\n" unless do_append
123
- f.write "( exec ./.git/hooks/dit )\n"
146
+ f.puts '#!/usr/bin/env bash' unless do_append
147
+ f.puts '( exec ./.git/hooks/dit )'
124
148
  end
125
149
  end
126
150
 
127
151
  def self.make_dit
128
152
  File.open('dit', 'a') do |f|
129
- f.write "#!/usr/bin/env ./.git/hooks/force-ruby\n"
130
- f.write "require 'dit'\n"
131
- f.write "Dit.symlink_unlinked\n"
153
+ f.puts '#!/usr/bin/env ./.git/hooks/force-ruby'
154
+ f.puts "require 'dit'"
155
+ f.puts 'Dit.symlink_unlinked'
132
156
  end
133
157
  end
134
158
 
@@ -142,22 +166,15 @@ class Dit
142
166
  if ruby_path != '/usr/bin/ruby'
143
167
  ruby_folder = File.dirname(ruby_path)
144
168
  File.open('force-ruby', 'a') do |f|
145
- f.write "#!/usr/bin/env bash\n"
146
- f.write "set -e\n"
147
- if ENV['RBENV_ROOT']
148
- # Use Rbenv's shims instead of directly going to ruby bin
149
- # By the way, if anyone has particular PATHs I should use for
150
- # RVM or chruby, please let me know!
151
- f.write "PATH=#{File.join(ENV['RBENV_ROOT'], 'shims')}:$PATH\n"
152
- else
153
- f.write "PATH=#{ruby_folder}:$PATH\n"
154
- end
155
- f.write "exec ruby \"$@\"\n"
169
+ f.puts '#!/usr/bin/env bash'
170
+ f.puts 'set -e'
171
+ f.puts 'PATH=#{ruby_folder}:$PATH'
172
+ f.puts "exec ruby \"$@\""
156
173
  end
157
174
  else
158
175
  File.open('force-ruby', 'a') do |f|
159
- f.write "#!/usr/bin/env bash\n"
160
- f.write "exec ruby \"$@\"\n"
176
+ f.puts '#!/usr/bin/env bash'
177
+ f.puts "exec ruby \"$@\""
161
178
  end
162
179
  end
163
180
  end
@@ -176,10 +193,12 @@ class Dit
176
193
  end
177
194
 
178
195
  def self.version
179
- '0.3'
196
+ '0.4'
180
197
  end
181
198
  end
182
199
 
200
+ # This is the thor class the CLI calls.
201
+ # It's a thin layer on top of the Dit class. See above.
183
202
  class DitCMD < Thor
184
203
  desc 'init', 'Initialize the current directory as a dit directory.'
185
204
  def init
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dit
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Fahringer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-21 00:00:00.000000000 Z
11
+ date: 2015-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -68,7 +68,6 @@ extra_rdoc_files: []
68
68
  files:
69
69
  - bin/dit
70
70
  - lib/dit.rb
71
- - lib/dit/cmd.rb
72
71
  homepage: http://github.com/vulpino/dit
73
72
  licenses:
74
73
  - MIT
@@ -1,23 +0,0 @@
1
- require 'dit'
2
-
3
- class DitCMD < Thor
4
- desc 'init', 'Initialize the current directory as a dit directory.'
5
- def init
6
- Dit.init
7
- end
8
-
9
- desc 'rehash', "Manually symlink everything in case a git hook didn't run."
10
- def rehash
11
- Dit.symlink_all
12
- end
13
-
14
- desc 'version', 'Print the dit version.'
15
- def version
16
- puts "Dit #{Dit.version} on ruby #{RUBY_VERSION}"
17
- end
18
-
19
- desc 'clean', 'Clean dead symlinks from your home dir.'
20
- def clean
21
- Dit.clean_home
22
- end
23
- end