avm-eac_redmine_base0 0.14.0 → 0.16.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7425583147edb8c6c206c691c7ae1216339050c06ef126885ae3bf6a7c697233
4
- data.tar.gz: 126f5ef1b4b620f2e9a8dce516f58f80194f337ed48d28da4ac566ffeb60d945
3
+ metadata.gz: 30d851b9a2e5895bffd9830f752d05e18957b897e44398026c61916ecc3955b7
4
+ data.tar.gz: b744ea2ec75dc9f349475c66a94a5611a38d208b4c53b8116e3029d87aba2858
5
5
  SHA512:
6
- metadata.gz: ec5263e7f9d24bb614d30820415b6490c9b6c3b605cd4079181d27ee02cca49eeddfc34d424559b87f327e029c739f4debf2db047076176829673593e5830c23
7
- data.tar.gz: 37566904f6580506a5e6b086cbff4d7d3890cfe210f53871a8097992bb1f6e2e533e4bbb7d663c507534b348faf85e6bd2809ec2727ddd70ee82887a3e5eaa94
6
+ metadata.gz: fdeb8c77b40dacf07dfaf1f738eed19e1f255f562030f487aecce8bc25b765b8e49a95d773a25bb5518e9b3a715e3fbf5698770e17b360e3b711d1934aa47cd3
7
+ data.tar.gz: 0ba34fcbe7f3ceee0b31c8025ef4168ccd7b4d985aed23089a4c547b7cba1ee32ec3199ffb6595546ee0a02a7ce162ae0fa10228d916be6048cd05fd5f2cf034
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_rails_base1/instances/apache_host'
4
+
5
+ module Avm
6
+ module EacRedmineBase0
7
+ module Instances
8
+ class ApacheHost < ::Avm::EacRailsBase1::Instances::ApacheHost
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_rails_base1/instances/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacRedmineBase0
8
+ module Instances
9
+ class Base < ::Avm::EacRailsBase1::Instances::Base
10
+ module Database
11
+ DATABASE_INTERNAL_HOSTNAME = 'localhost'
12
+ DEFAULT_POSTGRESQL_VERSION = '12'
13
+
14
+ common_concern do
15
+ uri_components_entries_values 'postgresql', %w[version]
16
+ end
17
+
18
+ def database_internal
19
+ entry(::Avm::Instances::EntryKeys::DATABASE_HOSTNAME).value ==
20
+ DATABASE_INTERNAL_HOSTNAME
21
+ end
22
+
23
+ def postgresql_version_default_value
24
+ DEFAULT_POSTGRESQL_VERSION
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_rails_base1/instances/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacRedmineBase0
8
+ module Instances
9
+ class Base < ::Avm::EacRailsBase1::Instances::Base
10
+ module Gitolite
11
+ GITOLITE_ENTRY_KEYS_PREFIX = 'gitolite'
12
+ DEFAULT_HOSTNAME = 'localhost'
13
+ DEFAULT_PATH_PARENT = '/var/lib'
14
+ DEFAULT_SCHEME = 'file'
15
+ DEFAULT_USERNAME = 'git'
16
+
17
+ common_concern do
18
+ uri_components_entries_values GITOLITE_ENTRY_KEYS_PREFIX
19
+ end
20
+
21
+ def gitolite_hostname_default_value
22
+ DEFAULT_HOSTNAME
23
+ end
24
+
25
+ def gitolite_path_default_value
26
+ read_entry_optional([GITOLITE_ENTRY_KEYS_PREFIX, 'username']).if_present do |v|
27
+ ::File.join(DEFAULT_PATH_PARENT, v)
28
+ end
29
+ end
30
+
31
+ def gitolite_scheme_default_value
32
+ DEFAULT_SCHEME
33
+ end
34
+
35
+ def gitolite_username_default_value
36
+ DEFAULT_USERNAME
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_rails_base1/instances/base'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module EacRedmineBase0
8
+ module Instances
9
+ class Base < ::Avm::EacRailsBase1::Instances::Base
10
+ module Web
11
+ def web_authority
12
+ web_hostname.if_present do |h|
13
+ h.to_s + web_port_optional.if_present('') { |p| ":#{p}" }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,15 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'addressable/uri'
4
- require 'avm/eac_redmine_base0/data_unit'
4
+ require 'avm/eac_redmine_base0/instances/data_unit'
5
5
  require 'avm/eac_redmine_base0/instances/docker_image'
