revans-gitools 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,11 @@
1
+ Version 0.3.2
2
+ * Refactored the Submodule Class
3
+
4
+
1
5
  Version 0.3.0
2
6
  * Added command line tools
7
+ * No more need for rake tasks
8
+ * Added option parser
3
9
 
4
10
  Version 0.2.0
5
11
  * Added individual task method
data/README.markdown CHANGED
@@ -1,4 +1,13 @@
1
- # Git_tools
1
+ # Git Tools
2
+
3
+ ## Install
4
+
5
+ You can either clone this or do:
6
+
7
+ <pre>
8
+ gem sources -a http://gems.github.com
9
+ sudo gem install revans-gitools
10
+ </pre>
2
11
 
3
12
  ## How to use
4
13
 
@@ -21,60 +30,15 @@ Add the git submodules that you want to want to use in your application like so:
21
30
  active_merchant: git://github.com/Shopify/active_merchant.git
22
31
  </pre>
23
32
 
24
- A couple of things, it needs to follow the structure above with the name submodules and defining each below it. Use the name
25
- that you want the plugin to be named when checking out. Put the git location as the value.
26
-
27
- Now, create a new Rake task in lib/tasks directory. I call mine submodules.rake. Here is what my file looks like:
28
-
29
- <pre>
30
- require 'gitools'
31
-
32
- @configration = File.join(RAILS_ROOT, "config/submodules.yml")
33
-
34
- namespace :git do
35
-
36
- namespace :submodule do
37
-
38
- desc "Remove Submodule cache"
39
- task :remove, :submodule do |task, args|
40
- GitTools::Submodule.remove(args.submodule)
41
- end
42
-
43
- end
44
-
45
-
46
- namespace :update do
47
-
48
- desc "Update all Submodules"
49
- task :all => :environment do
50
- GitTools::Submodule.update_all(@configration)
51
- end
52
-
53
-
54
- GitTools::Submodule.individual_tasks(@configration) do |name|
55
- desc "Update #{name} submodule"
56
- task name.to_sym => :environment do
57
- GitTools::Submodule.submodule_update("#{name}")
58
- end
59
- end
60
-
61
- end
62
-
63
- end
64
- </pre>
65
-
66
-
67
- ## Command Line
68
-
69
- When creating a new project, it would be nice to just write your submodule.yml file and then shoot a command off in the terminal and have all your submodules installed for you. Well, now you can! Just do:
70
-
71
- <pre>
72
- gitools all
73
- </pre>
74
33
 
75
- That will install all the submodules from your config/submodule.yml file. Here are a couple more commands you can run:
34
+ ### Command Line
76
35
 
77
36
  <pre>
78
- gitools -u # For a fresh clone that needs the submodules init/update
79
- gitools rails # To add rails as a submodule, if you have it specified in your config/submodules.yml file
37
+ gitools setup # init and update all git submodules
38
+
39
+ gitools add all # add all submodules
40
+ gitools add rails # add rails as a submodule
41
+
42
+ gitools update all # update all submodules
43
+ gitools update rails # update rails submodule
80
44
  </pre>
data/lib/gitools.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module GitTools
2
- Version = "0.3.0"
2
+ Version = "0.3.2"
3
3
  end
4
4
 
5
5
  # Required Gems
data/lib/gitools/ci.rb CHANGED
@@ -5,14 +5,50 @@ module GitTools
5
5
  init = new
6
6
  @options = options
7
7
  @yaml = File.join(@options.yaml, 'config/submodules.yml')
8
- if @options.update
9
- GitTools::Submodule.checkout
10
- elsif @options.library == "all"
11
- GitTools::Submodule.install_all(@yaml)
8
+
9
+
10
+ case @options.command
11
+ when "setup"
12
+ GitTools::Submodule.setup
13
+ when "add"
14
+ case @options.library
15
+ when "all"
16
+ GitTools::Submodule.add_all(@yaml)
17
+ else
18
+ GitTools::Submodule.add(@yaml, @options.library) unless @options.library.nil? || @options.library.empty?
19
+ end
20
+ when "update"
21
+ case @options.library
22
+ when "all"
23
+ GitTools::Submodule.update_all(@yaml)
24
+ else
25
+ GitTools::Submodule.update(@options.library) unless @options.library.nil? || @options.library.empty?
26
+ end
12
27
  else
