dit 0.2.1 → 0.2.2

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dit.rb +82 -99
  3. metadata +1 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9eb1874c62ec31afe27cb0af065d6a80e0353128
4
- data.tar.gz: 920fcc3e92fe1a3bae5f2f10657df2f7d524fe07
3
+ metadata.gz: 06fd6b92b3c391f88bca25aa648a6878f687f628
4
+ data.tar.gz: f673fc052775a29a66c83e5901bb60b3861c5995
5
5
  SHA512:
6
- metadata.gz: 7036f768b02c42805287c8813b0a55809ae20dbcc81216de386babd72b80b2cb2c4b6f89bbf0dc71cb33505fdb48bb7e033f5156d4b9367e8cdd1420948461d4
7
- data.tar.gz: 709f19cc118efcd93357bacbf7bca2b6908092f2b749924d14a53e78df89a9467714fa84499853d16752f47c2d17d955daa5bebf5d7e6ded755d8d742e73b9a5
6
+ metadata.gz: 30c40ac1342985a2008b4e0f573b43f82226160142188036482d79fab5abc77bdddae06c57dd57f16c4376b621a0b0d4f98c2d16ac9d38ca0bdb9b1498c47b14
7
+ data.tar.gz: d159ee212b017368be94f3dd84b14ad907f6ffda3b0c24f8142e4d8c4a3a1165da4fa405c53cc0cb0f873caf90eb7924c43d4b4597f934f1bd8298d4d241c97a
data/lib/dit.rb CHANGED
@@ -5,82 +5,43 @@ require 'json'
5
5
  require 'fileutils'
6
6
 
7
7
  class Dit
8
+ # This is the class where all the dit work is done.
9
+ # The thor class is basically a very thin layer on top of this that just
10
+ # calls its methods directly.
8
11
  def self.init
9
12
  if OS.windows?
10
- puts "This is a windows system, and dit does not support windows."
11
- puts "See vulpino/dit issue #1 if you have a potential solution."
13
+ puts 'This is a windows system, and dit does not support windows.'
14
+ puts 'See vulpino/dit issue #1 if you have a potential solution.'
12
15
  return
13
16
  end
14
17
 
15
- if Dir.exist?(".git")
16
- puts "Dit has detected an existing git repo, and will initialize it to " +
17
- "populate your ~ directory with symlinks."
18
- puts "Please confirm this by typing y, or anything else to cancel."
18
+ if Dir.exist?('.git')
19
+ puts 'Dit has detected an existing git repo, and will initialize it to ' +
20
+ 'populate your ~ directory with symlinks.'
21
+ puts 'Please confirm this by typing y, or anything else to cancel.'
19
22
  response = STDIN.gets.chomp.upcase
20
- return unless (response === 'Y')
23
+ return unless (response == 'Y')
21
24
  symlink_all
22
25
  else
23
26
  Git.init(Dir.getwd)
24
- puts "Initialized empty Git repository in #{File.join(Dir.getwd, ".git")}"
27
+ puts "Initialized empty Git repository in #{File.join(Dir.getwd, '.git')}"
25
28
  end
26
29
  hook
27
- puts "Dit was successfully hooked into .git/hooks."
30
+ puts 'Dit was successfully hooked into .git/hooks.'
28
31
  end
29
32
 
30
33
  def self.hook
31
- Dir.chdir(File.join(".git", "hooks")) do
34
+ Dir.chdir(File.join('.git', 'hooks')) do
32
35
  # The following check for the existence of post-commit or post-merge hooks
33
36
  # and will not interfere with them if they exist and do not use bash.
34
- append_to_post_commit, append_to_post_merge, cannot_post_commit,
35
- cannot_post_merge = detect_existing_hooks
37
+ append_to_post_commit, cannot_post_commit = hook 'post-commit'
38
+ append_to_post_merge, cannot_post_merge = hook 'post-merge'
36
39
 
