cocoapods-tag 0.0.3 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -0
- data/lib/cocoapods-tag/command/tag/auto.rb +37 -9
- data/lib/cocoapods-tag/command/tag/repo_list.rb +77 -0
- data/lib/cocoapods-tag/command/tag.rb +1 -0
- data/lib/cocoapods-tag/gem_version.rb +1 -1
- data/lib/cocoapods-tag/tag.rb +54 -31
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 750b94770c7e64be7c2fec845a40ec5f131b3bf37d401a25d5707e943e61eb18
|
4
|
+
data.tar.gz: 71f223370e85b4711acfcdd347b1ba4534f39eabf35828e8b1d6116887b0da86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '099976d089ecaea62b573739b974970f1d3f590a880abede27ebcde14b7cb50ceb41d1fa4b223c20d5d7a91f6f107646a1941b47332def8788bc26c23edee383'
|
7
|
+
data.tar.gz: 8b6c5f648ae71bf9a59470f28c18f375f954c067f5fc07047268425d371b4291c19571fab2a026c7ab13f444fbd717dfe5a5a0573fc7328589537b14f7aad93c
|
data/README.md
CHANGED
@@ -41,6 +41,26 @@ $ gem install cocoapods-tag
|
|
41
41
|
$ pod tag 0.1.7 "修改podspec版本号为0.1.7" "版本0.1.7" --spec-repo=xxx --quick
|
42
42
|
```
|
43
43
|
|
44
|
+
* 指定tag推送到的远端仓库(可以通过`git remote -v`查看)
|
45
|
+
|
46
|
+
```shell
|
47
|
+
$ pod tag 0.1.7 "修改podspec版本号为0.1.7" "版本0.1.7" --remote=origin
|
48
|
+
```
|
49
|
+
|
50
|
+
* 指定工作目录(插件执行的目录)
|
51
|
+
|
52
|
+
```shell
|
53
|
+
$ pod tag 0.1.7 "修改podspec版本号为0.1.7" --work-dir=xxx
|
54
|
+
```
|
55
|
+
|
56
|
+
* 为tag添加前后缀 **(前后缀与版本号中间会自动用`-`分隔,不需要手动添加)**
|
57
|
+
|
58
|
+
以下面这行命令为例,`podspec`中的`version`为`0.1.7`,`source`字段中的`tag`为`mtxx-0.1.7-beta1`,最终推送到远端仓库的`tag`也是`mtxx-0.1.7-beta1`
|
59
|
+
|
60
|
+
```shell
|
61
|
+
$ pod tag 0.1.7 "修改podspec版本号为0.1.7" --prefix="mtxx" --suffix="beta1"
|
62
|
+
```
|
63
|
+
|
44
64
|
* 单独推送`podspec`到指定`spec repo`
|
45
65
|
|
46
66
|
```shell
|
@@ -60,3 +80,5 @@ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/
|
|
60
80
|
|
61
81
|
大概解释一下就是:以`数字0-9`开头,中间可以包含`数字0-9`、`字母a-z A-Z`,特殊字符只能包含`.`和`-`,版本号前后可以有`0个或多个空格`
|
62
82
|
|
83
|
+
> 1. `cocoapods-tag`已经对版本号做了正则校验,不符合上面正则的版本号是无法通过的,这里写出来主要是为了提醒大家注意版本号的规范
|
84
|
+
> 2. 不建议版本号前后加空格
|
@@ -11,11 +11,11 @@ module Pod
|
|
11
11
|
self.description = <<-DESC
|
12
12
|
#{self.summary}
|
13
13
|
|
14
|
-
`
|
14
|
+
`VERSION`: podspec中的version字段,如果没有prefix和suffix,version与tag一样【必填】\n
|
15
15
|
`COMMIT_MSG`: commit信息【必填】\n
|
16
16
|
`TAG_MSG`: tag信息【可选,默认为"v[tag号]",比如:tag是"0.0.1",则tag信息是"v0.0.1"】\n
|
17
17
|
|
18
|
-
|
18
|
+
e.g.\n
|
19
19
|
1.使用默认tag信息\n
|
20
20
|
pod tag 0.1.7 "修改podspec版本号为0.1.7"\n
|
21
21
|
2.使用自定义tag信息\n
|
@@ -23,33 +23,61 @@ pod tag 0.1.7 "修改podspec版本号为0.1.7" "版本0.1.7"\n
|
|
23
23
|
3.推送podspec到spec repo\n
|
24
24
|
pod tag 0.1.7 "修改podspec版本号为0.1.7" "版本0.1.7" --spec-repo=xxx\n
|
25
25
|
4.跳过耗时校验\n
|
26
|
-
pod tag 0.1.7 "修改podspec版本号为0.1.7" "版本0.1.7" --
|
26
|
+
pod tag 0.1.7 "修改podspec版本号为0.1.7" "版本0.1.7" --quick\n
|
27
|
+
5.指定工作目录\n
|
28
|
+
pod tag 0.1.7 "修改podspec版本号为0.1.7" --work-dir=xxx\n
|
29
|
+
6.为tag指定前后缀\n
|
30
|
+
pod tag 0.1.7 "修改podspec版本号为0.1.7" --prefix="xxx" --suffix="xxx"\n
|
31
|
+
7.指定tag推送到的远端仓库\n
|
32
|
+
pod tag 0.1.7 "修改podspec版本号为0.1.7" --remote=xxx
|
27
33
|
DESC
|
28
34
|
|
29
35
|
self.arguments = [
|
30
|
-
CLAide::Argument.new('
|
36
|
+
CLAide::Argument.new('VERSION', true ),
|
31
37
|
CLAide::Argument.new('COMMIT_MSG', true),
|
32
38
|
CLAide::Argument.new('TAG_MSG', false)
|
33
39
|
]
|
34
40
|
|
35
41
|
def self.options
|
36
42
|
[
|
37
|
-
['--
|
38
|
-
['--
|
43
|
+
['--quick', '跳过一些耗时校验,如:远端仓库是否已经有该tag'],
|
44
|
+
['--skip-push-commit', '跳过推送commit到对应分支'],
|
45
|
+
['--remote=REMOTE', '指定tag推送到的远端仓库,可以通过`git remote -v`查看'],
|
46
|
+
['--spec-repo=SPECREPO', 'podspec推送到的repo,可以通过`pod repo list`查看'],
|
47
|
+
['--work-dir=WORKDIR', '执行命令的工作区'],
|
48
|
+
['--prefix=PREFIX', 'tag前缀'],
|
49
|
+
['--suffix=SUFFIX', 'tag后缀']
|
39
50
|
].concat(super)
|
40
51
|
end
|
41
52
|
|
42
53
|
def initialize(argv)
|
43
|
-
@
|
54
|
+
@version = argv.shift_argument
|
44
55
|
@commit_msg = argv.shift_argument
|
45
56
|
@tag_msg = argv.shift_argument
|
46
|
-
@spec_repo = argv.option('spec-repo', nil)
|
47
57
|
@quick = argv.flag?('quick', false)
|
58
|
+
@skip_push_commit = argv.flag?('skip-push-commit', false)
|
59
|
+
@remote = argv.option('remote', false)
|
60
|
+
@spec_repo = argv.option('spec-repo', nil)
|
61
|
+
@work_dir = argv.option('work-dir', nil)
|
62
|
+
@prefix = argv.option('prefix', nil)
|
63
|
+
@suffix = argv.option('suffix', nil)
|
64
|
+
@tag = @version
|
65
|
+
unless @prefix.nil?
|
66
|
+
@tag = "#{@prefix}-#{@tag}"
|
67
|
+
end
|
68
|
+
unless @suffix.nil?
|
69
|
+
@tag = "#{@tag}-#{@suffix}"
|
70
|
+
end
|
48
71
|
super
|
49
72
|
end
|
50
73
|
|
51
74
|
def run
|
52
|
-
|
75
|
+
# 传入了工作目录
|
76
|
+
unless @work_dir.nil?
|
77
|
+
raise Informative, "不存在工作目录`#{@work_dir}`" unless File.exist?(@work_dir)
|
78
|
+
Dir.chdir(@work_dir)
|
79
|
+
end
|
80
|
+
tag = Pod::Tag.new(@version, @tag, @commit_msg, @tag_msg, @spec_repo, @quick, @remote, @skip_push_commit)
|
53
81
|
tag.create
|
54
82
|
end
|
55
83
|
|
@@ -0,0 +1,77 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Command
|
4
|
+
class Tag < Command
|
5
|
+
class RepoList < Tag
|
6
|
+
include Pod
|
7
|
+
|
8
|
+
self.summary = '打印本地的 podspec 仓库'
|
9
|
+
|
10
|
+
self.description = <<-DESC
|
11
|
+
#{self.summary}
|
12
|
+
DESC
|
13
|
+
|
14
|
+
def self.options
|
15
|
+
[
|
16
|
+
['--format=FORMAT', '输出结果格式化,可选项为`json/yml(yaml)/plain`'],
|
17
|
+
].concat(super)
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(argv)
|
21
|
+
@format = argv.option('format', 'plain')
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
def run
|
26
|
+
@sources = config.sources_manager.all
|
27
|
+
if @format == 'json'
|
28
|
+
print_json
|
29
|
+
elsif @format == 'yml' || @format == 'yaml'
|
30
|
+
print_yml
|
31
|
+
else
|
32
|
+
print_plain
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def print_json
|
39
|
+
require 'json'
|
40
|
+
UI.puts JSON.pretty_generate(sources)
|
41
|
+
end
|
42
|
+
|
43
|
+
def print_yml
|
44
|
+
require 'yaml'
|
45
|
+
UI.puts sources.to_yaml
|
46
|
+
end
|
47
|
+
|
48
|
+
def print_plain
|
49
|
+
list = Pod::Command::Repo::List.new(CLAide::ARGV.new([]))
|
50
|
+
list.validate!
|
51
|
+
list.run
|
52
|
+
end
|
53
|
+
|
54
|
+
def sources
|
55
|
+
result = []
|
56
|
+
@sources.each do |source|
|
57
|
+
type = source.type
|
58
|
+
if source.is_a?(Pod::CDNSource)
|
59
|
+
type = 'CDN'
|
60
|
+
elsif source.git?
|
61
|
+
type = 'git'
|
62
|
+
end
|
63
|
+
source_hash = {
|
64
|
+
'name' => source.name,
|
65
|
+
'url' => source.url,
|
66
|
+
'path' => source.repo.to_s,
|
67
|
+
'type' => type
|
68
|
+
}
|
69
|
+
result << source_hash
|
70
|
+
end
|
71
|
+
result
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/cocoapods-tag/tag.rb
CHANGED
@@ -8,12 +8,15 @@ module Pod
|
|
8
8
|
GIT_REPO = ".git".freeze
|
9
9
|
PODSPEC_EXT = %w[podspec podspec.json].freeze
|
10
10
|
|
11
|
-
def initialize(tag, commit_msg, tag_msg, spec_repo = nil, quick = false)
|
11
|
+
def initialize(version, tag, commit_msg, tag_msg, spec_repo = nil, quick = false, remote_name = nil, skip_push_commit = false )
|
12
|
+
@version = version || raise(Informative, "缺少必填参数`version`")
|
12
13
|
@tag = tag || raise(Informative, "缺少必填参数`tag`")
|
13
14
|
@commit_msg = commit_msg || raise(Informative, "缺少必填参数`commit_msg`")
|
14
15
|
@tag_msg = tag_msg || "v#{@tag}"
|
15
16
|
@spec_repo = spec_repo
|
16
17
|
@quick = quick
|
18
|
+
@remote = remote_name
|
19
|
+
@skip_push_commit = skip_push_commit
|
17
20
|
end
|
18
21
|
|
19
22
|
public
|
@@ -64,9 +67,9 @@ module Pod
|
|
64
67
|
|
65
68
|
# 正则校验版本号
|
66
69
|
def check_version
|
67
|
-
unless Pod::Vendor::Gem::Version.correct?(@
|
70
|
+
unless Pod::Vendor::Gem::Version.correct?(@version)
|
68
71
|
msg = <<-ERROR
|
69
|
-
|
72
|
+
版本号`#{@version}`格式不正确
|
70
73
|
版本号必须以数字`0-9`开头,可以包含数字`0-9`、字母`a-z A-Z`,特殊字符只能是`.`和`-`
|
71
74
|
具体请参考CocoaPods校验版本号的正则:
|
72
75
|
#{Pod::Vendor::Gem::Version::ANCHORED_VERSION_PATTERN}
|
@@ -86,7 +89,7 @@ module Pod
|
|
86
89
|
|
87
90
|
# 检查 git repo
|
88
91
|
def check_git_repo
|
89
|
-
|
92
|
+
print "检查本地git仓库\n".yellow
|
90
93
|
|
91
94
|
# 本地是否有 .git 目录
|
92
95
|
git_repo = File.join(Dir.pwd, GIT_REPO)
|
@@ -95,28 +98,44 @@ module Pod
|
|
95
98
|
# 是否与远端仓库关联
|
96
99
|
raise Informative, "本地git仓库没有与远端仓库关联,请先使用`git remote add`关联远端仓库" if remote.nil?
|
97
100
|
|
98
|
-
|
99
|
-
|
100
|
-
print "\n检查本地git仓库是否与远端仓库同步\n".yellow
|
101
|
-
local_commit = `git rev-parse #{remote}/HEAD`.chomp
|
102
|
-
remote_commit = `git ls-remote --head #{remote} #{current_branch}`.split("\t")[0]
|
103
|
-
unless local_commit == remote_commit
|
104
|
-
msg = <<-MSG
|
105
|
-
本地git仓库没有与远端仓库同步,请先执行以下操作:
|
106
|
-
1.`git pull`或`git fetch + git rebase`拉取最新代码
|
107
|
-
2.`git push`推送本地仓库commit
|
108
|
-
MSG
|
109
|
-
raise Informative, msg
|
110
|
-
end
|
101
|
+
# 是否处于 detached 状态
|
102
|
+
raise Informative, "当前处于detached状态,请先切到分支再进行操作" if current_branch == "HEAD"
|
111
103
|
|
112
|
-
|
113
|
-
|
114
|
-
raise Informative, "本地已经存在 tag:#{@tag}" if `git tag`.split("\n").include?(@tag)
|
104
|
+
# # 是否有未提交的改动
|
105
|
+
# raise Informative, "本地有未提交的改动,请先提交或暂存" unless `git status --porcelain`.split("\n").empty?
|
115
106
|
|
107
|
+
# 检查本地是否已经有该 tag
|
108
|
+
print "\n检查本地仓库是否有tag:`#{@tag}`\n".yellow
|
109
|
+
raise Informative, "本地仓库已经存在tag:#{@tag}" if `git tag`.split("\n").include?(@tag)
|
110
|
+
|
111
|
+
unless @quick
|
116
112
|
# 判断远端是否已经有该 tag
|
117
113
|
print "\n检查远端仓库是否有tag:`#{@tag}`\n".yellow
|
118
114
|
tags = `git ls-remote --tags #{remote}`.split("\n").select { |tag| tag.include?("refs/tags/#{@tag}") }
|
119
|
-
raise Informative, "
|
115
|
+
raise Informative, "远端仓库已经有tag:#{@tag}" unless tags.empty?
|
116
|
+
|
117
|
+
# 校验本地 git 是否与远端仓库同步
|
118
|
+
print "\n检查本地git仓库是否与远端仓库同步\n".yellow
|
119
|
+
`git fetch #{remote}`
|
120
|
+
remote_br = `git rev-parse --abbrev-ref #{current_branch}@{u}`
|
121
|
+
unless remote_br == ''
|
122
|
+
remote_commit_count = `git rev-list --right-only --count #{current_branch}...#{remote_br}`.chomp.to_i
|
123
|
+
local_commit_count = `git rev-list --left-only --count #{current_branch}...#{remote_br}`.chomp.to_i
|
124
|
+
# 本地落后远端
|
125
|
+
unless remote_commit_count == 0
|
126
|
+
msg = <<-MSG
|
127
|
+
本地git仓库落后于远端仓库`#{remote_commit_count}`个提交
|
128
|
+
请先执行`git pull`或`git fetch #{remote} + git rebase #{remote_br}`拉取最新代码
|
129
|
+
MSG
|
130
|
+
raise Informative, msg
|
131
|
+
end
|
132
|
+
|
133
|
+
# 本地有未 push 的 commit
|
134
|
+
unless local_commit_count == 0
|
135
|
+
msg = "本地git仓库有`#{local_commit_count}`个commit未提交,请先执行`git push`提交"
|
136
|
+
raise Informative, msg
|
137
|
+
end
|
138
|
+
end
|
120
139
|
end
|
121
140
|
|
122
141
|
end
|
@@ -138,6 +157,10 @@ module Pod
|
|
138
157
|
if source['git'] && source['git'].strip == ''
|
139
158
|
raise Informative, "source中git字段不能为空"
|
140
159
|
end
|
160
|
+
# git字段只能是ssh
|
161
|
+
if source['git'] && source['git'] =~ /^(http|https)/
|
162
|
+
raise Informative, "source中git字段不能是http或https,只能是ssh"
|
163
|
+
end
|
141
164
|
end
|
142
165
|
|
143
166
|
# 修改podspec
|
@@ -159,31 +182,31 @@ module Pod
|
|
159
182
|
def modify_podspec_ruby(file)
|
160
183
|
org_source = @spec_hash['source']
|
161
184
|
des_source = "{ :git => '#{org_source['git']}', :tag => '#{@tag}' }"
|
162
|
-
|
163
|
-
|
185
|
+
lines = []
|
186
|
+
File.open(file, 'r:utf-8') do |f|
|
164
187
|
f.each_line do |line|
|
165
188
|
if line =~ /(^\s*.+\.version\s*=\s*).*/
|
166
|
-
line = line.sub(/(^\s*.+\.version\s*=\s*).*/, "#{$1}'#{@
|
189
|
+
line = line.sub(/(^\s*.+\.version\s*=\s*).*/, "#{$1}'#{@version}'")
|
167
190
|
end
|
168
191
|
if line =~ /(^\s*.+\.source\s*=\s*).*/
|
169
192
|
line = line.sub(/(^\s*.+\.source\s*=\s*).*/, "#{$1}#{des_source}")
|
170
193
|
end
|
171
194
|
lines << line
|
172
195
|
end
|
173
|
-
|
174
|
-
|
175
|
-
|
196
|
+
end
|
197
|
+
File.open(file, 'w:utf-8') do |f|
|
198
|
+
f.write(lines.join(""))
|
176
199
|
end
|
177
200
|
end
|
178
201
|
|
179
202
|
# 修改 *.podspec.json
|
180
203
|
def modify_podspec_json(file)
|
181
|
-
@spec_hash['version'] = @
|
204
|
+
@spec_hash['version'] = @version
|
182
205
|
@spec_hash['source'] = {
|
183
206
|
'git'=> @spec_hash['source']['git'],
|
184
207
|
'tag'=> "#{@tag}"
|
185
208
|
}
|
186
|
-
File.open(file, 'w') do |f|
|
209
|
+
File.open(file, 'w:utf-8') do |f|
|
187
210
|
f.write(@spec_hash)
|
188
211
|
end
|
189
212
|
end
|
@@ -194,7 +217,7 @@ module Pod
|
|
194
217
|
begin
|
195
218
|
`git add #{podspec}`
|
196
219
|
`git commit -m "#{@commit_msg}"`
|
197
|
-
`git push #{remote} #{current_branch}`
|
220
|
+
`git push #{remote} #{current_branch}` unless @skip_push_commit
|
198
221
|
rescue Pod::StandardError => e
|
199
222
|
@error = e
|
200
223
|
print "推送commit到远端git仓库`#{remote}/#{current_branch}`失败:#{e}".red
|
@@ -247,7 +270,7 @@ module Pod
|
|
247
270
|
# 获取当前分支
|
248
271
|
def current_branch
|
249
272
|
@current_branch ||= begin
|
250
|
-
`git
|
273
|
+
`git rev-parse --abbrev-ref HEAD`.chomp
|
251
274
|
end
|
252
275
|
end
|
253
276
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-tag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/cocoapods-tag/command/tag.rb
|
67
67
|
- lib/cocoapods-tag/command/tag/auto.rb
|
68
68
|
- lib/cocoapods-tag/command/tag/create.rb
|
69
|
+
- lib/cocoapods-tag/command/tag/repo_list.rb
|
69
70
|
- lib/cocoapods-tag/command/tag/spec_push.rb
|
70
71
|
- lib/cocoapods-tag/gem_version.rb
|
71
72
|
- lib/cocoapods-tag/helper/asker.rb
|