DYAutomate 1.1.0 → 1.1.5

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
  SHA256:
3
- metadata.gz: ca40553f032c4e9d73485419d62ab39396340fa3c884ae22c9c323ea4222cc2a
4
- data.tar.gz: 8c96d0b43dff6fe910d66967e233004907d8441b711a2a98a09a1f47575e7518
3
+ metadata.gz: 7464e070b8d6ea964eb5c255de678fd531d23955c8e851696f29119fc4078ab8
4
+ data.tar.gz: c6ea05feca63a3c0d4372d506edaf980a75c538a7404d444238577cb35ccbb87
5
5
  SHA512:
6
- metadata.gz: 72d26755088d66ac96ba98e3f457e184bfa514db907b3ec49b48eecd5c03e60b5f1a54228b408b04fd3d09335ffa74f9ce4c23f2b9079b315d8ddd3db5a2cb5f
7
- data.tar.gz: 07c5579de29bc7d0af3f67825f7cbfe94c68890b7fe4e4cdfc5e997480ae8a13d9b82b54444b40039139a715c6c082a0ae40c9d05c09dc6f18458bdb45c9083b
6
+ metadata.gz: 3322a16cbdd540a2244077c7e725a41098cf66d5d6b64f07149a32af331cc32e8c16583946fc19ad4d729229c5e410713224053d2c9fadd301d48ecce7ee17be
7
+ data.tar.gz: 564ff4d2745d164d36863b5da47c922e30375242b9f2d96cf978c6fc2b0d0eb81edf317f5df2b9752555653005dd8898ab744d3aa10bb0a57bb125f0b4c51db2
data/README.md CHANGED
@@ -22,17 +22,69 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ ### 代码模版
26
+ - 自动生成代码
27
+ ```
28
+ dj code
29
+ ```
30
+ - 拷贝代码片段到xcode中
31
+ ```
32
+ dj snippet
33
+ ```
34
+
35
+ ### 私有库
36
+ - 查看使用方法
37
+ ```
38
+ dj pod -h
39
+ ```
40
+ - 版本更改 1.1.1 -> 1.1.2
41
+ ```
42
+ dj pod ver 1
43
+ ```
44
+ 或者
45
+ ```
46
+ dj pod ver 0 1
47
+ ```
48
+ - 版本更改 1.1.1 -> 1.2.0
49
+ ```
50
+ dj pod ver 1 0
51
+ ```
52
+ - 提交私有库
53
+ ```
54
+ dj pod push
55
+ ```
56
+
57
+ ### workspce
58
+ - 项目pod update
59
+ ```
60
+ dj ws up
61
+ ```
62
+ - 项目pod install
63
+ ```
64
+ dj ws in
65
+ ```
26
66
 
27
67
  ## Development
28
68
 
29
69
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
70
 
71
+ For build
72
+ ```
73
+ bundle rake build
74
+ ```
75
+
76
+ For push
77
+ ```
78
+ gem push DYAutomate.gemspec
79
+ ```
80
+ or ↓↓↓↓↓↓
81
+
31
82
  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
83
 
33
84
  ## Contributing
34
85
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/DYAutomate. 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.
86
+ 有问题,可以
87
+ > Email:784767574@qq.com
36
88
 
37
89
  ## License
38
90
 
@@ -1,6 +1,5 @@
1
1
  require 'DYAutomate.rb'
2
2
  require 'version'
3
- require 'Core/CoreConfig'
4
3
  require 'CustomConfig/DYAutomateConfig'
5
4
  require 'Core/user_interface'
6
5
 
@@ -8,12 +7,15 @@ module DYAutomate
8
7
  require 'CLAide'
9
8
  include UI
10
9
  class Command < CLAide::Command
11
- include CoreConfig
12
10
  require 'Command/pod.rb'
13
11
  require 'Command/workspace.rb'
14
12
  require 'Command/codeGenerate'
