rigup 0.1.0 → 0.2.10

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.
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