lib/xezat/command/bump.rb in xezat-0.1.0 vs lib/xezat/command/bump.rb in xezat-0.1.1
- old
+ new
@@ -1,161 +1,50 @@
+# frozen_string_literal: true
+
require 'facets/file/atomic_write'
require 'find'
require 'json'
require 'xezat'
+require 'xezat/command/bump/changelog'
+require 'xezat/command/bump/development_package'
+require 'xezat/command/bump/file'
+require 'xezat/command/bump/runtime_package'
+require 'xezat/command/bump/src_uri'
require 'xezat/cygchangelog'
require 'xezat/cygclasses'
-require 'xezat/detectors'
-require 'xezat/ext/linguist/file_blob'
require 'xezat/packages'
require 'xezat/variables'
module Xezat
-
- class FilePermissionError < StandardError
- end
-
- class IllegalStateError < StandardError
- end
-
module Command
class Bump
include Xezat
def initialize(options, cygport)
@options = options
@cygport = cygport
end
def execute
- pkgs = packages()
+ LOG.debug('Start bumping')
+ pkgs = packages
vars = variables(@cygport)
readme_file = File.expand_path(File.join(vars[:C], 'README'))
info = {
- src_uri: get_src_uri(vars),
- runtimes: get_runtime_packages(@cygport),
- developments: get_development_packages(vars, pkgs),
- files: get_files(vars),
- changelog: get_changelog(vars, @options, readme_file)
+ src_uri: get_src_uri(vars),
+ runtimes: get_runtime_packages(@cygport),
+ developments: get_development_packages(vars, pkgs),
+ files: get_files(vars),
+ changelog: get_changelog(vars, @options, readme_file)
}
+ LOG.debug('Write ChangeLog atomically')
File.atomic_write(readme_file) do |f|
f.write(get_embedded_contents(vars, info))
end
- end
-
- def get_src_uri(vars, cygclasses = CygclassManager.new)
- cygclasses.vcs.each do |vcs|
- next unless vars.key?("_#{vcs}_CYGCLASS_".intern)
- src_uri_key = "#{vcs.to_s.upcase}_URI".intern
- return vars[src_uri_key].split if vars.key?(src_uri_key)
- end
- vars[:SRC_URI].split
- end
-
-
- def get_runtime_packages(cygport)
- command = ['bash', File.expand_path(File.join(DATA_DIR, 'invoke_cygport_dep.sh')), cygport]
- result, error, status = Open3.capture3(command.join(' '))
- raise CygportProcessError, error unless status.success?
- result.gsub!(/^.*\*\*\*.*$/, '')
- result.split($INPUT_RECORD_SEPARATOR).map!(&:lstrip)
- end
-
-
- def get_development_packages(variables, packages)
- compilers = get_compilers(get_languages(variables[:S]), variables)
- tools = get_tools(variables)
- development_packages = (compilers + tools + [:cygport]).uniq.sort
- development_packages.map! do |package|
- packages[package] || ''
- end
- end
-
- def get_compilers(languages, variables)
- compiler_file = File.expand_path(File.join(DATA_DIR, 'compilers.json'))
- compiler_candidates = JSON.parse(File.read(compiler_file))
- compilers = []
- languages.uniq.each do |language|
- next unless compiler_candidates.key?(language)
- compiler_candidate = compiler_candidates[language]
- if compiler_candidate['package'] == 'python'
- pkg_names = variables[:PKG_NAMES] || variables[:PN]
- if pkg_names.include?('python3-')
- compilers << :'python3'
- elsif pkg_names.include?('pypi-')
- compilers << :'pypi'
- else
- compilers << compiler_candidate['package'].intern
- end
- else
- compilers << compiler_candidate['package'].intern
- end
- next unless compiler_candidate.key?('dependencies')
- compiler_candidate['dependencies'].each do |dependency|
- compilers << dependency.intern
- end
- end
- compilers.uniq
- end
-
- def get_languages(top_src_dir)
- languages_file = File.expand_path(File.join(DATA_DIR, 'languages.json'))
- languages_candidates = JSON.parse(File.read(languages_file))
- languages = []
- Find.find(top_src_dir) do |path|
- next if FileTest.directory?(path)
- name = languages_candidates[File.extname(path)]
- if name.nil?
- language = Xezat::Linguist::FileBlob.new(path).language
- next if language.nil?
- name = language.name
- end
- languages << name
- end
- languages
- end
-
- def get_tools(variables)
- DetectorManager.new().detect(variables)
- end
-
- def get_files(variables)
- pkg2files = {}
- variables[:pkg_name].each do |pkg_name|
- lst_file = File.expand_path(File.join(variables[:T], ".#{pkg_name}.lst"))
- raise IllegalStateError, "No such file: #{lst_file}" unless FileTest.readable?(lst_file)
- lines = File.readlines(lst_file)
- lines.delete_if do |path|
- path.strip!
- path[-1] == File::SEPARATOR # ignore directory
- end.map! do |path|
- File::SEPARATOR + path
- end
- if variables[:PN] == pkg_name
- readme = File::SEPARATOR + File.join('usr', 'share', 'doc', 'Cygwin', "#{pkg_name}.README")
- lines << readme.strip unless lines.include?(readme)
- end
- pkg2files[pkg_name.intern] = lines.sort
- end
- pkg2files
- end
-
- def get_changelog(variables, options, readme_file)
- current_version = variables[:PVR].intern
- if FileTest.exist?(readme_file)
- raise FilePermissionError, "Cannot read #{readme_file}" unless FileTest.readable?(readme_file)
- raise FilePermissionError, "Cannot write #{readme_file}" unless FileTest.writable?(readme_file)
- changelog = Cygchangelog.new(File.read(readme_file))
- message = options['message'] || 'Version bump.'
- changelog[current_version] = message unless changelog.key?(current_version)
- else
- changelog = Cygchangelog.new
- changelog[current_version] = 'Initial release by fd0 <https://github.com/fd00/>'
- end
- changelog
+ LOG.debug('End bumping')
end
def get_embedded_contents(variables, info)
erb = File.expand_path(File.join(TEMPLATE_DIR, 'README.erb'))
ERB.new(File.readlines(erb).join(nil), nil, '%-').result(binding).chop # remove redundant new line