6
- require 'avm/eac_redmine_base0/rest_api'
6
+ require 'avm/eac_redmine_base0/instances/runners'
7
+ require 'avm/eac_redmine_base0/instances/rest_api'
7
8
  require 'avm/eac_rails_base1/instances/base'
8
9
 
9
10
  module Avm
10
11
  module EacRedmineBase0
11
12
  module Instances
12
13
  class Base < ::Avm::EacRailsBase1::Instances::Base
14
+ require_sub __FILE__, include_modules: true
13
15
  enable_simple_cache
14
16
 
15
17
  FILES_UNITS = { files: 'files' }.freeze
@@ -32,7 +34,7 @@ module Avm
32
34
  @data_package ||= ::Avm::Data::Instance::Package.new(
33
35
  self,
34
36
  units: {
35
- all: ::Avm::EacRedmineBase0::DataUnit.new(self)
37
+ all: ::Avm::EacRedmineBase0::Instances::DataUnit.new(self)
36
38
  }
37
39
  )
38
40
  end
@@ -46,11 +48,11 @@ module Avm
46
48
 
47
49
  private
48
50
 
49
- # @return [Avm::EacRedmineBase0::RestApi]
51
+ # @return [Avm::EacRedmineBase0::Instances::RestApi]
50
52
  def rest_api_uncached
51
53
  url = root_url
52
54
  url.query_values = { key: read_entry('api.key') }
53
- ::Avm::EacRedmineBase0::RestApi.new(url)
55
+ ::Avm::EacRedmineBase0::Instances::RestApi.new(url)
54
56
  end
55
57
  end
56
58
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/data/instance/unit'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'curb'
6
+ require 'open-uri'
7
+
8
+ module Avm
9
+ module EacRedmineBase0
10
+ module Instances
11
+ class DataUnit < ::Avm::Data::Instance::Unit
12
+ common_constructor :instance
13
+
14
+ EXPORT_PATH = '/backup/export'
15
+ EXTENSION = '.tar'
16
+ IMPORT_PATH = '/backup/import.json'
17
+
18
+ def do_dump(data_path)
19
+ ::File.open(data_path, 'wb') do |file|
20
+ file << export_request.response.body_data_or_raise
21
+ end
22
+ end
23
+
24
+ def do_load(data_path)
25
+ do_load_by_web(data_path) || do_load_by_rake(data_path) || raise('Failed to load')
26
+ end
27
+
28
+ def do_load_by_web(data_path)
29
+ c = Curl::Easy.new(import_url)
30
+ c.multipart_form_post = true
31
+ c.http_post(Curl::PostField.file('redmine_with_git_tableless_load[path]', data_path))
32
+ c.perform
33
+ true
34
+ rescue Curl::Err::ConnectionFailedError
35
+ false
36
+ end
37
+
38
+ def do_load_by_rake(data_path)
39
+ instance.bundle('exec', 'rake', "redmine_with_git:load:all[#{data_path}]").system
40
+ true
41
+ end
42
+
43
+ def export_request
44
+ instance.rest_api.request(EXPORT_PATH)
45
+ end
46
+
47
+ def import_url
48
+ instance.rest_api.build_service_url(IMPORT_PATH).to_s
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/eac_webapp_base0/deploy'
3
+ require 'avm/eac_webapp_base0/instances/deploy'
4
4
  require 'eac_ruby_utils/ruby'
5
5
 
6
6
  module Avm
7
7
  module EacRedmineBase0
8
8
  module Instances
9
- class Deploy < ::Avm::EacWebappBase0::Deploy
9
+ class Deploy < ::Avm::EacWebappBase0::Instances::Deploy
10
10
  set_callback :assert_instance_branch, :after, :run_installer
11
11
 
12
12
  def run_installer
@@ -14,9 +14,10 @@ module Avm
14
14
  BASE_IMAGE = 'ubuntu:20.04'
15
15
  INSTALLER_TARGET_TASK_WITH_WEB_PATH_BLANK = 'redmine_as_apache_base'
16
16
  INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT = 'redmine_as_apache_path'
17
- DATABASE_INTERNAL_HOSTNAME = 'localhost'
18
17
  REDMINE_SOURCE_HOST_SUBPATH = 'redmine_source'
