rigup 0.1.0 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 95b30c63738163b65a0865b0f1a9d254c609640c
4
- data.tar.gz: d31adf3237a4c76ff0cf5fb623cd4c608edcb1a1
3
+ metadata.gz: 53fa8f63e51425add51231d1d1d544c56d151beb
4
+ data.tar.gz: f5d4c4574b1564804186da641f96b660c1388207
5
5
  SHA512:
6
- metadata.gz: 88c817645adfdf47a9f0ff3f4749763ce279904c936120777c701ea6524034e3d8b0efb0fe411548dbc65da874cd44b18ee92e250c9d303b4fcc8379706086bb
7
- data.tar.gz: a66440a2d61f0753977d20894b4ba20bf01753c206762c3dfc1e3abc894d5e5c7e10879f2da6213eb6f9fb592ce6c6607b7e982b7f5154b045a66440a5c2b141
6
+ metadata.gz: 3e9f97961dfdf05271284723c8d7d6cdf2cac4d11c9790fe6c86fd4968bacca54cbedba9e94b812c501f567acc93be9c395fcb8fef726c057d819beabb6c3163
7
+ data.tar.gz: 6397a477957a80e3833fddce8b43fc29b6c482758a85710dc72689a23d09a5243c33aad3bd46af8971b5210daa0fb5343535ad16f5a9830d45d7e42191b8b7ad
data/bin/rigup CHANGED
@@ -1,4 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
- #require "rubygems" - checkout rake for an interesting example of the bin command
2
+
3
+ # from rake
4
+ begin
5
+ require 'rubygems'
6
+ gem 'rigup'
7
+ rescue LoadError
8
+ end
3
9
  require 'rigup'
4
10
  Rigup::Cli.start(ARGV)
data/lib/rigup/base.rb CHANGED
@@ -1,48 +1,41 @@
1
1
  module Rigup
2
2
  module Base
3
3
 
4
- def self.included(aClass)
5
- aClass.class_eval do
6
- no_commands do
4
+ def logger
5
+ @logger ||= ::Logger.new(STDOUT)
6
+ end
7
+
8
+ def config
9
+ unless @config
10
+ @config = {}
11
+ if ::File.exists?(f=::File.join(release_path,'rigup.yml'))
12
+ file_config = ::YAML.load(String.from_file(f))
13
+ @config.merge!(file_config)
14
+ @config = ::Rigup::Config.new(@config)
15
+ end
16
+ end
17
+ @config
18
+ end
19
+
20
+ def context
21
+ @context ||= ::Rigup::Context.new({
22
+ :config => config,
23
+ :logger => logger,
24
+ :pwd => ::Dir.pwd
25
+ })
26
+ end
27
+
28
+ def release_path
29
+ @release_path ||= ::File.expand_path('.')
30
+ end
31
+
32
+ def site_dir
33
+ @site_dir ||= ::File.expand_path('../..',release_path)
34
+ end
35
+
36
+ def shared_path
37
+ @shared_path ||= ::File.expand_path('shared',site_dir)
38
+ end
7
39
 
8
- def logger
9
- @logger ||= ::Logger.new(STDOUT)
10
- end
11
-
12
- def config
13
- unless @config
14
- @config = {}
15
- if File.exists?(f=File.join(release_path,'rigup.yml'))
16
- file_config = YAML.load(String.from_file(f))
17
- @config.merge!(file_config)
18
- @config = Rigup::Config.new(@config)
19
- end
20
- end
21
- @config
22
- end
23
-
24
- def context
25
- @context ||= Rigup::Context.new(
26
- config: config,
27
- logger: logger,
28
- pwd: Dir.pwd,
29
- )
30
- end
31
-
32
- def release_path
33
- @release_path ||= File.expand_path('.')
34
- end
35
-
36
- def site_dir
37
- @site_dir ||= File.expand_path('../..',release_path)
38
- end
39
-
40
- def shared_path
41
- @shared_path ||= File.expand_path('shared',site_dir)
42
- end
43
- end
44
- end
45
-
46
- end
47
40
  end
48
41
  end
data/lib/rigup/cli.rb CHANGED
@@ -1,139 +1,145 @@
1
1
  module Rigup
2
- class Cli < Thor
3
-
4
- include Rigup::Utils::Run
5
- include Rigup::Utils::Install
6
-
7
- no_commands do
2
+ module CliMethods
8
3
 
9
- def logger
10
- @logger ||= ::Logger.new(STDOUT)
11
- end
4
+ def logger
5
+ @logger ||= ::Logger.new(STDOUT)
6
+ end
7
+ #remove_command :logger
12
8
 
13
- def config
14
- @context.config
9
+ def config
10
+ @context.config
11
+ end
12
+ #remove_command :config
13
+
14
+ def init(aPath=nil,aConfig={})
15
+ return if @initialised
16
+ @initialised = true
17
+ aPath ||= aConfig[:site_dir] || ::Dir.pwd
18
+ @site_dir = ::Rigup::Utils::File.real_path(aPath) rescue ::File.expand_path(aPath)
19
+ @releases_path = ::File.join(@site_dir,'releases')
20
+ if ::File.exists?(f=::File.join(@site_dir,'rigup.yml'))
21
+ file_config = ::YAML.load(String.from_file(f))
22
+ aConfig.merge!(file_config)
15
23
  end
24
+ aConfig = aConfig.merge(:site_dir => @site_dir)
25
+ aConfig[:user] ||= ENV['USER']
26
+ config = ::Rigup::Config.new(aConfig)
27
+ @context = ::Rigup::Context.new({
28
+ :config => config,
29
+ :logger => ::Logger.new(STDOUT),
30
+ :pwd => ::Dir.pwd
31
+ })
32
+ end
16
33
 
17
- def init(aPath=nil,aConfig={})
18
- return if @initialised
19
- @initialised = true
20
- aPath ||= aConfig[:site_dir] || Dir.pwd
21
- @site_dir = Buzztools::File.real_path(aPath) rescue File.expand_path(aPath)
22
- @releases_path = File.join(@site_dir,'releases')
23
- if File.exists?(f=File.join(@site_dir,'rigup.yml'))
24
- file_config = YAML.load(String.from_file(f))
25
- aConfig.merge!(file_config)
26
- end
27
- aConfig = aConfig.merge(site_dir: @site_dir)
28
- aConfig[:user] ||= ENV['USER']
29
- config = Rigup::Config.new(aConfig)
30
- @context = Rigup::Context.new(
31
- config: config,
32
- logger: ::Logger.new(STDOUT),
33
- pwd: Dir.pwd
34
- )
35
- end
34
+ attr_reader :context, :release_path, :site_dir
36
35
 