37
- unless cannot_post_commit
38
- File.open("post-commit", "a") do |f|
39
- f.write "#!/usr/bin/env bash\n" unless append_to_post_commit
40
- f.write "( exec ./.git/hooks/dit )\n"
41
- end
42
- end
40
+ add_hook('post-commit', append_to_post_commit) unless cannot_post_commit
41
+ add_hook('post-merge', append_to_post_merge) unless cannot_post_merge
43
42
 
44
- unless cannot_post_merge
45
- File.open("post-merge", "a") do |f|
46
- f.write "#!/usr/bin/env bash\n" unless append_to_post_merge
47
- f.write "( exec ./.git/hooks/dit )\n"
48
- end
49
- end
50
-
51
- File.open("dit", "a") do |f|
52
- f.write "#!/usr/bin/env ./.git/hooks/force-ruby\n"
53
- f.write "require 'dit'\n"
54
- f.write "Dit.symlink_unlinked\n"
55
- end
56
-
57
- # The following lines are because git hooks do this weird thing
58
- # where they prepend /usr/bin to the path and a bunch of other stuff
59
- # meaning git hooks will use /usr/bin/ruby instead of any ruby
60
- # from rbenv or rvm or chruby, so we make a script forcing the hook
61
- # to use our ruby
62
- ruby_path = `which ruby`
63
- if(ruby_path != "/usr/bin/ruby")
64
- ruby_folder = File.dirname(ruby_path)
65
- File.open("force-ruby", "a") do |f|
66
- f.write "#!/usr/bin/env bash\n"
67
- f.write "set -e\n"
68
- if ENV['RBENV_ROOT']
69
- # Use Rbenv's shims instead of directly going to ruby bin
70
- # By the way, if anyone has particular PATHs I should use for
71
- # RVM or chruby, please let me know!
72
- f.write "PATH=#{File.join(ENV['RBENV_ROOT'], "shims")}:$PATH\n"
73
- else
74
- f.write "PATH=#{ruby_folder}:$PATH\n"
75
- end
76
- f.write "exec ruby \"$@\"\n"
77
- end
78
- else
79
- File.open("force-ruby", "a") do |f|
80
- f.write "#!/usr/bin/env bash\n"
81
- f.write "exec ruby \"$@\"\n"
82
- end
83
- end
43
+ make_dit
44
+ make_ruby_enforcer
84
45
 
85
46
  # Make sure they're executable
86
47
  FileUtils.chmod '+x', %w(post-commit post-merge dit force-ruby)
@@ -105,70 +66,92 @@ class Dit
105
66
  symlink_list `git ls-tree -r #{current_branch} --name-only`.split("\n")
106
67
  end
107
68
 
108
- private
109
-
110
69
  def self.repo
111
70
  Git.open(Dir.getwd)
112
71
  end
113
72
 
114
73
  def self.symlink(a, b)
115
- begin
116
- File.symlink(a, b)
117
- rescue
118
- puts "Failed to symlink #{a} to #{b}"
119
- end
74
+ File.symlink(a, b)
75
+ rescue
76
+ puts "Failed to symlink #{a} to #{b}"
120
77
  end
121
78
 
122
- def self.detect_existing_hooks
123
- post_commit_hook_exists = File.exist?("post-commit")
124
- post_merge_hook_exists = File.exist?("post-merge")
125
-
126
- cannot_post_commit, append_to_post_commit = false
127
- cannot_post_merge, append_to_post_merge = false
128
-
129
- if post_commit_hook_exists
130
- if `cat post-commit`.include?("#!/usr/bin/env bash")
131
- puts "You have post-commit hooks already that use bash, so we'll " +
132
- "append ourselves to the file."
133
- append_to_post_commit = true
134
- elsif `cat post-commit`.include?("./.git/hooks/dit")
135
- puts "Dit hook already installed."
136
- cannot_post_commit = true
79
+ def self.detect_existing_hook(hook)
80
+ hook_exists = File.exist?(hook)
81
+
82
+ cannot_hook, append_to_hook = false
83
+
84
+ if hook_exists
85
+ if `cat #{hook}`.include?('./.git/hooks/dit')
86
+ puts 'Dit hook already installed.'
87
+ cannot_hook = true
88
+ elsif `cat #{hook}`.include?('#!/usr/bin/env bash')
89
+ puts "You have #{hook} hooks already that use bash, so we'll " +
90
+ 'append ourselves to the file.'
91
+ append_to_hook = true
137
92
  else