13
- GitTools::Submodule.install_single(@yaml, @options.library)
28
+ puts "Your commands were invalid. See gitools' help: gitools -h"
29
+ exit(0)
14
30
  end
31
+
32
+ rescue
33
+ puts "Your commands were invalid. See gitools' help: gitools -h"
34
+ exit(0)
15
35
  end
36
+
37
+
38
+
16
39
 
17
40
  end
18
- end
41
+ end
42
+
43
+
44
+ # API
45
+ #
46
+ # gitools setup # Should init and update all git submodules
47
+ # gitools add all # Should add all submodules
48
+ # gitools add rails # Should add rails as a submodule
49
+ # gitools update all # Should update all submodules
50
+ # gitools update rails # Should update rails submodule
51
+
52
+ # setup -> GitTools::Submodule.setup
53
+ # update -> GitTools::Submodule.update_all(@yaml) || GitTools::Submodule.update(@yaml, @options.library)
54
+ # add -> GitTools::Submodule.add_all(@yaml) || GitTools::Submodule.add(@yaml, @options.library)
data/lib/gitools/parse.rb CHANGED
@@ -1,23 +1,29 @@
1
1
  module GitTools
2
2
  class Options
3
3
 
4
+ COMMANDS = ["update", "add", "setup"].freeze
5
+
4
6
  def self.parse!(args)
5
7
  options = OpenStruct.new
6
- options.library = args.first.sub(/(\s+)/, '_') unless args.first.nil?
8
+ options.command = args.first
9
+ options.library = args.last if args.size > 1
7
10
  options.yaml = Dir.pwd
8
11
 
9
12
  opts = OptionParser.new do |opts|
10
13
 
11
- opts.banner = "\nGit Tools Usage: gitools all will install all your git submodules"
14
+ opts.banner = "\nGit Tools Usage\n"
12
15
  opts.separator "You must be in your Application Root Directory when running this command."
16
+ opts.separator "There are a few basic commands:"
17
+ opts.separator ""
18
+ opts.separator "gitools setup will init and update your git submodules."
19
+ opts.separator "gitools update all will update all git submodules."
20
+ opts.separator "gitools update submodule_name will update just that given submodule."
21
+ opts.separator "gitools install all will do git submodule add for all submodules declared in your config/submodules.yml file."
22
+ opts.separator "gitools install submodule_name will do a git submodule add just for that submodule."
13
23
  opts.separator ""
14
-
15
- opts.on('-u', '--update', 'Update the Submodule instead of adding it.') do |ext|
16
- options.update = ext
17
- end
18
24
 
19
25
  opts.on_tail('-v', '--version', "Show GitTools' current version.") do
20
- puts "\nGit Tools is at version #{GitTools::Version}\n"
26
+ puts "Git Tools is at version #{GitTools::Version}\n"
21
27
  exit(0)
22
28
  end
23
29
 
@@ -26,13 +32,18 @@ module GitTools
26
32
  exit(0)
27
33
  end
28
34
 
35
+
29
36
  opts.on_tail do
30
- if (options.library.nil? || options.library == '') && !options.udpate
37
+ if (options.library.nil? || options.library == '') && options.command != "setup"
31
38
  puts "\nYou need to tell me what you want library you want to add to git submodule."
32
39
  puts "#{opts}\n"
33
40
  exit(0)
41
+ elsif !COMMANDS.include?(options.command)
42
+ puts "\nOnly setup, update, and install are supported commands."
43
+ puts "#{opts}\n"
44
+ exit(0)
34
45
  end
35
- end
46
+ end
36
47
  end # OptionParser
37
48
 
38
49
  opts.parse!(args)