19
18
 
19
+ delegate :database_internal, to: :instance
20
+
20
21
  def avm_fs_cache_object_id
21
22
  instance.id
22
23
  end
@@ -31,11 +32,6 @@ module Avm
31
32
  eac_ubuntu_base0_instance.docker_image.provide.id
32
33
  end
33
34
 
34
- def database_internal
35
- instance.entry(::Avm::Instances::EntryKeys::DATABASE_HOSTNAME).value ==
36
- DATABASE_INTERNAL_HOSTNAME
37
- end
38
-
39
35
  def installer_target_task
40
36
  if web_path_present?
41
37
  INSTALLER_TARGET_TASK_WITH_WEB_PATH_PRESENT
@@ -5,7 +5,9 @@ require 'eac_rest/api'
5
5
 
6
6
  module Avm
7
7
  module EacRedmineBase0
8
- class RestApi < ::EacRest::Api
8
+ module Instances
9
+ class RestApi < ::EacRest::Api
10
+ end
9
11
  end
10
12
  end
11
13
  end
@@ -8,7 +8,7 @@ module Avm
8
8
  module Instances
9
9
  module Runners
10
10
  class ProjectRename
11
- runner_with ::Avm::EacRailsBase1::RunnerWith::Bundle do
11
+ runner_with :help, ::Avm::EacRailsBase1::RunnerWith::Bundle do
12
12
  pos_arg :from
13
13
  pos_arg :to
14
14
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'avm/eac_redmine_base0/instances/base'
4
4
  require 'avm/eac_redmine_base0/instances/deploy'
5
- require 'avm/eac_redmine_base0/apache_host'
5
+ require 'avm/eac_redmine_base0/instances/apache_host'
6
6
  require 'avm/eac_rails_base1/runner'
7
7
  require 'eac_ruby_utils/core_ext'