37
- attr_reader :context, :release_path, :site_dir
36
+ def shared_path
37
+ @shared_path ||= ::File.expand_path('shared',site_dir)
38
+ end
39
+ #remove_command :shared_path
38
40
 
39
- def shared_path
40
- @shared_path ||= File.expand_path('shared',site_dir)
41
- end
41
+ def cache_dir
42
+ ::File.join(site_dir,'shared','cached-copy')
43
+ end
42
44
 
43
- def cache_dir
44
- File.join(site_dir,'shared','cached-copy')
45
- end
45
+ def repo
46
+ @repo ||= ::Rigup::GitRepo.new(context)
47
+ end
46
48
 
47
- def repo
48
- @repo ||= GitRepo.new(context)
49
+ # Prepares repo in cache dir for site
50
+ # requires params: repo_url,site
51
+ def prepare_cache # {:url=>'git://github.com/ddssda', :branch=>'master', :commit=>'ad452bcd'}
52
+ url = config[:git_url]
53
+ wd = cache_dir
54
+
55
+ suitable = if ::File.exists?(wd)
56
+ repo.open wd
57
+ repo.origin.url==url
58
+ else
59
+ false
49
60
  end
50
61
 
51
- # Prepares repo in cache dir for site
52
- # requires params: repo_url,site
53
- def prepare_cache # {:url=>'git://github.com/ddssda', :branch=>'master', :commit=>'ad452bcd'}
54
- url = config[:git_url]
55
- wd = cache_dir
56
-
57
- suitable = if File.exists?(wd)
58
- repo.open wd
59
- repo.origin.url==url
60
- else
61
- false
62
- end
63
-
64
- if suitable
65
- repo.fetch
66
- else
67
- if File.exists? wd
68
- #raise RuntimeError.new('almost did bad delete') if !@core.cache_dir || @core.cache_dir.length<3 || !wd.begins_with?(@core.cache_dir)
69
- FileUtils.rm_rf wd
70
- end
71
- repo.clone(url, wd)
62
+ if suitable
63
+ repo.fetch
64
+ else
65
+ if ::File.exists? wd
66
+ #raise RuntimeError.new('almost did bad delete') if !@core.cache_dir || @core.cache_dir.length<3 || !wd.begins_with?(@core.cache_dir)
67
+ ::FileUtils.rm_rf wd
72
68
  end
69
+ repo.clone(url, wd)
73
70
  end
71
+ end
74
72
 
75
- # Switches @repo to given branch and/or commit
76
- # Should call prepare_cache first to create @repo
77
- # requires params: branch and/or commit
78
- def checkout_branch_commit
79
- branch = config[:branch] || 'master'
80
- commit = config[:commit]
81
- repo.open(cache_dir)
82
- repo.checkout(commit,branch)
83
- #perhaps use reset --hard here
84
- if (commit)
85
- repo.merge(commit,['--ff-only'])
86
- else
87
- repo.merge('origin/'+branch,['--ff-only'])
88
- end
73
+ # Switches @repo to given branch and/or commit
74
+ # Should call prepare_cache first to create @repo
75
+ # requires params: branch and/or commit
76
+ def checkout_branch_commit
77
+ branch = config[:branch] || 'master'
78
+ commit = config[:commit]
79
+ repo.open(cache_dir)
80
+ repo.checkout(commit,branch)
81
+ #perhaps use reset --hard here
82
+ if (commit)
83
+ repo.merge(commit,['--ff-only'])
84
+ else
85
+ repo.merge('origin/'+branch,['--ff-only'])
89
86
  end
87
+ end
90
88
 
91
- def update_cache(aPath=nil)
92
- prepare_cache
93
- checkout_branch_commit
94
- end
89
+ def update_cache(aPath=nil)
90
+ prepare_cache
91
+ checkout_branch_commit
92
+ end
95
93
 
96
- def release
97
- release = Time.now.strftime('%Y%m%d%H%M%S')
98
- @release_path = File.expand_path(release,@releases_path)
99
- repo.open(cache_dir)
100
- repo.export(@release_path)
101
- release_config = context.config.to_hash
102
- release_config[:commit] = repo.head.sha
103
- release_config[:branch] = repo.branch
104
- release_config.to_yaml.to_file(File.join(@release_path,'rigup.yml'))
105
- return @release_path
106
- end
94
+ def release
95
+ release = ::Time.now.strftime('%Y%m%d%H%M%S')
96
+ @release_path = ::File.expand_path(release,@releases_path)
97
+ repo.open(cache_dir)
98
+ repo.export(@release_path)
99
+ release_config = context.config.to_hash
100
+ release_config[:commit] = repo.head.sha
101
+ release_config[:branch] = repo.branch
102
+ release_config.to_yaml.to_file(::File.join(@release_path,'rigup.yml'))
103
+ return @release_path
104
+ end
107
105
 
108
- def link_live
109
- ensure_link(release_path,File.expand_path(File.join(site_dir,'current')),"#{config[:user]}:#{config[:group]}")
110
- end
106
+ def link_live
107
+ ensure_link(release_path,::File.expand_path(::File.join(site_dir,'current')),"#{config[:user]}:#{config[:group]}")
108
+ end
111
109
 
112
- def cleanup
113
- @releases = run("ls -x #{@releases_path}").split.sort
114
- count = (@keep_releases || 3).to_i
115
- if count >= @releases.length
116
- logger.info "no old releases to clean up"
117
- else
118
- logger.info "keeping #{count} of #{@releases.length} deployed releases"
110
+ def cleanup
111
+ @releases = run("ls -x #{@releases_path}").split.sort
112
+ count = (@keep_releases || 3).to_i
113
+ if count >= @releases.length
114
+ logger.info "no old releases to clean up"
115
+ else
116
+ logger.info "keeping #{count} of #{@releases.length} deployed releases"
119
117
 
120
- directories = (@releases - @releases.last(count)).map { |r|
121
- File.join(@releases_path, r)
122
- }.join(" ")
118
+ directories = (@releases - @releases.last(count)).map { |r|
119
+ File.join(@releases_path, r)
120
+ }.join(" ")
123
121
 