@@ -1,60 +1,240 @@
1
+ # module GitTools
2
+ #
3
+ # # TODO: Refactor Class
4
+ # class Submodule
5
+ #
6
+ # def self.update_all(yaml)
7
+ # @config = load_yaml(yaml)
8
+ # @config.each_key do |name|
9
+ # message(name) { submodule_update(name) }
10
+ # end
11
+ # end
12
+ #
13
+ # def self.install_all(yaml)
14
+ # @config = load_yaml(yaml)
15
+ # @config.each { |plugin, repo| add(plugin, repo) }
16
+ # end
17
+ #
18
+ # def self.install_single(yaml, name)
19
+ # @config = load_yaml(yaml)
20
+ # add(name, @config[name])
21
+ # end
22
+ #
23
+ #
24
+ # def self.update_single(yaml, name)
25
+ # @config = load_yaml(yaml)
26
+ # submodule_update(name)
27
+ # end
28
+ #
29
+ #
30
+ # def self.add(name, repo)
31
+ # dir = name == "rails" ? "vendor/rails/" : "vendor/plugins/#{name}"
32
+ # system("git submodule add #{repo} #{dir}")
33
+ # end
34
+ #
35
+ # def self.checkout
36
+ # system("git submodule init")
37
+ # system("git submodule update")
38
+ # end
39
+ #
40
+ # def self.remove(submodule)
41
+ # system("git rm --cache vendor/plugins/#{submodule}")
42
+ # end
43
+ #
44
+ # def self.submodule_update(name)
45
+ # dir = name == "rails" ? "vendor/rails/" : "vendor/plugins/#{name}"
46
+ # system("cd #{dir} && git remote update && git merge origin/master")
47
+ # end
48
+ #
49
+ # def self.load_yaml(yaml)
50
+ # YAML::load(File.open(yaml))['submodules']
51
+ # end
52
+ #
53
+ #
54
+ # def self.message(name, &block)
55
+ # puts "Updating #{name.to_s}"
56
+ # yield
57
+ # puts "\n"
58
+ # end
59
+ #
60
+ #
61
+ # def self.individual_tasks(yaml, &block)
62
+ # @config = load_yaml(yaml)
63
+ # @config.each_key { |name| yield name }
64
+ # end
65
+ #
66
+ # end
67
+ #
68
+ # end
69
+
70
+
71
+
1
72
  module GitTools
2
73
 
3
- # TODO: Refactor Class
4
74
  class Submodule
5
75
 
6
- def self.update_all(yaml)
7
- @config = load_yaml(yaml)
8
- @config.each_key do |name|
9
- message(name) { submodule_update(name) }
10
- end
11
- end
76
+ attr_reader :config
77
+
12
78
 
13
- def self.install_all(yaml)
14
- @config = load_yaml(yaml)
15
- @config.each { |plugin, repo| add(plugin, repo) }
79
+ # Initialize
80
+ #
81
+ # ==== Description
82
+ #
83
+ # Will load the YAML file given.
84
+ #
85
+ #
86
+ def initialize(yaml = nil)
87
+ @config = load_yaml(yaml) unless yaml.nil?
16
88
  end
17
89
 
18
- def self.install_single(yaml, name)
19
- @config = load_yaml(yaml)
20
- add(name, @config[name])
90
+
91
+ def self.setup
92
+ system("git submodule init")
93
+ system("git submodule update")
21
94
  end
22
95
 
23
- def self.add(name, repo)
24
- dir = name == "rails" ? "vendor/rails/" : "vendor/plugins/#{name}"
25
- system("git submodule add #{repo} #{dir}")
96
+
97
+ # Update All
98
+ #
99
+ # ==== Description
100
+ #
101
+ # This will update all the git submodules
102
+ # specified in the YAML file.
103
+ #
104
+
105
+ def self.update_all(yaml)
106
+ git = new(yaml)
107
+ git.config.each_key { |name| git.update_submodule(name) }
26
108
  end
27
109
 
28
- def self.checkout
29
- system("git submodule init")
30
- system("git submodule update")
110
+
111
+ # Update
112
+ #
113
+ # ==== Description
114
+ #
115
+ # Updates a single submodule in the project
116
+ #
117
+ #
118
+ def self.update(name)
119
+ new.update_submodule(name)
31
120
  end