13
+ require 'Command/codeSnippet'
15
14
 
16
15
  attr_accessor :config
16
+ attr_accessor :env_str
17
+ attr_accessor :repo_name
18
+
17
19
  self.abstract_command = true
18
20
  self.command = 'dj'
19
21
  self.version = VERSION
@@ -23,24 +25,23 @@ module DYAutomate
23
25
  # self.plugin_prefixes = %w(claide DYAutomate)
24
26
 
25
27
  def initialize(argv)
26
- super
27
- @repoName = CoreConfig::Core_previte_repo_name
28
- @env_str = CoreConfig::Core_env_str
29
- @config = DYAutomateConfig.loadConfig
30
- pp("当前环境变量 #{@env_str}",1)
28
+ super
29
+ @config = DYAutomateConfig.loadConfig
30
+ @env_str = @config.detailObj.env_str if @config
31
+ @repoName = @config.detailObj.private_repo_name if @config
31
32
  end
32
33
 
33
- def self.options
34
- [
35
- ['--silent', 'Show nothing'],
36
- ].concat(super)
37
- end
34
+ # def self.options
35
+ # [
36
+ # ['--silent', 'Show nothing'],
37
+ # ].concat(super)
38
+ # end
38
39
 
39
40
  def run
40
41
  pp('automate works!!',1)
41
42
  end
42
43
 
43
- def pp(msg,level)
44
+ def pp(msg,level = 2)
44
45
  unless msg
45
46
  return
46
47
  end
@@ -50,7 +51,17 @@ module DYAutomate
50
51
  elsif level == 2
51
52
  puts msg.red if msg
52
53
  end
53
- end
54
+ end
55
+ #
56
+ # def repoName
57
+ # @repoName = @config.detailObj.private_repo_name if @config
58
+ # @repoName
59
+ # end
60
+ #
61
+ # def env_str
62
+ # @env_str = @config.detailObj.env_str if @config
63
+ # @env_str
64
+ # end
54
65
 
55
66
  end
56
67
  end
@@ -0,0 +1,44 @@
1
+
2
+ require 'Core/DYBaseObj'
3
+
4
+ class TestInfo < DYBaseObj
5
+ attr_accessor :user_name
6
+ attr_accessor :user_name
7
+ attr_accessor :git_branch
8
+ attr_accessor :version
9
+ attr_accessor :has_merge_master
10
+ attr_accessor :ipa_qrcode_url
11
+ end
12
+
13
+ module DYAutomate
14
+ class Command
15
+ class TaskFlow <Command
16
+ class Test < TaskFlow
17
+
18
+ # self.abstract_command = true
19
+ self.command = 'test'
20
+ self.summary = "
21
+ 提交测试
22
+ "
23
+ self.arguments = [
24
+ # CLAide::Argument.new('addVersion', false,'升级一个小版本'),
25
+ # CLAide::Argument.new('addBigVersion', false)
26
+ ]
27
+
28
+
29
+ def initialize(argv)
30
+ super
31
+ end
32
+
33
+ def run
34
+ loop do
35
+ UI.puts("请输入你的名字")
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
44
+
@@ -18,6 +18,7 @@ module DYAutomate
18
18
  # #查询结果lib信息
19
19
  # attr_accessor :info
20
20
 
21
+
21
22
  def initialize(argv)
22
23
  # @name = argv.shift_argument
23
24
  super
@@ -48,8 +49,12 @@ module DYAutomate
48
49
  else
49
50
  pp("pod install 失败",1)
50
51
  end
51
- system "sleep 3"
52
- system "open *.xcworkspace"
52
+
53
+ unless isSilent
54
+ system "sleep 3"
55
+ system "open *.xcworkspace"
56
+ end
57
+
53
58
  end
54
59
 
55
60
  end
@@ -9,12 +9,12 @@ module DYAutomate
9
9
  # self.abstract_command = true
10
10
  self.command = 'up'