124
- run "rm -rf #{directories}"
125
- end
126
- end
122
+ run "rm -rf #{directories}"
123
+ end
124
+ end
127
125
 
128
- def call_release_command(aCommand)
129
- return unless cmdline = config["#{aCommand}_command".to_sym].to_s.strip.to_nil
130
- cd release_path do
131
- run cmdline
132
- end
126
+ def call_release_command(aCommand)
127
+ return unless cmdline = config["#{aCommand}_command".to_sym].to_s.strip.to_nil
128
+ cd release_path do
129
+ run cmdline
133
130
  end
134
131
  end
132
+ end
133
+ end
134
+
135
+ module Rigup
136
+ class Cli < Thor
137
+
138
+ include Rigup::Utils::Run
139
+ include Rigup::Utils::Install
140
+ include Rigup::CliMethods
135
141
 
136
- public
142
+ #public
137
143
 
138
144
  desc "new GIT_URL [PATH]", "setup new site"
139
145
  def new(aGitUrl,aPath=nil)
@@ -141,23 +147,26 @@ module Rigup
141
147
  aPath ||= app_name
142
148
  init(
143
149
  aPath,
144
- git_url: aGitUrl,
145
- app_name: app_name,
146
- user: ENV['USER']
150
+ {
151
+ :git_url => aGitUrl,
152
+ :app_name => app_name,
153
+ :user => ENV['USER']
154
+ }
147
155
  )
148
156
  FileUtils.mkdir_p(site_dir)
149
157
  FileUtils.mkdir_p(File.join(site_dir,'releases'))
150
158
  FileUtils.mkdir_p(File.join(site_dir,'shared'))
151
159
 
152
160
  #+ create rigup.yml if doesn't exist, including option values
153
- context.config.to_hash.filter_exclude(:site_dir).to_yaml.to_file(File.join(site_dir,'rigup.yml'))
161
+ h = context.config.to_hash
162
+ h.delete :site_dir
163
+ h.to_yaml.to_file(File.join(site_dir,'rigup.yml'))
154
164
  end
155
165
 
156
166
  desc "deploy [PATH]", "deploy the given site"
157
167
  def deploy(aPath=nil)
158
168
  init(aPath)
159
169
  update_cache
160
- #gem 'debugger'; require 'debugger'; debugger
161
170
  release
162
171
  call_release_command(:install) # call install_command if defined eg. defaults to "thor deploy:install" eg. make changes to files
163
172
  call_release_command(:block)
data/lib/rigup/config.rb CHANGED
@@ -1,21 +1,22 @@
1
1
  module Rigup
2
2
 
3
- class Config < Buzztools::Config
3
+ class Config < Rigup::Utils::Config
4
4
 
5
5
  DEFAULTS = {
6
- app_name: String,
7
- user: String,
8
- group: 'www',
9
- site_dir: String,
10
- git_url: String,
11
- branch: String,
12
- commit: String,
13
- stage: 'live', # or 'staging' or 'development'
14
- sudo: 'sudo',
15
- block_command: nil,
16
- install_command: 'thor deploy:install',
17
- restart_command: 'thor deploy:restart',
18
- unblock_command: nil,
6
+ :app_name => String,
7
+ :user => String,
8
+ :group => 'www',
9
+ :site_dir => String,
10
+ :git_url => String,
11
+ :branch => String,
12
+ :commit => String,
13
+ :stage => 'live', # or 'staging' or 'development'
14
+ :sudo => 'sudo', # deprecated
15
+ :sudo_available => true,
16
+ :block_command => nil,
17
+ :install_command => 'bundle exec thor deploy:install',
18
+ :restart_command => 'bundle exec thor deploy:restart',
19
+ :unblock_command => nil
19
20
  }
20
21
 
21
22
  def initialize(aValues=nil)
data/lib/rigup/context.rb CHANGED
@@ -9,7 +9,7 @@ module Rigup
9
9
 
10
10
  #is_client = !!(aValues[:key_chain] || aValues[:global_options] || aValues[:options])
11
11
  @config = aValues[:config]
12
- @pwd = Buzztools::File.real_path(aValues[:pwd] || (@config && @config[:folder]) || Dir.pwd)
12
+ @pwd = Rigup::Utils::File.real_path(aValues[:pwd] || (@config && @config[:folder]) || Dir.pwd)
13
13
  @options = aValues[:options]
14
14
  @argv = aValues[:argv]
15
15
  @env = aValues[:env]
@@ -47,7 +47,7 @@ module Rigup
47
47
  end
48
48
 
49
49
  def find_git_root
50
- git_folder = BuzzTools::File.find_upwards(@pwd,'.git')
50
+ git_folder = Rigup::Utils::File.find_upwards(@pwd,'.git')
51
51
  return git_folder && git_folder.chomp('/.git')
52
52
  end
53
53
 
