Module: Pkg::Repo
- Defined in:
- lib/packaging/repo.rb
Class Method Summary collapse
- .argument_required?(argument_name, repo_command) ⇒ Boolean
-
.compress_tarball_of_all_repos(all_repos_tarball_name) ⇒ Object
Invoke gzip to compress the ‘all’ tarball located in ‘pkg/<local_target>/<project>-all.tar’.
-
.construct_local_target_path(project, versioning) ⇒ Object
Construct a local_target based upon the versioning style.
-
.create_all_repo_archives(project, versioning) ⇒ Object
Generate each of the repos listed in <Config.platform_repos>.
-
.create_signed_repo_archive(repo_location, archive_name, versioning) ⇒ Object
Put a single signed repo into a tarball stored in ‘pkg/<local_target>/<archive_name>.tar.gz’.
- .directories_that_contain_packages(artifact_directory, pkg_ext) ⇒ Object
- .populate_repo_directory(artifact_parent_directory) ⇒ Object
- .update_repo(remote_host, command, options = {}) ⇒ Object
-
.update_tarball_of_all_repos(project, platform, versioning) ⇒ Object
Add a single repo tarball into the ‘all’ tarball located in ‘pkg/<local_target>/<project>-all.tar’ Create the ‘all’ tarball if needed.
Class Method Details
.argument_required?(argument_name, repo_command) ⇒ Boolean
133 134 135 |
# File 'lib/packaging/repo.rb', line 133 def argument_required?(argument_name, repo_command) repo_command.include?("__#{argument_name.upcase}__") end |
.compress_tarball_of_all_repos(all_repos_tarball_name) ⇒ Object
Invoke gzip to compress the ‘all’ tarball located in ‘pkg/<local_target>/<project>-all.tar’
79 80 81 82 83 84 85 |
# File 'lib/packaging/repo.rb', line 79 def compress_tarball_of_all_repos(all_repos_tarball_name) gzip = Pkg::Util::Tool.check_tool('gzip') gzip_command = "#{gzip} --fast #{all_repos_tarball_name}" stdout, = Pkg::Util::Execution.capture3(gzip_command) puts stdout end |
.construct_local_target_path(project, versioning) ⇒ Object
Construct a local_target based upon the versioning style
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/packaging/repo.rb', line 6 def construct_local_target_path(project, versioning) case versioning when 'ref' return File.join(project, Pkg::Config.ref) when 'version' return File.join(project, Pkg::Util::Version.dot_version) else fail "Error: Unknown versioning argument: #{versioning}" end end |
.create_all_repo_archives(project, versioning) ⇒ Object
Generate each of the repos listed in <Config.platform_repos>. Update the ‘all repos’ tarball as we do each one. Compress the ‘all repos’ tarball when all the repos have been generated
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/packaging/repo.rb', line 92 def create_all_repo_archives(project, versioning) platforms = Pkg::Config.platform_repos local_target = construct_local_target_path(project, versioning) all_repos_tarball_name = "#{project}-all.tar" platforms.each do |platform| archive_name = "#{project}-#{platform['name']}" create_signed_repo_archive(platform['repo_location'], archive_name, versioning) update_tarball_of_all_repos(project, platform, versioning) end Dir.chdir(File.join('pkg', local_target)) do compress_tarball_of_all_repos(all_repos_tarball_name) end end |
.create_signed_repo_archive(repo_location, archive_name, versioning) ⇒ Object
Put a single signed repo into a tarball stored in ‘pkg/<local_target>/<archive_name>.tar.gz’
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/packaging/repo.rb', line 21 def create_signed_repo_archive(repo_location, archive_name, versioning) tar = Pkg::Util::Tool.check_tool('tar') local_target = construct_local_target_path(Pkg::Config.project, versioning) if Pkg::Util::File.empty_dir?(File.join('pkg', local_target, repo_location)) if ENV['FAIL_ON_MISSING_TARGET'] == "true" raise "Error: missing packages under #{repo_location}" end warn "Warn: Skipping #{archive_name} because #{repo_location} has no files" return end Dir.chdir(File.join('pkg', local_target)) do puts "Info: Archiving #{repo_location} as #{archive_name}" target_tarball = File.join('repos', "#{archive_name}.tar.gz") tar_command = %W[#{tar} --owner=0 --group=0 --create --gzip --file #{target_tarball} #{repo_location}].join(' ') stdout, = Pkg::Util::Execution.capture3(tar_command) return stdout end end |
.directories_that_contain_packages(artifact_directory, pkg_ext) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/packaging/repo.rb', line 108 def directories_that_contain_packages(artifact_directory, pkg_ext) cmd = "[ -d #{artifact_directory} ] || exit 1 ; " cmd << "pushd #{artifact_directory} > /dev/null && " cmd << "find . -name '*.#{pkg_ext}' -print0 | xargs --no-run-if-empty -0 -I {} dirname {} " stdout, = Pkg::Util::Net.remote_execute( Pkg::Config.distribution_server, cmd, { capture_output: true } ) return stdout.split rescue StandardError => e fail "Error: Could not retrieve directories that contain #{pkg_ext} " \ "packages in #{Pkg::Config.distribution_server}:#{artifact_directory}: #{e}" end |
.populate_repo_directory(artifact_parent_directory) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/packaging/repo.rb', line 123 def populate_repo_directory(artifact_parent_directory) cmd = "[ -d #{artifact_parent_directory}/artifacts ] || exit 1 ; " cmd << "pushd #{artifact_parent_directory} > /dev/null && " cmd << 'rsync --archive --verbose --one-file-system --ignore-existing artifacts/ repos/ ' Pkg::Util::Net.remote_execute(Pkg::Config.distribution_server, cmd) rescue StandardError => e fail "Error: Could not populate repos directory in " \ "#{Pkg::Config.distribution_server}:#{artifact_parent_directory}: #{e}" end |
.update_repo(remote_host, command, options = {}) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/packaging/repo.rb', line 137 def update_repo(remote_host, command, = {}) = "Error: Missing required argument '%s', perhaps update build_defaults?" %i[repo_name repo_path repo_host repo_url].each do |option| fail % option.to_s if argument_required?(option.to_s, command) && ![option] end repo_configuration = { __REPO_NAME__: [:repo_name], __REPO_PATH__: [:repo_path], __REPO_HOST__: [:repo_host], __REPO_URL__: [:repo_url], __APT_PLATFORMS__: Pkg::Config.apt_releases.join(' '), __GPG_KEY__: Pkg::Util::Gpg.key } Pkg::Util::Net.remote_execute( remote_host, Pkg::Util::Misc.search_and_replace(command, repo_configuration) ) end |
.update_tarball_of_all_repos(project, platform, versioning) ⇒ Object
Add a single repo tarball into the ‘all’ tarball located in ‘pkg/<local_target>/<project>-all.tar’ Create the ‘all’ tarball if needed.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/packaging/repo.rb', line 49 def update_tarball_of_all_repos(project, platform, versioning) tar = Pkg::Util::Tool.check_tool('tar') all_repos_tarball_name = "#{project}-all.tar" archive_name = "#{project}-#{platform['name']}" local_target = construct_local_target_path(project, versioning) repo_tarball_name = "#{archive_name}.tar.gz" repo_tarball_path = File.join('repos', repo_tarball_name) Dir.chdir(File.join('pkg', local_target)) do unless Pkg::Util::File.exist?(repo_tarball_path) warn "Skipping #{archive_name} because it (#{repo_tarball_path}) contains no files" next end tar_action = '--create' tar_action = '--update' if File.exist?(all_repos_tarball_name) tar_command = %W[#{tar} --owner=0 --group=0 #{tar_action} --file #{all_repos_tarball_name} #{repo_tarball_path}].join(' ') stdout, = Pkg::Util::Execution.capture3(tar_command) puts stdout end end |