dit 0.3 → 0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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