@@ -0,0 +1,133 @@
1
+ module Rigup
2
+ module Utils
3
+ class Config < Hash
4
+
5
+ attr_reader :default_values
6
+
7
+ def initialize(aDefaultValues, aNewValues=nil, &aBlock)
8
+ @default_values = aDefaultValues.clone
9
+ reset()
10
+ if aNewValues
11
+ block_given? ? read(aNewValues, &aBlock) : read(aNewValues)
12
+ end
13
+ end
14
+
15
+ # aBlock allows values to be filtered based on key,default and new values
16
+ def read(aSource, &aBlock)
17
+ default_values.each do |k, v|
18
+ done = false
19
+ if block_given? && ((newv = yield(k, v, aSource && aSource[k])) != nil)
20
+ self[k] = newv
21
+ done = true
22
+ end
23
+ copy_item(aSource, k) if !done && aSource && !aSource[k].nil?
24
+ end
25
+ self
26
+ end
27
+
28
+ # reset values back to defaults
29
+ def reset
30
+ self.clear
31
+ me = self
32
+ @default_values.each { |n, v| me[n] = v.is_a?(Class) ? nil : v }
33
+ end
34
+
35
+ def set_int(aKey, aValue)
36
+ case aValue
37
+ when String then
38
+ self[aKey] = aValue.to_integer(self[aKey]);
39
+ when Fixnum then
40
+ self[aKey] = aValue;
41
+ when Float then
42
+ self[aKey] = aValue.to_i;
43
+ end
44
+ end
45
+
46
+ def set_float(aKey, aValue)
47
+ case aValue
48
+ when String then
49
+ self[aKey] = aValue.to_float(self[aKey]);
50
+ when Fixnum then
51
+ self[aKey] = aValue.to_f;
52
+ when Float then
53
+ self[aKey] = aValue;
54
+ end
55
+ end
56
+
57
+ def set_boolean(aKey, aValue)
58
+ case aValue
59
+ when TrueClass, FalseClass then
60
+ self[aKey] = aValue;
61
+ when String then
62
+ self[aKey] = (['1', 'yes', 'y', 'true', 'on'].include?(aValue.downcase))
63
+ else
64
+ set_boolean(aKey, aValue.to_s)
65
+ end
66
+ end
67
+
68
+ def set_symbol(aKey, aValue)
69
+ case aValue
70
+ when String then
71
+ self[aKey] = (aValue.to_sym rescue nil);
72
+ when Symbol then
73
+ self[aKey] = aValue;
74
+ end
75
+ end
76
+
77
+ def copy_item(aHash, aKey)
78
+ d = default_values[aKey]
79
+ d_class = (d.is_a?(Class) ? d : d.class)
80
+ cname = d_class.name.to_sym
81
+ case cname
82
+ when :NilClass then
83
+ self[aKey] = aHash[aKey];
84
+ when :String then
85
+ self[aKey] = aHash[aKey].to_s unless aHash[aKey].nil?
86
+ when :Float then
87
+ set_float(aKey, aHash[aKey]);
88
+ when :Fixnum then
89
+ set_int(aKey, aHash[aKey]);
90
+ when :TrueClass, :FalseClass then
91
+ set_boolean(aKey, aHash[aKey]);
92
+ when :Symbol then
93
+ self[aKey] = (aHash[aKey].to_sym rescue nil)
94
+ when :Proc then
95
+ self[aKey] = aHash[aKey] if aHash[aKey].is_a?(Proc)
96
+ else
97
+ raise StandardError.new('unsupported type')
98
+ end
99
+ end
100
+
101
+ def copy_strings(aHash, *aKeys)
102
+ aKeys.each do |k|
103
+ self[k] = aHash[k].to_s unless aHash[k].nil?
104
+ end
105
+ end
106
+
107
+ def copy_ints(*aDb)
108
+ aHash = aDb.shift
109
+ aKeys = aDb
110
+ aKeys.each do |k|
111
+ set_int(k, aHash[k])
112
+ end
113
+ end
114
+
115
+ def copy_floats(aHash, *aKeys)
116
+ aKeys.each do |k|
117
+ set_float(k, aHash[k])
118
+ end
119
+ end
120
+
121
+ def copy_booleans(aHash, *aKeys)
122
+ aKeys.each do |k|
123
+ set_boolean(k, aHash[k])
124
+ end
125
+ end
126
+
127
+ def to_hash
128
+ {}.merge(self)
129
+ end
130
+
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,293 @@
1
+ unless defined? Buzztools
2
+
3
+ Array.class_eval do
4
+ def to_nil
5
+ self.empty? ? nil : self
6
+ end
7
+ end
8
+
9
+ Bignum.class_eval do
10
+ def to_nil
11
+ self==0 ? nil : self
12
+ end
13
+ end
14
+
15
+ Float.class_eval do
16
+ def to_nil
17
+ (self==0 || !self.finite?) ? nil : self
18
+ end
19
+ end
20
+
21
+ Fixnum.class_eval do
22
+ def to_nil
23
+ self==0 ? nil : self
24
+ end
25
+ end
26
+
27
+ Hash.class_eval do
28
+ def to_nil
29
+ self.empty? ? nil : self
30
+ end
31
+ end
32
+
33
+ TrueClass.class_eval do
34
+ def to_nil
35
+ self
36
+ end
37
+ end
38
+
39
+ FalseClass.class_eval do
40
+ def to_nil
41
+ nil
42
+ end
43
+ end
44
+
45
+ NilClass.class_eval do
46
+ def to_nil
47
+ nil
48
+ end
49
+ end
50
+
51
+ Symbol.class_eval do
52
+ def to_nil
53
+ self
54
+ end
55
+ end
56
+
57
+ String.class_eval do
58
+ def to_nil(aPattern=nil)
59
+ return nil if self.empty?
60
+ if aPattern
61
+ return nil if (aPattern.is_a? Regexp) && (self =~ aPattern)
62
+ return nil if aPattern.to_s == self
63
+ end
64
+ self
65
+ end
66
+ end
67
+
68
+ String.class_eval do
69
+
70
+ def self.random_word(min=4,max=8)
71
+ len = min + rand(max-min+1)
72
+ result = ' '*len
73
+ (len-1).downto(0) {|i| result[i] = (?a.ord + rand(?z.ord-?a.ord+1)).chr}
74
+ return result
75
+ end
76
+
77
+ def pad_left(value)
78
+ increase = value-self.length
79
+ return self if increase==0
80
+ if increase > 0
81
+ return self + ' '*increase
82
+ else
83
+ return self[0,value]
84
+ end
85
+ end
86
+
87
+ def pad_right(value)
88
+ increase = value-self.length
89
+ return self if increase==0
90
+ if increase > 0
91
+ return ' '*increase + self
92
+ else
93
+ return self[0,value]
94
+ end
95
+ end
96
+
97
+ # Like bite, but returns the first match instead of the subject, and removes the match from the subject, modifying it
98
+ def extract!(aValue=$/,aString=self)
99
+ if aValue.is_a? String
100
+ if i = aString.index(aValue)
101
+ aString[i,aValue.length] = ''
102
+ return aValue
103
+ else
104
+ return nil
105
+ end
106
+ elsif aValue.is_a? Regexp
107
+ if md = aValue.match(aString)
108
+ aString[md.begin(0),md.end(0)-md.begin(0)] = ''
109
+ return md.to_s
110
+ else
111
+ return nil
112
+ end
113
+ else
114
+ return aString
115
+ end
116
+ end
117
+
118
+ def extract(aValue=$/)
119
+ extract!(aValue,self.clone)
120
+ end
121
+
122
+ # Like chomp! but operates on the leading characters instead.
123
+ # The aString parameter would not normally be used.
124
+ def bite!(aValue=$/,aString=self)
125
+ if aValue.is_a? String
126
+ if aString[0,aValue.length] == aValue
127
+ aString[0,aValue.length] = ''
128
+ return aString
129
+ else
130
+ return aString
131
+ end
132
+ elsif aValue.is_a? Regexp
133
+ return aString.sub!(aValue,'') if aString.index(aValue)==0
134
+ else
135
+ return aString
136
+ end
137
+ end
138
+
139
+ def bite(aValue=$/)
140
+ bite!(aValue,self.clone)
141
+ end
142
+
143
+ def deprefix!(aPrefix=$/,aString=self)
144
+ if aString[0,aPrefix.length] == aPrefix
145
+ aString[0,aPrefix.length] = ''
146
+ return aString
147
+ else
148
+ return aString
149
+ end
150
+ end
151
+
152
+ def deprefix(aValue=$/)
153
+ deprefix!(aValue,self.clone)
154
+ end
155
+
156
+ def desuffix!(aString,aSuffix)
157
+ if aString[-aSuffix.length,aSuffix.length] == aSuffix
158
+ aString[-aSuffix.length,aSuffix.length] = ''
159
+ return aString
160
+ else
161
+ return aString
162
+ end
163
+ end
164
+
165
+ def desuffix(aValue=$/)
166
+ desuffix!(aValue,self.clone)
167
+ end
168
+
169
+ def begins_with?(aString)
170
+ self[0,aString.length]==aString
171
+ end
172
+
173
+ def ends_with?(aString)
174
+ self[-aString.length,aString.length]==aString
175
+ end
176
+
177
+ def ensure_prefix!(aPrefix=$/,aString=self)
178
+ aString[0,0]=aPrefix unless aString.begins_with?(aPrefix)
179
+ aString
180
+ end
181
+
182
+ def ensure_prefix(aValue=$/)
183
+ ensure_prefix!(aValue,self.clone)
184
+ end
185
+
186
+ def ensure_suffix!(aSuffix=$/,aString=self)
187
+ aString.insert(-1,aSuffix) unless aString.ends_with?(aSuffix)
188
+ aString
189
+ end
190
+
191
+ def ensure_suffix(aValue=$/)
192
+ ensure_suffix!(aValue,self.clone)
193
+ end
194
+
195
+ def to_integer(aDefault=nil)
196
+ t = self.strip
197
+ return aDefault if t.empty? || !t.index(/^-{0,1}[0-9]+$/)
198
+ return t.to_i
199
+ end
200
+
201
+ def is_i?
202
+ self.to_integer(false) and true
203
+ end
204
+
205
+ def to_float(aDefault=nil)
206
+ t = self.strip
207
+ return aDefault if !t =~ /(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?/
208
+ return t.to_f
209
+ end
210
+
211
+ def is_f?
212
+ self.to_float(false) and true
213
+ end
214
+
215
+ # like scan but returns array of MatchData's.
216
+ # doesn't yet support blocks
217
+ def scan_md(aPattern)
218
+ result = []
219
+ self.scan(aPattern) {|s| result << $~ }
220
+ result
221
+ end
222
+
223
+ def to_b(aDefault=false)
224
+ return true if ['1','yes','y','true','on'].include?(self.downcase)
225
+ return false if ['0','no','n','false','off'].include?(self.downcase)
226
+ aDefault
227
+ end
228
+
229
+ # "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."
230
+
231
+ URLIZE_SEPARATORS = /[ \\\(\)\[\]\.*,]/ # was /[ \\\(\)\[\]\.*,]/
232
+ URLIZE_EXTENSIONS = %w(html htm jpg jpeg png gif bmp mov avi mp3 zip pdf css js doc xdoc)
233
+ URLIZE_REMOVE = /[^a-z0-9\_\-+~\/]/ # was 'a-z0-9_-+~/'
234
+ # aKeepExtensions may be an array of extensions to keep, or :none (will remove periods) or :all (any extension <= 4 chars)
235
+ def urlize(aSlashChar='+',aRemove=nil,aKeepExtensions=nil)
236
+ aKeepExtensions=URLIZE_EXTENSIONS if !aKeepExtensions
237
+ aRemove=URLIZE_REMOVE if !aRemove
238
+ return self if self.empty?
239
+ result = self.downcase
240
+ ext = nil
241
+ if (aKeepExtensions!=:none) && last_dot = result.rindex('.')
242
+ if (ext_len = result.length-last_dot-1) <= 4 # preserve extension without dot if <= 4 chars long
243
+ ext = result[last_dot+1..-1]
244
+ ext = nil unless aKeepExtensions==:all || (aKeepExtensions.is_a?(Array) && aKeepExtensions.include?(ext))
245
+ result = result[0,last_dot] if ext
246
+ end
247
+ end
248
+
249
+ result = result.gsub(URLIZE_SEPARATORS,'-')
250
+ result = result.gsub(aRemove,'').sub(/-+$/,'').sub(/^-+/,'')
251
+ result.gsub!('/',aSlashChar) unless aSlashChar=='/'
252
+ result.gsub!(/-{2,}/,'-')
253
+ result += '.'+ext if ext
254
+ result
255
+ end
256
+
257
+ def has_tags?
258
+ index(/<[a-zA-Z\-:0-9]+(\b|>)/) && (index('/>') || index('</')) # contains an opening and closing tag
259
+ end
260
+
261
+ def snake_case
262
+ underscore.tr(' ','_')
263
+ end
264
+
265
+ def relative_url?
266
+ !begins_with?('http') || !begins_with?('/')
267
+ end
268
+
269
+ def to_file(aFilename)
270
+ File.open(aFilename,'wb') {|file| file.write self }
271
+ end
272
+
273
+ def self.from_file(aFilename)
274
+ File.open(aFilename, "rb") { |f| f.read }
275
+ end
276
+
277
+ # given ('abcdefg','c.*?e') returns ['ab','cde','fg'] so you can manipulate the head, match and tail seperately, and potentially rejoin
278
+ def split3(aPattern,aOccurence=0)
279
+ aString = self
280
+ matches = aString.scan_md(aPattern)
281
+ match = matches[aOccurence]
282
+ parts = (match ? [match.pre_match,match.to_s,match.post_match] : [aString,nil,''])
283
+
284
+ if !block_given? # return head,match,tail
285
+ parts
286
+ else # return string
287
+ parts[1] = yield *parts if match
288
+ parts.join
289
+ end
290
+ end
291
+ end
292
+
293
+ end
@@ -0,0 +1,127 @@
1
+ require 'pathname'
2
+
3
+ module Rigup
4
+ module Utils
5
+ module File
6
+
7
+ module_function
8
+
9
+ def sniff_seperator(aPath)
10
+ result = 0.upto(aPath.length-1) do |i|
11
+ char = aPath[i, 1]
12
+ break char if char=='\\' || char=='/'
13
+ end
14
+ result = ::File::SEPARATOR if result==0
15
+ return result
16
+ end
17
+
18
+ def append_slash(aPath, aSep=nil)
19
+ aSep = sniff_seperator(aPath) unless aSep
20
+ aPath.ensure_suffix(aSep)
21
+ end
22
+
23
+ def remove_slash(aPath)
24
+ last_char = aPath[-1, 1]
25
+ aPath = aPath[0..-2] if last_char=='\\' || last_char=='/'
26
+ return aPath
27
+ end
28
+
29
+ #def ensure_prefix(aString,aPrefix)
30
+ # aString.begins_with?(aPrefix) ? aString : aPrefix+aString
31
+ #end
32
+ #
33
+ #def ensure_suffix(aString,aSuffix)
34
+ # aString.ends_with?(aSuffix) ? aString : aString+aSuffix
35
+ #end
36
+
37
+ # Remove base dir from given path. Result will be relative to base dir and not have a leading or trailing slash
38
+ #'/a/b/c','/a' = 'b/c'
39
+ #'/a/b/c','/' = 'a/b/c'
40
+ #'/','/' = ''
41
+ def path_debase(aPath, aBase)
42
+ aBase = append_slash(aBase)
43
+ aPath = remove_slash(aPath) unless aPath=='/'
44
+ aPath[0, aBase.length]==aBase ? aPath[aBase.length, aPath.length-aBase.length] : aPath
45
+ end
46
+
47
+ def path_rebase(aPath, aOldBase, aNewBase)
48
+ rel_path = path_debase(aPath, aOldBase)
49
+ append_slash(aNewBase)+rel_path
50
+ end
51
+
52
+ def path_combine(aBasePath, aPath)
53
+ return aBasePath if !aPath
54
+ return aPath if !aBasePath
55
+ return path_relative?(aPath) ? ::File.join(aBasePath, aPath) : aPath
56
+ end
57
+
58
+ # make path real according to file system
59
+ def real_path(aPath)
60
+ (path = Pathname.new(::File.expand_path(aPath))) && path.realpath.to_s
61
+ end
62
+
63
+ # takes a path and combines it with a root path (which defaults to Dir.pwd) unless it is absolute
64
+ # the final result is then expanded
65
+ def canonize_path(aPath, aRootPath=nil)
66
+ path = path_combine(aRootPath, aPath)
67
+ path = real_path(path) if path
68
+ path
69
+ end
70
+
71
+ def find_upwards(aStartPath, aPath)
72
+ curr_path = ::File.expand_path(aStartPath)
73
+ while curr_path && !(test_path_exists = ::File.exists?(test_path = ::File.join(curr_path, aPath))) do
74
+ curr_path = path_parent(curr_path)
75
+ end
76
+ curr_path && test_path_exists ? test_path : nil
77
+ end
78
+
79
+ # allows special symbols in path
80
+ # currently only ... supported, which looks upward in the filesystem for the following relative path from the basepath
81
+ def expand_magic_path(aPath, aBasePath=nil)
82
+ aBasePath ||= Dir.pwd
83
+ path = aPath
84
+ if path.begins_with?('...')
85
+ rel_part = path.split3(/\.\.\.[\/\\]/)[2]
86
+ path = find_upwards(aBasePath, rel_part)
87
+ end
88
+ end
89
+
90
+ def path_parent(aPath)
91
+ return nil if is_root_path?(aPath)
92
+ append_slash(::File.dirname(remove_slash(expand_path(aPath))))
93
+ end
94
+
95
+ def simple_dir_name(aPath)
96
+ ::File.basename(remove_slash(aPath))
97
+ end
98
+
99
+ def simple_file_name(aPath)
100
+ f = ::File.basename(aPath)
101
+ dot = f.index('.')
102
+ return dot ? f[0, dot] : f
103
+ end
104
+
105
+ def path_parts(aPath)
106
+ sep = sniff_seperator(aPath)
107
+ aPath.split(sep)
108
+ end
109
+
110
+ def extension(aFile, aExtended=true)
111
+ f = ::File.basename(aFile)
112
+ dot = aExtended ? f.index('.') : f.rindex('.')
113
+ return dot ? f[dot+1..-1] : f
114
+ end
115
+
116
+ def no_extension(aFile, aExtended=true)
117
+ ext = extension(aFile, aExtended)
118
+ return aFile.chomp('.'+ext)
119
+ end
120
+
121
+ def change_ext(aFile, aExt, aExtend=false)
122
+ no_extension(aFile, false)+(aExtend ? '.'+aExt+'.'+extension(aFile, false) : '.'+aExt)
123
+ end
124
+
125
+ end
126
+ end
127
+ end
@@ -3,11 +3,11 @@ module Rigup
3
3
  module Install
4
4
 
5
5
  def select_suffixed_file(aFile,aExtendedExtension=false)
6
- ext = Buzztools::File.extension(aFile,aExtendedExtension)
7
- no_ext = Buzztools::File.no_extension(aFile,aExtendedExtension)
8
- dir = File.dirname(aFile)
9
- run "#{context.config[:sudo]} mv -f #{no_ext}.#{context.config[:stage]}.#{ext} #{aFile}"
10
- run "#{context.config[:sudo]} rm -f #{no_ext}.*.#{ext}"
6
+ ext = Rigup::Utils::File.extension(aFile,aExtendedExtension)
7
+ no_ext = Rigup::Utils::File.no_extension(aFile,aExtendedExtension)
8
+ dir = ::File.dirname(aFile)
9
+ run "mv -f #{no_ext}.#{context.config[:stage]}.#{ext} #{aFile}"
10
+ run "rm -f #{no_ext}.*.#{ext}"
11
11
  end
12
12
 
13
13
  # Especially for modifiying behaviour eg. of FCKEditor without upsetting the standard files
@@ -18,8 +18,8 @@ module Rigup
18
18
  def override_folder(aFolder,aOverrideFolder=nil,aRemove=true)
19
19
  aFolder = aFolder.desuffix('/')
20
20
  aOverrideFolder ||= (aFolder+'_override')
21
- run "#{context.config[:sudo]} cp -vrf #{aOverrideFolder}/* #{aFolder}/"
22
- run "#{context.config[:sudo]} rm -rf #{aOverrideFolder}" if aRemove
21
+ run "cp -vrf #{aOverrideFolder}/* #{aFolder}/"
22
+ run "rm -rf #{aOverrideFolder}" if aRemove
23
23
  end
24
24
 
25
25
 
@@ -28,7 +28,7 @@ module Rigup
28
28
  aUser ||= @user
29
29
  aGroup ||= @group
30
30
 
31
- run "#{context.config[:sudo]} chown -R #{aUser}:#{aGroup} #{aPath.ensure_suffix('/')}"
31
+ sudo? "chown -R #{aUser}:#{aGroup} #{aPath.ensure_suffix('/')}"
32
32
  run_for_all("chmod 755",aPath,:dirs) # !!! perhaps reduce other permissions
33
33
  run_for_all("chmod 644",aPath,:files)
34
34
  run_for_all("chmod g+s",aPath,:dirs)
@@ -39,7 +39,7 @@ module Rigup
39
39
 
40
40
  # run this after permissions_for_web() on dirs that need to be writable by group (apache)
41
41
  def permissions_for_web_writable(aPath)
42
- run "chmod -R g+w #{aPath.ensure_suffix('/')}"
42
+ sudo? "chmod -R g+w #{aPath.ensure_suffix('/')}"
43
43
  run_for_all("chmod -R 700",aPath,:dirs,"*/.svn")
44
44
  end
45
45
 
@@ -60,7 +60,7 @@ module Rigup
60
60
  #permissions_for_web_writable("#{aPath}/tmp")
61
61
  make_public_cache_dir("#{aPath}/tmp")
62
62
 
63
- run "#{context.config[:sudo]} chown #{@user} #{aPath}/config/environment.rb" #unless DEV_MODE # very important for passenger, which uses the owner of this file to run as
63
+ sudo "chown #{@user} #{aPath}/config/environment.rb" #unless DEV_MODE # very important for passenger, which uses the owner of this file to run as
64
64
 
65
65
  when 'spree' then
66
66
  internal_permissions(aPath,'rails')
@@ -75,17 +75,16 @@ module Rigup
75
75
  internal_permissions(aPath, aKind)
76
76
  end
77
77
 
78
- def ensure_link(aTo,aFrom,aUserGroup=nil,aSudo='')
79
- raise "Must supply from" if !aFrom
78
+ def ensure_link(aTo,aFrom,aUserGroup=nil)
80
79
  cmd = []
81
- cmd << "#{aSudo} rm -rf #{aFrom}"
82
- cmd << "#{aSudo} ln -sf #{aTo} #{aFrom}"
83
- cmd << "#{aSudo} chown -h #{aUserGroup} #{aFrom}" if aUserGroup
84
- run(cmd.join(' && '),raise: false)
80
+ cmd << "#{sudo_s}rm -rf #{aFrom}"
81
+ cmd << "#{sudo_s}ln -sf #{aTo} #{aFrom}"
82
+ cmd << "#{sudo_s}chown -h #{aUserGroup} #{aFrom}" if aUserGroup
83
+ run(cmd.join(' && '),{:raise => false})
85
84
  end
86
85
 
87
86
  def make_public_cache_dir(aStartPath)
88
- run "#{context.config[:sudo]} mkdir -p #{aStartPath}"
87
+ sudo? "mkdir -p #{aStartPath}"
89
88
  permissions_for_web(aStartPath)
90
89
  permissions_for_web_writable(aStartPath)
91
90
  end
@@ -7,7 +7,7 @@ module Rigup
7
7
  end
8
8
 
9
9
  def pwd
10
- bash.execute("pwd", stdout: nil).first.strip
10
+ bash.execute("pwd", {:stdout => nil}).first.strip
11
11
  end
12
12
 
13
13
  def cd(aPath,&block)
@@ -22,28 +22,56 @@ module Rigup
22
22
  cd(before_path)
23
23
  end
24
24
  else
25
- aPath = File.expand_path(aPath)
25
+ aPath = ::File.expand_path(aPath)
26
26
  Dir.chdir(aPath)
27
27
  bash.execute("cd \"#{aPath}\"")
28
28
  end
29
29
  aPath
30
30
  end
31
31
 
32
+ # execute the given command in the bash session
32
33
  def run(aCommand,aOptions=nil)
33
34
  aOptions ||= {}
34
35
  logger.debug aCommand
35
- response,errout = bash.execute(aCommand,stdout: STDOUT) # ::POpen4::shell(aCommand,aDir || @context.pwd)
36
+ response,errout = bash.execute(aCommand,:stdout => STDOUT) # ::POpen4::shell(aCommand,aDir || @context.pwd)
36
37
  logger.debug errout if errout.to_nil
37
38
  logger.debug response if response.to_nil
38
39
  raise "Command Failed" unless bash.exit_status==0 or aOptions[:raise]==false
39
40
  return response
40
41
  end
41
42
 
42
- def run_for_all(aCommand,aPath,aFilesOrDirs,aPattern=nil,aInvertPattern=false,aSudo=false)
43
+ # returns true if sudo is available for the current user, otherwise false. Default = true
44
+ def sudo_available?
45
+ return !!config[:sudo_available] if config.has_key?(:sudo_available)
46
+ return false if !config[:sudo].to_nil # false if old config item blank
47
+ true
48
+ end
49
+
50
+ # execute the command using sudo. Raises an exception if sudo is not available
51
+ def sudo(aCommand,aOptions=nil)
52
+ raise "sudo not available" unless sudo_available?
53
+ run('sudo '+aCommand,aOptions)
54
+ end
55
+
56
+ # uses sudo if available, otherwise plain run
57
+ def sudo?(aCommand,aOptions=nil)
58
+ if sudo_available?
59
+ sudo(aCommand,aOptions)
60
+ else
61
+ run(aCommand,aOptions)
62
+ end
63
+ end
64
+
65
+ # for embedding into command line strings
66
+ def sudo_s
67
+ sudo_available? ? 'sudo ' : ''
68
+ end
69
+
70
+ def run_for_all(aCommand,aPath,aFilesOrDirs,aPattern=nil,aInvertPattern=false)
43
71
  #run "#{sudo} find . -wholename '*/.svn' -prune -o -type d -print0 |xargs -0 #{sudo} chmod 750"
44
72
  #sudo find . -type f -exec echo {} \;
45
73
  cmd = []
46
- cmd << "sudo" if aSudo
74
+ cmd << sudo_s
47
75
  cmd << "find #{aPath.ensure_suffix('/')}"
48
76
  cmd << "-wholename '#{aPattern}'" if aPattern
49
77
  cmd << "-prune -o" if aInvertPattern
data/lib/rigup/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rigup
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.10"
3
3
  end
data/lib/rigup.rb CHANGED
@@ -1,16 +1,19 @@
1
1
  require 'thor'
2
- require 'buzztools'
3
2
  require 'logger'
4
3
  require 'yaml'
5
4
  require 'session'
6
- #require 'buzztools/extras/shell_extras'
7
5
 
8
- require_relative "rigup/version"
9
- require_relative "rigup/config"
10
- require_relative "rigup/context"
11
- require_relative "rigup/utils/run"
12
- require_relative "rigup/utils/install"
13
- require_relative "rigup/git_repo"
14
- require_relative "rigup/cli"
15
- require_relative "rigup/base"
16
- require_relative "rigup/deploy_base"
6
+ Dir.chdir(File.dirname(__FILE__)) do
7
+ require "rigup/version"
8
+ require "rigup/utils/extend_stdlib"
9
+ require "rigup/utils/config"
10
+ require "rigup/utils/file"
11
+ require "rigup/utils/run"
12
+ require "rigup/utils/install"
13
+ require "rigup/config"
14
+ require "rigup/context"
15
+ require "rigup/git_repo"
16
+ require "rigup/cli"
17
+ require "rigup/base"
18
+ require "rigup/deploy_base"
19
+ end
data/rigup.gemspec CHANGED
@@ -20,29 +20,10 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_dependency 'bundler'#, '~>1.5.3'
22
22
  s.add_dependency 'thor'#, '~> 0.19.1'
23
-
24
-
25
- s.add_development_dependency 'rspec', '~>2.14.0'
26
- #s.add_development_dependency('rspec')
27
-
28
- s.add_development_dependency('rake')
29
- #s.add_development_dependency('rspec-core')
30
- #s.add_development_dependency('rdoc')
31
- #s.add_development_dependency('aruba')
32
- #s.add_development_dependency('debugger')
33
- #s.add_runtime_dependency('gli','2.5.0')
34
- #s.add_runtime_dependency('termios')
35
- #s.add_runtime_dependency('highline')
36
23
  s.add_runtime_dependency('git')
37
- #s.add_runtime_dependency('middleman')
38
- s.add_runtime_dependency 'buzztools', '~>0.0.6'
39
- #s.add_runtime_dependency('POpen4')
40
24
  s.add_runtime_dependency('session')
41
25
  # https://github.com/geemus/formatador
42
- #s.add_runtime_dependency('bitbucket_rest_api')
43
- #s.add_runtime_dependency('osx_keychain')
44
- #s.add_runtime_dependency('json')
45
- #s.add_runtime_dependency('net_dav')
46
- #s.add_runtime_dependency('net-ssh')
47
- #s.add_runtime_dependency('system_timer')
26
+
27
+ s.add_development_dependency 'rspec', '~>2.14.0'
28
+ s.add_development_dependency('rake')
48
29
  end
data/rigup.iml CHANGED
@@ -14,9 +14,8 @@
14
14
  <orderEntry type="inheritedJdk" />
15
15
  <orderEntry type="sourceFolder" forTests="false" />
16
16
  <orderEntry type="library" scope="PROVIDED" name="bundler (v1.5.3, RVM: ruby-2.0.0-p247) [gem]" level="application" />
17
- <orderEntry type="library" scope="PROVIDED" name="buzztools (v0.0.6, RVM: ruby-2.0.0-p247) [gem]" level="application" />
18
17
  <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.2.5, RVM: ruby-2.0.0-p247) [gem]" level="application" />