11
11
  self.summary = '更新repo,并update'
12
- self.arguments = [
13
- # CLAide::Argument.new('NAME', true),
14
- ]
12
+ # self.arguments = [
13
+ # CLAide::Argument.new('quiet', false),
14
+ # ]
15
15
 
16
16
  # #要查询的lib名字
17
- # attr_accessor :name
17
+ attr_accessor :quiet
18
18
  # #查询结果lib信息
19
19
  # attr_accessor :info
20
20
 
@@ -48,8 +48,12 @@ module DYAutomate
48
48
  else
49
49
  pp("pod update 失败",1)
50
50
  end
51
- system "sleep 3"
52
- system "open *.xcworkspace"
51
+
52
+ unless @isSilent
53
+ system "sleep 3"
54
+ system "open *.xcworkspace"
55
+ end
56
+
53
57
  end
54
58
 
55
59
  end
@@ -26,9 +26,8 @@ module DYAutomate
26
26
  super
27
27
  unless @config.templates_git_url
28
28
  help! "
29
- error -- >!!! Not found <templates_git_url> in the #{DYAutomateConfig::configFilePath}"
29
+ error -- >!!! Not found <templates_git_url> in the #{DYAutomateConfig.configFilePath}"
30
30
  end
31
-
32
31
  end
33
32
 
34
33
  def run
@@ -0,0 +1,57 @@
1
+
2
+ module DYAutomate
3
+ class Command
4
+ class CodeSnippet < Command
5
+
6
+ require "fileutils"
7
+
8
+ self.abstract_command = false
9
+ self.command = 'snippet'
10
+ self.summary = '拷贝代码片段到Xcode中'
11
+ # self.default_subcommand = 'list'
12
+ self.arguments = [
13
+ # CLAide::Argument.new('NAME', true),
14
+ ]
15
+
16
+ #当前路径
17
+ attr_accessor :xcode_snippsets_path
18
+
19
+ def initialize(argv)
20
+ super
21
+ @xcode_snippsets_path = File.join(Dir.home,"/Library/Developer/Xcode/UserData/CodeSnippets")
22
+ end
23
+
24
+ def validate!
25
+ super
26
+ unless Dir.exist?(@xcode_snippsets_path)
27
+ help! "
28
+ error -- >!!! Not found Xcode CodeSnippets at the #{@xcode_snippsets_path}"
29
+ end
30
+
31
+ unless @config.detailObj.codeSnippsets_git_url
32
+ help! "
33
+ error -- >!!! Not found the value of codeSnippsets_git_url"
34
+ end
35
+ end
36
+
37
+ def run
38
+ clone_templates
39
+ end
40
+
41
+ def clone_templates
42
+ tempPath = File.join(Dir.home,'Documents','.iOSCodeSnippet')
43
+ unless Dir.exist?(tempPath)
44
+ system("mkdir #{tempPath}")
45
+ end
46
+ system ("git clone #{@config.codeSnippsets_git_url} --depth 1 #{tempPath}")
47
+ Dir.chdir("#{tempPath}/CodeSnippets")
48
+ Dir.glob("*") do |path|
49
+ FileUtils.cp(path, @xcode_snippsets_path)
50
+ end
51
+ `rm -rf #{tempPath}`
52
+ puts "安装完成..."
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -24,8 +24,9 @@ module DYAutomate
24
24
  attr_accessor :spec_name
25
25
 
26
26
  def initialize(argv)
27
- @path = Dir.pwd
28
27
  super
28
+ @path = Dir.pwd
29
+ pp("当前环境变量 #{@env_str}",1)
29
30
  end
30
31
 
31
32
  def validate!
@@ -69,6 +70,7 @@ module DYAutomate
69
70
  v
70
71
  end
71
72
 
73
+ # 1.1.1 => 1.1.2
72
74
  def get_version_new
73
75
  new_v = ''
74
76
  cur_v = get_spec_version
