mirror of
https://github.com/chromebrew/chromebrew.git
synced 2026-01-06 22:24:12 -05:00
Enable additional temporarily disabled cops (#9394)
This commit is contained in:
committed by
GitHub
parent
fe6e9c4003
commit
eddca7e0e8
105
.rubocop.yml
105
.rubocop.yml
@@ -20,101 +20,15 @@ AllCops:
|
||||
Security/Eval:
|
||||
Enabled: false
|
||||
|
||||
Naming/ClassAndModuleCamelCase:
|
||||
# Disable this cop for every file in packages/
|
||||
Enabled: false
|
||||
|
||||
Naming/MethodParameterName:
|
||||
Enabled: false
|
||||
|
||||
Naming/MethodName:
|
||||
Enabled: false
|
||||
|
||||
Naming/VariableName:
|
||||
Enabled: false
|
||||
|
||||
Naming/PredicateName:
|
||||
Enabled: false
|
||||
|
||||
Metrics/AbcSize:
|
||||
Enabled: false
|
||||
|
||||
Metrics/MethodLength:
|
||||
Enabled: false
|
||||
|
||||
Metrics/ModuleLength:
|
||||
Enabled: false
|
||||
|
||||
Metrics/BlockLength:
|
||||
Enabled: false
|
||||
|
||||
Metrics/ClassLength:
|
||||
Enabled: false
|
||||
|
||||
Metrics/CyclomaticComplexity:
|
||||
Enabled: false
|
||||
|
||||
Metrics/PerceivedComplexity:
|
||||
Enabled: false
|
||||
|
||||
Metrics/BlockNesting:
|
||||
Enabled: false
|
||||
|
||||
Metrics/ParameterLists:
|
||||
Enabled: false
|
||||
|
||||
Layout/LineContinuationLeadingSpace:
|
||||
Enabled: false
|
||||
|
||||
Lint/ConstantDefinitionInBlock:
|
||||
Enabled: false
|
||||
|
||||
Lint/EmptyBlock:
|
||||
Enabled: false
|
||||
|
||||
Lint/ImplicitStringConcatenation:
|
||||
Enabled: false
|
||||
|
||||
Lint/UnreachableCode:
|
||||
Enabled: false
|
||||
|
||||
Lint/DuplicateBranch:
|
||||
Enabled: false
|
||||
|
||||
Lint/AssignmentInCondition:
|
||||
Enabled: false
|
||||
|
||||
Lint/LiteralAsCondition:
|
||||
Enabled: false
|
||||
|
||||
Lint/UnderscorePrefixedVariableName:
|
||||
Enabled: false
|
||||
|
||||
Lint/EmptyWhen:
|
||||
Enabled: false
|
||||
|
||||
Lint/UselessAssignment:
|
||||
Enabled: false
|
||||
|
||||
Lint/MissingSuper:
|
||||
Enabled: false
|
||||
|
||||
Lint/ShadowingOuterLocalVariable:
|
||||
Enabled: false
|
||||
|
||||
Lint/SuppressedException:
|
||||
Enabled: false
|
||||
|
||||
Lint/RedundantSafeNavigation:
|
||||
Enabled: false
|
||||
|
||||
Layout/LineLength:
|
||||
AllowedPatterns:
|
||||
- '#'
|
||||
- 'description'
|
||||
# When this is reenabled, keep the AllowedPatterns configuration
|
||||
Enabled: false
|
||||
|
||||
Layout/HashAlignment:
|
||||
EnforcedHashRocketStyle:
|
||||
- separator
|
||||
@@ -141,6 +55,9 @@ Layout/IndentationStyle:
|
||||
Layout/LeadingCommentSpace:
|
||||
Enabled: false
|
||||
|
||||
Layout/LineLength:
|
||||
Enabled: false
|
||||
|
||||
Layout/SpaceInsideBlockBraces:
|
||||
Enabled: false
|
||||
|
||||
@@ -150,6 +67,9 @@ Layout/SpaceInsideParens:
|
||||
Layout/TrailingEmptyLines:
|
||||
Enabled: false
|
||||
|
||||
Lint/LiteralAsCondition:
|
||||
Enabled: false
|
||||
|
||||
Style/RedundantReturn:
|
||||
Enabled: false
|
||||
|
||||
@@ -195,12 +115,25 @@ Style/RedundantLineContinuation:
|
||||
Style/RedundantStringEscape:
|
||||
Enabled: false
|
||||
|
||||
Metrics:
|
||||
Enabled: false
|
||||
|
||||
Naming/AccessorMethodName:
|
||||
Enabled: false
|
||||
|
||||
Naming/BlockParameterName:
|
||||
Enabled: false
|
||||
|
||||
Naming/ClassAndModuleCamelCase:
|
||||
Exclude:
|
||||
- 'packages/*'
|
||||
|
||||
Naming/VariableName:
|
||||
EnforcedStyle: snake_case
|
||||
# Allow variable names which are in all caps (with optional numbers and underscores)
|
||||
AllowedPatterns:
|
||||
- '^@?[A-Z0-9_]+$'
|
||||
|
||||
Naming/VariableNumber:
|
||||
Enabled: false
|
||||
|
||||
|
||||
366
bin/crew
366
bin/crew
@@ -153,9 +153,6 @@ class ExitMessage
|
||||
end
|
||||
|
||||
at_exit do
|
||||
unless $ERROR_INFO.nil? || ($ERROR_INFO.is_a?(SystemExit) && $ERROR_INFO.success?)
|
||||
code = $ERROR_INFO.is_a?(SystemExit) ? $ERROR_INFO.status : 1
|
||||
end
|
||||
# Print exit messages.
|
||||
ExitMessage.print
|
||||
end
|
||||
@@ -169,12 +166,12 @@ def load_json
|
||||
@device.transform_values! {|val| val.is_a?(String) ? val.to_sym : val }
|
||||
end
|
||||
|
||||
def print_package(pkgPath, extra = false)
|
||||
pkgName = File.basename pkgPath, '.rb'
|
||||
def print_package(pkg_path, extra = false)
|
||||
pkg_name = File.basename pkg_path, '.rb'
|
||||
begin
|
||||
set_package pkgName, pkgPath
|
||||
set_package pkg_name, pkg_path
|
||||
rescue StandardError => e
|
||||
warn "Error with #{pkgName}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
warn "Error with #{pkg_name}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
end
|
||||
print_current_package extra
|
||||
end
|
||||
@@ -207,9 +204,9 @@ def print_current_package(extra = false)
|
||||
puts ''
|
||||
end
|
||||
|
||||
def set_package(pkgName, pkgPath)
|
||||
def set_package(pkg_name, pkg_path)
|
||||
begin
|
||||
@pkg = Package.load_package(pkgPath, pkgName)
|
||||
@pkg = Package.load_package(pkg_path, pkg_name)
|
||||
rescue SyntaxError => e
|
||||
warn "#{e.class}: #{e.message}".red
|
||||
end
|
||||
@@ -225,18 +222,18 @@ end
|
||||
|
||||
def list_available
|
||||
Dir["#{CREW_PACKAGES_PATH}/*.rb"].each do |filename|
|
||||
pkgName = File.basename(filename, '.rb')
|
||||
filelist = File.join(CREW_META_PATH, "#{pkgName}.filelist")
|
||||
notInstalled = !File.file?(filelist)
|
||||
pkg_name = File.basename(filename, '.rb')
|
||||
filelist = File.join(CREW_META_PATH, "#{pkg_name}.filelist")
|
||||
not_installed = !File.file?(filelist)
|
||||
|
||||
next unless notInstalled
|
||||
next unless not_installed
|
||||
|
||||
begin
|
||||
set_package pkgName, filename
|
||||
set_package pkg_name, filename
|
||||
rescue StandardError => e
|
||||
puts "Error with #{pkgName}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
puts "Error with #{pkg_name}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
end
|
||||
puts pkgName if @pkg.compatible?
|
||||
puts pkg_name if @pkg.compatible?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -264,17 +261,17 @@ end
|
||||
|
||||
def list_compatible(compat = true)
|
||||
Dir["#{CREW_PACKAGES_PATH}/*.rb"].each do |filename|
|
||||
pkgName = File.basename filename, '.rb'
|
||||
if @device[:compatible_packages].any? { |elem| elem[:name] == pkgName }
|
||||
pkg_name = File.basename filename, '.rb'
|
||||
if @device[:compatible_packages].any? { |elem| elem[:name] == pkg_name }
|
||||
if compat
|
||||
if File.file? "#{CREW_META_PATH}/#{pkgName}.filelist"
|
||||
puts pkgName.lightgreen
|
||||
if File.file? "#{CREW_META_PATH}/#{pkg_name}.filelist"
|
||||
puts pkg_name.lightgreen
|
||||
else
|
||||
puts pkgName
|
||||
puts pkg_name
|
||||
end
|
||||
end
|
||||
elsif !compat
|
||||
puts pkgName.lightred
|
||||
puts pkg_name.lightred
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -283,19 +280,19 @@ def generate_compatible
|
||||
puts 'Generating compatible packages...'.orange if @opt_verbose
|
||||
@device[:compatible_packages] = []
|
||||
Dir["#{CREW_PACKAGES_PATH}/*.rb"].each do |filename|
|
||||
pkgName = File.basename filename, '.rb'
|
||||
pkg_name = File.basename filename, '.rb'
|
||||
begin
|
||||
set_package pkgName, filename
|
||||
set_package pkg_name, filename
|
||||
rescue StandardError => e
|
||||
puts "Error with #{pkgName}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
puts "Error with #{pkg_name}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
end
|
||||
puts "Checking #{pkgName} for compatibility.".orange if @opt_verbose
|
||||
puts "Checking #{pkg_name} for compatibility.".orange if @opt_verbose
|
||||
if @pkg.compatible?
|
||||
# add to compatible packages
|
||||
puts "Adding #{pkgName} #{@pkg.version} to compatible packages.".lightgreen if @opt_verbose
|
||||
puts "Adding #{pkg_name} #{@pkg.version} to compatible packages.".lightgreen if @opt_verbose
|
||||
@device[:compatible_packages].push(name: @pkg.name)
|
||||
elsif @opt_verbose
|
||||
puts "#{pkgName} is not a compatible package.".lightred
|
||||
puts "#{pkg_name} is not a compatible package.".lightred
|
||||
end
|
||||
end
|
||||
File.open(File.join(CREW_CONFIG_PATH, 'device.json'), 'w') do |file|
|
||||
@@ -305,40 +302,40 @@ def generate_compatible
|
||||
puts 'Generating compatible packages done.'.orange if @opt_verbose
|
||||
end
|
||||
|
||||
def search(pkgName, silent = false)
|
||||
pkgPath = File.join(CREW_PACKAGES_PATH, "#{pkgName}.rb")
|
||||
def search(pkg_name, silent = false)
|
||||
pkg_path = File.join(CREW_PACKAGES_PATH, "#{pkg_name}.rb")
|
||||
begin
|
||||
return set_package(pkgName, pkgPath) if File.file?(pkgPath)
|
||||
return set_package(pkg_name, pkg_path) if File.file?(pkg_path)
|
||||
rescue StandardError => e
|
||||
puts "Error with #{pkgName}.rb: #{e}".lightred unless e.to_s.include?('uninitialized constant')
|
||||
puts "Error with #{pkg_name}.rb: #{e}".lightred unless e.to_s.include?('uninitialized constant')
|
||||
end
|
||||
unless File.file?(pkgPath) && silent
|
||||
unless File.file?(pkg_path) && silent
|
||||
@pkg = nil
|
||||
abort "Package #{pkgName} not found. 😞".lightred unless silent
|
||||
abort "Package #{pkg_name} not found. 😞".lightred unless silent
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
def regexp_search(pkgPat)
|
||||
re = Regexp.new(pkgPat, true)
|
||||
def regexp_search(pkg_pat)
|
||||
re = Regexp.new(pkg_pat, true)
|
||||
results = Dir["#{CREW_PACKAGES_PATH}/*.rb"] \
|
||||
.select { |f| File.basename(f, '.rb') =~ re } \
|
||||
.each { |f| print_package(f, @opt_verbose) }
|
||||
if results.empty?
|
||||
Dir["#{CREW_PACKAGES_PATH}/*.rb"].each do |packagePath|
|
||||
packageName = File.basename packagePath, '.rb'
|
||||
Dir["#{CREW_PACKAGES_PATH}/*.rb"].each do |package_path|
|
||||
package_name = File.basename package_path, '.rb'
|
||||
begin
|
||||
set_package packageName, packagePath
|
||||
set_package package_name, package_path
|
||||
rescue StandardError => e
|
||||
puts "Error with #{pkgName}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
puts "Error with #{pkg_name}.rb: #{e}".red unless e.to_s.include?('uninitialized constant')
|
||||
end
|
||||
if @pkg.description =~ /#{pkgPat}/i
|
||||
if @pkg.description =~ /#{pkg_pat}/i
|
||||
print_current_package @opt_verbose
|
||||
results.push(packageName)
|
||||
results.push(package_name)
|
||||
end
|
||||
end
|
||||
end
|
||||
abort "Package #{pkgPat} not found. :(".lightred if results.empty?
|
||||
abort "Package #{pkg_pat} not found. :(".lightred if results.empty?
|
||||
end
|
||||
|
||||
def cache_build
|
||||
@@ -384,9 +381,9 @@ def const(var = nil)
|
||||
end
|
||||
end
|
||||
|
||||
def files(pkgName)
|
||||
local_filelist = File.join(CREW_META_PATH, "#{pkgName}.filelist")
|
||||
manifest_filelist = File.join(CREW_LIB_PATH, "manifest/#{ARCH}/#{pkgName[0]}/#{pkgName}.filelist")
|
||||
def files(pkg_name)
|
||||
local_filelist = File.join(CREW_META_PATH, "#{pkg_name}.filelist")
|
||||
manifest_filelist = File.join(CREW_LIB_PATH, "manifest/#{ARCH}/#{pkg_name[0]}/#{pkg_name}.filelist")
|
||||
|
||||
if File.exist?(local_filelist)
|
||||
# search for local filelist first
|
||||
@@ -396,7 +393,7 @@ def files(pkgName)
|
||||
filelist_path = manifest_filelist
|
||||
else
|
||||
# package does not have any filelist available
|
||||
warn "Package #{pkgName} is not installed. :(".lightred
|
||||
warn "Package #{pkg_name} is not installed. :(".lightred
|
||||
return false
|
||||
end
|
||||
|
||||
@@ -419,7 +416,7 @@ end
|
||||
def prop(silent = false)
|
||||
props = []
|
||||
pkg = Package.new
|
||||
excluded_methods = %w[compatible is_binary is_source json_creatable autoload include const_defined class_variable_defined singleton_class method_defined public_method_defined private_method_defined protected_method_defined instance_variable_defined instance_of kind_of is_a frozen nil eql respond_to equal]
|
||||
excluded_methods = %w[compatible binary source json_creatable autoload include const_defined class_variable_defined singleton_class method_defined public_method_defined private_method_defined protected_method_defined instance_variable_defined instance_of kind_of is_a frozen nil eql respond_to equal]
|
||||
all_methods = pkg.class.methods.grep(/\?$/).to_s.gsub(/([?:,\[\]])/, '').split
|
||||
all_methods.each do |method|
|
||||
props.push(method) unless excluded_methods.include?(method)
|
||||
@@ -432,25 +429,25 @@ def prop(silent = false)
|
||||
end
|
||||
end
|
||||
|
||||
def whatprovides(regexPat)
|
||||
matchedList = `grep -R "#{regexPat}" #{CREW_LIB_PATH}/manifest/#{ARCH}`.lines(chomp: true).flat_map do |result|
|
||||
filelist, matchedFile = result.split(':', 2)
|
||||
pkgName = File.basename(filelist, '.filelist')
|
||||
pkgNameStatus = pkgName
|
||||
if @device[:compatible_packages].any? { |elem| elem[:name] == pkgName }
|
||||
pkgNameStatus = pkgName.lightgreen if File.file? "#{CREW_META_PATH}/#{pkgName}.filelist"
|
||||
def whatprovides(regex_pat)
|
||||
matched_list = `grep -R "#{regex_pat}" #{CREW_LIB_PATH}/manifest/#{ARCH}`.lines(chomp: true).flat_map do |result|
|
||||
filelist, matched_file = result.split(':', 2)
|
||||
pkg_name = File.basename(filelist, '.filelist')
|
||||
pkg_name_status = pkg_name
|
||||
if @device[:compatible_packages].any? { |elem| elem[:name] == pkg_name }
|
||||
pkg_name_status = pkg_name.lightgreen if File.file? "#{CREW_META_PATH}/#{pkg_name}.filelist"
|
||||
else
|
||||
pkgNameStatus = pkgName.lightred
|
||||
pkg_name_status = pkg_name.lightred
|
||||
end
|
||||
|
||||
"#{pkgNameStatus}: #{matchedFile}"
|
||||
"#{pkg_name_status}: #{matched_file}"
|
||||
end.sort
|
||||
|
||||
puts matchedList, "\nTotal found: #{matchedList.length}".lightgreen if matchedList.any?
|
||||
puts matched_list, "\nTotal found: #{matched_list.length}".lightgreen if matched_list.any?
|
||||
end
|
||||
|
||||
def update
|
||||
abort "'crew update' is used to update crew itself. Use 'crew upgrade <package1> [<package2> ...]' to update specific packages.".orange if @pkgName
|
||||
abort "'crew update' is used to update crew itself. Use 'crew upgrade <package1> [<package2> ...]' to update specific packages.".orange if @pkg_name
|
||||
|
||||
# update package lists
|
||||
Dir.chdir(CREW_LIB_PATH) do
|
||||
@@ -472,31 +469,31 @@ def update
|
||||
# check for outdated installed packages
|
||||
puts 'Checking for package updates...'
|
||||
|
||||
canBeUpdated = 0
|
||||
can_be_updated = 0
|
||||
@device[:installed_packages].each do |package|
|
||||
search package[:name], true
|
||||
unless @pkg
|
||||
puts "Package file for #{package[:name]} not found. :(".lightred if @opt_verbose
|
||||
next
|
||||
end
|
||||
differentVersion = (package[:version] != @pkg.version)
|
||||
hasSha = !(@pkg.get_binary_sha256(@device[:architecture]).to_s.empty? || package[:binary_sha256].to_s.empty?)
|
||||
differentSha = hasSha && package[:binary_sha256] != @pkg.get_binary_sha256(@device[:architecture])
|
||||
different_version = (package[:version] != @pkg.version)
|
||||
has_sha = !(@pkg.get_binary_sha256(@device[:architecture]).to_s.empty? || package[:binary_sha256].to_s.empty?)
|
||||
different_sha = has_sha && package[:binary_sha256] != @pkg.get_binary_sha256(@device[:architecture])
|
||||
|
||||
canBeUpdated += 1 if differentVersion || differentSha
|
||||
can_be_updated += 1 if different_version || different_sha
|
||||
|
||||
if differentVersion && !differentSha && hasSha
|
||||
canBeUpdated -= 1
|
||||
if different_version && !different_sha && has_sha
|
||||
can_be_updated -= 1
|
||||
puts "#{@pkg.name} has a version change but does not have updated binaries".yellow
|
||||
elsif differentVersion
|
||||
elsif different_version
|
||||
puts "#{@pkg.name} could be updated from #{package[:version]} to #{@pkg.version}"
|
||||
elsif !differentVersion && differentSha
|
||||
elsif !different_version && different_sha
|
||||
puts "#{@pkg.name} could be updated (rebuild)"
|
||||
end
|
||||
end
|
||||
|
||||
if canBeUpdated.positive?
|
||||
puts "\n#{canBeUpdated} packages can be updated."
|
||||
if can_be_updated.positive?
|
||||
puts "\n#{can_be_updated} packages can be updated."
|
||||
puts 'Run `crew upgrade` to update all packages or `crew upgrade <package1> [<package2> ...]` to update specific packages.'
|
||||
else
|
||||
puts 'Your software is up to date.'.lightgreen
|
||||
@@ -504,42 +501,42 @@ def update
|
||||
end
|
||||
|
||||
def upgrade(*pkgs, build_from_source: false)
|
||||
check_update_avail = lambda do |pkgFile|
|
||||
pkgName = File.basename(pkgFile, '.rb')
|
||||
check_update_avail = lambda do |pkg_file|
|
||||
pkg_name = File.basename(pkg_file, '.rb')
|
||||
|
||||
unless File.file?(pkgFile)
|
||||
warn "Package file for installed package #{pkgName} is missing.".lightred
|
||||
unless File.file?(pkg_file)
|
||||
warn "Package file for installed package #{pkg_name} is missing.".lightred
|
||||
return false
|
||||
end
|
||||
|
||||
pkgs.each do
|
||||
unless @device[:installed_packages].any? { |package| package[:name] == pkgName }
|
||||
puts 'Package '.lightred + pkgName.orange + ' is not installed. 😔 You may try this: '.lightred + "crew install #{pkgName}".lightblue
|
||||
unless @device[:installed_packages].any? { |package| package[:name] == pkg_name }
|
||||
puts 'Package '.lightred + pkg_name.orange + ' is not installed. 😔 You may try this: '.lightred + "crew install #{pkg_name}".lightblue
|
||||
return false
|
||||
end
|
||||
end
|
||||
pkgVer_latest = Package.load_package(pkgFile, pkgName).version
|
||||
pkgVer_installed = @device[:installed_packages].select { |pkg| pkg[:name] == pkgName } [0][:version]
|
||||
pkgHash_latest = Package.load_package(pkgFile, pkgName).get_binary_sha256(@device[:architecture])
|
||||
pkgHash_installed = @device[:installed_packages].select { |pkg| pkg[:name] == pkgName } [0][:binary_sha256]
|
||||
pkg_ver_latest = Package.load_package(pkg_file, pkg_name).version
|
||||
pkg_ver_installed = @device[:installed_packages].select { |pkg| pkg[:name] == pkg_name } [0][:version]
|
||||
pkg_hash_latest = Package.load_package(pkg_file, pkg_name).get_binary_sha256(@device[:architecture])
|
||||
pkg_hash_installed = @device[:installed_packages].select { |pkg| pkg[:name] == pkg_name } [0][:binary_sha256]
|
||||
|
||||
return pkgHash_latest != pkgHash_installed unless !pkgHash_installed || pkgHash_latest == ''
|
||||
return pkgVer_latest != pkgVer_installed
|
||||
return pkg_hash_latest != pkg_hash_installed unless !pkg_hash_installed || pkg_hash_latest == ''
|
||||
return pkg_ver_latest != pkg_ver_installed
|
||||
end
|
||||
|
||||
to_be_upgraded = []
|
||||
|
||||
if pkgs.any?
|
||||
# check for specific package(s)
|
||||
pkgs.each do |pkgName|
|
||||
pkgFile = File.join(CREW_PACKAGES_PATH, "#{pkgName}.rb")
|
||||
to_be_upgraded << pkgName if check_update_avail.call(pkgFile)
|
||||
pkgs.each do |pkg_name|
|
||||
pkg_file = File.join(CREW_PACKAGES_PATH, "#{pkg_name}.rb")
|
||||
to_be_upgraded << pkg_name if check_update_avail.call(pkg_file)
|
||||
end
|
||||
else
|
||||
# check for all packages if no package name provided
|
||||
@device[:installed_packages].each do |pkg|
|
||||
pkgFile = File.join(CREW_PACKAGES_PATH, "#{pkg[:name]}.rb")
|
||||
to_be_upgraded << pkg[:name] if check_update_avail.call(pkgFile)
|
||||
pkg_file = File.join(CREW_PACKAGES_PATH, "#{pkg[:name]}.rb")
|
||||
to_be_upgraded << pkg[:name] if check_update_avail.call(pkg_file)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -566,16 +563,16 @@ def upgrade(*pkgs, build_from_source: false)
|
||||
end
|
||||
|
||||
# install new dependencies (if any)
|
||||
to_be_upgraded.each do |pkgName|
|
||||
search(pkgName)
|
||||
to_be_upgraded.each do |pkg_name|
|
||||
search(pkg_name)
|
||||
resolve_dependencies
|
||||
end
|
||||
|
||||
puts 'Updating packages...'
|
||||
|
||||
# upgrade packages
|
||||
to_be_upgraded.each do |pkgName|
|
||||
search(pkgName)
|
||||
to_be_upgraded.each do |pkg_name|
|
||||
search(pkg_name)
|
||||
print_current_package
|
||||
@pkg.build_from_source = (build_from_source || CREW_BUILD_FROM_SOURCE)
|
||||
|
||||
@@ -591,7 +588,7 @@ end
|
||||
|
||||
def download
|
||||
url = @pkg.get_url(@device[:architecture])
|
||||
source = @pkg.is_source?(@device[:architecture])
|
||||
source = @pkg.source?(@device[:architecture])
|
||||
|
||||
uri = URI.parse url
|
||||
filename = File.basename(uri.path)
|
||||
@@ -832,7 +829,7 @@ def build_and_preconfigure(target_dir)
|
||||
|
||||
begin
|
||||
@pkg.build
|
||||
rescue StandardError => e
|
||||
rescue StandardError
|
||||
if CREW_CACHE_FAILED_BUILD
|
||||
cache_build
|
||||
abort 'There was a build error, caching build directory.'.lightred
|
||||
@@ -1029,6 +1026,8 @@ def patchelf_set_need_paths(dir)
|
||||
puts 'Patchelf is currently disabled during builds due to problems with upx.'.yellow
|
||||
return
|
||||
|
||||
# Disable unreachable code check, as this is a temporary situation
|
||||
# rubocop:disable Lint/UnreachableCode
|
||||
Dir.chdir dir do
|
||||
puts 'Running patchelf'.lightblue
|
||||
abort('No Patchelf found!').lightred unless File.file?("#{CREW_PREFIX}/bin/patchelf")
|
||||
@@ -1079,6 +1078,7 @@ def patchelf_set_need_paths(dir)
|
||||
system "patchelf --set-interpreter #{patchelf_interpreter} #{execfiletopatch}"
|
||||
end
|
||||
end
|
||||
# rubocop:enable Lint/UnreachableCode
|
||||
end
|
||||
|
||||
def strip_find_files(find_cmd, strip_option = '')
|
||||
@@ -1225,12 +1225,10 @@ def install_package(pkgdir)
|
||||
FileUtils.mv 'filelist', File.join(CREW_META_PATH, "#{@pkg.name}.filelist"), verbose: @fileutils_verbose
|
||||
|
||||
unless CREW_NOT_LINKS || @pkg.no_links?
|
||||
brokensymlinks = nil
|
||||
brokensymlinks = `find . -type l -exec test ! -e {} \\; -print`.chomp
|
||||
unless brokensymlinks.to_s.empty?
|
||||
puts 'There are broken symlinks. Will try to fix.'.orange if @opt_verbose
|
||||
brokensymlinks.each_line(chomp: true) do |fixlink|
|
||||
brokentarget = fixedtarget = nil
|
||||
brokentarget = `readlink -n #{fixlink}`.chomp
|
||||
puts "Attempting fix of: #{fixlink.delete_prefix('.')} -> #{brokentarget}".orange if @opt_verbose
|
||||
fixedtarget = brokentarget.delete_prefix(CREW_DEST_DIR)
|
||||
@@ -1308,14 +1306,14 @@ def resolve_dependencies
|
||||
|
||||
# compare dependency version with required range (if installed)
|
||||
@dependencies.each do |dep|
|
||||
depName = dep.keys[0]
|
||||
dep_info = @device[:installed_packages].select {|pkg| pkg[:name] == depName } [0]
|
||||
dep_name = dep.keys[0]
|
||||
dep_info = @device[:installed_packages].select {|pkg| pkg[:name] == dep_name } [0]
|
||||
|
||||
# skip if dependency is not installed
|
||||
next unless dep_info
|
||||
|
||||
tags, version_check = dep.values[0]
|
||||
installed_version = dep_info[:version]
|
||||
_tags, version_check = dep.values[0]
|
||||
installed_version = dep_info[:version]
|
||||
|
||||
next unless version_check
|
||||
|
||||
@@ -1327,12 +1325,12 @@ def resolve_dependencies
|
||||
@dependencies.map!(&:keys).flatten!
|
||||
|
||||
# leave only not installed packages in dependencies
|
||||
@dependencies.reject! { |depName| @device[:installed_packages].any? { |pkg| pkg[:name] == depName } }
|
||||
@dependencies.reject! { |dep_name| @device[:installed_packages].any? { |pkg| pkg[:name] == dep_name } }
|
||||
|
||||
# run preflight check for dependencies
|
||||
@dependencies.each do |depName|
|
||||
dep_pkgPath = File.join(CREW_PACKAGES_PATH, "#{depName}.rb")
|
||||
Package.load_package(dep_pkgPath, depName).preflight
|
||||
@dependencies.each do |dep_name|
|
||||
dep_pkg_path = File.join(CREW_PACKAGES_PATH, "#{dep_name}.rb")
|
||||
Package.load_package(dep_pkg_path, dep_name).preflight
|
||||
end
|
||||
|
||||
return if @dependencies.empty?
|
||||
@@ -1517,27 +1515,27 @@ def archive_package(crew_archive_dest)
|
||||
system "sha256sum #{crew_archive_dest}/#{pkg_name} > #{crew_archive_dest}/#{pkg_name}.sha256"
|
||||
# Copy package file for the successfully generated package to CREW_LOCAL_REPO_ROOT only if force is set.
|
||||
if @opt_force
|
||||
FileUtils.cp "#{CREW_PACKAGES_PATH}/#{@pkgName}.rb", "#{CREW_LOCAL_REPO_ROOT}/packages/"
|
||||
puts "The package file for #{@pkgName} used has been copied to #{CREW_LOCAL_REPO_ROOT}/packages/".lightblue
|
||||
FileUtils.cp "#{CREW_PACKAGES_PATH}/#{@pkg_name}.rb", "#{CREW_LOCAL_REPO_ROOT}/packages/"
|
||||
puts "The package file for #{@pkg_name} used has been copied to #{CREW_LOCAL_REPO_ROOT}/packages/".lightblue
|
||||
if @device[:installed_packages].any? { |pkg| pkg[:name] == @pkg.name }
|
||||
puts "#{@pkgName} will now be upgraded...".lightblue
|
||||
puts "#{@pkg_name} will now be upgraded...".lightblue
|
||||
system "crew reinstall #{@pkg.name}"
|
||||
else
|
||||
puts "#{@pkgName} will now be installed...".lightblue
|
||||
puts "#{@pkg_name} will now be installed...".lightblue
|
||||
system "crew install #{@pkg.name}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def remove(pkgName)
|
||||
def remove(pkg_name)
|
||||
# make sure the package is actually installed
|
||||
unless @device[:installed_packages].any? { |pkg| pkg[:name] == pkgName } || File.file?(File.join(CREW_META_PATH, "#{pkgName}.filelist"))
|
||||
puts "Package #{pkgName} isn't installed.".lightred
|
||||
unless @device[:installed_packages].any? { |pkg| pkg[:name] == pkg_name } || File.file?(File.join(CREW_META_PATH, "#{pkg_name}.filelist"))
|
||||
puts "Package #{pkg_name} isn't installed.".lightred
|
||||
return
|
||||
end
|
||||
|
||||
# Perform any operations required prior to package removal.
|
||||
search pkgName, true
|
||||
search pkg_name, true
|
||||
@pkg.preremove unless @in_fixup
|
||||
|
||||
# Preserve CREW_ESSENTIAL_FILES and make sure they are real files
|
||||
@@ -1553,13 +1551,13 @@ def remove(pkgName)
|
||||
end
|
||||
end
|
||||
|
||||
conflicts = determine_conflicts(Dir.pwd, pkgName)
|
||||
conflicts = determine_conflicts(Dir.pwd, pkg_name)
|
||||
|
||||
# if the filelist exists, remove the files and directories installed by the package
|
||||
if File.file?(File.join(CREW_META_PATH, "#{pkgName}.filelist"))
|
||||
if File.file?(File.join(CREW_META_PATH, "#{pkg_name}.filelist"))
|
||||
Dir.chdir CREW_CONFIG_PATH do
|
||||
# remove all files installed by the package
|
||||
File.foreach("meta/#{pkgName}.filelist", chomp: true) do |line|
|
||||
File.foreach("meta/#{pkg_name}.filelist", chomp: true) do |line|
|
||||
# Do not remove essential files which crew (and dependencies)
|
||||
# rely on, especially during package upgrades or reinstalls.
|
||||
# These essential files are enumerated in const.rb as
|
||||
@@ -1571,7 +1569,7 @@ def remove(pkgName)
|
||||
puts "filelist contains #{line}".lightred if @opt_verbose && !line.include?(CREW_PREFIX)
|
||||
if line.start_with?(CREW_PREFIX)
|
||||
if conflicts.include?(line)
|
||||
puts "#{line} is in another package. It will not be removed during the removal of #{pkgName}".orange
|
||||
puts "#{line} is in another package. It will not be removed during the removal of #{pkg_name}".orange
|
||||
else
|
||||
FileUtils.rm_rf line
|
||||
end
|
||||
@@ -1580,7 +1578,7 @@ def remove(pkgName)
|
||||
end
|
||||
|
||||
# remove all directories installed by the package
|
||||
File.foreach("meta/#{pkgName}.directorylist", chomp: true) do |line|
|
||||
File.foreach("meta/#{pkg_name}.directorylist", chomp: true) do |line|
|
||||
puts "directorylist contains #{line}".lightred if @opt_verbose && !line.include?(CREW_PREFIX)
|
||||
next unless Dir.exist?(line) && Dir.empty?(line) && line.include?(CREW_PREFIX)
|
||||
|
||||
@@ -1589,46 +1587,46 @@ def remove(pkgName)
|
||||
end
|
||||
|
||||
# remove the file and directory list
|
||||
FileUtils.rm_f Dir["meta/#{pkgName}.{file,directory}list"]
|
||||
FileUtils.rm_f Dir["meta/#{pkg_name}.{file,directory}list"]
|
||||
end
|
||||
end
|
||||
|
||||
# remove from installed packages
|
||||
puts "Removing package #{pkgName}".lightred if @opt_verbose
|
||||
@device[:installed_packages].delete_if { |elem| elem[:name] == pkgName }
|
||||
puts "Removing package #{pkg_name}".lightred if @opt_verbose
|
||||
@device[:installed_packages].delete_if { |elem| elem[:name] == pkg_name }
|
||||
|
||||
# update the device manifest
|
||||
File.write "#{CREW_CONFIG_PATH}/device.json", JSON.pretty_generate(JSON.parse(@device.to_json))
|
||||
|
||||
search pkgName, true
|
||||
search pkg_name, true
|
||||
@pkg.remove unless @in_fixup
|
||||
|
||||
puts "#{pkgName.capitalize} removed!".lightgreen
|
||||
puts "#{pkg_name.capitalize} removed!".lightgreen
|
||||
end
|
||||
|
||||
def print_deps_tree(args)
|
||||
warn 'Walking through dependencies recursively, this may take a while...', ''
|
||||
|
||||
# depHash: Hash object returned by @pkg.get_deps_list
|
||||
depHash = @pkg.get_deps_list(hash: true, include_build_deps: args['--include-build-deps'] || 'auto', exclude_buildessential: args['--exclude-buildessential'])
|
||||
# dep_hash: Hash object returned by @pkg.get_deps_list
|
||||
dep_hash = @pkg.get_deps_list(hash: true, include_build_deps: args['--include-build-deps'] || 'auto', exclude_buildessential: args['--exclude-buildessential'])
|
||||
|
||||
# convert returned hash to json and format it
|
||||
jsonView = JSON.pretty_generate(depHash)
|
||||
json_view = JSON.pretty_generate(dep_hash)
|
||||
|
||||
# convert formatted json string to tree structure
|
||||
treeView = jsonView.gsub(/\{\s*/m, '└─────').gsub(/[\[\]{},":]/, '').gsub(/^\s*$\n/, '').gsub(/\s*$/, '')
|
||||
tree_view = json_view.gsub(/\{\s*/m, '└─────').gsub(/[\[\]{},":]/, '').gsub(/^\s*$\n/, '').gsub(/\s*$/, '')
|
||||
|
||||
# add pipe char to connect endpoints and starting points, improve readability
|
||||
# find the horizontal location of all arrow symbols
|
||||
index_with_pipe_char = treeView.lines.map { |line| line.index('└') }.compact.uniq
|
||||
index_with_pipe_char = tree_view.lines.map { |line| line.index('└') }.compact.uniq
|
||||
|
||||
# determine whatever a pipe char should be added according to the horizontal location of arrow symbols
|
||||
treeView = treeView.lines.each_with_index.map do |line, line_i|
|
||||
tree_view = tree_view.lines.each_with_index.map do |line, line_i|
|
||||
index_with_pipe_char.each do |char_i|
|
||||
# check if there have any non-space char (pkgNames) between starting point ([line_i][char_i]) and endpoint vertically ([next_arrow_line_offset][char_i])
|
||||
# check if there have any non-space char (pkg_names) between starting point ([line_i][char_i]) and endpoint vertically ([next_arrow_line_offset][char_i])
|
||||
# (used to determine if the starting point and endpoint are in same branch, use pipe char to connect them if true)
|
||||
next_arrow_line_offset = treeView.lines[line_i..].index { |l| l[char_i] == '└' }
|
||||
have_line_with_non_empty_char = treeView.lines[line_i + 1..line_i + next_arrow_line_offset.to_i - 1].any? { |l| l[char_i].nil? or l[char_i] =~ /\S/ }
|
||||
next_arrow_line_offset = tree_view.lines[line_i..].index { |l| l[char_i] == '└' }
|
||||
have_line_with_non_empty_char = tree_view.lines[line_i + 1..line_i + next_arrow_line_offset.to_i - 1].any? { |l| l[char_i].nil? or l[char_i] =~ /\S/ }
|
||||
|
||||
line[char_i] = '│' if next_arrow_line_offset && (line[char_i] == ' ') && !have_line_with_non_empty_char
|
||||
end
|
||||
@@ -1636,7 +1634,7 @@ def print_deps_tree(args)
|
||||
end.join
|
||||
|
||||
# replace arrow symbols with a tee symbol on branch intersection
|
||||
treeView = treeView.lines.each_with_index.map do |line, line_i|
|
||||
tree_view = tree_view.lines.each_with_index.map do |line, line_i|
|
||||
# orig_arrow_index_connecter: the horizontal location of the arrow symbol used to connect parent branch
|
||||
#
|
||||
# example:
|
||||
@@ -1659,9 +1657,9 @@ def print_deps_tree(args)
|
||||
orig_arrow_index_newbranch = orig_arrow_index_connecter + 4
|
||||
|
||||
# if the char under the processing arrow symbol (orig_arrow_index_connecter) is also arrow or pipe, change the processing char to tee symbol
|
||||
line[orig_arrow_index_connecter] = '├' if orig_arrow_index_connecter && treeView.lines[line_i + 1].to_s[orig_arrow_index_connecter] =~ (/[└│]/)
|
||||
line[orig_arrow_index_connecter] = '├' if orig_arrow_index_connecter && tree_view.lines[line_i + 1].to_s[orig_arrow_index_connecter] =~ (/[└│]/)
|
||||
# if the char under the processing arrow symbol (orig_arrow_index_newbranch) is also arrow or pipe, change the processing char to tee symbol
|
||||
line[orig_arrow_index_newbranch] = '┬' if orig_arrow_index_newbranch && treeView.lines[line_i + 1].to_s[orig_arrow_index_newbranch] =~ (/[└├]/)
|
||||
line[orig_arrow_index_newbranch] = '┬' if orig_arrow_index_newbranch && tree_view.lines[line_i + 1].to_s[orig_arrow_index_newbranch] =~ (/[└├]/)
|
||||
next line # return modified line
|
||||
end.join
|
||||
|
||||
@@ -1674,22 +1672,22 @@ def print_deps_tree(args)
|
||||
# (the first string in each #{} is used for commenting only, will not be included in output)
|
||||
|
||||
# replace special symbols returned by @pkg.get_deps_list to actual color code
|
||||
treeView.gsub!(/\*(.+)\*/, '\1'.lightcyan)
|
||||
treeView.gsub!(/\+(.+)\+/, "\e[45m\\1\e[0m")
|
||||
tree_view.gsub!(/\*(.+)\*/, '\1'.lightcyan)
|
||||
tree_view.gsub!(/\+(.+)\+/, "\e[45m\\1\e[0m")
|
||||
end
|
||||
|
||||
puts treeView
|
||||
puts tree_view
|
||||
end
|
||||
|
||||
def upload(pkgName = nil)
|
||||
def upload(pkg_name = nil)
|
||||
abort "\nGITLAB_TOKEN environment variable not set.\n".lightred if ENV.fetch('GITLAB_TOKEN', nil).nil?
|
||||
|
||||
packages = pkgName
|
||||
packages = pkg_name
|
||||
binary_compression_set = nil
|
||||
gitlab_token = ENV.fetch('GITLAB_TOKEN', nil)
|
||||
base_url = 'https://gitlab.com/api/v4/projects/26210301/packages/generic'
|
||||
|
||||
if pkgName.nil?
|
||||
if pkg_name.nil?
|
||||
%w[.tar.xz .tar.zst].each do |ext|
|
||||
packages += `find #{CREW_LOCAL_REPO_ROOT}/release/*/*#{ext} -exec basename -s #{ext} {} + | cut -d- -f1 | sort | uniq | xargs`
|
||||
packages += ' '
|
||||
@@ -1827,27 +1825,27 @@ def build_command(args)
|
||||
# If a package file is explicitly passed, then use that package file, whereever it is.
|
||||
if name.include?('.rb') && File.file?(name)
|
||||
FileUtils.cp name, "#{CREW_PACKAGES_PATH}/"
|
||||
@pkgName = File.basename(name).gsub('.rb', '')
|
||||
@pkg_name = File.basename(name).gsub('.rb', '')
|
||||
else
|
||||
@pkgName = name
|
||||
@pkg_name = name
|
||||
end
|
||||
|
||||
# Prompt to copy the local repo package to crew if the package is not found.
|
||||
if !File.file?("#{CREW_PACKAGES_PATH}/#{@pkgName}.rb") && File.file?("#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb")
|
||||
if !File.file?("#{CREW_PACKAGES_PATH}/#{@pkg_name}.rb") && File.file?("#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb")
|
||||
if @opt_force
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
else
|
||||
puts "\n#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb exists but crew is unable to find this package.".yellow
|
||||
print "\nWould you like to copy #{@pkgName}.rb to crew and start the build [Y/n] ".yellow
|
||||
puts "\n#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb exists but crew is unable to find this package.".yellow
|
||||
print "\nWould you like to copy #{@pkg_name}.rb to crew and start the build [Y/n] ".yellow
|
||||
response = $stdin.gets.chomp.downcase
|
||||
case response
|
||||
when 'n', 'no'
|
||||
puts 'Build skipped.'
|
||||
next
|
||||
when '', 'y', 'yes'
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
else
|
||||
puts "I don't understand `#{response}`. :(".lightred
|
||||
puts 'Build skipped.'
|
||||
@@ -1859,27 +1857,27 @@ def build_command(args)
|
||||
# Compare local repo package to the crew repo package and prompt to copy if necessary to prepare for the build.
|
||||
crew_package_updated = ''
|
||||
Dir.chdir CREW_PACKAGES_PATH do
|
||||
crew_package_updated = `git diff #{CREW_PACKAGES_PATH}/#{@pkgName}.rb`.chomp
|
||||
crew_package_updated = `git diff #{CREW_PACKAGES_PATH}/#{@pkg_name}.rb`.chomp
|
||||
end
|
||||
local_package_updated = ''
|
||||
Dir.chdir CREW_LOCAL_REPO_ROOT do
|
||||
local_package_updated = `git diff #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb`.chomp
|
||||
local_package_updated = `git diff #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb`.chomp
|
||||
end
|
||||
if local_package_updated != '' && crew_package_updated == ''
|
||||
if @opt_force
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
else
|
||||
puts "\n#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb has been updated but the crew package is unchanged.".yellow
|
||||
print "\nWould you like to copy #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to crew and start the build [Y/n] ".yellow
|
||||
puts "\n#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb has been updated but the crew package is unchanged.".yellow
|
||||
print "\nWould you like to copy #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to crew and start the build [Y/n] ".yellow
|
||||
response = $stdin.gets.chomp.downcase
|
||||
case response
|
||||
when 'n', 'no'
|
||||
puts 'Build skipped.'
|
||||
next
|
||||
when '', 'y', 'yes'
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
else
|
||||
puts "I don't understand `#{response}`. :(".lightred
|
||||
puts 'Build skipped.'
|
||||
@@ -1889,19 +1887,19 @@ def build_command(args)
|
||||
end
|
||||
if local_package_updated != '' && crew_package_updated != '' && local_package_updated != crew_package_updated
|
||||
if @opt_force
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
else
|
||||
puts "\n#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb has been updated and does not match the crew updated package.".yellow
|
||||
print "\nWould you like to copy #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to crew and start the build [Y/n] ".yellow
|
||||
puts "\n#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb has been updated and does not match the crew updated package.".yellow
|
||||
print "\nWould you like to copy #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to crew and start the build [Y/n] ".yellow
|
||||
response = $stdin.gets.chomp.downcase
|
||||
case response
|
||||
when 'n', 'no'
|
||||
puts 'Build skipped.'
|
||||
next
|
||||
when '', 'y', 'yes'
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkgName}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
FileUtils.cp "#{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb", "#{CREW_PACKAGES_PATH}/"
|
||||
puts "\nCopied #{CREW_LOCAL_REPO_ROOT}/packages/#{@pkg_name}.rb to #{CREW_PACKAGES_PATH}.\n".lightgreen
|
||||
else
|
||||
puts "I don't understand `#{response}`. :(".lightred
|
||||
puts 'Build skipped.'
|
||||
@@ -1910,19 +1908,19 @@ def build_command(args)
|
||||
end
|
||||
end
|
||||
|
||||
search @pkgName
|
||||
search @pkg_name
|
||||
print_current_package @opt_verbose
|
||||
next unless @pkgName
|
||||
next unless @pkg_name
|
||||
|
||||
# Process preflight block to see if package should be built
|
||||
pre_flight
|
||||
|
||||
if !@pkg.is_fake? && @pkg.compatible? && @pkg.is_source?(ARCH) && @pkg.source_url.to_s.upcase != 'SKIP' && !@pkg.no_compile_needed?
|
||||
if !@pkg.is_fake? && @pkg.compatible? && @pkg.source?(ARCH) && @pkg.source_url.to_s.upcase != 'SKIP' && !@pkg.no_compile_needed?
|
||||
resolve_dependencies_and_build
|
||||
else
|
||||
puts 'Unable to build a fake package. Skipping build.'.lightred if @pkg.is_fake?
|
||||
puts "Package #{@pkg.name} is not compatible with your device architecture (#{ARCH}). Skipping build.".lightred unless @pkg.compatible?
|
||||
puts 'Unable to build without source. Skipping build.'.lightred unless @pkg.is_source?(ARCH) && @pkg.source_url.to_s.upcase != 'SKIP'
|
||||
puts 'Unable to build without source. Skipping build.'.lightred unless @pkg.source?(ARCH) && @pkg.source_url.to_s.upcase != 'SKIP'
|
||||
puts 'Compile not needed. Skipping build.'.lightred if @pkg.no_compile_needed?
|
||||
end
|
||||
end
|
||||
@@ -1941,8 +1939,8 @@ end
|
||||
|
||||
def deps_command(args)
|
||||
args['<name>'].each do |name|
|
||||
@pkgName = name
|
||||
search @pkgName
|
||||
@pkg_name = name
|
||||
search @pkg_name
|
||||
|
||||
if args['--tree']
|
||||
# call `print_deps_tree` (print dependency tree) if --tree is specified
|
||||
@@ -1958,8 +1956,8 @@ end
|
||||
|
||||
def download_command(args)
|
||||
args['<name>'].each do |name|
|
||||
@pkgName = name
|
||||
search @pkgName
|
||||
@pkg_name = name
|
||||
search @pkg_name
|
||||
@pkg.build_from_source = true if @opt_source
|
||||
print_current_package @opt_verbose
|
||||
download
|
||||
@@ -1968,8 +1966,8 @@ end
|
||||
|
||||
def files_command(args)
|
||||
args['<name>'].each do |name|
|
||||
@pkgName = name
|
||||
search @pkgName
|
||||
@pkg_name = name
|
||||
search @pkg_name
|
||||
print_current_package
|
||||
files name
|
||||
end
|
||||
@@ -1981,11 +1979,11 @@ end
|
||||
|
||||
def install_command(args)
|
||||
args['<name>'].each do |name|
|
||||
@pkgName = name
|
||||
search @pkgName
|
||||
@pkg_name = name
|
||||
search @pkg_name
|
||||
print_current_package true
|
||||
@pkg.build_from_source = true if @opt_source || @opt_recursive || CREW_BUILD_FROM_SOURCE
|
||||
next unless @pkgName
|
||||
next unless @pkg_name
|
||||
|
||||
if @pkg.compatible?
|
||||
resolve_dependencies_and_install
|
||||
@@ -2009,12 +2007,12 @@ end
|
||||
|
||||
def postinstall_command(args)
|
||||
args['<name>'].each do |name|
|
||||
@pkgName = name
|
||||
search @pkgName, true
|
||||
if @device[:installed_packages].any? { |elem| elem[:name] == @pkgName }
|
||||
@pkg_name = name
|
||||
search @pkg_name, true
|
||||
if @device[:installed_packages].any? { |elem| elem[:name] == @pkg_name }
|
||||
@pkg.postinstall
|
||||
else
|
||||
puts "Package #{@pkgName} is not installed. :(".lightred
|
||||
puts "Package #{@pkg_name} is not installed. :(".lightred
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -2025,11 +2023,11 @@ end
|
||||
|
||||
def reinstall_command(args)
|
||||
args['<name>'].each do |name|
|
||||
@pkgName = name
|
||||
search @pkgName
|
||||
@pkg_name = name
|
||||
search @pkg_name
|
||||
print_current_package
|
||||
@pkg.build_from_source = true if @opt_source || @opt_recursive || CREW_BUILD_FROM_SOURCE
|
||||
next unless @pkgName
|
||||
next unless @pkg_name
|
||||
|
||||
if @pkg.compatible?
|
||||
@pkg.in_upgrade = true
|
||||
@@ -2118,7 +2116,7 @@ def whatprovides_command(args)
|
||||
end
|
||||
end
|
||||
|
||||
def is_command(name) = !!!name[/^[-<]/]
|
||||
def command?(name) = !!!name[/^[-<]/]
|
||||
|
||||
Signal.trap('INT') do
|
||||
if CREW_CACHE_FAILED_BUILD && CREW_CACHE_ENABLED && @pkg.in_build
|
||||
@@ -2131,5 +2129,5 @@ Signal.trap('INT') do
|
||||
end
|
||||
|
||||
load_json
|
||||
command_name = args.select { |k, v| v && is_command(k) }.keys[0]
|
||||
command_name = args.select { |k, v| v && command?(k) }.keys[0]
|
||||
send("#{command_name}_command", args)
|
||||
|
||||
22
lib/const.rb
22
lib/const.rb
@@ -72,18 +72,16 @@ CREW_IS_AMD = CREW_CPU_VENDOR.eql?('AuthenticAMD')
|
||||
CREW_IS_INTEL = %w[x86_64 i686].include?(ARCH) && %w[unknown GenuineIntel].include?(CREW_CPU_VENDOR)
|
||||
|
||||
# Use sane minimal defaults if in container and no override specified.
|
||||
if CREW_IN_CONTAINER && ENV['CREW_KERNEL_VERSION'].nil?
|
||||
case ARCH
|
||||
when 'i686'
|
||||
CREW_KERNEL_VERSION = '3.8'
|
||||
when 'aarch64', 'armv7l'
|
||||
CREW_KERNEL_VERSION = '5.10'
|
||||
when 'x86_64'
|
||||
CREW_KERNEL_VERSION = '5.10'
|
||||
end
|
||||
else
|
||||
CREW_KERNEL_VERSION = ENV.fetch('CREW_KERNEL_VERSION', `uname -r`.rpartition('.')[0])
|
||||
end
|
||||
CREW_KERNEL_VERSION = if CREW_IN_CONTAINER && ENV['CREW_KERNEL_VERSION'].nil?
|
||||
case ARCH
|
||||
when 'i686'
|
||||
'3.8'
|
||||
else
|
||||
'5.10'
|
||||
end
|
||||
else
|
||||
ENV.fetch('CREW_KERNEL_VERSION', `uname -r`.rpartition('.')[0])
|
||||
end
|
||||
|
||||
CREW_LIB_PREFIX = File.join(CREW_PREFIX, ARCH_LIB)
|
||||
CREW_MAN_PREFIX = File.join(CREW_PREFIX, 'share/man')
|
||||
|
||||
@@ -11,25 +11,25 @@ module DebUtils
|
||||
# extract_deb('example.deb', /*/) # extract all files from example.deb
|
||||
#
|
||||
file_found = false
|
||||
src_fileIO = File.open(file, 'rb')
|
||||
file_size = src_fileIO.size
|
||||
src_file_io = File.open(file, 'rb')
|
||||
file_size = src_file_io.size
|
||||
# get first line of the given file, should be a signature string (`!<arch>\n`) if it is a valid deb file
|
||||
signature = src_fileIO.gets
|
||||
signature = src_file_io.gets
|
||||
|
||||
abort 'Malformed archive :/'.lightred unless signature == "!<arch>\n"
|
||||
|
||||
# process each file in archive
|
||||
while (line = src_fileIO.gets)
|
||||
if line.chomp.empty? && (file_size == src_fileIO.tell)
|
||||
while (line = src_file_io.gets)
|
||||
if line.chomp.empty? && (file_size == src_file_io.tell)
|
||||
# early return if trailing newline is detected
|
||||
break
|
||||
elsif line.chomp.empty?
|
||||
warn "Unexpected newline in offset #{src_fileIO.tell}, ignoring...".yellow
|
||||
warn "Unexpected newline in offset #{src_file_io.tell}, ignoring...".yellow
|
||||
next
|
||||
end
|
||||
|
||||
# read file meta
|
||||
name, modtime, uid, gid, mode, size, end_char = \
|
||||
name, _modtime, _uid, _gid, mode, size, end_char = \
|
||||
line.scan(/(.{16})(.{12})(.{6})(.{6})(.{8})(.{10})(.{1})/).flatten.map(&:strip)
|
||||
|
||||
# remove slash suffix from filename (if any)
|
||||
@@ -40,18 +40,18 @@ module DebUtils
|
||||
abort 'Malformed archive :/'.lightred unless end_char == '`'
|
||||
|
||||
# capture file in archive with given offset bytes (file size)
|
||||
fileContent = src_fileIO.read(size.to_i)
|
||||
file_content = src_file_io.read(size.to_i)
|
||||
|
||||
# filter filename if a target file is specified
|
||||
if target.is_a?(String) && (name == target)
|
||||
# if target is passed as string, write matched file to filesyetem and exit function
|
||||
# write to filesystem
|
||||
return File.binwrite(name, fileContent, perm: mode.to_i(8))
|
||||
return File.binwrite(name, file_content, perm: mode.to_i(8))
|
||||
elsif target.is_a?(Regexp) && name =~ (target)
|
||||
# if target is passed as regex, write matched file to filesyetem and continue
|
||||
# searching for another matched file until EOF
|
||||
# write to filesystem
|
||||
File.binwrite(name, fileContent, perm: mode.to_i(8))
|
||||
File.binwrite(name, file_content, perm: mode.to_i(8))
|
||||
file_found = true
|
||||
end
|
||||
end
|
||||
|
||||
@@ -93,6 +93,7 @@ def http_downloader(uri, filename = File.basename(url), verbose = false)
|
||||
http.request(Net::HTTP::Get.new(uri)) do |response|
|
||||
case
|
||||
when response.is_a?(Net::HTTPSuccess)
|
||||
# Response is successful, don't abort
|
||||
when response.is_a?(Net::HTTPRedirection) # follow HTTP redirection
|
||||
puts <<~EOT if verbose
|
||||
* Follow HTTP redirection: #{response['Location']}
|
||||
|
||||
@@ -102,7 +102,7 @@ pkg_update_arr.each do |pkg|
|
||||
# Ok to write working device.json
|
||||
File.write "#{CREW_CONFIG_PATH}/device.json", JSON.pretty_generate(JSON.parse(@device.to_json))
|
||||
puts "#{pkg[:pkg_name].capitalize} renamed to #{pkg[:pkg_rename].capitalize}".lightgreen
|
||||
rescue StandardError => e
|
||||
rescue StandardError
|
||||
puts 'Restoring old filelist, directorylist, and device.json...'.lightred
|
||||
FileUtils.mv new_filelist, old_filelist
|
||||
FileUtils.mv new_directorylist, old_directorylist
|
||||
|
||||
@@ -30,20 +30,20 @@ class Package
|
||||
attr_accessor :name, :cached_build, :in_build, :build_from_source, :in_upgrade
|
||||
end
|
||||
|
||||
def self.load_package(pkgFile, pkgName = File.basename(pkgFile, '.rb'))
|
||||
def self.load_package(pkg_file, pkg_name = File.basename(pkg_file, '.rb'))
|
||||
# self.load_package: load a package under 'Package' class scope
|
||||
#
|
||||
className = pkgName.capitalize
|
||||
class_name = pkg_name.capitalize
|
||||
|
||||
# read and eval package script under 'Package' class
|
||||
class_eval(File.read(pkgFile, encoding: Encoding::UTF_8), pkgFile) unless const_defined?("Package::#{className}")
|
||||
class_eval(File.read(pkg_file, encoding: Encoding::UTF_8), pkg_file) unless const_defined?("Package::#{class_name}")
|
||||
|
||||
pkgObj = const_get(className)
|
||||
pkgObj.name = pkgName
|
||||
pkg_obj = const_get(class_name)
|
||||
pkg_obj.name = pkg_name
|
||||
|
||||
@crew_current_package = @crew_current_package.nil? ? pkgObj.name : @crew_current_package
|
||||
@crew_current_package = @crew_current_package.nil? ? pkg_obj.name : @crew_current_package
|
||||
|
||||
return pkgObj
|
||||
return pkg_obj
|
||||
end
|
||||
|
||||
def self.dependencies
|
||||
@@ -53,11 +53,11 @@ class Package
|
||||
@dependencies ||= {}
|
||||
end
|
||||
|
||||
def self.get_deps_list(pkgName = name, return_attr: false, hash: false, include_build_deps: 'auto', include_self: false,
|
||||
pkgTags: [], verCheck: nil, highlight_build_deps: true, exclude_buildessential: false, top_level: true)
|
||||
# get_deps_list: get dependencies list of pkgName (current package by default)
|
||||
def self.get_deps_list(pkg_name = name, return_attr: false, hash: false, include_build_deps: 'auto', include_self: false,
|
||||
pkg_tags: [], ver_check: nil, highlight_build_deps: true, exclude_buildessential: false, top_level: true)
|
||||
# get_deps_list: get dependencies list of pkg_name (current package by default)
|
||||
#
|
||||
# pkgName: package to check dependencies, current package by default
|
||||
# pkg_name: package to check dependencies, current package by default
|
||||
# return_attr: return package attribute (tags and version lambda) also
|
||||
# hash: return result in nested hash, used by `print_deps_tree` (`bin/crew`)
|
||||
#
|
||||
@@ -65,26 +65,26 @@ class Package
|
||||
# if set to false, all build dependencies will not be returned
|
||||
# if set to "auto" (default), return build dependencies if pre-built binaries not available
|
||||
#
|
||||
# include_self: include #{pkgName} itself in returned result, only used in recursive calls (see `expandedDeps` below)
|
||||
# include_self: include #{pkg_name} itself in returned result, only used in recursive calls (see `expanded_deps` below)
|
||||
# highlight_build_deps: include corresponding symbols in return value, you can convert it to actual ascii color codes later
|
||||
# exclude_buildessential: do not insert `buildessential` dependency automatically
|
||||
#
|
||||
# top_level: if set to true, return satisfied dependencies
|
||||
# (dependencies that might be a sub-dependency of a dependency that checked before),
|
||||
# always set to false if this function is called in recursive loop (see `expandedDeps` below)
|
||||
# always set to false if this function is called in recursive loop (see `expanded_deps` below)
|
||||
#
|
||||
@checked_list ||= {} # create @checked_list placeholder if not exist
|
||||
|
||||
# add current package to @checked_list for preventing extra checks
|
||||
@checked_list.merge!({ pkgName => pkgTags })
|
||||
@checked_list.merge!({ pkg_name => pkg_tags })
|
||||
|
||||
pkgObj = load_package("#{CREW_PACKAGES_PATH}/#{pkgName}.rb")
|
||||
is_source = pkgObj.is_source?(ARCH.to_sym) or pkgObj.build_from_source
|
||||
deps = pkgObj.dependencies
|
||||
pkg_obj = load_package("#{CREW_PACKAGES_PATH}/#{pkg_name}.rb")
|
||||
is_source = pkg_obj.source?(ARCH.to_sym) or pkg_obj.build_from_source
|
||||
deps = pkg_obj.dependencies
|
||||
|
||||
# append buildessential to deps if building from source is needed/specified
|
||||
if ((include_build_deps == true) || ((include_build_deps == 'auto') && is_source)) && \
|
||||
!pkgObj.no_compile_needed? && \
|
||||
!pkg_obj.no_compile_needed? && \
|
||||
!exclude_buildessential && \
|
||||
!@checked_list.keys.include?('buildessential')
|
||||
|
||||
@@ -92,22 +92,22 @@ class Package
|
||||
end
|
||||
|
||||
# parse dependencies recursively
|
||||
expandedDeps = deps.uniq.map do |dep, (depTags, verCheck)|
|
||||
expanded_deps = deps.uniq.map do |dep, (dep_tags, ver_check)|
|
||||
# check build dependencies only if building from source is needed/specified
|
||||
# Do not recursively find :build based build dependencies.
|
||||
next unless (include_build_deps == true && @crew_current_package == pkgObj.name) || \
|
||||
((include_build_deps == 'auto') && is_source && @crew_current_package == pkgObj.name) || \
|
||||
!depTags.include?(:build)
|
||||
next unless (include_build_deps == true && @crew_current_package == pkg_obj.name) || \
|
||||
((include_build_deps == 'auto') && is_source && @crew_current_package == pkg_obj.name) || \
|
||||
!dep_tags.include?(:build)
|
||||
|
||||
# overwrite tags if parent dependency is a build dependency
|
||||
# (for build dependencies highlighting)
|
||||
tags = pkgTags.include?(:build) ? pkgTags : depTags
|
||||
tags = pkg_tags.include?(:build) ? pkg_tags : dep_tags
|
||||
|
||||
if @checked_list.keys.none?(dep)
|
||||
# check dependency by calling this function recursively
|
||||
next \
|
||||
send(
|
||||
__method__, dep, pkgTags: tags, verCheck:, include_self: true, top_level: false,
|
||||
__method__, dep, pkg_tags: tags, ver_check:, include_self: true, top_level: false,
|
||||
hash:, return_attr:, include_build_deps:, highlight_build_deps:, exclude_buildessential:
|
||||
)
|
||||
elsif hash && top_level
|
||||
@@ -127,21 +127,21 @@ class Package
|
||||
|
||||
if hash
|
||||
# the '*' symbol tell `print_deps_tree` (`bin/crew`) to color this package as "build dependency"
|
||||
if highlight_build_deps && pkgTags.include?(:build)
|
||||
return { "*#{pkgName}*" => expandedDeps }
|
||||
if highlight_build_deps && pkg_tags.include?(:build)
|
||||
return { "*#{pkg_name}*" => expanded_deps }
|
||||
else
|
||||
return { pkgName => expandedDeps }
|
||||
return { pkg_name => expanded_deps }
|
||||
end
|
||||
elsif include_self
|
||||
# return pkgName itself if this function is called as a recursive loop (see `expandedDeps`)
|
||||
# return pkg_name itself if this function is called as a recursive loop (see `expanded_deps`)
|
||||
if return_attr
|
||||
return [expandedDeps, { pkgName => [pkgTags, verCheck] }].flatten
|
||||
return [expanded_deps, { pkg_name => [pkg_tags, ver_check] }].flatten
|
||||
else
|
||||
return [expandedDeps, pkgName].flatten
|
||||
return [expanded_deps, pkg_name].flatten
|
||||
end
|
||||
else
|
||||
# if this function is called outside of this function, return parsed dependencies only
|
||||
return expandedDeps.flatten
|
||||
return expanded_deps.flatten
|
||||
end
|
||||
end
|
||||
|
||||
@@ -162,13 +162,13 @@ class Package
|
||||
# add element in "[ name, [ tag1, tag2, ... ] ]" format
|
||||
if dependency.is_a?(Hash)
|
||||
# parse "depends_on name => <tags: Symbol|Array>"
|
||||
depName, tags = dependency.first
|
||||
dep_name, tags = dependency.first
|
||||
|
||||
# convert `tags` to array in case `tags` is a symbol
|
||||
dep_tags += [tags].flatten
|
||||
else
|
||||
# parse "depends_on name"
|
||||
depName = dependency
|
||||
dep_name = dependency
|
||||
end
|
||||
|
||||
# process dependency version range if specified
|
||||
@@ -184,7 +184,7 @@ class Package
|
||||
unless Gem::Version.new(installed_ver).send( operator.to_sym, Gem::Version.new(target_ver) )
|
||||
# print error if the range is not fulfilled
|
||||
warn <<~EOT.lightred
|
||||
Package #{name} depends on '#{depName}' (#{operator} #{target_ver}), however version '#{installed_ver}' is currently installed :/
|
||||
Package #{name} depends on '#{dep_name}' (#{operator} #{target_ver}), however version '#{installed_ver}' is currently installed :/
|
||||
|
||||
Run `crew update && crew upgrade` and try again?
|
||||
EOT
|
||||
@@ -194,7 +194,7 @@ class Package
|
||||
end
|
||||
end
|
||||
|
||||
@dependencies.store(depName, [dep_tags, ver_check])
|
||||
@dependencies.store(dep_name, [dep_tags, ver_check])
|
||||
end
|
||||
|
||||
def self.get_url(architecture)
|
||||
@@ -227,8 +227,8 @@ class Package
|
||||
def self.get_binary_sha256(architecture) = @binary_sha256&.key?(architecture) ? @binary_sha256[architecture] : ''
|
||||
def self.get_extract_dir = "#{name}.#{Time.now.utc.strftime('%Y%m%d%H%M%S')}.dir"
|
||||
|
||||
def self.is_binary?(architecture) = !@build_from_source && @binary_sha256 && @binary_sha256.key?(architecture)
|
||||
def self.is_source?(architecture) = !(is_binary?(architecture) || is_fake?)
|
||||
def self.binary?(architecture) = !@build_from_source && @binary_sha256 && @binary_sha256.key?(architecture)
|
||||
def self.source?(architecture) = !(binary?(architecture) || is_fake?)
|
||||
|
||||
def self.system(*args, **opt_args)
|
||||
@crew_env_options_hash = if no_env_options?
|
||||
|
||||
@@ -89,16 +89,16 @@ class ProgressBar
|
||||
uncompleted_length = @bar_width - completed_length
|
||||
|
||||
# print info and progress bar
|
||||
@info_before_bar.each_pair do |varName, width|
|
||||
printf '%*.*s ', width, width, instance_variable_get("@#{varName}")
|
||||
@info_before_bar.each_pair do |var_name, width|
|
||||
printf '%*.*s ', width, width, instance_variable_get("@#{var_name}")
|
||||
end
|
||||
|
||||
# print progress bar with color code
|
||||
print (@bar_char * completed_length).send(*@bar_front_color),
|
||||
(@bar_char * uncompleted_length).send(*@bar_bg_color)
|
||||
|
||||
@info_after_bar.each_pair do |varName, width|
|
||||
printf ' %*.*s', width, width, instance_variable_get("@#{varName}")
|
||||
@info_after_bar.each_pair do |var_name, width|
|
||||
printf ' %*.*s', width, width, instance_variable_get("@#{var_name}")
|
||||
end
|
||||
|
||||
# stop when 100%
|
||||
|
||||
20
lib/util.rb
20
lib/util.rb
@@ -4,18 +4,18 @@ class MutableMatrix < Matrix
|
||||
public :'[]='
|
||||
end
|
||||
|
||||
# Returns the edit distance between strings a and b
|
||||
# Returns the edit distance between strings string1 and string12
|
||||
# https://en.wikipedia.org/wiki/Edit_distance
|
||||
def edit_distance(a, b)
|
||||
def edit_distance(string1, string2)
|
||||
# memo is the matrix for dynamic programming
|
||||
# memo[i, j] = the edit distance between the
|
||||
# prefixes of a and b of size i and j.
|
||||
memo = MutableMatrix.zero(a.size + 1, b.size + 1)
|
||||
a.size.times { |i| memo[i + 1, 0] = i + 1 }
|
||||
b.size.times { |j| memo[0, j + 1] = j + 1 }
|
||||
a.size.times do |i|
|
||||
b.size.times do |j|
|
||||
memo[i + 1, j + 1] = if a[i] == b[j]
|
||||
# prefixes of string1 and string2 of size i and j.
|
||||
memo = MutableMatrix.zero(string1.size + 1, string2.size + 1)
|
||||
string1.size.times { |i| memo[i + 1, 0] = i + 1 }
|
||||
string2.size.times { |j| memo[0, j + 1] = j + 1 }
|
||||
string1.size.times do |i|
|
||||
string2.size.times do |j|
|
||||
memo[i + 1, j + 1] = if string1[i] == string2[j]
|
||||
memo[i, j]
|
||||
else
|
||||
[
|
||||
@@ -27,5 +27,5 @@ def edit_distance(a, b)
|
||||
end
|
||||
end
|
||||
|
||||
return memo[a.size, b.size]
|
||||
return memo[string1.size, string2.size]
|
||||
end
|
||||
|
||||
@@ -67,22 +67,22 @@ class Icu4c < Package
|
||||
@oldicuver = %w[72 72.1]
|
||||
@oldicuver.each do |oldver|
|
||||
puts "Finding Packages expecting icu4c version #{oldver} that may need updating:".lightgreen
|
||||
@fileArray = []
|
||||
@libArray = []
|
||||
@file_array = []
|
||||
@lib_array = []
|
||||
@nmresults = `nm -A *.so* 2>/dev/null | grep ucol_open_#{oldver}`.chop.split(/$/).map(&:strip)
|
||||
@nmresults.each { |fileLine| @libArray.push(fileLine.partition(':').first) }
|
||||
@libArray.each do |f|
|
||||
@nmresults.each { |file_line| @lib_array.push(file_line.partition(':').first) }
|
||||
@lib_array.each do |f|
|
||||
@grepresults = `grep "#{f}" #{CREW_META_PATH}/*.filelist`.chomp.gsub('.filelist', '').partition(':').first.gsub(
|
||||
CREW_META_PATH, ''
|
||||
).split(/$/).map(&:strip)
|
||||
@grepresults.each { |fileLine| @fileArray.push(fileLine) }
|
||||
@grepresults.each { |file_line| @file_array.push(file_line) }
|
||||
end
|
||||
# Mozjs contains an internal icu which will not match this version.
|
||||
# Update the following when there is a new version of mozjs.
|
||||
@fileArray.delete_if { |item| item == 'js102' }
|
||||
next if @fileArray.empty?
|
||||
@file_array.delete_if { |item| item == 'js102' }
|
||||
next if @file_array.empty?
|
||||
|
||||
@fileArray.uniq.sort.each do |item|
|
||||
@file_array.uniq.sort.each do |item|
|
||||
puts item.lightred
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ class Imagemagick < Package
|
||||
puts " 7 = ImageMagick #{Imagemagick7.version}"
|
||||
puts ' 0 = Cancel'
|
||||
|
||||
while version = $stdin.gets.chomp.downcase
|
||||
while (version = $stdin.gets.chomp.downcase)
|
||||
case version
|
||||
when '6'
|
||||
depends_on 'imagemagick6'
|
||||
@@ -30,7 +30,6 @@ class Imagemagick < Package
|
||||
break
|
||||
when '0'
|
||||
abort
|
||||
break
|
||||
else
|
||||
puts ' Please select from one of the options or enter 0 to cancel.'
|
||||
end
|
||||
|
||||
@@ -7,9 +7,9 @@ class Jdk < Package
|
||||
compatibility 'all'
|
||||
|
||||
# full version number extracted from jdk*.rb recipes
|
||||
@avail_jdk_ver = Dir["#{CREW_PACKAGES_PATH}/jdk?*.rb"].map do |pkgFile|
|
||||
jdk_majver = pkgFile[/jdk(\d+).rb/, 1].to_i
|
||||
pkg = Package.load_package(pkgFile)
|
||||
@avail_jdk_ver = Dir["#{CREW_PACKAGES_PATH}/jdk?*.rb"].map do |pkg_file|
|
||||
jdk_majver = pkg_file[/jdk(\d+).rb/, 1].to_i
|
||||
pkg = Package.load_package(pkg_file)
|
||||
|
||||
[jdk_majver, pkg.version]
|
||||
end.sort_by do |(jdk_majver, _)|
|
||||
|
||||
@@ -39,11 +39,8 @@ class Llvm16_dev < Package
|
||||
@filelist = File.readlines(@filelist_path, chomp: true).sort
|
||||
|
||||
@filelist.each do |filename|
|
||||
if filename.include?('.so') && filename.include?('libLLVM')
|
||||
next
|
||||
elsif filename.include?('llvm-strip')
|
||||
next
|
||||
end
|
||||
next if filename.include?('.so') && filename.include?('libLLVM')
|
||||
next if filename.include?('llvm-strip')
|
||||
|
||||
@destpath = File.join(CREW_DEST_DIR, filename)
|
||||
@filename_target = File.realpath(filename)
|
||||
|
||||
@@ -42,11 +42,8 @@ class Llvm17_dev < Package
|
||||
@filelist = File.readlines(@filelist_path, chomp: true).sort
|
||||
|
||||
@filelist.each do |filename|
|
||||
if filename.include?('.so') && filename.include?('libLLVM')
|
||||
next
|
||||
elsif filename.include?('llvm-strip')
|
||||
next
|
||||
end
|
||||
next if filename.include?('.so') && filename.include?('libLLVM')
|
||||
next if filename.include?('llvm-strip')
|
||||
|
||||
@destpath = File.join(CREW_DEST_DIR, filename)
|
||||
@filename_target = File.realpath(filename)
|
||||
|
||||
@@ -33,21 +33,15 @@ MONGO-TOOLS***'"
|
||||
system "scons -j#{CREW_NPROC} install --ssl --prefix=#{CREW_DEST_PREFIX} --use-new-tools"
|
||||
when 'i686'
|
||||
system "scons -j#{CREW_NPROC} install --ssl --wiredtiger=off --prefix=#{CREW_DEST_PREFIX} --use-new-tools"
|
||||
when 'armv7l'
|
||||
when 'armv7l', 'aarch64'
|
||||
# Arm 64 bit architecture is supported, but Chrome OS aarch64 is 32 bit.
|
||||
# So, it is required to pretend it is armv7l.
|
||||
# Arm 32 bit architecture is not supported officaially.
|
||||
# Please read https://groups.google.com/forum/#!msg/mongodb-dev/G-kGjZEEam0/VSVB9fYCBAAJ for details
|
||||
system 'cd src/third_party/mozjs-38/; ./get_sources.sh'
|
||||
system 'cd src/third_party/mozjs-38/; ./gen-config.sh arm linux'
|
||||
system 'cd src/third_party/mozjs-38/; rm -rf firefix* mozilla-release'
|
||||
system "scons -j#{CREW_NPROC} install --ssl --wiredtiger=off --mmapv1=on --prefix=#{CREW_DEST_PREFIX} --use-new-tools"
|
||||
when 'aarch64'
|
||||
# Arm 64 bit architecture is supported, but Chrome OS aarch64 is 32 bit.
|
||||
# So, it is required to pretend it is armv7l.
|
||||
system 'cd src/third_party/mozjs-38/; ./get_sources.sh'
|
||||
system 'cd src/third_party/mozjs-38/; ./gen-config.sh arm linux'
|
||||
system 'cd src/third_party/mozjs-38/; rm -rf firefix* mozilla-release'
|
||||
# Not sure how to pretend it under scons
|
||||
system "scons -j#{CREW_NPROC} install --ssl --wiredtiger=off --mmapv1=on --prefix=#{CREW_DEST_PREFIX} --use-new-tools"
|
||||
end
|
||||
|
||||
# guide messages
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
require 'package'
|
||||
Dir["#{CREW_PACKAGES_PATH}/openjdk*.rb"].each do |openjdkFile|
|
||||
next unless openjdkFile =~ /openjdk(\d+).rb/
|
||||
Dir["#{CREW_PACKAGES_PATH}/openjdk*.rb"].each do |openjdk_file|
|
||||
next unless openjdk_file =~ /openjdk(\d+).rb/
|
||||
|
||||
openjdkName = File.basename(openjdkFile, '.rb')
|
||||
require_relative openjdkName
|
||||
openjdk_name = File.basename(openjdk_file, '.rb')
|
||||
require_relative openjdk_name
|
||||
end
|
||||
|
||||
class Openjdk < Package
|
||||
@@ -11,18 +11,17 @@ class Openjdk < Package
|
||||
homepage 'https://openjdk.org/'
|
||||
key = 1
|
||||
versions = []
|
||||
@openjdkVersions = []
|
||||
Dir["#{CREW_PACKAGES_PATH}/openjdk*.rb"].each do |openjdkFile|
|
||||
next unless openjdkFile =~ /openjdk(\d+).rb/
|
||||
@openjdk_versions = []
|
||||
Dir["#{CREW_PACKAGES_PATH}/openjdk*.rb"].each do |openjdk_file|
|
||||
next unless openjdk_file =~ /openjdk(\d+).rb/
|
||||
|
||||
openjdkName = File.basename(openjdkFile, '.rb')
|
||||
openjdkVer = Object.const_get(openjdkName.capitalize).version.to_s.gsub(/-(\d+)/, '')
|
||||
openjdkMajVer = openjdkVer.match?(/^1.8/) ? '8' : openjdkVer.partition('.')[0]
|
||||
@openjdkVersions.push [key, openjdkName, openjdkVer]
|
||||
openjdk_name = File.basename(openjdk_file, '.rb')
|
||||
openjdk_ver = Object.const_get(openjdk_name.capitalize).version.to_s.gsub(/-(\d+)/, '')
|
||||
@openjdk_versions.push [key, openjdk_name, openjdk_ver]
|
||||
key += 1
|
||||
end
|
||||
@openjdkVersions.each do |openjdkVer|
|
||||
versions.push openjdkVer[2]
|
||||
@openjdk_versions.each do |openjdk_ver|
|
||||
versions.push openjdk_ver[2]
|
||||
end
|
||||
versions.sort!
|
||||
version "#{versions.first}-#{versions.last}"
|
||||
@@ -34,9 +33,9 @@ class Openjdk < Package
|
||||
def self.preflight
|
||||
if ARGV.include?('install')
|
||||
puts "\n Select version:"
|
||||
@openjdkVersions.each do |openjdkVer|
|
||||
option = " #{openjdkVer[0]} = Openjdk #{openjdkVer[2]}"
|
||||
if File.file? "#{CREW_META_PATH}/#{openjdkVer[1]}.filelist"
|
||||
@openjdk_versions.each do |openjdk_ver|
|
||||
option = " #{openjdk_ver[0]} = Openjdk #{openjdk_ver[2]}"
|
||||
if File.file? "#{CREW_META_PATH}/#{openjdk_ver[1]}.filelist"
|
||||
puts option.lightgreen
|
||||
else
|
||||
puts option
|
||||
@@ -44,15 +43,15 @@ class Openjdk < Package
|
||||
end
|
||||
puts ' 0 = Cancel'
|
||||
|
||||
while version = $stdin.gets.chomp.downcase.to_i
|
||||
version = 0 if version.negative? || version > @openjdkVersions.length
|
||||
while (version = $stdin.gets.chomp.downcase.to_i)
|
||||
version = 0 if version.negative? || version > @openjdk_versions.length
|
||||
key = version - 1
|
||||
case version
|
||||
when @openjdkVersions[key][0]
|
||||
if File.file? "#{CREW_META_PATH}/#{@openjdkVersions[key][1]}.filelist"
|
||||
abort "Package #{@openjdkVersions[key][1]} already installed.".lightgreen
|
||||
when @openjdk_versions[key][0]
|
||||
if File.file? "#{CREW_META_PATH}/#{@openjdk_versions[key][1]}.filelist"
|
||||
abort "Package #{@openjdk_versions[key][1]} already installed.".lightgreen
|
||||
else
|
||||
depends_on @openjdkVersions[key][1]
|
||||
depends_on @openjdk_versions[key][1]
|
||||
end
|
||||
break
|
||||
when 0
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
require 'package'
|
||||
Dir["#{CREW_PACKAGES_PATH}/php*.rb"].each do |phpFile|
|
||||
next unless phpFile =~ /php(\d+).rb/
|
||||
Dir["#{CREW_PACKAGES_PATH}/php*.rb"].each do |php_file|
|
||||
next unless php_file =~ /php(\d+).rb/
|
||||
|
||||
phpName = File.basename(phpFile, '.rb')
|
||||
require_relative phpName
|
||||
php_name = File.basename(php_file, '.rb')
|
||||
require_relative php_name
|
||||
end
|
||||
|
||||
class Php < Package
|
||||
description 'PHP is a popular general-purpose scripting language that is especially suited to web development.'
|
||||
homepage 'http://www.php.net/'
|
||||
key = 1
|
||||
@phpVersions = []
|
||||
Dir["#{CREW_PACKAGES_PATH}/php*.rb"].each do |phpFile|
|
||||
next unless phpFile =~ /php(\d+).rb/
|
||||
@php_versions = []
|
||||
Dir["#{CREW_PACKAGES_PATH}/php*.rb"].each do |php_file|
|
||||
next unless php_file =~ /php(\d+).rb/
|
||||
|
||||
phpName = File.basename(phpFile, '.rb')
|
||||
phpVer = Object.const_get(phpName.capitalize).version.to_s.gsub(/-(\d+)/, '')
|
||||
@phpVersions.push [key, phpName, phpVer]
|
||||
@minPhpVer = phpVer if key == 1
|
||||
@maxPhpVer = phpVer
|
||||
php_name = File.basename(php_file, '.rb')
|
||||
php_ver = Object.const_get(php_name.capitalize).version.to_s.gsub(/-(\d+)/, '')
|
||||
@php_versions.push [key, php_name, php_ver]
|
||||
@min_php_ver = php_ver if key == 1
|
||||
@max_php_ver = php_ver
|
||||
key += 1
|
||||
end
|
||||
version "#{@minPhpVer}-#{@maxPhpVer}"
|
||||
version "#{@min_php_ver}-#{@max_php_ver}"
|
||||
license 'PHP-3.01'
|
||||
compatibility 'all'
|
||||
|
||||
@@ -35,17 +35,17 @@ class Php < Package
|
||||
abort "Enter `crew remove php#{major}#{minor} && crew install php` to install a different version."
|
||||
end
|
||||
puts "\nSelect version:"
|
||||
@phpVersions.each do |phpVer|
|
||||
puts "#{phpVer[0]} = PHP #{phpVer[2]}"
|
||||
@php_versions.each do |php_ver|
|
||||
puts "#{php_ver[0]} = PHP #{php_ver[2]}"
|
||||
end
|
||||
puts '0 = Cancel'
|
||||
|
||||
while version = $stdin.gets.chomp.downcase.to_i
|
||||
version = 0 if version.negative? || version > @phpVersions.length
|
||||
while (version = $stdin.gets.chomp.downcase.to_i)
|
||||
version = 0 if version.negative? || version > @php_versions.length
|
||||
key = version - 1
|
||||
case version
|
||||
when @phpVersions[key][0]
|
||||
depends_on @phpVersions[key][1]
|
||||
when @php_versions[key][0]
|
||||
depends_on @php_versions[key][1]
|
||||
break
|
||||
when 0
|
||||
abort
|
||||
|
||||
@@ -10,7 +10,7 @@ class Ruby_rubocop < RUBY
|
||||
license 'MIT'
|
||||
compatibility 'all'
|
||||
source_url 'https://github.com/chromebrew/chromebrew/raw/master/.rubocop.yml'
|
||||
source_sha256 '60e2e5b6e56b6c5b8cd760e47d7abfee2ea920a6fcb6985ece95d6097bc76c07'
|
||||
source_sha256 '38f6c68465c7224bdd7bcb1b37f7b49283f46def71dc56553069e749afab4b85'
|
||||
|
||||
depends_on 'libyaml'
|
||||
depends_on 'xdg_base'
|
||||
|
||||
@@ -175,10 +175,6 @@ task :automake do
|
||||
rest: '| sort -t. -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr | head -1'
|
||||
end
|
||||
|
||||
desc 'Check for new version of autossh'
|
||||
task :autossh do
|
||||
end
|
||||
|
||||
desc 'Check for new version of aws'
|
||||
task :aws do
|
||||
check_version pkg_name: 'aws',
|
||||
@@ -416,10 +412,6 @@ task :gawk do
|
||||
rest: '| sort -t. -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr | head -1'
|
||||
end
|
||||
|
||||
desc 'Check for new version of gcc'
|
||||
task :gcc do
|
||||
end
|
||||
|
||||
desc 'Check for new version of gdal'
|
||||
task :gdal do
|
||||
check_version pkg_name: 'gdal',
|
||||
@@ -1018,10 +1010,6 @@ task :postgres do
|
||||
rest: '| sort -t. -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr | head -1'
|
||||
end
|
||||
|
||||
desc 'Check for new version of powerline_fonts'
|
||||
task :powerline_fonts do
|
||||
end
|
||||
|
||||
desc 'Check for new version of powerstat'
|
||||
task :powerstat do
|
||||
check_version pkg_name: 'powerstat',
|
||||
@@ -1046,10 +1034,6 @@ task :pv do
|
||||
rest: ''
|
||||
end
|
||||
|
||||
desc 'Check for new version of pwgen'
|
||||
task :pwgen do
|
||||
end
|
||||
|
||||
desc 'Check for new version of python27'
|
||||
task :python27 do
|
||||
check_version pkg_name: 'python27',
|
||||
@@ -1260,10 +1244,6 @@ task :unrar do
|
||||
rest: ''
|
||||
end
|
||||
|
||||
desc 'Check for new version of unzip'
|
||||
task :unzip do
|
||||
end
|
||||
|
||||
desc 'Check for new version of vifm'
|
||||
task :vifm do
|
||||
check_version pkg_name: 'vifm',
|
||||
|
||||
Reference in New Issue
Block a user