big_keeper 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/.gitignore +50 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +106 -0
- data/LICENSE.txt +21 -0
- data/README.md +41 -0
- data/Rakefile +2 -0
- data/big_keeper.gemspec +40 -0
- data/bin/big-keeper +14 -0
- data/bin/setup +8 -0
- data/docs/en-US/FEATURE.md +0 -0
- data/docs/zh-CN/BIGKEEPER_FILE.md +62 -0
- data/docs/zh-CN/FEATURE.md +88 -0
- data/docs/zh-CN/README.md +76 -0
- data/lib/big_keeper/command/feature_finish.rb +47 -0
- data/lib/big_keeper/command/feature_pull.rb +23 -0
- data/lib/big_keeper/command/feature_push.rb +39 -0
- data/lib/big_keeper/command/feature_start.rb +60 -0
- data/lib/big_keeper/command/feature_switch.rb +43 -0
- data/lib/big_keeper/command/feature_update.rb +60 -0
- data/lib/big_keeper/command/hotfix_start.rb +0 -0
- data/lib/big_keeper/command/podfile_lock.rb +16 -0
- data/lib/big_keeper/command/release_home.rb +51 -0
- data/lib/big_keeper/command/release_module.rb +27 -0
- data/lib/big_keeper/command/start_module_release.sh +44 -0
- data/lib/big_keeper/model/gitflow_type.rb +19 -0
- data/lib/big_keeper/model/operate_type.rb +19 -0
- data/lib/big_keeper/model/podfile_type.rb +44 -0
- data/lib/big_keeper/service/git_service.rb +75 -0
- data/lib/big_keeper/service/module_service.rb +90 -0
- data/lib/big_keeper/service/stash_service.rb +42 -0
- data/lib/big_keeper/util/bigkeeper_parser.rb +167 -0
- data/lib/big_keeper/util/git_operator.rb +95 -0
- data/lib/big_keeper/util/gitflow_operator.rb +40 -0
- data/lib/big_keeper/util/info_plist_operator.rb +46 -0
- data/lib/big_keeper/util/podfile_detector.rb +140 -0
- data/lib/big_keeper/util/podfile_operator.rb +111 -0
- data/lib/big_keeper/version.rb +3 -0
- data/lib/big_keeper.rb +151 -0
- data/resources/readme/big-keeper-readme.001.png +0 -0
- data/resources/readme/big-keeper-readme.002.png +0 -0
- data/resources/readme/big-keeper-readme.003.png +0 -0
- data/resources/readme/big-keeper-readme.004.png +0 -0
- data/resources/readme/big-keeper-readme.005.png +0 -0
- data/resources/readme/big-keeper-readme.006.png +0 -0
- data/resources/readme/big-keeper-readme.007.png +0 -0
- metadata +191 -0
@@ -0,0 +1,167 @@
|
|
1
|
+
# Bigkeeper module
|
2
|
+
module BigKeeper
|
3
|
+
def self.version(name)
|
4
|
+
BigkeeperParser.parse_version(name)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.user(name)
|
8
|
+
BigkeeperParser.parse_user(name)
|
9
|
+
yield if block_given?
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.home(name, params)
|
13
|
+
BigkeeperParser.parse_home(name, params)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.pod(name, params)
|
17
|
+
BigkeeperParser.parse_pod(name, params)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.modules
|
21
|
+
BigkeeperParser.parse_modules
|
22
|
+
yield if block_given?
|
23
|
+
end
|
24
|
+
|
25
|
+
# Bigkeeper file parser
|
26
|
+
class BigkeeperParser
|
27
|
+
@@config = {}
|
28
|
+
@@current_user = ''
|
29
|
+
|
30
|
+
def self.parse(bigkeeper)
|
31
|
+
if @@config.empty?
|
32
|
+
content = File.read bigkeeper
|
33
|
+
|
34
|
+
content.gsub!(/version\s/, 'BigKeeper::version ')
|
35
|
+
content.gsub!(/user\s/, 'BigKeeper::user ')
|
36
|
+
content.gsub!(/home\s/, 'BigKeeper::home ')
|
37
|
+
content.gsub!(/pod\s/, 'BigKeeper::pod ')
|
38
|
+
content.gsub!(/modules\s/, 'BigKeeper::modules ')
|
39
|
+
eval content
|
40
|
+
# p @@config
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.parse_version(name)
|
45
|
+
@@config[:version] = name
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.parse_user(name)
|
49
|
+
@@current_user = name
|
50
|
+
users = @@config[:users]
|
51
|
+
users = {} if users.nil?
|
52
|
+
users[name] = {}
|
53
|
+
@@config[:users] = users
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.parse_home(name, params)
|
57
|
+
@@config[:home] = params
|
58
|
+
@@config[:name] = name
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.parse_pod(name, params)
|
62
|
+
if params[:path]
|
63
|
+
parse_user_pod(name, params)
|
64
|
+
elsif params[:git]
|
65
|
+
parse_modules_pod(name, params)
|
66
|
+
else
|
67
|
+
raise %(There should be ':path =>' or ':git =>' for pod #{name})
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.parse_user_pod(name, params)
|
72
|
+
users = @@config[:users]
|
73
|
+
user = users[@@current_user]
|
74
|
+
pods = user[:pods]
|
75
|
+
pods = {} if pods.nil?
|
76
|
+
pods[name] = params
|
77
|
+
user[:pods] = pods
|
78
|
+
@@config[:users] = users
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.parse_modules_pod(name, params)
|
82
|
+
modules = @@config[:modules]
|
83
|
+
modules[name] = params
|
84
|
+
@@config[:modules] = modules
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.parse_modules
|
88
|
+
modules = @@config[:modules]
|
89
|
+
modules = {} if modules.nil?
|
90
|
+
@@config[:modules] = modules
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.version
|
94
|
+
@@config[:version]
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.home_name
|
98
|
+
@@config[:name]
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.home_git()
|
102
|
+
@@config[:home][:git]
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.home_pulls()
|
106
|
+
@@config[:home][:pulls]
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.module_full_path(home_path, user_name, module_name)
|
110
|
+
if @@config[:users] \
|
111
|
+
&& @@config[:users][user_name] \
|
112
|
+
&& @@config[:users][user_name][:pods] \
|
113
|
+
&& @@config[:users][user_name][:pods][module_name] \
|
114
|
+
&& @@config[:users][user_name][:pods][module_name][:path]
|
115
|
+
@@config[:users][user_name][:pods][module_name][:path]
|
116
|
+
else
|
117
|
+
File.expand_path("#{home_path}/../#{module_name}")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.module_path(user_name, module_name)
|
122
|
+
if @@config[:users] \
|
123
|
+
&& @@config[:users][user_name] \
|
124
|
+
&& @@config[:users][user_name][:pods] \
|
125
|
+
&& @@config[:users][user_name][:pods][module_name] \
|
126
|
+
&& @@config[:users][user_name][:pods][module_name][:path]
|
127
|
+
@@config[:users][user_name][:pods][module_name][:path]
|
128
|
+
else
|
129
|
+
"../#{module_name}"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def self.module_git(module_name)
|
134
|
+
@@config[:modules][module_name][:git]
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.module_pulls(module_name)
|
138
|
+
@@config[:modules][module_name][:pulls]
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.verify_modules(modules)
|
142
|
+
modules.each do |item|
|
143
|
+
raise "Can not find module #{item} in Bigkeeper file" unless @@config[:modules][item]
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def self.module_names
|
148
|
+
@@config[:modules].keys
|
149
|
+
end
|
150
|
+
|
151
|
+
def self.config
|
152
|
+
@@config
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# BigkeeperParser.parse('/Users/mmoaay/Documents/eleme/BigKeeperMain/Bigkeeper')
|
157
|
+
# BigkeeperParser.parse('/Users/mmoaay/Documents/eleme/BigKeeperMain/Bigkeeper')
|
158
|
+
#
|
159
|
+
# p BigkeeperParser.home_git()
|
160
|
+
# p BigkeeperParser.home_pulls()
|
161
|
+
# p BigkeeperParser.module_path('perry', 'BigKeeperModular')
|
162
|
+
# p BigkeeperParser.module_path('', 'BigKeeperModular')
|
163
|
+
# p BigkeeperParser.module_git('BigKeeperModular')
|
164
|
+
# pulls = BigkeeperParser.module_pulls('BigKeeperModular')
|
165
|
+
# `open #{pulls}`
|
166
|
+
# p BigkeeperParser.module_names
|
167
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module BigKeeper
|
2
|
+
# Operator for got
|
3
|
+
class GitOperator
|
4
|
+
def current_branch(path)
|
5
|
+
Dir.chdir(path) do
|
6
|
+
`git rev-parse --abbrev-ref HEAD`.chop
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def has_branch(path, branch_name)
|
11
|
+
has_branch = false
|
12
|
+
IO.popen("cd #{path}; git branch -a") do |io|
|
13
|
+
io.each do |line|
|
14
|
+
has_branch = true if line.include? branch_name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
has_branch
|
18
|
+
end
|
19
|
+
|
20
|
+
def git_checkout(path, branch_name)
|
21
|
+
Dir.chdir(path) do
|
22
|
+
`git checkout #{branch_name}`
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def git_fetch(path)
|
27
|
+
Dir.chdir(path) do
|
28
|
+
`git fetch origin`
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def git_rebase(path, branch_name)
|
33
|
+
Dir.chdir(path) do
|
34
|
+
`git rebase origin/#{branch_name}`
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def clone(path, git_base)
|
39
|
+
Dir.chdir(path) do
|
40
|
+
`git clone #{git_base}`
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def commit(path, message)
|
45
|
+
Dir.chdir(path) do
|
46
|
+
`git add .`
|
47
|
+
`git commit -m "#{message}"`
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def push(path, branch_name)
|
52
|
+
Dir.chdir(path) do
|
53
|
+
p `git push origin #{branch_name}`
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def pull(path, branch_name)
|
58
|
+
Dir.chdir(path) do
|
59
|
+
p `git pull origin #{branch_name}`
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def has_changes(path)
|
64
|
+
has_changes = true
|
65
|
+
clear_flag = 'nothing to commit, working tree clean'
|
66
|
+
IO.popen("cd #{path}; git status") do |io|
|
67
|
+
io.each do |line|
|
68
|
+
has_changes = false if line.include? clear_flag
|
69
|
+
end
|
70
|
+
end
|
71
|
+
has_changes
|
72
|
+
end
|
73
|
+
|
74
|
+
def del(path, branch_name)
|
75
|
+
Dir.chdir(path) do
|
76
|
+
p `git branch -D #{branch_name}`
|
77
|
+
p `git push origin --delete #{branch_name}`
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def user
|
82
|
+
`git config user.name`.chop
|
83
|
+
end
|
84
|
+
|
85
|
+
def tag(path, version)
|
86
|
+
Dir.chdir(path) do
|
87
|
+
p `git tag -a #{version} -m "release: V #{version}" master`
|
88
|
+
p `git push --tags`
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# p GitOperator.new.user
|
94
|
+
# BigStash::StashOperator.new("/Users/mmoaay/Documents/eleme/BigKeeperMain").list
|
95
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'big_keeper/model/gitflow_type'
|
2
|
+
|
3
|
+
module BigKeeper
|
4
|
+
# Operator for gitflow
|
5
|
+
class GitflowOperator
|
6
|
+
def start(path, name, type)
|
7
|
+
init_git_flow(path)
|
8
|
+
Dir.chdir(path) do
|
9
|
+
gitflow_type_name = GitflowType.name(type)
|
10
|
+
p `git flow #{gitflow_type_name} start #{name}`
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def init_git_flow(path)
|
15
|
+
Dir.chdir(path) do
|
16
|
+
clear_flag = 'Already initialized for gitflow'
|
17
|
+
IO.popen('git flow init -d') do |io|
|
18
|
+
io.each do |line|
|
19
|
+
unless line.include? clear_flag
|
20
|
+
`git push origin master`
|
21
|
+
`git push origin develop`
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def finish_release(path, release_name)
|
29
|
+
Dir.chdir(path) do
|
30
|
+
p `git checkout master`
|
31
|
+
p `git merge release/#{release_name}`
|
32
|
+
p `git push`
|
33
|
+
p `git checkout develop`
|
34
|
+
p `git merge release/#{release_name}`
|
35
|
+
p `git push`
|
36
|
+
p `git branch -d release/#{release_name}`
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require 'plist' # gem install plist
|
3
|
+
require 'big_stash/stash_operator'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
module BigKeeper
|
7
|
+
# Operator for Info.plist
|
8
|
+
class InfoPlistOperator
|
9
|
+
def change_version_build(path, version)
|
10
|
+
if find_infoPlist_filePath(path) == ''
|
11
|
+
raise %(Not find be Info.plist at #{path})
|
12
|
+
end
|
13
|
+
info_plist_path = find_infoPlist_filePath(path)
|
14
|
+
result = Plist.parse_xml(info_plist_path)
|
15
|
+
result['CFBundleShortVersionString'] = version.to_s
|
16
|
+
result['CFBundleVersion'] = getBuildVersion(version, result['CFBundleShortVersionString'], result['CFBundleVersion'])
|
17
|
+
Plist::Emit.save_plist(result, info_plist_path)
|
18
|
+
puts %Q('Version has changed to #{version}')
|
19
|
+
end
|
20
|
+
|
21
|
+
# Find Info.plist file path
|
22
|
+
# @return [String] pathName of info.plist
|
23
|
+
def find_infoPlist_filePath(path)
|
24
|
+
paths = Pathname.new(path).children.select { |pn| pn.extname == '.xcodeproj' }
|
25
|
+
xcodePath = paths[0].to_s.split('/')[-1]
|
26
|
+
projectName = xcodePath.split('.')[0]
|
27
|
+
projectPath = ''
|
28
|
+
Pathname.new("#{path}/#{projectName}").children.select { |pn|
|
29
|
+
if pn.to_s == "#{path}/#{projectName}/Info.plist"
|
30
|
+
projectPath = "#{path}/#{projectName}/Info.plist"
|
31
|
+
end
|
32
|
+
}
|
33
|
+
projectPath
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def getBuildVersion(build_string, old_build_string, old_build_version)
|
38
|
+
if build_string == old_build_string
|
39
|
+
return old_build_version.to_i + 1
|
40
|
+
else
|
41
|
+
version_arr = build_string.split('.')
|
42
|
+
return version_arr[0].to_i * 1000 + version_arr[1].to_i * 100 + version_arr[2].to_i * 10
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require '../util/param_parser'
|
2
|
+
|
3
|
+
params = BigKeeper::ParamParser.new.detect_podfile_unlock_items
|
4
|
+
main_path = File.expand_path(params[:main_path])
|
5
|
+
|
6
|
+
$modular_name_list = ["ELMKnightCollegeModule","LPDFoundationKit",
|
7
|
+
"LPDIntelligentDispatchModular","LPDUserRelevanceModular",
|
8
|
+
"LPDFeedbackModular","LPDQualityControlKit","LPDWalletModular",
|
9
|
+
"LPDRiderClassificationModular","LPDTransferOrderModular",
|
10
|
+
"LPDActivityModular","LPDPOIAddressService"]
|
11
|
+
|
12
|
+
class PodfileDetector
|
13
|
+
|
14
|
+
$unlock_pod_list = []
|
15
|
+
$modify_pod_list = {}
|
16
|
+
def get_unlock_pod_list(main_path)
|
17
|
+
podfile_lines = File.readlines("#{main_path}/Podfile")
|
18
|
+
p 'Analyzing Podfile...' unless podfile_lines.size.zero?
|
19
|
+
podfile_lines.collect do |sentence|
|
20
|
+
deal_podfile_line(sentence) unless sentence =~(/\'\d+.\d+.\d+'/)
|
21
|
+
end
|
22
|
+
p $unlock_pod_list
|
23
|
+
$modify_pod_list = deal_lock_file(main_path,$unlock_pod_list)
|
24
|
+
p $modify_pod_list
|
25
|
+
end
|
26
|
+
|
27
|
+
def deal_podfile_line(sentence)
|
28
|
+
if sentence.include?('pod ')
|
29
|
+
pod_model = Podfile_Modle.new(sentence)
|
30
|
+
# p pod_model
|
31
|
+
if !pod_model.name.empty? && pod_model.configurations != '[\'Debug\']' && pod_model.path == nil && pod_model.tag == nil
|
32
|
+
$unlock_pod_list << pod_model.name unless $modular_name_list.include?(pod_model.name)
|
33
|
+
end
|
34
|
+
return pod_model
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_pod_name(sentence)
|
39
|
+
# match_data = /\'\w*\'/.match(sentence)
|
40
|
+
# pod_name = match_data.to_a[0].delete('\'')
|
41
|
+
pod_model = deal_podfile_line(sentence)
|
42
|
+
pod_name = pod_model.name if pod_model != nil && pod_model.configurations.nil
|
43
|
+
# puts pod_name
|
44
|
+
$unlock_pod_list << pod_name unless modular_name_list.include pod_name
|
45
|
+
end
|
46
|
+
|
47
|
+
def deal_lock_file(main_path,deal_list)
|
48
|
+
$result = {}
|
49
|
+
podfile_lock_lines = File.readlines("#{main_path}/Podfile.lock")
|
50
|
+
p 'Analyzing Podfile.lock...' unless podfile_lock_lines.size.zero?
|
51
|
+
podfile_lock_lines.select do |sentence|
|
52
|
+
|
53
|
+
if sentence.include?('DEPENDENCIES') #指定范围解析 Dependencies 之前
|
54
|
+
break
|
55
|
+
end
|
56
|
+
|
57
|
+
temp_sentence = sentence.strip
|
58
|
+
pod_name = get_lock_podname(temp_sentence)
|
59
|
+
# p pod_name
|
60
|
+
if deal_list.include?(pod_name)
|
61
|
+
current_version = $result[pod_name]
|
62
|
+
temp_version = get_lock_version(temp_sentence)
|
63
|
+
if temp_version != nil
|
64
|
+
if current_version != nil
|
65
|
+
# p "cur_version #{current_version} temp_version #{temp_version}"
|
66
|
+
$result[pod_name] = chose_version(current_version,temp_version)
|
67
|
+
else
|
68
|
+
$result[pod_name] = temp_version
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
return $result
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_lock_podname(sentence) #获得pod名称
|
77
|
+
# p sentence.delete('- :~>=')
|
78
|
+
match_result = /(\d+.\d+.\d+)|(\d+.\d+)/.match(sentence.delete('- :~>='))
|
79
|
+
pod_name = match_result.pre_match unless match_result == nil
|
80
|
+
return pod_name.delete('(') unless pod_name == nil
|
81
|
+
end
|
82
|
+
|
83
|
+
def get_lock_version(sentence)#获得pod版本号
|
84
|
+
sentence.scan(/\d+.\d+.\d+/) do |version|
|
85
|
+
return version
|
86
|
+
end
|
87
|
+
return nil
|
88
|
+
end
|
89
|
+
|
90
|
+
def chose_version(cur_version,temp_version)
|
91
|
+
cur_list = cur_version.split('.')
|
92
|
+
temp_list = temp_version.split('.')
|
93
|
+
temp_list << 0.to_s if temp_list.size == 2
|
94
|
+
if cur_list[0] >= temp_list[0]
|
95
|
+
if cur_list[1] >= temp_list[1]
|
96
|
+
if cur_list[2] > temp_list[2]
|
97
|
+
return cur_version
|
98
|
+
end
|
99
|
+
return temp_version
|
100
|
+
end
|
101
|
+
return temp_version
|
102
|
+
end
|
103
|
+
return temp_version
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
class Podfile_Modle
|
109
|
+
attr_accessor :name,:git,:path,:configurations,:branch,:tag,:comment
|
110
|
+
def initialize(sentence)
|
111
|
+
if sentence.include?('#')
|
112
|
+
list = sentence.split('#')
|
113
|
+
@comment = list[1]
|
114
|
+
sentence = list[0]
|
115
|
+
end
|
116
|
+
|
117
|
+
sentence_slip_list = sentence.split(',')
|
118
|
+
return if sentence_slip_list.size.zero?
|
119
|
+
for piece in sentence_slip_list do
|
120
|
+
if /:git =>/ =~ piece
|
121
|
+
@git = $~.post_match.strip
|
122
|
+
elsif /:path =>/ =~ piece
|
123
|
+
@path = $~.post_match.strip
|
124
|
+
elsif /:configurations =>/ =~ piece
|
125
|
+
@configurations = $~.post_match.strip
|
126
|
+
elsif /:branch =>/ =~ piece
|
127
|
+
@branch = $~.post_match.strip
|
128
|
+
elsif /:tag =>/ =~ piece
|
129
|
+
@tag = $~.post_match.strip
|
130
|
+
elsif /pod /=~ piece
|
131
|
+
@name = $~.post_match.delete("'\n ")
|
132
|
+
end
|
133
|
+
# p %Q{model name:#{@name},git:#{@git},path:#{@path},config:#{@configurations},branch:#{@branch},tag:#{@tag},comment:#{@comment}}
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# p params
|
139
|
+
# p main_path
|
140
|
+
PodfileDetector.new.get_unlock_pod_list(main_path)
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'big_keeper/model/podfile_type'
|
4
|
+
|
5
|
+
module BigKeeper
|
6
|
+
# Operator for podfile
|
7
|
+
class PodfileOperator
|
8
|
+
def has(podfile, module_name)
|
9
|
+
File.open(podfile, 'r') do |file|
|
10
|
+
file.each_line do |line|
|
11
|
+
if line.include?module_name
|
12
|
+
return true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def modules_with_type(podfile, modules, type)
|
20
|
+
matched_modules = []
|
21
|
+
File.open(podfile, 'r') do |file|
|
22
|
+
file.each_line do |line|
|
23
|
+
modules.each do |module_name|
|
24
|
+
if line =~ /pod\s*'#{module_name}',#{ModuleType.regex(type)}/
|
25
|
+
matched_modules << module_name
|
26
|
+
break
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
matched_modules
|
32
|
+
end
|
33
|
+
|
34
|
+
def find_and_replace(podfile, module_name, module_type, source)
|
35
|
+
temp_file = Tempfile.new('.Podfile.tmp')
|
36
|
+
|
37
|
+
begin
|
38
|
+
File.open(podfile, 'r') do |file|
|
39
|
+
file.each_line do |line|
|
40
|
+
if line.include?module_name
|
41
|
+
temp_file.puts generate_module_config(module_name, module_type, source)
|
42
|
+
else
|
43
|
+
temp_file.puts line
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
temp_file.close
|
48
|
+
FileUtils.mv(temp_file.path, podfile)
|
49
|
+
ensure
|
50
|
+
temp_file.close
|
51
|
+
temp_file.unlink
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_module_config(module_name, module_type, source)
|
56
|
+
module_config = ''
|
57
|
+
if ModuleType::PATH == module_type
|
58
|
+
module_config = %Q( pod #{module_name}, :path => '#{source}')
|
59
|
+
elsif ModuleType::GIT == module_type
|
60
|
+
# puts source.base
|
61
|
+
# puts source.addition
|
62
|
+
if GitType::BRANCH == source.type
|
63
|
+
module_config = %Q( pod '#{module_name}', :git => '#{source.base}', :branch => '#{source.addition}')
|
64
|
+
elsif GitType::TAG == source.type
|
65
|
+
module_config = %Q( pod '#{module_name}', :git => '#{source.base}', :tag => '#{source.addition}')
|
66
|
+
elsif GitType::COMMIT == source.type
|
67
|
+
module_config = %Q( pod '#{module_name}', :git => '#{source.base}', :commit => '#{source.addition}')
|
68
|
+
else
|
69
|
+
module_config = %Q( pod '#{module_name}', :git => '#{source.base}')
|
70
|
+
end
|
71
|
+
else
|
72
|
+
module_config = %Q( pod #{module_name}, '#{source}')
|
73
|
+
end
|
74
|
+
module_config
|
75
|
+
end
|
76
|
+
|
77
|
+
def replace_all_module_release(podfile, module_names, version, source)
|
78
|
+
|
79
|
+
module_names.each do |module_name|
|
80
|
+
PodfileOperator.new.find_and_replace(podfile,
|
81
|
+
module_name,
|
82
|
+
ModuleType::GIT,
|
83
|
+
source)
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
# temp_file = Tempfile.new('.Podfile.tmp')
|
89
|
+
# begin
|
90
|
+
# File.open(podfile, 'r') do |file|
|
91
|
+
# file.each_line do |line|
|
92
|
+
# module_names.each do |module_name|
|
93
|
+
# if line.include?module_name
|
94
|
+
# temp_file.puts generate_module_config(module_name, ModuleType::GIT, source)
|
95
|
+
# else
|
96
|
+
# # temp_file.puts line
|
97
|
+
# end
|
98
|
+
# end
|
99
|
+
# end
|
100
|
+
# end
|
101
|
+
# temp_file.close
|
102
|
+
# FileUtils.mv(temp_file.path, podfile)
|
103
|
+
# ensure
|
104
|
+
# temp_file.close
|
105
|
+
# temp_file.unlink
|
106
|
+
# end
|
107
|
+
end
|
108
|
+
|
109
|
+
private :generate_module_config
|
110
|
+
end
|
111
|
+
end
|