@@ -86,6 +88,7 @@ module DYAutomate
86
88
  new_v
87
89
  end
88
90
 
91
+ # 1.1.1 => 1.2.0
89
92
  def get_version_big_new
90
93
  new_v = ''
91
94
  cur_v = get_spec_version
@@ -143,7 +146,7 @@ module DYAutomate
143
146
  #更新repo
144
147
  def dy_update_repo
145
148
  path = File.join(Dir.home,'.cocoapods/repos')
146
- excludeFiles = [".","..",".DS_Store",'master']
149
+ excludeFiles = [".","..",".DS_Store",'master','trunk']
147
150
  Dir.entries(path).each do |subDir|
148
151
  puts subDir
149
152
  unless excludeFiles.include?(subDir)
@@ -0,0 +1,39 @@
1
+ module DYAutomate
2
+ class Command
3
+ class TaskFlow < Command
4
+
5
+ self.abstract_command = true
6
+ self.command = 'task'
7
+ self.summary = 'task相关'
8
+ # self.default_subcommand = 'list'
9
+ self.arguments = [
10
+ CLAide::Argument.new('NAME', true),
11
+ ]
12
+
13
+ #路径
14
+ attr_accessor :path
15
+ # #查询结果lib信息
16
+ attr_accessor :git_obj
17
+
18
+ def initialize(argv)
19
+ super
20
+ end
21
+
22
+ def validate!
23
+ super
24
+ # unless @name
25
+ # help! 'need the lib `NAME`.'
26
+ # end
27
+
28
+ # unless existGit?
29
+ # help! "at #{Dir.pwd},is not git"
30
+ # end
31
+ end
32
+
33
+ def run
34
+ pp('git run ...',1)
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -12,6 +12,12 @@ module DYAutomate
12
12
  # CLAide::Argument.new('NAME', true),
13
13
  ]
14
14
 
15
+ def self.options
16
+ [
17
+ ['--silent', 'Show nothing'],
18
+ ].concat(super)
19
+ end
20
+
15
21
  #lib名字
16
22
  attr_accessor :name
17
23
  #当前路径
@@ -22,10 +28,15 @@ module DYAutomate
22
28
  # #查询结果lib信息
23
29
  attr_accessor :workSpace_path
24
30
 
31
+ # 是否静默
32
+ attr_accessor :isSilent
33
+
25
34
  def initialize(argv)
26
- @path = Dir.pwd
27
35
  # @path = '/Users/cw/Documents/Dy/Apps/doing/doing'
28
36
  super
37
+ @path = Dir.pwd
38
+ @isSilent = argv.flag?("silent")
39
+ puts "env == #{@env_str}"
29
40
  end
30
41
 
31
42
  def validate!
@@ -46,6 +57,7 @@ module DYAutomate
46
57
 
47
58
  def run
48
59
  pp('WorkSpace run ...',1)
60
+ pp("当前环境变量 #{@env_str}",1)
49
61
  end
50
62
 
51
63
  #project文件是否存在
@@ -79,11 +91,11 @@ module DYAutomate
79
91
  #更新repo
80
92
  def dy_update_repo
81
93
  path = File.join(Dir.home,'.cocoapods/repos')
82
- excludeFiles = [".","..",".DS_Store",'master']
94
+ excludeFiles = [".","..",".DS_Store",'master','trunk']
83
95
  Dir.entries(path).each do |subDir|
84
96
  puts subDir
85
97
  unless excludeFiles.include?(subDir)
86
- system "#{@evn_str} pod repo update #{subDir}"
98
+ system "#{@env_str} pod repo update #{subDir}"
87
99
  end
88
100
  end
89
101
  end
@@ -2,6 +2,14 @@ require 'Core/DYBaseObj'
2
2
 
3
3
 
4
4
  module DYAutomate