32
121
 
33
- def self.remove(submodule)
34
- system("git rm --cache vendor/plugins/#{submodule}")
122
+
123
+ # Add All
124
+ #
125
+ # ==== Description
126
+ #
127
+ # This will go through the YAML file and do
128
+ # git submodule add for each one.
129
+ #
130
+ #
131
+ def self.add_all(yaml)
132
+ git = new(yaml)
133
+ git.config.each { |name, repo| git.add_submodule(name, repo) }
35
134
  end
36
135
 
37
- def self.submodule_update(name)
38
- dir = name == "rails" ? "vendor/rails/" : "vendor/plugins/#{name}"
39
- system("cd #{dir} && git remote update && git merge origin/master")
136
+
137
+ # Add
138
+ #
139
+ # ==== Description
140
+ #
141
+ # Adds a single submodule to the project.
142
+ #
143
+ #
144
+ def self.add(yaml, name)
145
+ git = new(yaml)
146
+ git.add_submodule(name, git.config[name])
40
147
  end
41
148
 
42
- def self.load_yaml(yaml)
43
- YAML::load(File.open(yaml))['submodules']
149
+
150
+ # Remove Cache
151
+ #
152
+ # ==== Description
153
+ #
154
+ # This will remove the submodule from git's cache
155
+ #
156
+ #
157
+ def self.remove_cache(name)
158
+ system("git rm --cache #{directory_to_install(name)}")
44
159
  end
45
160
 
46
161
 
47
- def self.message(name, &block)
48
- puts "Updating #{name.to_s}"
49
- yield
50
- puts "\n"
162
+ # Update
163
+ #
164
+ # ==== Description
165
+ #
166
+ # This can be used by the Class Methods for either updating
167
+ # a single submodule or all of the submodules listed in the
168
+ # YAML file.
169
+ #
170
+ #
171
+ def update_submodule(name)
172
+ message(name) { system("cd #{directory_to_install(name)} && git remote update && git merge origin/master") }
173
+ end
174
+
175
+
176
+ # Add
177
+ #
178
+ # ==== Description
179
+ #
180
+ # This can be used by the Class Methods for either adding
181
+ # a single submodule or all of them listed in the YAML
182
+ # file.
183
+ #
184
+ #
185
+ def add_submodule(name, repo)
186
+ message(name) { system("git submodule add #{repo} #{directory_to_install(name)}") }
51
187
  end
188
+
52
189
 
190
+
191
+ private
192
+
53
193
 
54
- def self.individual_tasks(yaml, &block)
55
- @config = load_yaml(yaml)
56
- @config.each_key { |name| yield name }
57
- end
194
+ # Load YAML
195
+ #
196
+ # ==== Description
197
+ #
198
+ # Loads the YAML file.
199
+ #
200
+ #
201
+ def load_yaml(yaml)
202
+ YAML::load(File.open(yaml))['submodules']
203
+ rescue
204
+ puts "The YAML file cannot be found."
205
+ exit(0)
206
+ end
207
+
208
+
209
+ # Directory to Install
210
+ #
211
+ # ==== Description
212
+ #
213
+ # This will determine if we have plugin or rails itself
214
+ # and return the directory in which we should work with.
215
+ #
216
+ # ==== Parameters
217
+ #
218
+ # * name => The name of the submodule to work with.
219
+ #
220
+ #
221
+ def directory_to_install(name)
222
+ name == "rails" ? "vendor/rails/" : "vendor/plugins/#{name}"
223
+ end
224
+
225
+
226
+ # Message
227
+ #
228
+ # ==== Description
229
+ #
230
+ # Displays a simple message of what is being updated/added.
231
+ #
232
+ #
233
+ def message(name, &block)
234
+ puts "-----#{name}-----\n"
235
+ yield
236
+ puts "\n"
237
+ end
58
238
 
59
239
  end
60
240
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: revans-gitools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert R Evans