mirror of
https://github.com/chromebrew/chromebrew.git
synced 2026-01-10 07:57:59 -05:00
Add timeout to crew highline prompts with defaults (#10498)
* Add timeout to agree_with_default functions. Signed-off-by: Satadru Pramanik <satadru@gmail.com> * Add more timeouts. Signed-off-by: Satadru Pramanik <satadru@gmail.com> --------- Signed-off-by: Satadru Pramanik <satadru@gmail.com>
This commit is contained in:
committed by
GitHub
parent
437dacb243
commit
b77cb15fdf
@@ -3,7 +3,7 @@
|
||||
require 'etc'
|
||||
|
||||
OLD_CREW_VERSION ||= defined?(CREW_VERSION) ? CREW_VERSION : '1.0'
|
||||
CREW_VERSION ||= '1.52.5' unless defined?(CREW_VERSION) && CREW_VERSION == OLD_CREW_VERSION
|
||||
CREW_VERSION ||= '1.52.6' unless defined?(CREW_VERSION) && CREW_VERSION == OLD_CREW_VERSION
|
||||
|
||||
# Kernel architecture.
|
||||
KERN_ARCH ||= Etc.uname[:machine]
|
||||
@@ -107,6 +107,8 @@ CREW_NPROC ||= \
|
||||
end
|
||||
|
||||
# Set following as boolean if environment variables exist.
|
||||
# Timeout for agree questions in package.rb:
|
||||
CREW_AGREE_TIMEOUT_SECONDS ||= ENV.fetch('CREW_AGREE_TIMEOUT_SECONDS', 10) unless defined?(CREW_AGREE_TIMEOUT_SECONDS)
|
||||
CREW_CACHE_ENABLED ||= ENV.fetch('CREW_CACHE_ENABLED', false) unless defined?(CREW_CACHE_ENABLED)
|
||||
CREW_CONFLICTS_ONLY_ADVISORY ||= ENV.fetch('CREW_CONFLICTS_ONLY_ADVISORY', false) unless defined?(CREW_CONFLICTS_ONLY_ADVISORY)
|
||||
# or use conflicts_ok
|
||||
|
||||
@@ -25,6 +25,7 @@ def require_gem(gem_name_and_require = nil, require_override = nil)
|
||||
require requires
|
||||
end
|
||||
require_gem 'highline'
|
||||
require_gem 'timeout'
|
||||
|
||||
def agree_with_default(yes_or_no_question_msg, character = nil, default:)
|
||||
yes_or_no_question = yes_or_no_question_msg.lightpurple
|
||||
@@ -67,6 +68,22 @@ class Package
|
||||
attr_accessor :build_from_source, :cached_build, :in_build, :in_install, :in_upgrade, :name
|
||||
end
|
||||
|
||||
def self.agree_default_no(message = nil)
|
||||
Timeout.timeout(CREW_AGREE_TIMEOUT_SECONDS) do
|
||||
return agree_with_default("#{message} (yes/NO)?", true, default: 'n')
|
||||
end
|
||||
rescue Timeout::Error
|
||||
return true
|
||||
end
|
||||
|
||||
def self.agree_default_yes(message = nil)
|
||||
Timeout.timeout(CREW_AGREE_TIMEOUT_SECONDS) do
|
||||
return agree_with_default("#{message} (YES/no)?", true, default: 'y')
|
||||
end
|
||||
rescue Timeout::Error
|
||||
return true
|
||||
end
|
||||
|
||||
def self.agree_to_remove(config_object = nil)
|
||||
if File.file? config_object
|
||||
identifier = 'file'
|
||||
@@ -75,22 +92,14 @@ class Package
|
||||
else
|
||||
abort "Cannot identify #{config_object}.".lightred
|
||||
end
|
||||
if agree_with_default("Would you like to remove the config #{identifier}: #{config_object} (YES/no)?", true, default: 'y')
|
||||
if agree_default_no("Would you like to remove the config #{identifier}: #{config_object}")
|
||||
puts "#{config_object} saved.".lightgreen
|
||||
else
|
||||
FileUtils.rm_rf config_object
|
||||
puts "#{config_object} removed.".lightgreen
|
||||
else
|
||||
puts "#{config_object} saved.".lightgreen
|
||||
end
|
||||
end
|
||||
|
||||
def self.agree_default_no(message = nil)
|
||||
return agree_with_default("#{message} (yes/NO)?", true, default: 'n')
|
||||
end
|
||||
|
||||
def self.agree_default_yes(message = nil)
|
||||
return agree_with_default("#{message} (YES/no)?", true, default: 'y')
|
||||
end
|
||||
|
||||
def self.load_package(pkg_file)
|
||||
# self.load_package: load a package under 'Package' class scope
|
||||
#
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env ruby
|
||||
# build_updated_packages version 1.1 (for Chromebrew)
|
||||
# build_updated_packages version 1.2 (for Chromebrew)
|
||||
# This updates the versions in python pip packages by calling
|
||||
# tools/update_python_pip_packages.rb, checks for updated ruby packages
|
||||
# by calling tools/update_ruby_gem_packages.rb, and then checks if any
|
||||
@@ -36,6 +36,7 @@ def require_gem(gem_name_and_require = nil, require_override = nil)
|
||||
require requires
|
||||
end
|
||||
require_gem 'highline'
|
||||
require_gem 'timeout'
|
||||
|
||||
# The following is from lib/package_helpers.rb
|
||||
def property(*properties)
|
||||
@@ -112,8 +113,12 @@ def agree_with_default(yes_or_no_question_msg, character = nil, default:)
|
||||
end
|
||||
end
|
||||
|
||||
def agree_default_yes(message = nil)
|
||||
return agree_with_default("#{message} (YES/no)?", true, default: 'y')
|
||||
def self.agree_default_yes(message = nil)
|
||||
Timeout.timeout(CREW_AGREE_TIMEOUT_SECONDS) do
|
||||
return agree_with_default("#{message} (YES/no)?", true, default: 'y')
|
||||
end
|
||||
rescue Timeout::Error
|
||||
return true
|
||||
end
|
||||
|
||||
# Get all boolean properties from package.rb
|
||||
|
||||
Reference in New Issue
Block a user