8
8
 
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_redmine_base0/sources/core_update'
4
+ require 'avm/sources/base/configuration'
5
+ require 'avm/sync'
6
+ require 'eac_fs/cached_download'
7
+ require 'eac_ruby_utils/core_ext'
8
+
9
+ module Avm
10
+ module EacRedmineBase0
11
+ module Sources
12
+ class CoreUpdate
13
+ enable_speaker
14
+ enable_simple_cache
15
+ common_constructor :source, :version, :url
16
+
17
+ GITIGNORE_ADD = %w[/public/assets/**/* /config/install.sh /config/secrets_key.txt
18
+ /log/**/*].freeze
19
+ GITIGNORE_DEL = %w[/Gemfile.lock /plugins/* /public/themes/*].freeze
20
+ TARGET_KEEP = ::Avm::Sources::Base::Configuration::CONFIGURATION_FILENAMES
21
+ .map { |b| "/#{b}" } + %w[/Gemfile.lock].freeze
22
+
23
+ def run
24
+ ::EacRubyUtils::Fs::Temp.on_directory do |dir|
25
+ @tempdir = dir
26
+ assert_source_package
27
+ extract_package_to_tempdir
28
+ sync_content
29
+ change_git_ignore
30
+ validate_empty_dir
31
+ end
32
+ git_commit
33
+ success 'Done!'
34
+ end
35
+
36
+ def assert_source_package
37
+ infom 'Asserting source package...'
38
+ source_package.assert
39
+ infov 'Package cache path', source_package.path
40
+ infov 'Package size', source_package.path.size
41
+ end
42
+
43
+ def fs_object_id
44
+ [source.path, version].join('_').variableize
45
+ end
46
+
47
+ private
48
+
49
+ attr_reader :tempdir
50
+
51
+ def change_git_ignore
52
+ file = target_path.join('.gitignore')
53
+ file.write(
54
+ (file.read.each_line.map(&:strip).reject { |line| GITIGNORE_DEL.include?(line) } +
55
+ ['', '#eac_redmine_base0'] + GITIGNORE_ADD).map { |line| "#{line}\n" }.join
56
+ )
57
+ end
58
+
59
+ def extract_package_to_tempdir
60
+ infom "Extracting package to tempdir #{tempdir}..."
61
+ ::EacRubyUtils::Envs.local.command(
62
+ 'tar', '-xf', source_package.path.to_path, '-C', tempdir.to_path,
63
+ '--strip-components', '1'
64
+ ).execute!
65
+ end
66
+
67
+ def git_commit
68
+ if git_repo.dirty?
69
+ infom 'Git commiting...'
70
+ git_repo.command('add', '--', target_path).execute!
71
+ git_repo.command('commit', '-m', git_commit_message, '--', target_path).execute!
72
+ else
73
+ infom 'Nothing to commit'
74
+ end
75
+ end
76
+
77
+ def git_commit_message
78
+ i18n_translate(__method__, version: version, __locale: source.locale)
79
+ end
80
+
81
+ def git_repo_uncached
82
+ ::EacGit::Local.new(target_path)
83
+ end
84
+
85
+ def sync_content
86
+ ::Avm::Sync.new(source_path, target_path)
87
+ .add_exclude('/*').add_includes(*target_files_to_remove).move_mode(true).run
88
+ end
89
+
90
+ # @return [EacFs::CachedDownload]
91
+ def source_package_uncached
92
+ ::EacFs::CachedDownload.new(url, fs_cache)
93
+ end
94
+
95
+ def validate_empty_dir
96
+ if source_path.children.empty?
97
+ infom 'No content left in source directory'
98
+ else
99
+ fatal_error 'Found entries in source directory: ' +
100
+ source_path.children.map { |c| c.basename.to_path }.join(', ')
101
+ end
102
+ end
103
+
104
+ def source_path_uncached
105
+ ::Pathname.new(tempdir.to_path)
106
+ end
107
+
108
+ def target_files_to_remove
109
+ git_repo.command('ls-files').execute!
110
+ .each_line.map { |v| "/#{v.strip}" }
111
+ .without(*TARGET_KEEP)
112
+ end
113
+
114
+ def target_path_uncached
115
+ source.path
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'avm/eac_rails_base1/sources/base'
4
- require 'avm/eac_redmine_base0/core_update'
4
+ require 'avm/eac_redmine_base0/sources/core_update'
5
5
  require 'eac_cli/core_ext'
6
6
 
7
7
  module Avm
@@ -29,7 +29,8 @@ module Avm
29
29
  end
30
30
 
31
31
  def update
32
- ::Avm::EacRedmineBase0::CoreUpdate.new(runner_context.call(:subject), version, url).run
32
+ ::Avm::EacRedmineBase0::Sources::CoreUpdate
33
+ .new(runner_context.call(:subject), version, url).run
33
34
  end
34
35
 
35
36
  def url
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacRedmineBase0
5
- VERSION = '0.14.0'
5
+ VERSION = '0.16.0'
6
6
  end
7
7
  end
@@ -1,10 +1,17 @@
1
+ # Ruby
2
+ export rvm_ruby='ruby-%%RUBY.VERSION%%'
3
+
4
+ # Database
5
+ export postgresql_internal='%%DATABASE_INTERNAL%%'
6
+ export postgresql_host='%%DATABASE.HOSTNAME%%'
7
+ export postgresql_port='%%DATABASE.PORT%%'
1
8
  export postgresql_database='%%DATABASE.NAME%%'
2
- export postgresql_database_test='%%DATABASE.NAME%%_test'
3
9
  export postgresql_user='%%DATABASE.USERNAME%%'
4
10
  export postgresql_password='%%DATABASE.PASSWORD%%'
5
11
  export postgresql_version='%%POSTGRESQL.VERSION%%'
6
- export rvm_ruby='ruby-%%RUBY.VERSION%%'
7
- export redmine_git_hosting_ssh_key_name=redmine_git_hosting_id
12
+ export postgresql_extra_settings='%%DATABASE.EXTRA%%'
13
+
14
+ # Web
8
15
  if [ '%%WEB.SCHEME%%' == 'https' ]; then
9
16
  export address_https='true'
10
17
  else
@@ -17,6 +24,7 @@ export address_path='%%WEB.PATH%%'
17
24
  export git_repositories_hierarchical_organisation=false
18
25
  export gitolite_user='%%GIT.USERNAME%%'
19
26
  export gitolite_user_home="/var/lib/${gitolite_user}"
27
+ export redmine_git_hosting_ssh_key_name=redmine_git_hosting_id
20
28
 
21
29
  # Mail settings
22
30
  export smtp_server='%%MAILER.SMTP.ADDRESS%%'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-eac_redmine_base0
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-19 00:00:00.000000000 Z
11
+ date: 2022-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avm
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.41'
19
+ version: '0.44'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.41'
26
+ version: '0.44'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: avm-eac_generic_base0
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -132,14 +132,14 @@ dependencies:
132
132
  requirements:
133
133
  - - "~>"
134
134
  - !ruby/object:Gem::Version
135
- version: '0.102'
135
+ version: '0.104'
136
136
  type: :runtime
137
137
  prerelease: false
138
138
  version_requirements: !ruby/object:Gem::Requirement
139
139
  requirements:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
- version: '0.102'
142
+ version: '0.104'
143
143
  - !ruby/object:Gem::Dependency
144
144
  name: eac_ruby_gem_support
145
145
  requirement: !ruby/object:Gem::Requirement
@@ -161,21 +161,24 @@ extensions: []
161
161
  extra_rdoc_files: []
162
162
  files:
163
163
  - lib/avm/eac_redmine_base0.rb
164
- - lib/avm/eac_redmine_base0/apache_host.rb
165
- - lib/avm/eac_redmine_base0/core_update.rb
166
- - lib/avm/eac_redmine_base0/data_unit.rb
167
164
  - lib/avm/eac_redmine_base0/instances.rb
165
+ - lib/avm/eac_redmine_base0/instances/apache_host.rb
168
166
  - lib/avm/eac_redmine_base0/instances/base.rb
167
+ - lib/avm/eac_redmine_base0/instances/base/database.rb
168
+ - lib/avm/eac_redmine_base0/instances/base/gitolite.rb
169
+ - lib/avm/eac_redmine_base0/instances/base/web.rb
170
+ - lib/avm/eac_redmine_base0/instances/data_unit.rb
169
171
  - lib/avm/eac_redmine_base0/instances/deploy.rb
170
172
  - lib/avm/eac_redmine_base0/instances/docker_image.rb
173
+ - lib/avm/eac_redmine_base0/instances/rest_api.rb
171
174
  - lib/avm/eac_redmine_base0/instances/runners.rb
172
175
  - lib/avm/eac_redmine_base0/instances/runners/docker.rb
173
176
  - lib/avm/eac_redmine_base0/instances/runners/project_rename.rb
174
- - lib/avm/eac_redmine_base0/rest_api.rb
175
177
  - lib/avm/eac_redmine_base0/runners.rb
176
178
  - lib/avm/eac_redmine_base0/runners/base.rb
177
179
  - lib/avm/eac_redmine_base0/sources.rb
178
180
  - lib/avm/eac_redmine_base0/sources/base.rb
181
+ - lib/avm/eac_redmine_base0/sources/core_update.rb
179
182
  - lib/avm/eac_redmine_base0/sources/runners.rb
180
183
  - lib/avm/eac_redmine_base0/sources/runners/core_update.rb
181
184
  - lib/avm/eac_redmine_base0/sources/runners/docker.rb
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_rails_base1/apache_host'
4
-
5
- module Avm
6
- module EacRedmineBase0
7
- class ApacheHost < ::Avm::EacRailsBase1::ApacheHost
8
- end
9
- end
10
- end
@@ -1,118 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/eac_redmine_base0/core_update'
4
- require 'avm/sources/base/configuration'
5
- require 'avm/sync'
6
- require 'eac_fs/cached_download'
7
- require 'eac_ruby_utils/core_ext'
8
-
9
- module Avm
10
- module EacRedmineBase0
11
- class CoreUpdate
12
- enable_speaker
13
- enable_simple_cache
14
- common_constructor :source, :version, :url
15
-
16
- GITIGNORE_ADD = %w[/public/assets/**/* /config/install.sh /config/secrets_key.txt
17
- /log/**/*].freeze
18
- GITIGNORE_DEL = %w[/Gemfile.lock /plugins/* /public/themes/*].freeze
19
- TARGET_KEEP = ::Avm::Sources::Base::Configuration::CONFIGURATION_FILENAMES
20
- .map { |b| "/#{b}" } + %w[/Gemfile.lock].freeze
21
-
22
- def run
23
- ::EacRubyUtils::Fs::Temp.on_directory do |dir|
24
- @tempdir = dir
25
- assert_source_package
26
- extract_package_to_tempdir
27
- sync_content
28
- change_git_ignore
29
- validate_empty_dir
30
- end
31
- git_commit
32
- success 'Done!'
33
- end
34
-
35
- def assert_source_package
36
- infom 'Asserting source package...'
37
- source_package.assert
38
- infov 'Package cache path', source_package.path
39
- infov 'Package size', source_package.path.size
40
- end
41
-
42
- def fs_object_id
43
- [source.path, version].join('_').variableize
44
- end
45
-
46
- private
47
-
48
- attr_reader :tempdir
49
-
50
- def change_git_ignore
51
- file = target_path.join('.gitignore')
52
- file.write(
53
- (file.read.each_line.map(&:strip).reject { |line| GITIGNORE_DEL.include?(line) } +
54
- ['', '#eac_redmine_base0'] + GITIGNORE_ADD).map { |line| "#{line}\n" }.join
55
- )
56
- end
57
-
58
- def extract_package_to_tempdir
59
- infom "Extracting package to tempdir #{tempdir}..."
60
- ::EacRubyUtils::Envs.local.command(
61
- 'tar', '-xf', source_package.path.to_path, '-C', tempdir.to_path,
62
- '--strip-components', '1'
63
- ).execute!
64
- end
65
-
66
- def git_commit
67
- if git_repo.dirty?
68
- infom 'Git commiting...'
69
- git_repo.command('add', '--', target_path).execute!
70
- git_repo.command('commit', '-m', git_commit_message, '--', target_path).execute!
71
- else
72
- infom 'Nothing to commit'
73
- end
74
- end
75
-
76
- def git_commit_message
77
- i18n_translate(__method__, version: version, __locale: source.locale)
78
- end
79
-
80
- def git_repo_uncached
81
- ::EacGit::Local.new(target_path)
82
- end
83
-
84
- def sync_content
85
- ::Avm::Sync.new(source_path, target_path)
86
- .add_exclude('/*').add_includes(*target_files_to_remove).move_mode(true).run
87
- end
88
-
89
- # @return [EacFs::CachedDownload]
90
- def source_package_uncached
91
- ::EacFs::CachedDownload.new(url, fs_cache)
92
- end
93
-
94
- def validate_empty_dir
95
- if source_path.children.empty?
96
- infom 'No content left in source directory'
97
- else
98
- fatal_error 'Found entries in source directory: ' +
99
- source_path.children.map { |c| c.basename.to_path }.join(', ')
100
- end
101
- end
102
-
103
- def source_path_uncached
104
- ::Pathname.new(tempdir.to_path)
105
- end
106
-
107
- def target_files_to_remove
108
- git_repo.command('ls-files').execute!
109
- .each_line.map { |v| "/#{v.strip}" }
110
- .without(*TARGET_KEEP)
111
- end
112
-
113
- def target_path_uncached
114
- source.path
115
- end
116
- end
117
- end
118
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/data/instance/unit'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'curb'
6
- require 'open-uri'
7
-
8
- module Avm
9
- module EacRedmineBase0
10
- class DataUnit < ::Avm::Data::Instance::Unit
11
- common_constructor :instance
12
-
13
- EXPORT_PATH = '/backup/export'
14
- EXTENSION = '.tar'
15
- IMPORT_PATH = '/backup/import.json'
16
-
17
- def do_dump(data_path)
18
- ::File.open(data_path, 'wb') do |file|
19
- file << export_request.response.body_data_or_raise
20
- end
21
- end
22
-
23
- def do_load(data_path)
24
- do_load_by_web(data_path) || do_load_by_rake(data_path) || raise('Failed to load')
25
- end
26
-
27
- def do_load_by_web(data_path)
28
- c = Curl::Easy.new(import_url)
29
- c.multipart_form_post = true
30
- c.http_post(Curl::PostField.file('redmine_with_git_tableless_load[path]', data_path))
31
- c.perform
32
- true
33
- rescue Curl::Err::ConnectionFailedError
34
- false
35
- end
36
-
37
- def do_load_by_rake(data_path)
38
- instance.bundle('exec', 'rake', "redmine_with_git:load:all[#{data_path}]").system
39
- true
40
- end
41
-
42
- def export_request
43
- instance.rest_api.request(EXPORT_PATH)
44
- end
45
-
46
- def import_url
47
- instance.rest_api.build_service_url(IMPORT_PATH).to_s
48
- end
49
- end
50
- end
51
- end