pd1_tools 0.43.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 +12 -0
- data/exe/pd1 +8 -0
- data/lib/avmtrf1/active_directory/user.rb +28 -0
- data/lib/avmtrf1/active_directory.rb +8 -0
- data/lib/avmtrf1/ad_user.rb +11 -0
- data/lib/avmtrf1/check_point/session/login.rb +57 -0
- data/lib/avmtrf1/check_point/session.rb +60 -0
- data/lib/avmtrf1/check_point.rb +3 -0
- data/lib/avmtrf1/default_esosti.rb +20 -0
- data/lib/avmtrf1/default_jira.rb +18 -0
- data/lib/avmtrf1/default_redmine.rb +16 -0
- data/lib/avmtrf1/docker/image.rb +49 -0
- data/lib/avmtrf1/docker/image_runner.rb +83 -0
- data/lib/avmtrf1/docker.rb +9 -0
- data/lib/avmtrf1/esosti/entities/issue.rb +24 -0
- data/lib/avmtrf1/esosti/entities.rb +9 -0
- data/lib/avmtrf1/esosti/instance/changed.rb +33 -0
- data/lib/avmtrf1/esosti/instance.rb +22 -0
- data/lib/avmtrf1/esosti/raw_data_sanitizer.rb +47 -0
- data/lib/avmtrf1/esosti/session/action_base.rb +34 -0
- data/lib/avmtrf1/esosti/session/atividades.rb +35 -0
- data/lib/avmtrf1/esosti/session/login.rb +47 -0
- data/lib/avmtrf1/esosti/session/solicitacao/main.rb +49 -0
- data/lib/avmtrf1/esosti/session/solicitacao.rb +81 -0
- data/lib/avmtrf1/esosti/session.rb +36 -0
- data/lib/avmtrf1/esosti.rb +8 -0
- data/lib/avmtrf1/executables.rb +23 -0
- data/lib/avmtrf1/forponto/parsers/day_registers.rb +19 -0
- data/lib/avmtrf1/forponto/parsers/espelho/day_node.rb +50 -0
- data/lib/avmtrf1/forponto/parsers/espelho/methods_as_fields.rb +21 -0
- data/lib/avmtrf1/forponto/parsers/espelho/row_node.rb +34 -0
- data/lib/avmtrf1/forponto/parsers/espelho/rows_consumer.rb +71 -0
- data/lib/avmtrf1/forponto/parsers/espelho/sub_node.rb +20 -0
- data/lib/avmtrf1/forponto/parsers/espelho/summary_node.rb +55 -0
- data/lib/avmtrf1/forponto/parsers/espelho/utils.rb +32 -0
- data/lib/avmtrf1/forponto/parsers/espelho.rb +26 -0
- data/lib/avmtrf1/forponto/session/day_registers.rb +39 -0
- data/lib/avmtrf1/forponto/session/interval.rb +27 -0
- data/lib/avmtrf1/forponto/session/login.rb +45 -0
- data/lib/avmtrf1/forponto/session.rb +32 -0
- data/lib/avmtrf1/forponto/user/balance.rb +155 -0
- data/lib/avmtrf1/forponto/user/day_registers.rb +32 -0
- data/lib/avmtrf1/forponto/user/month.rb +141 -0
- data/lib/avmtrf1/forponto/user.rb +22 -0
- data/lib/avmtrf1/git/cached_repository.rb +27 -0
- data/lib/avmtrf1/git/gitlab.rb +11 -0
- data/lib/avmtrf1/git/issue_on_repository.rb +100 -0
- data/lib/avmtrf1/git/push_large/_utils.rb +16 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/cache.rb +21 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/checkout_previous_revision.rb +35 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/commit_changes.rb +48 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/helpers.rb +29 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/pick_source_revision.rb +103 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/push.rb +90 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/track_large_files.rb +53 -0
- data/lib/avmtrf1/git/push_large/lfs_commit.rb +47 -0
- data/lib/avmtrf1/git/push_large/source_commit/push.rb +42 -0
- data/lib/avmtrf1/git/push_large/source_commit.rb +58 -0
- data/lib/avmtrf1/git/push_large.rb +69 -0
- data/lib/avmtrf1/git/reference.rb +34 -0
- data/lib/avmtrf1/git.rb +10 -0
- data/lib/avmtrf1/gitlab/commit.rb +37 -0
- data/lib/avmtrf1/gitlab/repository.rb +41 -0
- data/lib/avmtrf1/ini/profile.rb +42 -0
- data/lib/avmtrf1/ini.rb +55 -0
- data/lib/avmtrf1/inventario_sistemas/parser/body.rb +27 -0
- data/lib/avmtrf1/inventario_sistemas/parser/body_row.rb +12 -0
- data/lib/avmtrf1/inventario_sistemas/parser/header.rb +38 -0
- data/lib/avmtrf1/inventario_sistemas/parser/header_column.rb +27 -0
- data/lib/avmtrf1/inventario_sistemas/parser.rb +40 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/elements.rb +54 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/layout.rb +55 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/stylesheet.css +57 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base.rb +41 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/index.rb +20 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/sistema.rb +62 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/sistemas_index.rb +31 -0
- data/lib/avmtrf1/inventario_sistemas/site_build.rb +71 -0
- data/lib/avmtrf1/inventario_sistemas.rb +38 -0
- data/lib/avmtrf1/issues/factory.rb +22 -0
- data/lib/avmtrf1/issues.rb +7 -0
- data/lib/avmtrf1/jira/entities/issue.rb +30 -0
- data/lib/avmtrf1/jira/entities.rb +9 -0
- data/lib/avmtrf1/jira/instance.rb +28 -0
- data/lib/avmtrf1/jira.rb +8 -0
- data/lib/avmtrf1/node_js/docker_image.rb +14 -0
- data/lib/avmtrf1/node_js.rb +9 -0
- data/lib/avmtrf1/openvpn/config/builder.rb +59 -0
- data/lib/avmtrf1/openvpn/config/parser/builder.rb +62 -0
- data/lib/avmtrf1/openvpn/config/parser/line.rb +47 -0
- data/lib/avmtrf1/openvpn/config/parser/simple.rb +27 -0
- data/lib/avmtrf1/openvpn/config/parser/tag.rb +39 -0
- data/lib/avmtrf1/openvpn/config/parser.rb +20 -0
- data/lib/avmtrf1/oracle/connection/base.rb +66 -0
- data/lib/avmtrf1/oracle/connection/string_builder.rb +44 -0
- data/lib/avmtrf1/oracle/connection.rb +12 -0
- data/lib/avmtrf1/oracle/object/base.rb +39 -0
- data/lib/avmtrf1/oracle/object/table.rb +15 -0
- data/lib/avmtrf1/oracle/object/user.rb +15 -0
- data/lib/avmtrf1/oracle/object/view.rb +15 -0
- data/lib/avmtrf1/oracle/object.rb +25 -0
- data/lib/avmtrf1/oracle/objects/relation.rb +23 -0
- data/lib/avmtrf1/oracle/objects/sql_builder.rb +64 -0
- data/lib/avmtrf1/oracle/objects.rb +53 -0
- data/lib/avmtrf1/oracle/oci8.rb +29 -0
- data/lib/avmtrf1/oracle.rb +10 -0
- data/lib/avmtrf1/patches/avm/git/issue/complete.rb +50 -0
- data/lib/avmtrf1/patches/avm/git/issue.rb +4 -0
- data/lib/avmtrf1/patches/avm/git/launcher/base.rb +46 -0
- data/lib/avmtrf1/patches/avm/git/launcher.rb +4 -0
- data/lib/avmtrf1/patches/avm/git.rb +4 -0
- data/lib/avmtrf1/patches/avm.rb +4 -0
- data/lib/avmtrf1/patches/inifile.rb +13 -0
- data/lib/avmtrf1/patches.rb +4 -0
- data/lib/avmtrf1/php/docker_images/base.rb +49 -0
- data/lib/avmtrf1/php/docker_images/factory.rb +37 -0
- data/lib/avmtrf1/php/docker_images/v5.rb +47 -0
- data/lib/avmtrf1/php/docker_images/v7.rb +27 -0
- data/lib/avmtrf1/php/docker_images/v7_v4.rb +30 -0
- data/lib/avmtrf1/php/docker_images/v8.rb +19 -0
- data/lib/avmtrf1/php/docker_images.rb +11 -0
- data/lib/avmtrf1/php.rb +9 -0
- data/lib/avmtrf1/red/client/authorization.xml.erb +4 -0
- data/lib/avmtrf1/red/client.rb +38 -0
- data/lib/avmtrf1/red/helper.rb +35 -0
- data/lib/avmtrf1/red/profile/put_file.xml.erb +19 -0
- data/lib/avmtrf1/red/profile.rb +58 -0
- data/lib/avmtrf1/red/server.rb +33 -0
- data/lib/avmtrf1/red.rb +5 -0
- data/lib/avmtrf1/redmine/entities/issue.rb +29 -0
- data/lib/avmtrf1/redmine/entities/issue_status.rb +23 -0
- data/lib/avmtrf1/redmine/entities.rb +10 -0
- data/lib/avmtrf1/redmine/instance.rb +41 -0
- data/lib/avmtrf1/redmine.rb +7 -0
- data/lib/avmtrf1/rest_provider/entity.rb +18 -0
- data/lib/avmtrf1/rest_provider/instance/issues.rb +30 -0
- data/lib/avmtrf1/rest_provider/instance.rb +30 -0
- data/lib/avmtrf1/rest_provider/request.rb +44 -0
- data/lib/avmtrf1/rest_provider/response.rb +73 -0
- data/lib/avmtrf1/rest_provider.rb +7 -0
- data/lib/avmtrf1/result.rb +44 -0
- data/lib/avmtrf1/ruby.rb +9 -0
- data/lib/avmtrf1/tools/application.rb +13 -0
- data/lib/avmtrf1/tools/core_ext.rb +4 -0
- data/lib/avmtrf1/tools/msgraph/api/entity.rb +35 -0
- data/lib/avmtrf1/tools/msgraph/api/member.rb +31 -0
- data/lib/avmtrf1/tools/msgraph/api/root.rb +27 -0
- data/lib/avmtrf1/tools/msgraph/api/team/member_add.rb +36 -0
- data/lib/avmtrf1/tools/msgraph/api/team.rb +40 -0
- data/lib/avmtrf1/tools/msgraph/api.rb +55 -0
- data/lib/avmtrf1/tools/msgraph/error.rb +31 -0
- data/lib/avmtrf1/tools/msgraph/request_mixin.rb +18 -0
- data/lib/avmtrf1/tools/msgraph/response_mixin.rb +23 -0
- data/lib/avmtrf1/tools/msgraph/token_retrieve.rb +42 -0
- data/lib/avmtrf1/tools/msgraph.rb +11 -0
- data/lib/avmtrf1/tools/rubygems/dependency.rb +20 -0
- data/lib/avmtrf1/tools/rubygems/not_found_error.rb +17 -0
- data/lib/avmtrf1/tools/rubygems.rb +11 -0
- data/lib/avmtrf1/tools/runner/check_point/login.rb +33 -0
- data/lib/avmtrf1/tools/runner/check_point.rb +17 -0
- data/lib/avmtrf1/tools/runner/esosti/changed.rb +39 -0
- data/lib/avmtrf1/tools/runner/esosti/fetch.rb +39 -0
- data/lib/avmtrf1/tools/runner/esosti/request.rb +76 -0
- data/lib/avmtrf1/tools/runner/esosti.rb +27 -0
- data/lib/avmtrf1/tools/runner/forponto/espelho.rb +47 -0
- data/lib/avmtrf1/tools/runner/forponto/marcacoes.rb +32 -0
- data/lib/avmtrf1/tools/runner/forponto/resumos.rb +87 -0
- data/lib/avmtrf1/tools/runner/forponto/saldo.rb +91 -0
- data/lib/avmtrf1/tools/runner/forponto.rb +70 -0
- data/lib/avmtrf1/tools/runner/git/gitlab/commit_link.rb +81 -0
- data/lib/avmtrf1/tools/runner/git/gitlab.rb +20 -0
- data/lib/avmtrf1/tools/runner/git/issues_check.rb +59 -0
- data/lib/avmtrf1/tools/runner/git/push_large.rb +46 -0
- data/lib/avmtrf1/tools/runner/git.rb +14 -0
- data/lib/avmtrf1/tools/runner/inventario_sistemas.rb +71 -0
- data/lib/avmtrf1/tools/runner/msgraph/joined_teams.rb +39 -0
- data/lib/avmtrf1/tools/runner/msgraph/request.rb +45 -0
- data/lib/avmtrf1/tools/runner/msgraph/team/member/add.rb +48 -0
- data/lib/avmtrf1/tools/runner/msgraph/team/member.rb +25 -0
- data/lib/avmtrf1/tools/runner/msgraph/team/members.rb +38 -0
- data/lib/avmtrf1/tools/runner/msgraph/team.rb +27 -0
- data/lib/avmtrf1/tools/runner/msgraph/token.rb +31 -0
- data/lib/avmtrf1/tools/runner/msgraph.rb +43 -0
- data/lib/avmtrf1/tools/runner/node_js/docker.rb +15 -0
- data/lib/avmtrf1/tools/runner/node_js.rb +18 -0
- data/lib/avmtrf1/tools/runner/openvpn.rb +91 -0
- data/lib/avmtrf1/tools/runner/oracle/query.rb +71 -0
- data/lib/avmtrf1/tools/runner/oracle/source_get.rb +51 -0
- data/lib/avmtrf1/tools/runner/oracle/user_clear.rb +59 -0
- data/lib/avmtrf1/tools/runner/oracle.rb +37 -0
- data/lib/avmtrf1/tools/runner/php/docker.rb +20 -0
- data/lib/avmtrf1/tools/runner/php.rb +18 -0
- data/lib/avmtrf1/tools/runner/red.rb +83 -0
- data/lib/avmtrf1/tools/runner/source.rb +14 -0
- data/lib/avmtrf1/tools/runner.rb +43 -0
- data/lib/avmtrf1/tools.rb +4 -0
- data/lib/pd1_tools/version.rb +5 -0
- data/lib/pd1_tools.rb +7 -0
- data/template/avmtrf1/node_js/docker_image/Dockerfile.template +25 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/config_banner.sh +15 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/init.sh +18 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/lib.sh +30 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/ng_serve.sh +16 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/npm_install.sh +21 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/start.sh +17 -0
- data/template/avmtrf1/php/docker_images/base/Dockerfile.template +104 -0
- data/template/avmtrf1/php/docker_images/base/aux/apache_foreground.sh +16 -0
- data/template/avmtrf1/php/docker_images/base/aux/apache_user.sh +54 -0
- data/template/avmtrf1/php/docker_images/base/aux/app_user_run.sh +17 -0
- data/template/avmtrf1/php/docker_images/base/aux/config_banner.sh +20 -0
- data/template/avmtrf1/php/docker_images/base/aux/init.sh +39 -0
- data/template/avmtrf1/php/docker_images/base/aux/laravel.sh +58 -0
- data/template/avmtrf1/php/docker_images/base/aux/lib.sh +70 -0
- data/template/avmtrf1/php/docker_images/base/aux/pear.sh +35 -0
- data/template/avmtrf1/php/docker_images/base/aux/php_composer.sh +31 -0
- data/template/avmtrf1/php/docker_images/base/aux/php_values.sh +41 -0
- data/template/avmtrf1/php/docker_images/base/aux/setup_apache_site.sh +16 -0
- data/template/avmtrf1/php/docker_images/base/aux/start.sh +26 -0
- data/template/avmtrf1/php/docker_images/base/aux/templates/apache_site.conf +12 -0
- data/template/avmtrf1/tools/msgraph/token_retrieve/python_retriever.py +85 -0
- metadata +460 -0
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module PickSourceRevision
|
8
|
+
private
|
9
|
+
|
10
|
+
def add_cacheinfo_fail?(result)
|
11
|
+
!result.fetch(:exit_code).zero? && result.fetch(:stderr).include?('add_cacheinfo')
|
12
|
+
end
|
13
|
+
|
14
|
+
def cherry_pick_source_revision_uncached
|
15
|
+
checkout_base
|
16
|
+
return if previous_revision.blank?
|
17
|
+
|
18
|
+
infom message("Cherry pick #{source_commit.sha1}")
|
19
|
+
result = git.execute('cherry-pick', '--allow-empty', '--allow-empty-message',
|
20
|
+
'-Xtheirs', source_commit.sha1)
|
21
|
+
check_cherry_pick_result(result)
|
22
|
+
end
|
23
|
+
|
24
|
+
def check_cherry_pick_result(result)
|
25
|
+
return if result.fetch(:exit_code).zero?
|
26
|
+
return on_cherry_pick_conflict if cherry_pick_conflict?
|
27
|
+
return on_add_cacheinfo_fail if add_cacheinfo_fail?(result)
|
28
|
+
|
29
|
+
raise "Cherry pick failed: #{result}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def cherry_pick_conflict?
|
33
|
+
::File.exist?(::File.join(git, '.git', 'CHERRY_PICK_HEAD'))
|
34
|
+
end
|
35
|
+
|
36
|
+
def on_add_cacheinfo_fail
|
37
|
+
warn message('"add_cacheinfo" fail')
|
38
|
+
end
|
39
|
+
|
40
|
+
def on_cherry_pick_conflict
|
41
|
+
warn message('Cherry pick failed with conflict')
|
42
|
+
resolve_cherry_pick_conflicts
|
43
|
+
|
44
|
+
check_dirty_files
|
45
|
+
check_cherry_continue
|
46
|
+
end
|
47
|
+
|
48
|
+
def resolve_cherry_pick_conflicts
|
49
|
+
git.status_files.each do |scf|
|
50
|
+
if scf.dirty == 'D'
|
51
|
+
remove_file(scf.path)
|
52
|
+
elsif scf.dirty.present?
|
53
|
+
add_file(scf.path)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def remove_file(path)
|
59
|
+
infov message('Removing file'), path
|
60
|
+
git.execute!('rm', path)
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_file(path)
|
64
|
+
infov message('Adding file'), path
|
65
|
+
git.execute!('add', path)
|
66
|
+
end
|
67
|
+
|
68
|
+
def check_dirty_files
|
69
|
+
infom message('Checking dirty files...')
|
70
|
+
df = dirty_files
|
71
|
+
infov message('Dirty files?'), df.any?
|
72
|
+
return unless df.any?
|
73
|
+
|
74
|
+
df.each do |f|
|
75
|
+
infov message(f.path, 1), "|#{f.stage}|#{f.dirty}|"
|
76
|
+
end
|
77
|
+
raise 'There are dirty files'
|
78
|
+
end
|
79
|
+
|
80
|
+
def dirty_files
|
81
|
+
git.status_files.select { |scf| scf.dirty.present? }
|
82
|
+
end
|
83
|
+
|
84
|
+
def check_cherry_continue
|
85
|
+
infom message('Continuing cherry pick')
|
86
|
+
git.execute!('-c', "core.editor=#{bash_editor}", 'cherry-pick', '--continue')
|
87
|
+
raise 'Still in cherry-pick conflict' if cherry_pick_conflict?
|
88
|
+
|
89
|
+
infom message('Cherry pick continue successful')
|
90
|
+
end
|
91
|
+
|
92
|
+
def bash_editor
|
93
|
+
if source_commit.subject.present?
|
94
|
+
'true'
|
95
|
+
else
|
96
|
+
'bash -c "printf \\"Mensagem original em branco.\\n\\" > $1"'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module Push
|
8
|
+
private
|
9
|
+
|
10
|
+
PACK_ERROR_MESSAGE = 'pack exceeds maximum allowed size'
|
11
|
+
PACK_ERROR_TRUE = 'true'
|
12
|
+
PACK_ERROR_FALSE = 'false'
|
13
|
+
|
14
|
+
def push_ok_uncached
|
15
|
+
commit
|
16
|
+
fresh_push if push_pack_error_cache.read.blank?
|
17
|
+
after_push_banner
|
18
|
+
push_pack_error_cache.read != PACK_ERROR_TRUE
|
19
|
+
end
|
20
|
+
|
21
|
+
def after_push_banner
|
22
|
+
infov message('Commit SHA1'), commit.sha1
|
23
|
+
raise 'Cache of files size not found' if files_size_cache.read.blank?
|
24
|
+
|
25
|
+
infov message('Files size'), PushLarge.bytes_size(files_size_cache.read)
|
26
|
+
end
|
27
|
+
|
28
|
+
def fresh_push
|
29
|
+
fresh_push_banner
|
30
|
+
check_push_result(
|
31
|
+
git.execute(
|
32
|
+
'push', push_large.remote_name, '--force',
|
33
|
+
"#{commit.sha1}:#{push_reference}"
|
34
|
+
)
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
def fresh_push_banner
|
39
|
+
infom message('Pushing...')
|
40
|
+
fresh_push_commit_banner
|
41
|
+
fresh_push_remote_banner
|
42
|
+
end
|
43
|
+
|
44
|
+
def fresh_push_commit_banner
|
45
|
+
infov message('SHA1', 1), commit.sha1
|
46
|
+
infov message('Files size', 1), PushLarge.bytes_size(commit.files_size)
|
47
|
+
end
|
48
|
+
|
49
|
+
def fresh_push_remote_banner
|
50
|
+
infov message('Remote', 1), push_large.remote_name
|
51
|
+
infov message('Reference', 1), push_reference
|
52
|
+
end
|
53
|
+
|
54
|
+
def push_reference
|
55
|
+
"refs/heads/#{push_large.target_ref}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def check_push_result(result)
|
59
|
+
if result.fetch(:exit_code).zero?
|
60
|
+
on_push_result_ok
|
61
|
+
elsif result.fetch(:stderr).include?(PACK_ERROR_MESSAGE)
|
62
|
+
on_push_result_pack_error
|
63
|
+
else
|
64
|
+
on_push_result_arbitrary_error(result)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def on_push_result_ok
|
69
|
+
push_pack_error_cache.write(PACK_ERROR_FALSE)
|
70
|
+
success(push_message('successful'))
|
71
|
+
end
|
72
|
+
|
73
|
+
def on_push_result_pack_error
|
74
|
+
push_pack_error_cache.write(PACK_ERROR_TRUE)
|
75
|
+
warn(push_message("failed with message \"#{PACK_ERROR_MESSAGE}\""))
|
76
|
+
end
|
77
|
+
|
78
|
+
def on_push_result_arbitrary_error(result)
|
79
|
+
raise result.pretty_inspect.to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
def push_message(suffix)
|
83
|
+
message("Push of #{commit.sha1} (Size: #{commit.files_size}, " \
|
84
|
+
"Files: #{commit.files.count}): #{suffix}.")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module TrackLargeFiles
|
8
|
+
private
|
9
|
+
|
10
|
+
EXTENSIONS_REQUIRED_TO_TRACK = %w[
|
11
|
+
bak bkp bmp bpm cfm chm dat db doc fla flv gz jar log mp3 mp4 otf pdf ppt psd rar rtf
|
12
|
+
swf ttf wav wmf wmv wmz woff woff2 xmind z zip
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
def track_large_files_uncached
|
16
|
+
cherry_pick_source_revision
|
17
|
+
if lfs_file_min_size.present?
|
18
|
+
|
19
|
+
source_commit.files.each do |file|
|
20
|
+
next unless track_file_with_lfs?(file)
|
21
|
+
|
22
|
+
track_file(file)
|
23
|
+
end
|
24
|
+
raise 'None file was tracked' unless tracked_files.positive?
|
25
|
+
end
|
26
|
+
infov message('Tracked files'), @tracked_files
|
27
|
+
end
|
28
|
+
|
29
|
+
def track_file(file)
|
30
|
+
infov message('Tracking with LFS'), file
|
31
|
+
git.execute!('rm', '--cached', file.path)
|
32
|
+
git.execute!('lfs', 'track', file.path) unless tracked_file?(file)
|
33
|
+
@tracked_files += 1
|
34
|
+
end
|
35
|
+
|
36
|
+
def track_file_with_lfs?(file)
|
37
|
+
return false unless file.dst_size.positive?
|
38
|
+
|
39
|
+
required_extesion_to_track?(file) || (file.dst_size >= lfs_file_min_size)
|
40
|
+
end
|
41
|
+
|
42
|
+
def required_extesion_to_track?(file)
|
43
|
+
EXTENSIONS_REQUIRED_TO_TRACK.include?(::File.extname(file.path).gsub(/\A\./, ''))
|
44
|
+
end
|
45
|
+
|
46
|
+
def tracked_file?(file)
|
47
|
+
git.execute!('check-attr', '--all', '--', file.path).strip.present?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/core_ext'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Git
|
7
|
+
class PushLarge
|
8
|
+
class LfsCommit
|
9
|
+
require_sub __FILE__, include_modules: true
|
10
|
+
enable_simple_cache
|
11
|
+
enable_speaker
|
12
|
+
|
13
|
+
common_constructor :source_commit, :lfs_file_min_size do
|
14
|
+
@tracked_files = 0
|
15
|
+
@commit = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def push_ok?
|
19
|
+
push_ok
|
20
|
+
end
|
21
|
+
|
22
|
+
def start_banner
|
23
|
+
infov ' * LFS push', "revision: #{source_revision}" \
|
24
|
+
", lfs_file_min_size: #{PushLarge.bytes_size(lfs_file_min_size)}"
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def git
|
30
|
+
source_commit.git
|
31
|
+
end
|
32
|
+
|
33
|
+
def push_large
|
34
|
+
source_commit.push_large
|
35
|
+
end
|
36
|
+
|
37
|
+
def previous_revision
|
38
|
+
push_large.last_pushed_revision
|
39
|
+
end
|
40
|
+
|
41
|
+
def source_revision
|
42
|
+
source_commit.sha1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'filesize'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Git
|
7
|
+
class PushLarge
|
8
|
+
class SourceCommit
|
9
|
+
module Push
|
10
|
+
private
|
11
|
+
|
12
|
+
LFS_FILE_MIN_SIZES = [nil, 1_048_576, 524_288, 131_072].freeze
|
13
|
+
|
14
|
+
def pushed_revision_uncached
|
15
|
+
fs_cache.child('pushed_revision')
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_pushs
|
19
|
+
return if LFS_FILE_MIN_SIZES.any? do |lfs_file_min_size|
|
20
|
+
lfs_commit = ::Avmtrf1::Git::PushLarge::LfsCommit.new(self, lfs_file_min_size)
|
21
|
+
lfs_commit.start_banner
|
22
|
+
push_with_lfs(lfs_commit)
|
23
|
+
end
|
24
|
+
|
25
|
+
raise 'Push de todos os commits falharam'
|
26
|
+
end
|
27
|
+
|
28
|
+
def push_with_lfs(lfs_commit)
|
29
|
+
if lfs_commit.push_ok?
|
30
|
+
pushed_revision.write(lfs_commit.commit.sha1)
|
31
|
+
success " * Pushed: #{pushed_revision.read}"
|
32
|
+
true
|
33
|
+
else
|
34
|
+
warn ' * Push failed'
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/git/commit'
|
4
|
+
require 'avmtrf1/tools/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Git
|
8
|
+
class PushLarge
|
9
|
+
class SourceCommit < ::Avm::Git::Commit
|
10
|
+
require_sub __FILE__, include_modules: true
|
11
|
+
enable_simple_cache
|
12
|
+
enable_speaker
|
13
|
+
|
14
|
+
attr_reader :push_large, :sha1, :no_lfs_max_size
|
15
|
+
|
16
|
+
def initialize(push_large, sha1)
|
17
|
+
super(push_large.git, sha1)
|
18
|
+
@push_large = push_large
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
start_banner
|
23
|
+
if pushed_revision.read.present?
|
24
|
+
success ' * Target revision already pushed'
|
25
|
+
else
|
26
|
+
before_pushs_banner
|
27
|
+
run_pushs
|
28
|
+
after_pushs_banner
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def fs_cache
|
33
|
+
@fs_cache ||= push_large.fs_cache.child(sha1)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def start_banner
|
39
|
+
infov ' * SHA1', sha1
|
40
|
+
infov ' * Subject', subject
|
41
|
+
infov ' * Author', author_all
|
42
|
+
infov ' * Commiter', commiter_all
|
43
|
+
infov ' * Files', files.count
|
44
|
+
end
|
45
|
+
|
46
|
+
def before_pushs_banner
|
47
|
+
infov ' * Files size', PushLarge.bytes_size(files_size)
|
48
|
+
infov ' * Pushed revision (BEFORE)', pushed_revision.read
|
49
|
+
end
|
50
|
+
|
51
|
+
def after_pushs_banner
|
52
|
+
infov ' * Pushed revision (AFTER)', pushed_revision.read
|
53
|
+
raise 'Target revision is blank' if pushed_revision.read.blank?
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
require 'eac_ruby_utils/patches/module/speaker'
|
6
|
+
require 'eac_ruby_utils/require_sub'
|
7
|
+
require 'eac_ruby_utils/simple_cache'
|
8
|
+
require 'avmtrf1/patches/avm/git/launcher/base'
|
9
|
+
|
10
|
+
module Avmtrf1
|
11
|
+
module Git
|
12
|
+
class PushLarge
|
13
|
+
include ::EacRubyUtils::SimpleCache
|
14
|
+
enable_speaker
|
15
|
+
|
16
|
+
::EacRubyUtils.require_sub(__FILE__)
|
17
|
+
|
18
|
+
attr_reader :git, :remote_name, :source_ref, :target_ref, :last_pushed_revision
|
19
|
+
|
20
|
+
def initialize(git_local_path, remote_name, source_ref, target_ref)
|
21
|
+
@git = ::Avm::Git::Launcher::Base.new(git_local_path)
|
22
|
+
@remote_name = remote_name
|
23
|
+
@source_ref = source_ref
|
24
|
+
@target_ref = target_ref
|
25
|
+
@last_pushed_revision = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
start_banner
|
30
|
+
push_revisions
|
31
|
+
end
|
32
|
+
|
33
|
+
def fs_cache_object_id
|
34
|
+
::File.expand_path(git).parameterize
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def start_banner
|
40
|
+
infov 'Git local', git
|
41
|
+
infov 'Remote name', remote_name
|
42
|
+
infov 'Source ref.', source_ref
|
43
|
+
infov 'Source rev.', source_rev
|
44
|
+
infov 'Target ref.', target_ref
|
45
|
+
infov 'Revisions to push', revisions.count
|
46
|
+
end
|
47
|
+
|
48
|
+
def push_revisions
|
49
|
+
count = 1
|
50
|
+
revisions.each do |rev|
|
51
|
+
infom "Pushing commit #{count}/#{revisions.count}..."
|
52
|
+
source_commit = ::Avmtrf1::Git::PushLarge::SourceCommit.new(self, rev)
|
53
|
+
source_commit.run
|
54
|
+
@last_pushed_revision = source_commit.pushed_revision.read
|
55
|
+
count += 1
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def source_rev
|
60
|
+
git.rev_parse(source_ref)
|
61
|
+
end
|
62
|
+
|
63
|
+
def revisions_uncached
|
64
|
+
git.execute!('--no-pager', 'log', '--reverse', '--pretty=format:%H', source_rev)
|
65
|
+
.each_line.map(&:strip)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Git
|
7
|
+
class Reference
|
8
|
+
include ::EacRubyUtils::SimpleCache
|
9
|
+
|
10
|
+
attr_reader :revision, :fullname
|
11
|
+
|
12
|
+
def initialize(git, fullname, revision)
|
13
|
+
@git = git
|
14
|
+
@fullname = fullname
|
15
|
+
@revision = revision
|
16
|
+
end
|
17
|
+
|
18
|
+
def type_uncached
|
19
|
+
parsed_fullname.type
|
20
|
+
end
|
21
|
+
|
22
|
+
delegate :name, to: :parsed_fullname
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def parsed_fullname_uncached
|
27
|
+
m = %r{\Arefs/([^/]+)s/(.+)\z}.match(fullname)
|
28
|
+
return ::OpenStruct.new(name: m[2], type: m[1]) if m # rubocop:disable Style/OpenStructUse
|
29
|
+
|
30
|
+
raise "\"#{fullname}\" not match ref pattern"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/avmtrf1/git.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Gitlab
|
5
|
+
class Commit
|
6
|
+
enable_speaker
|
7
|
+
enable_simple_cache
|
8
|
+
common_constructor :repository, :git, :source
|
9
|
+
|
10
|
+
delegate :id, to: :git_commit
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
source
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [String]
|
17
|
+
def markdown_link(object_type = 'commit')
|
18
|
+
"[#{git_commit.abbreviated_commit_hash}|#{web_url(object_type)}]"
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [String]
|
22
|
+
def textile_link(object_type = 'commit')
|
23
|
+
"\"#{git_commit.abbreviated_commit_hash}\":#{web_url(object_type)}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def web_url(object_type = 'commit')
|
27
|
+
"#{repository.web_url}/#{object_type}/#{git_commit.commit_hash}"
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def git_commit_uncached
|
33
|
+
git.commit(git.rev_parse(source))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/core_ext'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Gitlab
|
7
|
+
class Repository
|
8
|
+
class << self
|
9
|
+
# @param uri [String]
|
10
|
+
# @return [Avmtrf1::Gitlab::Address, nil]
|
11
|
+
def by_uri(uri)
|
12
|
+
by_git_uri(uri) || by_https_uri(uri)
|
13
|
+
end
|
14
|
+
|
15
|
+
# @param uri [String]
|
16
|
+
# @return [Avmtrf1::Gitlab::Address, nil]
|
17
|
+
def by_git_uri(uri)
|
18
|
+
/\Agit@(.+):(.+)\z/i.if_match(uri, false) do |m|
|
19
|
+
new(:git, m[1], m[2])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param uri [String]
|
24
|
+
# @return [Avmtrf1::Gitlab::Address, nil]
|
25
|
+
def by_https_uri(uri)
|
26
|
+
%r{\Ahttps?://([^\/]+)/(.+)\z}i.if_match(uri, false) do |m|
|
27
|
+
new(:https, m[1], m[2])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
common_constructor :protocol, :authority, :path do
|
33
|
+
self.path = '/' + path.to_s.gsub(/\.git\Z/, '').gsub(%r{\A/+}, '') # rubocop:disable Style/StringConcatenation
|
34
|
+
end
|
35
|
+
|
36
|
+
def web_url
|
37
|
+
"https://#{authority}#{path}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/simple_cache'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
class Ini
|
7
|
+
class Profile
|
8
|
+
include ::EacRubyUtils::SimpleCache
|
9
|
+
|
10
|
+
attr_reader :ini, :name, :parent_name, :self_data
|
11
|
+
|
12
|
+
# @param profiles [Avmtrf1::Ini::Profiles
|
13
|
+
def initialize(ini, name, parent_name, self_data)
|
14
|
+
@ini = ini
|
15
|
+
@name = name
|
16
|
+
@parent_name = parent_name
|
17
|
+
@self_data = self_data
|
18
|
+
end
|
19
|
+
|
20
|
+
delegate :[], to: :data
|
21
|
+
|
22
|
+
delegate :fetch, to: :data
|
23
|
+
|
24
|
+
def to_h(prefix = '')
|
25
|
+
data.select { |k, _v| k.start_with?(prefix) }
|
26
|
+
.map { |e| [e[0].gsub(/\A#{Regexp.quote(prefix)}/, ''), e[1]] }.to_h # rubocop:disable Style/MapToHash
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def data_uncached
|
32
|
+
r = self_data
|
33
|
+
r = parent.data.merge(r) if parent
|
34
|
+
r
|
35
|
+
end
|
36
|
+
|
37
|
+
def parent
|
38
|
+
parent_name ? ini.profiles[parent_name] : nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/avmtrf1/ini.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/simple_cache'
|
4
|
+
require 'pp' # rubocop:disable Lint/RedundantRequireStatement
|
5
|
+
require 'avmtrf1/ini/profile'
|
6
|
+
require 'avmtrf1/patches/inifile'
|
7
|
+
|
8
|
+
module Avmtrf1
|
9
|
+
# Leitor de arquivos .ini com suporte a herança de seções/perfis.
|
10
|
+
class Ini
|
11
|
+
include ::EacRubyUtils::SimpleCache
|
12
|
+
|
13
|
+
class << self
|
14
|
+
SECTION_NAME_PATTERN = /\A([^\:]+)(?::([^\:]+))?\z/.freeze
|
15
|
+
|
16
|
+
# @return Um [Array] em que o primeiro elemento é o perfil e o segundo é seu super-perfil.
|
17
|
+
def parse_section_name(section_name)
|
18
|
+
m = SECTION_NAME_PATTERN.match(section_name)
|
19
|
+
return [m[1], m[2]] if m
|
20
|
+
|
21
|
+
raise "Section name pattern \"#{SECTION_NAME_PATTERN}\" not match \"#{section_name}\""
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [IniFile].
|
25
|
+
def inifile_from_file(path)
|
26
|
+
raise "\"#{path}\" does not exist or is not a file" unless ::File.file?(path)
|
27
|
+
|
28
|
+
r = ::IniFile.load(path)
|
29
|
+
return r if r.is_a?(::IniFile)
|
30
|
+
|
31
|
+
raise "\"#{path}\" not converted to Inifile"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :inifile
|
36
|
+
|
37
|
+
# @param ini Um [IniFile] ou um caminho de arquivo .ini.
|
38
|
+
def initialize(inifile)
|
39
|
+
@inifile = inifile.is_a?(::IniFile) ? inifile : self.class.inifile_from_file(inifile.to_s)
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def profiles_uncached
|
45
|
+
r = {}
|
46
|
+
inifile.each_section do |section|
|
47
|
+
profile_name, profile_parent_name = self.class.parse_section_name(section)
|
48
|
+
r[profile_name] = ::Avmtrf1::Ini::Profile.new(
|
49
|
+
self, profile_name, profile_parent_name, inifile[section]
|
50
|
+
)
|
51
|
+
end
|
52
|
+
r.sort.to_h.freeze
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|