stool 0.1.0
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 +7 -0
- data/README.md +43 -0
- data/bin/sl +5 -0
- data/lib/VERSION.rb +3 -0
- data/lib/stool/Command/Lib/VersionAdd.rb +37 -0
- data/lib/stool/Command/Lib.rb +84 -0
- data/lib/stool/Command/LibPool/Add.rb +96 -0
- data/lib/stool/Command/LibPool/List.rb +32 -0
- data/lib/stool/Command/LibPool.rb +40 -0
- data/lib/stool/Command/WorkSpace/list.rb +48 -0
- data/lib/stool/Command/WorkSpace/update.rb +111 -0
- data/lib/stool/Command/WorkSpace.rb +68 -0
- data/lib/stool/Command.rb +55 -0
- data/lib/stool/Core/BaseObj.rb +18 -0
- data/lib/stool/Core/Config.rb +128 -0
- data/lib/stool/Core/Git.rb +48 -0
- data/lib/stool/Core/LibInfo.rb +98 -0
- data/lib/stool/Core/PoolInfo.rb +41 -0
- data/lib/stool/Core/TaskInfo.rb +131 -0
- data/lib/stool/Utils/StringUtil.rb +52 -0
- data/lib/stool/version.rb +3 -0
- data/lib/stool.rb +7 -0
- metadata +185 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9087dc7a077981a605928ca0ddf072cdf0f89da5
|
4
|
+
data.tar.gz: 43801ab73b2147d3c025909c5558ddc9a1cf05a0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8e08b78b68d280ab6cc36f6a3f7746d3c946a3c5bdff0e8a417e69402082332322c8b59a32281e1360ffc27529aa7abaaf1014ca17a981b9722513ed8d14eb1c
|
7
|
+
data.tar.gz: 49f84777e00d90b37140dced8194c6d7d19e64297494e3bc2155806fd1dcba6af7843b7e1b423e717734ec5d1cc3b886d359d623dd00ead72d0afc64312e62a7
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Stool
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/stool`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'stool'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install stool
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/stool. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
|
+
|
37
|
+
## License
|
38
|
+
|
39
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
40
|
+
|
41
|
+
## Code of Conduct
|
42
|
+
|
43
|
+
Everyone interacting in the Stool project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/stool/blob/master/CODE_OF_CONDUCT.md).
|
data/bin/sl
ADDED
data/lib/VERSION.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#版本号
|
2
|
+
require 'Utils/StringUtil'
|
3
|
+
include StringUtile
|
4
|
+
|
5
|
+
module Stool
|
6
|
+
class Command
|
7
|
+
class Lib < Command
|
8
|
+
class VersionAdd < Lib
|
9
|
+
|
10
|
+
self.command = 'vadd'
|
11
|
+
self.summary = '本地lib版本号增加'
|
12
|
+
self.arguments = [
|
13
|
+
CLAide::Argument.new('NAME', true),
|
14
|
+
]
|
15
|
+
|
16
|
+
def run
|
17
|
+
|
18
|
+
@info.info_tos
|
19
|
+
|
20
|
+
puts '版本增加 1'
|
21
|
+
newVersion = StringUtile::versionUpdate(@info.version,'1')
|
22
|
+
|
23
|
+
file = File.open(@info.path + "/#{@info.name}" + ".podspec", "r+")
|
24
|
+
file.each_line do |line|
|
25
|
+
if line[/#{@info.version}/]
|
26
|
+
|
27
|
+
file.seek(-line.length, IO::SEEK_CUR)
|
28
|
+
|
29
|
+
file.write(line.sub(/#{@info.version}/, newVersion))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
file.close
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#本地pod lib项目
|
2
|
+
require 'Core/LibInfo'
|
3
|
+
require 'Command/Lib/VersionAdd'
|
4
|
+
require 'Command/LibPool/List'
|
5
|
+
|
6
|
+
module Stool
|
7
|
+
class Command
|
8
|
+
class Lib < Command
|
9
|
+
|
10
|
+
# self.abstract_command = true
|
11
|
+
self.command = 'lib'
|
12
|
+
self.summary = '本地lib信息、处理'
|
13
|
+
# self.default_subcommand = 'list'
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('NAME', true),
|
16
|
+
]
|
17
|
+
|
18
|
+
#要查询的lib名字
|
19
|
+
attr_accessor :name
|
20
|
+
#查询结果lib信息
|
21
|
+
attr_accessor :info
|
22
|
+
|
23
|
+
def initialize(argv)
|
24
|
+
# @info = LibInfo.new()
|
25
|
+
@name = argv.shift_argument
|
26
|
+
# @progress = argv.flag?('progress')
|
27
|
+
super
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate!
|
31
|
+
super
|
32
|
+
unless @name
|
33
|
+
help! 'need the lib `NAME`.'
|
34
|
+
end
|
35
|
+
|
36
|
+
unless existAtPools?
|
37
|
+
help! "the lib named #{@name} did not find."
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def run
|
42
|
+
if @info
|
43
|
+
@info.info_tos
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
def existAtPools?
|
49
|
+
#在libPool中查找lib
|
50
|
+
arrayPools = LibPool::List::pools_from_config
|
51
|
+
arrayPools.each {|pool|
|
52
|
+
Dir.new(pool.path).each{|file|
|
53
|
+
if @name.eql?(file)
|
54
|
+
path = pool.path + "/#{file}"
|
55
|
+
@info = LibInfo::loadFromPath(path)
|
56
|
+
end
|
57
|
+
}
|
58
|
+
}
|
59
|
+
@info
|
60
|
+
end
|
61
|
+
|
62
|
+
# def fuzzy_search
|
63
|
+
# arr = []
|
64
|
+
#
|
65
|
+
# #在libPool中查找lib
|
66
|
+
# arrayPools = LibPool::List::pools_from_config
|
67
|
+
# arrayPools.each {|pool|
|
68
|
+
# Dir.new(pool.path).each{|file|
|
69
|
+
# if file[@name]
|
70
|
+
# path = pool.path + "/#{file}"
|
71
|
+
# libInfo = LibInfo::loadFromPath(path)
|
72
|
+
# if libInfo.kind_of?(LibInfo)
|
73
|
+
# arr.push(libInfo)
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
# }
|
77
|
+
# }
|
78
|
+
#
|
79
|
+
# arr
|
80
|
+
# end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#添加一个池
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module Stool
|
6
|
+
class Command
|
7
|
+
class LibPool < Command
|
8
|
+
class Add < LibPool
|
9
|
+
|
10
|
+
self.command = 'add'
|
11
|
+
self.summary = '添加一个本地pod池.'
|
12
|
+
|
13
|
+
self.description = <<-DESC
|
14
|
+
'添加一个私有pod库的池,'
|
15
|
+
DESC
|
16
|
+
|
17
|
+
self.arguments = [
|
18
|
+
CLAide::Argument.new('NAME', true),
|
19
|
+
CLAide::Argument.new('PATH', true),
|
20
|
+
]
|
21
|
+
|
22
|
+
# def self.options
|
23
|
+
# [
|
24
|
+
# ['--progress', 'Show the progress of cloning the spec repository'],
|
25
|
+
# ].concat(super)
|
26
|
+
# end
|
27
|
+
|
28
|
+
def initialize(argv)
|
29
|
+
puts 'Add --- init'
|
30
|
+
@pInfo.name = argv.shift_argument
|
31
|
+
@pInfo.path = argv.shift_argument
|
32
|
+
# @progress = argv.flag?('progress')
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate!
|
37
|
+
super
|
38
|
+
puts 'Add --- validate!'
|
39
|
+
unless @pInfo.name && @pInfo.path
|
40
|
+
help! 'Adding a libPool needs a `NAME` and a `PATH`.'
|
41
|
+
end
|
42
|
+
|
43
|
+
unless File.exist?(@path)
|
44
|
+
raise Informative,
|
45
|
+
'To add a pool, please give a ensure the path of folder is exist.'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def run
|
50
|
+
puts 'Add --- run'
|
51
|
+
#do cache
|
52
|
+
obj = hadCached?
|
53
|
+
if obj
|
54
|
+
obj.path = @path
|
55
|
+
else
|
56
|
+
doCacheByYamlToPath(@@PathForCache,@name)
|
57
|
+
end
|
58
|
+
|
59
|
+
# section = "Cloning spec repo `#{@name}` from `#{@url}`"
|
60
|
+
# section << " (branch `#{@branch}`)" if @branch
|
61
|
+
# UI.section(section) do
|
62
|
+
# create_repos_dir
|
63
|
+
# clone_repo
|
64
|
+
# checkout_branch
|
65
|
+
# config.sources_manager.sources([dir.basename.to_s]).each(&:verify_compatibility!)
|
66
|
+
# end
|
67
|
+
end
|
68
|
+
|
69
|
+
def hadCached?
|
70
|
+
puts "@PathForCache = #{@@PathForCache}"
|
71
|
+
puts "@name = #{@name}"
|
72
|
+
|
73
|
+
obj = nil
|
74
|
+
if File.exist?(self.cachePath)
|
75
|
+
obj = YAML::load(File.open(self.cachePath))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def doCacheByYamlToPath(cacheDirPath,fileName)
|
80
|
+
puts "....do cache to #{cacheDirPath}"
|
81
|
+
unless File::exists?(cacheDirPath)
|
82
|
+
Dir.mkdir(cacheDirPath,0777)
|
83
|
+
end
|
84
|
+
File.open(File.join(cacheDirPath,fileName) + '.yaml', "w") { |file|
|
85
|
+
YAML.dump(self, file)
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
def cachePath
|
90
|
+
path = "#{@@PathForCache + @name + '.yaml'}"
|
91
|
+
path.to_s
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#查看当前pool列表
|
2
|
+
module Stool
|
3
|
+
class Command
|
4
|
+
class LibPool < Command
|
5
|
+
class List < LibPool
|
6
|
+
|
7
|
+
self.command = 'list'
|
8
|
+
self.summary = '本地pod池列表'
|
9
|
+
|
10
|
+
self.arguments = [
|
11
|
+
CLAide::Argument.new('NAME', false),
|
12
|
+
]
|
13
|
+
|
14
|
+
def initialize(argv)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
#查看当前的pool list
|
19
|
+
def run
|
20
|
+
pp('')
|
21
|
+
pp('**Pool list')
|
22
|
+
List::pools_from_config.map do |pInfo|
|
23
|
+
pInfo.info_tos
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
@public
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#私有库的池,池中有多个lib
|
2
|
+
require 'Core/PoolInfo'
|
3
|
+
|
4
|
+
module Stool
|
5
|
+
class Command
|
6
|
+
class LibPool < Command
|
7
|
+
|
8
|
+
require 'Command/LibPool/List'
|
9
|
+
|
10
|
+
self.abstract_command = true
|
11
|
+
self.command = 'lp'
|
12
|
+
self.summary = 'LibPool - 本地pod池.'
|
13
|
+
self.default_subcommand = 'list'
|
14
|
+
|
15
|
+
#pool信息
|
16
|
+
# attr_accessor :pInfo
|
17
|
+
|
18
|
+
def initialize(argv)
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
#配置文件中读取
|
23
|
+
def self.pools_from_config
|
24
|
+
arr = @@config.pools
|
25
|
+
|
26
|
+
arr.each do |obj|
|
27
|
+
# puts '**** obj===' + "#{obj}"
|
28
|
+
if obj.respond_to?('path')
|
29
|
+
unless File.exist?(obj.path)
|
30
|
+
puts "warning__> #{obj.path} not exist"
|
31
|
+
arr.delete(obj)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
arr
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#查看当前workspace列表
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module Stool
|
6
|
+
class Command
|
7
|
+
class WorkSpace < Command
|
8
|
+
class List < WorkSpace
|
9
|
+
|
10
|
+
self.command = 'list'
|
11
|
+
self.summary = 'workspace列表'
|
12
|
+
|
13
|
+
self.arguments = [
|
14
|
+
#CLAide::Argument.new('NAME', false),
|
15
|
+
]
|
16
|
+
|
17
|
+
def initialize(argv)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
#查看当前的pool list
|
22
|
+
def run
|
23
|
+
pp('')
|
24
|
+
pp('**WorkSpace list')
|
25
|
+
List::tasks_from_config.map{|wp|
|
26
|
+
wp.info_tos
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
@public
|
31
|
+
|
32
|
+
def self.tasks_from_config
|
33
|
+
arr = @@config.tasks
|
34
|
+
arr.map do |obj|
|
35
|
+
if obj.respond_to?('path')
|
36
|
+
unless File.exist?(obj.path)
|
37
|
+
puts "warning--> #{obj.path} not exist"
|
38
|
+
arr.delete(obj)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
arr
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
#对执行pod update的整合
|
2
|
+
|
3
|
+
module Stool
|
4
|
+
class Command
|
5
|
+
class WorkSpace < Command
|
6
|
+
class Update < WorkSpace
|
7
|
+
|
8
|
+
self.command = 'up'
|
9
|
+
self.summary = '移除pods、podfile.lock后,执行pod update'
|
10
|
+
|
11
|
+
self.arguments = [
|
12
|
+
CLAide::Argument.new('Tag', true),
|
13
|
+
]
|
14
|
+
|
15
|
+
def initialize(argv)
|
16
|
+
@tag = argv.shift_argument
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate!
|
21
|
+
unless @tag
|
22
|
+
help! 'need the tag of workspace you configed.'
|
23
|
+
end
|
24
|
+
|
25
|
+
unless existAtConfig?
|
26
|
+
help! "To run, please ensure the tag(#{@tag}) exist."
|
27
|
+
end
|
28
|
+
|
29
|
+
unless hasPodfile?(@info.path)
|
30
|
+
help! 'To run, please ensure the workspace contain a podfile in zhe folder.' + "#{@info.path}"
|
31
|
+
end
|
32
|
+
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
@public
|
37
|
+
|
38
|
+
def run
|
39
|
+
repos_up
|
40
|
+
|
41
|
+
localLibs_git_up
|
42
|
+
|
43
|
+
@info.task_git_up
|
44
|
+
|
45
|
+
@info.edit_podfile_use_loaclLibs
|
46
|
+
|
47
|
+
del_folers
|
48
|
+
|
49
|
+
pod_update
|
50
|
+
|
51
|
+
@info.resetPofile
|
52
|
+
|
53
|
+
@info.open_task
|
54
|
+
end
|
55
|
+
|
56
|
+
#更新相关repo(除了master)
|
57
|
+
def repos_up
|
58
|
+
getAllRepos.each do |repo|
|
59
|
+
puts "*** begin update repo <#{repo}>"
|
60
|
+
`pod repo update #{repo}`
|
61
|
+
puts "*** end update repo"
|
62
|
+
puts ''
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
#更新项目用到的所有本地库
|
67
|
+
def localLibs_git_up
|
68
|
+
@@config.pools.map do |pool|
|
69
|
+
@info.localLibs.map do |lib|
|
70
|
+
libInfo = pool.searchLib(lib)
|
71
|
+
if libInfo
|
72
|
+
libInfo.gitUp
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
#删除一些相关文件
|
79
|
+
def del_folers
|
80
|
+
# Dir.rmdir(File.join(@info.path, 'Pods'))
|
81
|
+
`rm -rf Pods`
|
82
|
+
|
83
|
+
podLock = File.join(@info.path,"Pofile.lock")
|
84
|
+
if File.exist?(podLock)
|
85
|
+
File.delete(podLock)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
#执行pod update
|
90
|
+
def pod_update
|
91
|
+
useCode = @info.localLibs + @info.otherCode
|
92
|
+
|
93
|
+
useCode.collect! {|item|
|
94
|
+
|
95
|
+
item + "_use_code=1 "
|
96
|
+
}
|
97
|
+
|
98
|
+
puts "---源码库有" + useCode.join
|
99
|
+
|
100
|
+
Dir.chdir(@info.path)
|
101
|
+
|
102
|
+
puts '---当前目录' + Dir.getwd
|
103
|
+
|
104
|
+
puts "---update中...."
|
105
|
+
puts `#{useCode.join} pod update --no-repo-update`
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#iOS-workspcace项目处理
|
2
|
+
require 'Core/TaskInfo'
|
3
|
+
|
4
|
+
module Stool
|
5
|
+
class Command
|
6
|
+
class WorkSpace < Command
|
7
|
+
|
8
|
+
require 'Command/WorkSpace/list'
|
9
|
+
require 'Command/WorkSpace/update'
|
10
|
+
|
11
|
+
self.abstract_command = true
|
12
|
+
self.command = 'ws'
|
13
|
+
self.summary = 'workSpaces - 本地的Workspace项目,关于pod相关的整合'
|
14
|
+
# self.default_subcommand = 'list'
|
15
|
+
|
16
|
+
#要查询的workspace的唯一标识
|
17
|
+
attr_accessor :tag
|
18
|
+
#查询结果workspace信息
|
19
|
+
attr_accessor :info
|
20
|
+
|
21
|
+
def initialize(argv)
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
@public
|
26
|
+
|
27
|
+
def validate!
|
28
|
+
super
|
29
|
+
end
|
30
|
+
|
31
|
+
# def run
|
32
|
+
#
|
33
|
+
# end
|
34
|
+
|
35
|
+
def hasPodfile?(path)
|
36
|
+
arr = Dir.glob(File.join(path,'Podfile'))
|
37
|
+
arr[0]
|
38
|
+
end
|
39
|
+
|
40
|
+
def existAtConfig?
|
41
|
+
#在本地配置中中查找workspace
|
42
|
+
arrayTasks = WorkSpace::List::tasks_from_config
|
43
|
+
arrayTasks.each {|task|
|
44
|
+
if @tag.eql?(task.tag)
|
45
|
+
@info = task
|
46
|
+
end
|
47
|
+
}
|
48
|
+
@info
|
49
|
+
end
|
50
|
+
|
51
|
+
def getAllRepos
|
52
|
+
arr = []
|
53
|
+
if @info.repos.count == 0
|
54
|
+
path = @@config.repoCachePath
|
55
|
+
arr = Dir.entries(path).delete_if{|file|
|
56
|
+
if file['.'] || file.eql?('master')
|
57
|
+
1
|
58
|
+
end
|
59
|
+
}
|
60
|
+
else
|
61
|
+
arr = @info.repos
|
62
|
+
end
|
63
|
+
arr
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'stool/Core/Config'
|
2
|
+
require 'version'
|
3
|
+
module Stool
|
4
|
+
class Command < CLAide::Command
|
5
|
+
|
6
|
+
#配置中心
|
7
|
+
@@config = Config::loadConfig
|
8
|
+
|
9
|
+
require 'stool/Command/LibPool'
|
10
|
+
require 'stool/Command/WorkSpace'
|
11
|
+
require 'stool/Command/Lib'
|
12
|
+
|
13
|
+
self.abstract_command = true
|
14
|
+
self.command = 'sl'
|
15
|
+
self.version = VERSION
|
16
|
+
self.description = 'smart tool - 对iOS相关工作,进行自动化整合,目前只暴露了iOS使用cocoapods时的自动化处理'
|
17
|
+
self.plugin_prefixes = %w(claide stool)
|
18
|
+
|
19
|
+
def self.options
|
20
|
+
[
|
21
|
+
['--silent', 'Show nothing'],
|
22
|
+
].concat(super)
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(argv)
|
26
|
+
checkConfigFile
|
27
|
+
super
|
28
|
+
end
|
29
|
+
|
30
|
+
def run
|
31
|
+
puts 'it works!!'
|
32
|
+
|
33
|
+
cc = Config::loadConfig
|
34
|
+
|
35
|
+
cc.pools.map do |x|
|
36
|
+
|
37
|
+
puts x.path
|
38
|
+
puts x.name
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
def pp(*args)
|
44
|
+
if args.inspect[1]
|
45
|
+
puts args[0]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
#检测系统Config文件
|
50
|
+
def checkConfigFile
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Stool
|
2
|
+
class BaseObj
|
3
|
+
|
4
|
+
@public
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
yield self if block_given?
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.fromFile(path)
|
11
|
+
if File.exist?(path)
|
12
|
+
content = File.open(path, 'r:utf-8', &:read)
|
13
|
+
eval(content,nil,path.to_s)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
#项目相关配置
|
2
|
+
require 'Core/BaseObj'
|
3
|
+
require 'Core/PoolInfo'
|
4
|
+
require 'Core/TaskInfo'
|
5
|
+
|
6
|
+
module Stool
|
7
|
+
class Config < BaseObj
|
8
|
+
|
9
|
+
#cache路径
|
10
|
+
@@cachePath = File.join(Dir.home(),'stool')
|
11
|
+
@@configFilePath = File.join(@@cachePath, 'ConfigFile.rb')
|
12
|
+
#本地lib池子
|
13
|
+
attr_accessor :pools
|
14
|
+
#主工程
|
15
|
+
attr_accessor :tasks
|
16
|
+
|
17
|
+
attr_accessor :repoCachePath
|
18
|
+
|
19
|
+
@public
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@repoCachePath = File.join(Dir.home,'.cocoapods/repos')
|
23
|
+
@pools = []
|
24
|
+
@tasks = []
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
#从配置中心读取
|
29
|
+
def self.loadConfig
|
30
|
+
checkConfigFile?
|
31
|
+
cc = Config::fromFile(@@configFilePath)
|
32
|
+
cc
|
33
|
+
end
|
34
|
+
|
35
|
+
#添加一个本地libPool
|
36
|
+
def addPool
|
37
|
+
pInfo = PoolInfo.new()
|
38
|
+
|
39
|
+
@pools.push(pInfo)
|
40
|
+
|
41
|
+
yield pInfo if block_given?
|
42
|
+
end
|
43
|
+
|
44
|
+
#添加一个workspace
|
45
|
+
def addTask
|
46
|
+
tInfo = TaskInfo.new()
|
47
|
+
|
48
|
+
@tasks.push(tInfo)
|
49
|
+
|
50
|
+
yield tInfo if block_given?
|
51
|
+
end
|
52
|
+
|
53
|
+
@private
|
54
|
+
|
55
|
+
#检测config.rb是否存在
|
56
|
+
def self.checkConfigFile?
|
57
|
+
path = File.join(@@configFilePath)
|
58
|
+
unless File.exist?(path)
|
59
|
+
creatConfigFile
|
60
|
+
puts "*** At first ,you should edit the config file at path<#{@@configFilePath}>!!"
|
61
|
+
|
62
|
+
`open #{@@configFilePath}`
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
#创建一个ConfigFile例子
|
67
|
+
def self.creatConfigFile
|
68
|
+
|
69
|
+
unless Dir.exist?(@@cachePath)
|
70
|
+
Dir.mkdir(@@cachePath,0777)
|
71
|
+
end
|
72
|
+
|
73
|
+
File.new(@@configFilePath,'w+')
|
74
|
+
|
75
|
+
f = File.open(@@configFilePath, "w+")
|
76
|
+
demo = <<-EOF
|
77
|
+
#stool 配置
|
78
|
+
Config.new do |c|
|
79
|
+
|
80
|
+
#添加一个本地lib pool
|
81
|
+
c.addPool do |p|
|
82
|
+
p.name = '本地lib池 - 凤凰'
|
83
|
+
p.path = '/Users/syswin/Documents/Siyuan/Libs/phenix'
|
84
|
+
end
|
85
|
+
#再添加一个本地lib pool
|
86
|
+
# c.addPool do |p|
|
87
|
+
# p.name = '本地lib池 - toon基线'
|
88
|
+
# p.path = '/Users/syswin/Documents/Siyuan/Libs/toon'
|
89
|
+
# end
|
90
|
+
|
91
|
+
#添加一个主工程
|
92
|
+
c.addTask do |t|
|
93
|
+
t.name = '凤凰主工程'
|
94
|
+
#必须配置一个tag,pod update时需要使用
|
95
|
+
t.tag = '1'
|
96
|
+
t.path = '/Users/syswin/Documents/Siyuan/Libs/phenix/tlauncher/TLauncher'
|
97
|
+
#项目使用的本地lib,默认都是源码
|
98
|
+
t.localLibs = ['tcardReader',
|
99
|
+
'tcardLibrary',
|
100
|
+
'tcardKit',
|
101
|
+
'tcontentGroup',
|
102
|
+
'tcontentCommon']
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
EOF
|
107
|
+
|
108
|
+
f.write(demo)
|
109
|
+
end
|
110
|
+
|
111
|
+
#Todo::
|
112
|
+
# def pools
|
113
|
+
# puts "*** pools === #{pools}"
|
114
|
+
# unless @pools
|
115
|
+
# @pools = []
|
116
|
+
# end
|
117
|
+
# @pools
|
118
|
+
# end
|
119
|
+
#
|
120
|
+
# def tasks
|
121
|
+
# unless @tasks
|
122
|
+
# @tasks = []
|
123
|
+
# end
|
124
|
+
# @tasks
|
125
|
+
# end
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#update
|
2
|
+
|
3
|
+
module Stool
|
4
|
+
module Git_util
|
5
|
+
|
6
|
+
#状态
|
7
|
+
def git_st
|
8
|
+
puts "--- git status"
|
9
|
+
`git status`
|
10
|
+
end
|
11
|
+
|
12
|
+
def git_stash
|
13
|
+
puts "--- git stash"
|
14
|
+
`git stash`
|
15
|
+
end
|
16
|
+
|
17
|
+
def git_stash_pop
|
18
|
+
puts '--- git stash pop'
|
19
|
+
`git stash pop`
|
20
|
+
end
|
21
|
+
|
22
|
+
#提交
|
23
|
+
def git_commit_all(msg)
|
24
|
+
|
25
|
+
`git diff`
|
26
|
+
|
27
|
+
puts "--- 提交所有变更代码"
|
28
|
+
`git add .`
|
29
|
+
|
30
|
+
unless msg
|
31
|
+
msg = 'stool - auto commit'
|
32
|
+
end
|
33
|
+
|
34
|
+
`git commit -m"#{msg}"`
|
35
|
+
end
|
36
|
+
|
37
|
+
#update
|
38
|
+
def git_up
|
39
|
+
puts "--- git update"
|
40
|
+
`git pull`
|
41
|
+
end
|
42
|
+
|
43
|
+
def git_checkout(file)
|
44
|
+
`git checkout #{file}`
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'Core/BaseObj'
|
2
|
+
require 'Core/Git'
|
3
|
+
|
4
|
+
module Pod
|
5
|
+
class Ios
|
6
|
+
def method_missing(method_id, *arguments, &block)
|
7
|
+
# puts "***" + "method_id = #{method_id}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Spec
|
12
|
+
attr_accessor :name
|
13
|
+
attr_accessor :version
|
14
|
+
attr_accessor :ios
|
15
|
+
# attr_accessor :name
|
16
|
+
# attr_accessor :name
|
17
|
+
|
18
|
+
def method_missing(method_id, *arguments, &block)
|
19
|
+
# puts "***" + "method_id = #{method_id}"
|
20
|
+
end
|
21
|
+
|
22
|
+
@public
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@ios = Ios.new()
|
26
|
+
yield self if block_given?
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.fromFile(path)
|
30
|
+
content = File.open(path, 'r:utf-8', &:read)
|
31
|
+
eval(content,nil,path.to_s)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
#######################################
|
38
|
+
|
39
|
+
module Stool
|
40
|
+
class LibInfo < BaseObj
|
41
|
+
|
42
|
+
include Stool::Git_util
|
43
|
+
|
44
|
+
#本地路径
|
45
|
+
attr_accessor :path
|
46
|
+
#lib的name
|
47
|
+
attr_accessor :name
|
48
|
+
#lib的版本
|
49
|
+
attr_accessor :version
|
50
|
+
#本地缓存类型(Framework or code)
|
51
|
+
attr_accessor :cacheType
|
52
|
+
|
53
|
+
@public
|
54
|
+
|
55
|
+
def self.loadFromPath (path)
|
56
|
+
Dir.chdir(path)
|
57
|
+
podspec = Dir.glob('*.podspec')[0]
|
58
|
+
if podspec
|
59
|
+
info = LibInfo.new()
|
60
|
+
info.path = path
|
61
|
+
info.name = podspec.split('.')[0]
|
62
|
+
info.dsl_podspec(path + "/#{podspec}")
|
63
|
+
end
|
64
|
+
|
65
|
+
info
|
66
|
+
end
|
67
|
+
|
68
|
+
def info_tos
|
69
|
+
puts ''
|
70
|
+
puts "**lib info of <#{self.name}>"
|
71
|
+
puts "-- name: #{self.name}"
|
72
|
+
puts "-- path: #{self.path}"
|
73
|
+
puts "-- version: #{self.version}"
|
74
|
+
puts ''
|
75
|
+
end
|
76
|
+
|
77
|
+
def dsl_podspec(path)
|
78
|
+
|
79
|
+
spec = Pod::Spec.fromFile(path)
|
80
|
+
|
81
|
+
@name = spec.name
|
82
|
+
@version = spec.version
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
def gitUp
|
87
|
+
if @path
|
88
|
+
Dir.chdir(@path)
|
89
|
+
puts "*** git处理<#{@name}>"
|
90
|
+
git_st
|
91
|
+
git_stash
|
92
|
+
git_up
|
93
|
+
git_stash_pop
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#本地lib池
|
2
|
+
|
3
|
+
require 'Core/BaseObj'
|
4
|
+
require 'Core/LibInfo'
|
5
|
+
|
6
|
+
module Stool
|
7
|
+
class PoolInfo < BaseObj
|
8
|
+
attr_accessor :name
|
9
|
+
attr_accessor :path
|
10
|
+
|
11
|
+
def info_tos
|
12
|
+
puts('--' + 'name:'+ self.name)
|
13
|
+
puts('--' + 'path:'+ self.path)
|
14
|
+
puts('--' + 'libs:')
|
15
|
+
subDirs.sort.each do |f|
|
16
|
+
unless f['.']
|
17
|
+
puts ' ' + f.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
puts('')
|
21
|
+
end
|
22
|
+
|
23
|
+
#本地搜索一个lib
|
24
|
+
def searchLib(name)
|
25
|
+
libInfo = nil
|
26
|
+
if subDirs.include?(name)
|
27
|
+
libInfo = LibInfo::loadFromPath(File.join(@path,name))
|
28
|
+
end
|
29
|
+
libInfo
|
30
|
+
end
|
31
|
+
|
32
|
+
def subDirs
|
33
|
+
arr = []
|
34
|
+
if @path
|
35
|
+
arr = Dir.entries(@path)
|
36
|
+
end
|
37
|
+
arr
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
#本地lib池
|
2
|
+
require 'Core/BaseObj'
|
3
|
+
require 'Core/Git'
|
4
|
+
require 'Core/Config'
|
5
|
+
|
6
|
+
module Stool
|
7
|
+
class TaskInfo < BaseObj
|
8
|
+
|
9
|
+
include Stool::Git_util
|
10
|
+
|
11
|
+
attr_accessor :name
|
12
|
+
attr_accessor :path
|
13
|
+
attr_accessor :tag
|
14
|
+
|
15
|
+
#pod时,指定的本地lib name
|
16
|
+
attr_accessor :localLibs
|
17
|
+
#其他源码指定
|
18
|
+
attr_accessor :otherCode
|
19
|
+
|
20
|
+
#指定的repo
|
21
|
+
attr_accessor :repos
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
@localLibs = []
|
25
|
+
@otherCode = []
|
26
|
+
@repos = []
|
27
|
+
super
|
28
|
+
end
|
29
|
+
|
30
|
+
def info_tos
|
31
|
+
puts('--' + 'name:'+ self.name)
|
32
|
+
puts('--' + 'tag:'+ self.tag)
|
33
|
+
puts('--' + 'path:'+ self.path)
|
34
|
+
puts('--' + 'localLibs:')
|
35
|
+
self.localLibs.sort.map do |lib|
|
36
|
+
puts(' ' + lib.to_s)
|
37
|
+
end
|
38
|
+
puts('')
|
39
|
+
end
|
40
|
+
|
41
|
+
def open_task
|
42
|
+
`open *.xcworkspace`
|
43
|
+
end
|
44
|
+
|
45
|
+
def resetPofile
|
46
|
+
git_checkout(File.join(@path,'Podfile'))
|
47
|
+
end
|
48
|
+
|
49
|
+
#更新主工程
|
50
|
+
def task_git_up
|
51
|
+
if @path
|
52
|
+
Dir.chdir(path)
|
53
|
+
git_up
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
#更新podfile,添加使用本地库
|
58
|
+
def edit_podfile_use_loaclLibs
|
59
|
+
podfilePath = File.join(@path,'Podfile')
|
60
|
+
|
61
|
+
if File.exist?(podfilePath)
|
62
|
+
arr = @localLibs
|
63
|
+
newStr = ''
|
64
|
+
lastMatch = ''
|
65
|
+
File.open(podfilePath, "r+") do |f|
|
66
|
+
f.each_line do |line|
|
67
|
+
lineNew = line
|
68
|
+
hasFound = []
|
69
|
+
arr.each do |libName|
|
70
|
+
regx = "pod '#{libName}'"
|
71
|
+
if line[/#{regx}/]
|
72
|
+
config = Config.loadConfig
|
73
|
+
libInfo = nil
|
74
|
+
config.pools.each do |pool|
|
75
|
+
result = pool.searchLib(libName)
|
76
|
+
if result
|
77
|
+
libInfo = result
|
78
|
+
end
|
79
|
+
end
|
80
|
+
if libInfo
|
81
|
+
lineNew = regx + ", :path => '#{libInfo.path}'" + "\n"
|
82
|
+
lastMatch = lineNew
|
83
|
+
hasFound.push(libName)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
arr = arr - hasFound
|
88
|
+
newStr = newStr + lineNew
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
File.open(podfilePath, "w") do |file|
|
93
|
+
# puts newStr
|
94
|
+
file.write(newStr)
|
95
|
+
end
|
96
|
+
|
97
|
+
if arr.count > 0
|
98
|
+
newStr = ''
|
99
|
+
File.open(podfilePath, "r+") do |f|
|
100
|
+
f.each_line do |line|
|
101
|
+
lineNew = line
|
102
|
+
regx = "#{lastMatch}"
|
103
|
+
if line[/#{regx}/]
|
104
|
+
arr.map do |libName|
|
105
|
+
config = Config.loadConfig
|
106
|
+
libInfo = nil
|
107
|
+
config.pools.each do |pool|
|
108
|
+
result = pool.searchLib(libName)
|
109
|
+
if result
|
110
|
+
libInfo = result
|
111
|
+
end
|
112
|
+
end
|
113
|
+
if libInfo
|
114
|
+
lineNew = lineNew + "\n" + "pod '#{libName}'" + ", :path => '#{libInfo.path}'" + "\n"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
newStr = newStr + lineNew
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
File.open(podfilePath, "w") do |file|
|
123
|
+
file.write(newStr)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module StringUtile
|
2
|
+
|
3
|
+
#类似version = '3.2.01.01.01'格式的版本更新
|
4
|
+
|
5
|
+
def StringUtile.versionUpdate(version,value)
|
6
|
+
|
7
|
+
version = version.to_s
|
8
|
+
|
9
|
+
#要改变的版本
|
10
|
+
change = value.to_i
|
11
|
+
|
12
|
+
#更新后版本
|
13
|
+
newVersion = (version.gsub('.', '').to_i + change).to_s
|
14
|
+
|
15
|
+
while newVersion.length < version.gsub('.', '').length do
|
16
|
+
newVersion = "0"+ newVersion
|
17
|
+
end
|
18
|
+
|
19
|
+
#字符串反转
|
20
|
+
|
21
|
+
temV = version.reverse
|
22
|
+
|
23
|
+
temNv = newVersion.reverse
|
24
|
+
|
25
|
+
#新版本号int转string
|
26
|
+
|
27
|
+
appending = '.'
|
28
|
+
|
29
|
+
i = 0
|
30
|
+
|
31
|
+
while i < temV.size
|
32
|
+
|
33
|
+
if temV[i].eql?('.')
|
34
|
+
|
35
|
+
temNv = temNv.insert(i, appending)
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
i = i + 1
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
puts "#{version}更新版本(#{change})后是#{temNv.reverse}"
|
44
|
+
|
45
|
+
temNv.reverse
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
#examle
|
52
|
+
# StringUtile::versionUpdate('99.9.99','11')
|
data/lib/stool.rb
ADDED
metadata
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stool
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fiend
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-07-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: atomos
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: CFPropertyList
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.3.3
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '4.0'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.3.3
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '4.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: colored2
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.1'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.1'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: nanaimo
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 0.2.4
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.2.4
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: cocoapods
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 1.5.0
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 1.5.0
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: bundler
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '1.16'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.16'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rake
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '10.0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '10.0'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rspec
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '3.0'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '3.0'
|
131
|
+
description: 对当前iOS相关操作,进行自动化整合,目前有对Cocoapods的自动化整合!
|
132
|
+
email:
|
133
|
+
- 784767574@qq.com
|
134
|
+
executables:
|
135
|
+
- sl
|
136
|
+
extensions: []
|
137
|
+
extra_rdoc_files: []
|
138
|
+
files:
|
139
|
+
- README.md
|
140
|
+
- bin/sl
|
141
|
+
- lib/VERSION.rb
|
142
|
+
- lib/stool.rb
|
143
|
+
- lib/stool/Command.rb
|
144
|
+
- lib/stool/Command/Lib.rb
|
145
|
+
- lib/stool/Command/Lib/VersionAdd.rb
|
146
|
+
- lib/stool/Command/LibPool.rb
|
147
|
+
- lib/stool/Command/LibPool/Add.rb
|
148
|
+
- lib/stool/Command/LibPool/List.rb
|
149
|
+
- lib/stool/Command/WorkSpace.rb
|
150
|
+
- lib/stool/Command/WorkSpace/list.rb
|
151
|
+
- lib/stool/Command/WorkSpace/update.rb
|
152
|
+
- lib/stool/Core/BaseObj.rb
|
153
|
+
- lib/stool/Core/Config.rb
|
154
|
+
- lib/stool/Core/Git.rb
|
155
|
+
- lib/stool/Core/LibInfo.rb
|
156
|
+
- lib/stool/Core/PoolInfo.rb
|
157
|
+
- lib/stool/Core/TaskInfo.rb
|
158
|
+
- lib/stool/Utils/StringUtil.rb
|
159
|
+
- lib/stool/version.rb
|
160
|
+
homepage: https://rubygems.org/gems/Stool
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata: {}
|
164
|
+
post_install_message:
|
165
|
+
rdoc_options: []
|
166
|
+
require_paths:
|
167
|
+
- lib
|
168
|
+
- lib/stool
|
169
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
179
|
+
requirements: []
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 2.6.12
|
182
|
+
signing_key:
|
183
|
+
specification_version: 4
|
184
|
+
summary: A tool for workflow!
|
185
|
+
test_files: []
|