5
+
6
+ class DYAutomateConfigDetail < DYBaseObj
7
+ attr_accessor :templates_git_url
8
+ attr_accessor :codeSnippsets_git_url
9
+ attr_accessor :private_repo_name
10
+ attr_accessor :env_str
11
+ end
12
+
5
13
  class DYAutomateConfig < DYBaseObj
6
14
  @public
7
15
  #cache相关的路径
@@ -10,17 +18,31 @@ module DYAutomate
10
18
  @@configGitClonePath = File.join(@@cachePath, 'Git')
11
19
  @@logsDirPath = File.join(@@cachePath, 'log')
12
20
 
13
- attr_accessor :git
14
- attr_accessor :git_tag
21
+ attr_accessor :detail_git
22
+ attr_accessor :detail_git_tag
23
+
24
+ attr_accessor :detailObj
15
25
  attr_accessor :templates_git_url
16
- # attr_accessor :templates_git_url
17
- attr_accessor :templates_cache_path
26
+ attr_accessor :codeSnippsets_git_url
18
27
 
28
+ attr_accessor :templates_cache_path
19
29
 
20
30
  def initialize
21
31
  super
22
32
  end
23
33
 
34
+ def self.cachePath
35
+ @@cachePath
36
+ end
37
+
38
+ def self.configFilePath
39
+ @@configFilePath
40
+ end
41
+
42
+ def self.configGitClonePath
43
+ @@configGitClonePath
44
+ end
45
+
24
46
  def self.logsDirPath
25
47
  @@logsDirPath
26
48
  end
@@ -28,8 +50,7 @@ module DYAutomate
28
50
  #从配置中心读取
29
51
  def self.loadConfig
30
52
  checkConfigFile?
31
- cc = DYAutomateConfig::fromFile(@@configFilePath)
32
- puts cc
53
+ cc = DYAutomateConfig.fromFile(@@configFilePath)
33
54
  cc.loadDetailFromGit if cc
34
55
  cc
35
56
  end
@@ -61,14 +82,32 @@ module DYAutomate
61
82
  #DYAutomate 配置
62
83
 
63
84
  DYAutomateConfig.new do |c|
64
- c.git = ""
65
- c.git_tag = ""
85
+ # 配置的git地址
86
+ c.detail_git = ""
87
+
88
+ # 配置的git tag
89
+ c.detail_git_tag = ""
66
90
  end
67
91
  EOF
68
-
69
92
  f.write(demo)
70
93
  end
71
94
 
95
+ def templates_git_url
96
+ url = ''
97
+ url = @detailObj.templates_git_url if @detailObj
98
+ url
99
+ end
100
+
101
+ def codeSnippsets_git_url
102
+ url = ''
103
+ url = @detailObj.codeSnippsets_git_url if @detailObj
104
+ url
105
+ end
106
+
107
+ def templates_cache_path
108
+ File.join(@@cachePath,'templates')
109
+ end
110
+
72
111
  def check_git_dir
73
112
  unless Dir.exist?(@@configGitClonePath)
74
113
  Dir.mkdir(@@configGitClonePath,0777)
@@ -81,7 +120,7 @@ module DYAutomate
81
120
  if File.exist?(versionFile)
82
121
  versionContent = File.open(versionFile, 'r:utf-8', &:read)
83
122
  if versionContent
84
- isSame = versionContent.chomp.eql?(@git_tag.chomp)
123
+ isSame = versionContent.chomp.eql?(@detail_git_tag.chomp)
85
124
  end
86
125
  end
87
126
  isSame
@@ -89,12 +128,12 @@ module DYAutomate
89
128
 
90
129
  def clone_git
91
130
  check_git_dir
92
- if @git_tag && @git
93
- url = "#{@git} --branch #{@git_tag}"
131
+ if @detail_git_tag && @detail_git
132
+ url = "#{@detail_git} --branch #{@detail_git_tag}"
94
133
  # url = "#{@git} "
95
134
  cloneOk = system "git clone #{url} #{@@configGitClonePath}"
96
135
  if cloneOk
97
- puts "加载配置成功。。。"
136
+ puts "clone #{url}成功。。。"
98
137
  else
99
138
  puts "clone #{url}失败!!"
100
139
  end
@@ -110,10 +149,9 @@ module DYAutomate
110
149
  system("rm -rf #{@@configGitClonePath}")
111
150
  clone_git
112
151
  end
113
- end
114
-
115
- def templates_cache_path
116
- File.join(@@cachePath,'templates')
152
+ path = File.join(@@configGitClonePath,'detailConfig.rb')
153
+ @detailObj = DYAutomateConfigDetail.fromFile(path) if File.exist?(path)
154
+ puts "加载配置成功。。。" if @detailObj
117
155
  end
118
156
 
119
157
  end
@@ -1,3 +1,3 @@
1
1
  module DYAutomate
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: DYAutomate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - 陈冬冬
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-21 00:00:00.000000000 Z
11
+ date: 2021-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -104,16 +104,16 @@ dependencies:
104
104
  name: cocoapods
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - '='
107
+ - - ">="
108
108
  - !ruby/object:Gem::Version
109
- version: 1.6.1
109
+ version: '0'
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - '='
114
+ - - ">="
115
115
  - !ruby/object:Gem::Version
116
- version: 1.6.1
116
+ version: '0'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: git
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -138,7 +138,6 @@ extra_rdoc_files: []
138
138
  files:
139
139
  - README.md
140
140
  - bin/dj
141
- - lib/Core/CoreConfig.rb
142
141
  - lib/Core/DYBaseObj.rb
143
142
  - lib/Core/user_interface.rb
144
143
  - lib/DYAutomate.rb
@@ -146,11 +145,14 @@ files:
146
145
  - lib/DYAutomate/Command/Git/tagAdd.rb
147
146
  - lib/DYAutomate/Command/Pod/push.rb
148
147
  - lib/DYAutomate/Command/Pod/version.rb
148
+ - lib/DYAutomate/Command/TaksFlow/test.rb
149
149
  - lib/DYAutomate/Command/Workspace/install.rb
150
150
  - lib/DYAutomate/Command/Workspace/update.rb
151
151
  - lib/DYAutomate/Command/codeGenerate.rb
152
+ - lib/DYAutomate/Command/codeSnippet.rb
152
153
  - lib/DYAutomate/Command/dgit.rb
153
154
  - lib/DYAutomate/Command/pod.rb
155
+ - lib/DYAutomate/Command/taskFlow.rb
154
156
  - lib/DYAutomate/Command/workspace.rb
155
157
  - lib/DYAutomate/CustomConfig/DYAutomateConfig.rb
156
158
  - lib/DYAutomate/version.rb
@@ -176,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
178
  version: '0'
177
179
  requirements: []
178
180
  rubyforge_project:
179
- rubygems_version: 2.7.8
181
+ rubygems_version: 2.7.11
180
182
  signing_key:
181
183
  specification_version: 4
182
184
  summary: 自动化工具
@@ -1,10 +0,0 @@
1
-
2
- module CoreConfig
3
- Core_previte_repo_name = 'dy_repo_private_pods'
4
- Core_previte_repo_url = 'git@gitlab.dongyin.net:iospodrepos/dy_repo_private_pods.git'
5
- Core_public_repo_url = 'git@gitlab.dongyin.net:iospodrepos/dy_repo_public_pods.git'
6
- Core_cocoapods_repo_url = 'https://github.com/CocoaPods/Specs.git'
7
-
8
- Core_pod_git_url = "git@gitlab.dongyin.net:iosprivatepods"
9
- Core_env_str = "Core_pod_git_url=#{Core_pod_git_url} Core_previte_repo_url=#{Core_previte_repo_url}#####{Core_public_repo_url}#####{Core_cocoapods_repo_url}"
10
- end