19
- <orderEntry type="library" scope="PROVIDED" name="git (v1.2.6, RVM: ruby-2.0.0-p247) [gem]" level="application" />
18
+ <orderEntry type="library" scope="PROVIDED" name="git (v1.2.8, RVM: ruby-2.0.0-p247) [gem]" level="application" />
20
19
  <orderEntry type="library" scope="PROVIDED" name="rake (v10.2.0, RVM: ruby-2.0.0-p247) [gem]" level="application" />
21
20
  <orderEntry type="library" scope="PROVIDED" name="rspec (v2.14.1, RVM: ruby-2.0.0-p247) [gem]" level="application" />
22
21
  <orderEntry type="library" scope="PROVIDED" name="rspec-core (v2.14.8, RVM: ruby-2.0.0-p247) [gem]" level="application" />
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rigup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gary McGhee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-23 00:00:00.000000000 Z
11
+ date: 2014-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,27 +39,13 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: 2.14.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: 2.14.0
55
- - !ruby/object:Gem::Dependency
56
- name: rake
42
+ name: git
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - '>='
60
46
  - !ruby/object:Gem::Version
61
47
  version: '0'
62
- type: :development
48
+ type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
@@ -67,7 +53,7 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: git
56
+ name: session
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - '>='
@@ -81,27 +67,27 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: buzztools
70
+ name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ~>
88
74
  - !ruby/object:Gem::Version
89
- version: 0.0.6
90
- type: :runtime
75
+ version: 2.14.0
76
+ type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - ~>
95
81
  - !ruby/object:Gem::Version
96
- version: 0.0.6
82
+ version: 2.14.0
97
83
  - !ruby/object:Gem::Dependency
98
- name: session
84
+ name: rake
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - '>='
102
88
  - !ruby/object:Gem::Version
103
89
  version: '0'
104
- type: :runtime
90
+ type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
@@ -126,6 +112,9 @@ files:
126
112
  - lib/rigup/deploy_base.rb
127
113
  - lib/rigup/git_repo.rb
128
114
  - lib/rigup/svn.rb
115
+ - lib/rigup/utils/config.rb
116
+ - lib/rigup/utils/extend_stdlib.rb
117
+ - lib/rigup/utils/file.rb
129
118
  - lib/rigup/utils/install.rb
130
119
  - lib/rigup/utils/run.rb
131
120
  - lib/rigup/version.rb