138
- puts "You have post-commit hooks that use some foreign language, " +
93
+ puts "You have #{hook} hooks that use some foreign language, " +
139
94
  "so we won't interfere, but we can't hook in there."
140
- cannot_post_commit = true
95
+ cannot_hook = true
141
96
  end
142
97
  end
143
98
 
144
- if post_merge_hook_exists
145
- if `cat post-merge`.include?("#!/usr/bin/env bash")
146
- puts "You have post-merge hooks already that use bash, so we'll " +
147
- "append ourselve to the file."
148
- append_to_post_merge = true
149
- elsif `cat post-commit`.include?("./.git/hooks/dit")
150
- puts "Dit hook already installed."
151
- cannot_post_commit = true
152
- else
153
- puts "You have post-merge hooks that use some not-bash language, " +
154
- "so we won't interfere, but we can't hook in there."
155
- cannot_post_merge = true
156
- end
99
+ [append_to_hook, cannot_hook]
100
+ end
101
+
102
+ def self.write_hook(hook_file, do_append)
103
+ File.open(hook_file, 'a') do |f|
104
+ f.write "#!/usr/bin/env bash\n" unless do_append
105
+ f.write "( exec ./.git/hooks/dit )\n"
157
106
  end
107
+ end
158
108
 
159
- [append_to_post_commit, append_to_post_merge,
160
- cannot_post_commit, cannot_post_merge]
109
+ def self.make_dit
110
+ File.open('dit', 'a') do |f|
111
+ f.write "#!/usr/bin/env ./.git/hooks/force-ruby\n"
112
+ f.write "require 'dit'\n"
113
+ f.write "Dit.symlink_unlinked\n"
114
+ end
161
115
  end
162
116
 
117
+ def self.make_ruby_enforcer
118
+ # The following lines are because git hooks do this weird thing
119
+ # where they prepend /usr/bin to the path and a bunch of other stuff
120
+ # meaning git hooks will use /usr/bin/ruby instead of any ruby
121
+ # from rbenv or rvm or chruby, so we make a script forcing the hook
122
+ # to use our ruby
123
+ ruby_path = `which ruby`
124
+ if ruby_path != '/usr/bin/ruby'
125
+ ruby_folder = File.dirname(ruby_path)
126
+ File.open('force-ruby', 'a') do |f|
127
+ f.write "#!/usr/bin/env bash\n"
128
+ f.write "set -e\n"
129
+ if ENV['RBENV_ROOT']
130
+ # Use Rbenv's shims instead of directly going to ruby bin
131
+ # By the way, if anyone has particular PATHs I should use for
132
+ # RVM or chruby, please let me know!
133
+ f.write "PATH=#{File.join(ENV['RBENV_ROOT'], 'shims')}:$PATH\n"
134
+ else
135
+ f.write "PATH=#{ruby_folder}:$PATH\n"
136
+ end
137
+ f.write "exec ruby \"$@\"\n"
138
+ end
139
+ else
140
+ File.open('force-ruby', 'a') do |f|
141
+ f.write "#!/usr/bin/env bash\n"
142
+ f.write "exec ruby \"$@\"\n"
143
+ end
144
+ end
145
+ end
163
146
  end
164
147
 
165
148
  class DitCMD < Thor
166
- desc "init", "Initialize the current directory as a dit directory."
149
+ desc 'init', 'Initialize the current directory as a dit directory.'
167
150
  def init
168
151
  Dit.init
169
152
  end
170
153
 
171
- desc "rehash", "Manually symlink everything in case a git hook didn't run."
154
+ desc 'rehash', "Manually symlink everything in case a git hook didn't run."
172
155
  def rehash
173
156
  Dit.symlink_all
174
157
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Fahringer
@@ -93,4 +93,3 @@ signing_key:
93
93
  specification_version: 4
94
94
  summary: Dit is a dotfiles manager that thinks it's git.
95
95
  test_files: []
96
- has_rdoc: