avm-tools 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/Gemfile +5 -0
- data/exe/avm +40 -0
- data/lib/avm/tools.rb +10 -0
- data/lib/avm/tools/git.rb +9 -0
- data/lib/avm/tools/git/complete_issue.rb +138 -0
- data/lib/avm/tools/version.rb +7 -0
- metadata +63 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 47963424dd2adf9abec36f3469cb2ec324d6610b13b8f1080e1ed24827ed29c3
|
4
|
+
data.tar.gz: 327281544236ae524f23e79b07047eb532c7ed0d4e46024a88e7fe0937860a23
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4317de96095e224feb963c6ea2763c78541d70d47f222f67828741eff4ee7ab83b817c236c8a051a115a01e95a0b51d1f32b6ee16097d7c4d081b9755ee588fe
|
7
|
+
data.tar.gz: 4dc0c24e635ac76d856da4bace11d42bf8bc021e7fbe6197450e0877c08f8a0f11db1234f667bcc4022ed7810eaa7235cd54a6e8c75f895d31d6ab3aac711976
|
data/Gemfile
ADDED
data/exe/avm
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift("#{__dir__}/../lib")
|
5
|
+
|
6
|
+
require 'avm/tools'
|
7
|
+
require 'eac_ruby_utils'
|
8
|
+
|
9
|
+
class AvmRunner < ::EacRubyUtils::Console::DocoptRunner
|
10
|
+
include ::EacRubyUtils::Console::Speaker
|
11
|
+
|
12
|
+
DOC = <<~DOCOPT
|
13
|
+
Tools for AVM.
|
14
|
+
|
15
|
+
Usage:
|
16
|
+
__PROGRAM__ [options] git complete-issue
|
17
|
+
__PROGRAM__ -h | --help
|
18
|
+
|
19
|
+
Options:
|
20
|
+
-h --help Show this screen.
|
21
|
+
DOCOPT
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def run
|
26
|
+
raise "Unknown command: #{options}" unless git_complete_issue?
|
27
|
+
|
28
|
+
::Avm::Tools::Git::CompleteIssue.new(git_complete_issue_options)
|
29
|
+
end
|
30
|
+
|
31
|
+
def git_complete_issue_options
|
32
|
+
{ dir: '.' }
|
33
|
+
end
|
34
|
+
|
35
|
+
def git_complete_issue?
|
36
|
+
options.fetch('git') && options.fetch('complete-issue')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
AvmRunner.new
|
data/lib/avm/tools.rb
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module Tools
|
5
|
+
module Git
|
6
|
+
class CompleteIssue
|
7
|
+
include ::Eac::SimpleCache
|
8
|
+
include ::EacRubyUtils::Console::Speaker
|
9
|
+
|
10
|
+
def initialize(options)
|
11
|
+
@git = ::EacLauncher::Git::Base.new(options.fetch(:dir))
|
12
|
+
run
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
check_issue_branch
|
17
|
+
assert_tag
|
18
|
+
push
|
19
|
+
remove_local_branch
|
20
|
+
end
|
21
|
+
|
22
|
+
def branch
|
23
|
+
@git.current_branch
|
24
|
+
end
|
25
|
+
|
26
|
+
def branch_hash
|
27
|
+
@git.rev_parse("refs/heads/#{branch}")
|
28
|
+
end
|
29
|
+
|
30
|
+
def branch_name
|
31
|
+
branch.split('/')[-1]
|
32
|
+
end
|
33
|
+
|
34
|
+
def issue_id
|
35
|
+
m = branch_name.match(/\A#{Regexp.quote('issue_')}(\d+)\z/)
|
36
|
+
m ? m[1].to_i : nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def remote_master_hash
|
40
|
+
remote_hashs['refs/heads/master']
|
41
|
+
end
|
42
|
+
|
43
|
+
def remote_branch_hash
|
44
|
+
remote_hashs["refs/heads/#{branch}"]
|
45
|
+
end
|
46
|
+
|
47
|
+
def remote_tag_hash
|
48
|
+
remote_hashs[tag]
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
attr_reader :options
|
54
|
+
|
55
|
+
def remote_name
|
56
|
+
'origin'
|
57
|
+
end
|
58
|
+
|
59
|
+
def check_issue_branch
|
60
|
+
raise "Branch is not a issue branch (\"#{branch}\"|\"#{branch_name}\")" unless
|
61
|
+
branch_valid?
|
62
|
+
raise "Hash not found for \"#{branch}\"" unless branch_hash
|
63
|
+
end
|
64
|
+
|
65
|
+
def branch_valid?
|
66
|
+
issue_id || options[:no_avm_branch_name]
|
67
|
+
end
|
68
|
+
|
69
|
+
def assert_tag
|
70
|
+
if tag_hash
|
71
|
+
return if tag_hash == branch_hash
|
72
|
+
|
73
|
+
delete_tag
|
74
|
+
end
|
75
|
+
create_tag
|
76
|
+
end
|
77
|
+
|
78
|
+
def delete_tag
|
79
|
+
info 'Removendo tag...'
|
80
|
+
git(['tag', '-d', branch_name])
|
81
|
+
end
|
82
|
+
|
83
|
+
def push
|
84
|
+
if pushs.empty?
|
85
|
+
info 'PUSH: Nada a enviar'
|
86
|
+
else
|
87
|
+
info "PUSH: enviando \"#{pushs}\"..."
|
88
|
+
git(%w[push origin] + pushs)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def pushs_uncached
|
93
|
+
[master_push, remove_branch_push, tag_push].reject(&:nil?)
|
94
|
+
end
|
95
|
+
|
96
|
+
def master_push
|
97
|
+
remote_master_hash != branch_hash ? "#{branch_hash}:refs/heads/master" : nil
|
98
|
+
end
|
99
|
+
|
100
|
+
def remove_branch_push
|
101
|
+
remote_branch_hash ? ":refs/heads/#{branch}" : nil
|
102
|
+
end
|
103
|
+
|
104
|
+
def tag_push
|
105
|
+
!remote_tag_hash || remote_tag_hash != branch_hash ? tag : nil
|
106
|
+
end
|
107
|
+
|
108
|
+
def remove_local_branch
|
109
|
+
info 'Removendo branch local...'
|
110
|
+
bn = branch_name
|
111
|
+
git(['checkout', branch_hash])
|
112
|
+
git(['branch', '-D', bn])
|
113
|
+
end
|
114
|
+
|
115
|
+
def tag
|
116
|
+
"refs/tags/#{branch_name}"
|
117
|
+
end
|
118
|
+
|
119
|
+
def tag_hash
|
120
|
+
@git.rev_parse(tag)
|
121
|
+
end
|
122
|
+
|
123
|
+
def create_tag
|
124
|
+
git(['tag', branch_name, branch_hash])
|
125
|
+
end
|
126
|
+
|
127
|
+
def remote_hashs_uncached
|
128
|
+
@git.remote_hashs(remote_name)
|
129
|
+
end
|
130
|
+
|
131
|
+
def git(args, exit_outputs = {})
|
132
|
+
r = @git.execute!(args, exit_outputs: exit_outputs)
|
133
|
+
r.is_a?(String) ? r.strip : r
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: avm-tools
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Esquilo Azul Company
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-06-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: eac_launcher
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.5'
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
executables:
|
30
|
+
- avm
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- Gemfile
|
35
|
+
- exe/avm
|
36
|
+
- lib/avm/tools.rb
|
37
|
+
- lib/avm/tools/git.rb
|
38
|
+
- lib/avm/tools/git/complete_issue.rb
|
39
|
+
- lib/avm/tools/version.rb
|
40
|
+
homepage:
|
41
|
+
licenses: []
|
42
|
+
metadata: {}
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubyforge_project:
|
59
|
+
rubygems_version: 2.7.7
|
60
|
+
signing_key:
|
61
|
+
specification_version: 4
|
62
|
+
summary: Tools for AVM.
|
63
|
+
test_files: []
|