Class: RBT::Cookbooks::CheckForBlfsUpdates

Inherits:
CheckForRemoteWebpages show all
Defined in:
lib/rbt/check_for_updates/check_for_blfs_updates.rb

Overview

RBT::Cookbooks::CheckForBlfsUpdates

Constant Summary collapse

UPDATE_REGEX =
#

UPDATE_REGEX

#
/- Update to ([a-z]{1,15}-?[a-z]{0,4})(-| )(\d{1,2}\.\d{1,2}\.?\d{0,1})\.? /
LIMIT_THE_AMOUNT_OF_PROGRAMS =
#

LIMIT_THE_AMOUNT_OF_PROGRAMS

#
true
WORK_ON_N_PROGRAMS =
#

WORK_ON_N_PROGRAMS

On how many programs we will work. This constant will only be honoured if the LIMIT_THE_AMOUNT_OF_PROGRAMS was set to true, though.

#
15

Constants inherited from LeanPrototype

LeanPrototype::ALL_COLOUR_METHODS, LeanPrototype::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, LeanPrototype::DAY_NAMES, LeanPrototype::NAMESPACE, LeanPrototype::SILENT_REDIRECTION

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from CheckForRemoteWebpages

#add_these_programs_were_updated, #array_these_programs_were_updated?, #commandline_size_query_was_issued?, #correct_for_common_mistakes_in_program_names, #dataset?, #distrowatch_url?, #do_use_wget, #ensure_download_mode_is_system_wget_from_now_on, #notify_the_user_that_no_downloads_have_occurred, #obtain_dataset_from_the_remote_webpage, #report_that_these_programs_were_updated, #report_the_remote_webpage, #return_local_version_of_this_program, #show_help, #that_remote_URL_should_be_at, #update_entry, #use_wget?

Methods inherited from Base

#cat, #cd_back_to_the_current_working_directory, #consider_reporting_how_many_programs_are_registered, #cookbook_files?, #copy_recursively, #delete_code_of_conduct?, #determine_appdir_prefix_from_this_input, #directory_validation?, #do_not_show_names, #fast_return_file_size_of_this_program, #file_last_symlinked_program?, #file_programs_version_url, #gem_version, #is_a_64bit_system?, #is_ccache_available?, #is_porg_available?, #is_this_binary_registered?, #is_this_program_included?, #make_command?, #make_install_command?, #new_cookbook_instance_for, #program_exists?, #publish_list_of_all_programs_version, #rcp, registered_binaries?, #remove_symlink, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_working_directory, #return_compile_time_statistics, #return_n_random_characters, #return_version_of_this_program, #run_make_then_make_install, #sanitize_url1_entry, #set_source_directory, #show_overview_over_available_utility_scripts, #symlink_all_files_from_this_directory_to_that_directory, #system_tags?, #upload_list_of_all_programs_version, #use_yaml_database_for_tags?, #warn_and_exit, #wget

Methods inherited from LeanPrototype

#a_or_an?, #abbreviations?, #absolute_path, #action, #add_to_the_commandline_arguments, #all_binaries?, #all_files_from, #all_libraries?, #allowed_cookbook_entries?, #appdir_location_of?, #append_onto_the_internal_hash, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #clear_commandline_arguments, #cliner, #coloured_and_padded_e, #coloured_and_padded_esystem, #coloured_esystem, #colourize_directory_for_system_results, #colourize_this_error, #colourize_this_file_path, #colourize_this_warning, #commandline_arguments?, #commandline_arguments_without_hyphens?, #comment, #convert_dd_mm_yyyy_to_its_long_variant, #convert_env_variable, #copy_directory, #copy_files, #cpr, #create_directory, #current_hour?, #dd_mmm_yyy, #debug, #debug?, #directory_expanded_cookbooks?, #disable_colours, #display_md5sum?, #do_not_debug, #does_the_cookbook_include_this_program?, #does_this_expanded_cookbook_file_exist_for_this_program?, #does_this_file_exist?, #does_this_file_exist_and_is_it_a_file?, #e, #eblue, #ecomment, #ecrimson, #edir, #editor?, #efancy, #eimp, #enable_colours, #enable_debug, #ensure_main_encoding_for, #eparse, #esystem, #esystem_gold, #etomato, #ewarn, #exit_program, #expanded_cookbooks_directory_exists?, #extract_this_archive, #extract_to?, #file_compiled_programs?, #file_dirname_retaining_trailing_slash, #file_predefined_installation_instructions?, #file_specification_of_registered_cookbook_entries, #find_cookbook_alias_for, #find_this_yaml_file, #first_argument?, #first_non_hyphen_argument?, #get_all_directories_from, #get_all_files_from, #get_all_programs, #get_date, #get_extended_date, #get_files_and_directories_from, #go_to_base_dir, #home_dir?, #host_system?, #infer_the_namespace, #internal_hash?, #internal_hash_set_commandline_arguments, #is_an_archive?, #is_directory?, #is_file?, #is_github_url?, #is_make_available?, #is_meson_installed?, #is_on_gobolinux?, #is_on_windows?, #is_roebe?, #is_superuser?, #is_symlink?, #is_this_a_header?, #is_this_a_library?, #is_this_program_included?, #iso_encoding?, #load_dataset_from_this_expanded_cookbook, #load_yaml, #load_yaml_file_from_the_cookbook_directory_for_this_program, #log_directory?, #main_encoding?, #meson_build_file_exists?, #months?, #move_file, #n_programs_are_available?, #n_programs_available?, #namespace?, #no_directory_exists_at, #no_directory_was_found_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #otomato, #packages_directory?, #path_to_this_expanded_cookbooks_dataset, #pkgconfig_directory?, #populate_the_internal_hash_with_default_values, #predefined_installation_instructions?, #prepend_this_commandline_argument, #program_version_of?, #project_base_directory?, #project_yaml_directory?, #query_path?, #rarrow?, #read_file, #read_file_in_default_encoding, #read_file_with_default_encoding, #readlines, #readlines_with_proper_encoding, #register_sigint, #registered_cookbook_entries?, #remove, #remove_archive_from_the_end, #remove_comments_from_each_line, #remove_directory, #remove_double_slashes, #remove_file, #remove_newlines, #remove_parens, #remove_symlink, #remove_the_first_commandline_argument, #remove_this_commandline_argument, #remove_this_entry_from_the_commandline_arguments, #remove_trailing_ANSII_escape_code, #remove_unnecessary_data_from_url, #rename, #report_pwd, #require_the_rbt_aliases, #reset_the_internal_hash, #return_all_archives_from_this_directory, #return_appdir_prefix, #return_commandline_arguments_with_leading_hyphens, #return_current_hour_minutes_second, #return_date, #return_day_of_the_month_based_on_utc, #return_full_time, #return_hours_minutes_seconds_based_on_utc, #return_location_to_this_programs_yaml_file, #return_month_based_on_this_number, #return_month_based_on_utc, #return_opnn, #return_program_name, #return_program_name_for_gobolinux_systems, #return_program_name_via_program_information, #return_pwd, #return_unicode_warning_symbol_or_empty_string, #return_utc, #return_utc_time_in_a_format_similar_to_slackware, #return_weekday_based_on_utc, #return_year_based_on_utc, #rev, #rpn, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #set_use_colours, #set_use_opn, #set_xorg_buffer, #sfancy, #sfile, #silent_redirection?, #silently_create_this_directory_if_it_does_not_yet_exist, #simp, #source_base_directory?, #ssym, #stderr, #store_into_this_directory?, #string_right_arrow?, #swarn, #symlink, #sysbin_directory?, #sysetc_directory?, #sysinclude_directory?, #syslib_directory?, #sysshare_directory?, #system_directory?, #temp_directory?, #to_bool, #to_camelcase, #to_iso_encoding, #to_unicode, #today?, #touch, #try_to_require_beautiful_url, #try_to_require_the_environment_information_gem, #try_to_require_the_extracter_gem, #try_to_require_the_open_gem, #try_to_require_the_xorg_buffer, #try_to_require_wget, #try_to_return_a_special_compile_component, #unicode_cliner, #unicode_middle_cliner, #use_colours=, #use_colours?, #use_opn=, #use_opn?, #utf_encoding?, #verbose_truth, #word_wrap, #write_what_into, #write_what_into_via_unicode, #yes_or_no

Constructor Details

#initialize(i = nil, run_already = true) ⇒ CheckForBlfsUpdates

#

initialize

#


49
50
51
52
53
54
55
56
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 49

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_input(i)
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Cookbooks::CheckForBlfsUpdates[]

#


263
264
265
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 263

def self.[](i = ARGV)
  new(i)
end

Instance Method Details

#blfs_url_for(i) ⇒ Object Also known as: return_blfs_page_of_this_program

#

blfs_url_for

#


139
140
141
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 139

def blfs_url_for(i)
  RBT.return_blfs_page_of_this_program(i).to_s
end

#colour_for_blfs_entries(i) ⇒ Object

#

colour_for_blfs_entries

#


132
133
134
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 132

def colour_for_blfs_entries(i)
  simp(i)
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


110
111
112
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 110

def input?
  @input
end
#

menu (menu tag)

#


100
101
102
103
104
105
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 100

def menu(i)
  case i # case tag
  when /\d+/ # At the least one number.
    set_work_on_n_programs(i)
  end
end

#remote_webpage?Boolean Also known as: remote_website?

#

remote_webpage?

Query method over the remote BLFS webpage.

#

Returns:

  • (Boolean)


75
76
77
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 75

def remote_webpage?
  BLFS_CHANGELOG_WEBPAGE
end

#report_blfs_page_of_this_program(name_of_the_program) ⇒ Object

#

report_blfs_page_of_this_program

#


117
118
119
120
121
122
123
124
125
126
127
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 117

def report_blfs_page_of_this_program(name_of_the_program)
  _ = blfs_url_for(name_of_the_program)
  if _
    opne 'The BLFS entry for '+sfancy(name_of_the_program)+
         ' can be found at `'+colour_for_blfs_entries(_)+'`.'
  else
    opne 'The program '+sfancy(name_of_the_program)+
         ' does '+swarn('NOT')+' yet have a BLFS entry. '\
         'Please add one.'
  end
end

#report_this_program(i) ⇒ Object

#

report_this_program

#


190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 190

def report_this_program(i)
  ljust_value = 15
  # ======================================================================= #
  # Some entries may not have a version entry associated, such as
  # 'gconf".
  # ======================================================================= #
  if !does_the_cookbook_include_this_program?(i) and
     !i.include?('-')
    opne 'A new program may have been added: '+sfancy(i)+N+
         (' ' * 32)+colour_for_blfs_entries(blfs_url_for(i))
  else
    unless i.include? '-'
      opne rev+'The input `'+sfancy(i)+rev+
           '` contains no - character. It will thus'
      append_this = '-0.0.1'
      opne rev+'be modified towards `'+sfancy(i+append_this)+rev+'`.'
      i = i.dup
      i << append_this 
    end
    dataset_for_this_program = ProgramInformation.return_name_and_version(i, :downcase)
    name_of_the_program, remote_program_version = dataset_for_this_program
    remote_program_version.chop! if remote_program_version.end_with? '.'
    name_of_the_program.strip!
    name_of_the_program = correct_for_common_mistakes_in_program_names(
      name_of_the_program
    )
    if does_the_cookbook_include_this_program? name_of_the_program
      opne rev+'The program '+sfancy(name_of_the_program.ljust(ljust_value))+
           "#{rev} is included."
      local_version = return_local_version_of_this_program(name_of_the_program)
      if local_version.to_s == remote_program_version.to_s
        opne "#{rev}The local dataset is already up to date. Program "\
             "version is: #{sfancy(remote_program_version)}"
      else
        remote_program_version.delete!('v')
        # =================================================================== #
        # In this case, the remote version is not the same as the local
        # version. Report this.
        # =================================================================== #
        gem_version_of_the_remote_program = gem_version(remote_program_version)
        gem_version_of_the_local_program  = gem_version(local_version)
        if gem_version_of_the_remote_program and
           gem_version_of_the_local_program
          if gem_version_of_the_remote_program > gem_version_of_the_local_program
            opne firebrick('The BLFS homepage contains a version that is '\
                 'more up to date.')
            opne powderblue('Local version: ')+
                 sfancy(local_version.to_s)+powderblue(', BLFS version: ')+
                 sfancy(remote_program_version)+powderblue(')')
          else
            opne powderblue('Local version: ')+
                 sfancy(local_version.to_s)+powderblue(', BLFS version: ')+
                 sfancy(remote_program_version)+powderblue(') Seems '\
                 'as if the local version is more up to date than the '\
                 'BLFS version.')
          end
        else
          opne 'Something went wrong with these two version '\
               'strings ('+sfancy(remote_program_version.to_s)+
               ', '+sfancy(local_version)+').'
        end
      end
      report_blfs_page_of_this_program(name_of_the_program)
    else
      opne rev+'The program '+sfancy(name_of_the_program.ljust(ljust_value))+
           rev+' is '+swarn('NOT')+rev+' included.'
    end
  end
end

#resetObject

#

reset (reset tag)

#


61
62
63
64
65
66
67
68
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 61

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @work_on_n_programs
  # ======================================================================= #
  @work_on_n_programs = WORK_ON_N_PROGRAMS
end

#runObject

#

run (run tag)

#


146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 146

def run
  report_the_remote_webpage
  obtain_dataset_from_the_remote_webpage
  array = [] # Our main dataset.
  # ======================================================================= #
  # Check for "Add xyz" first. Note that the regex will make use of UTF-8
  # by default, since as of January 2020.
  # ======================================================================= #
  use_this_regex = /- Adde?d? ([A-Za-z]{1,14}[0-9]{0,1})/u # See: http://rubular.com/r/gl1vSycqVf
  scanned_result = @dataset.scan(use_this_regex)
  array << scanned_result.flatten.reject {|entry|
    (entry == '-') or (entry == ' ')
  }
  array.flatten!
  # ======================================================================= #
  # The next regex checks for "Update to" entries. However had, the
  # BLFS homepage also has other formats such as
  # "[renodr] - Add libidn2. Fixes #9045.
  # ======================================================================= #
  use_this_regex = UPDATE_REGEX
  matches = @dataset.scan(use_this_regex).map {|entry| entry.join }.flatten
  array << matches
  array.flatten!
  array.compact!
  array.map! {|line| line.strip.downcase } # Keep it downcased as well.
  if LIMIT_THE_AMOUNT_OF_PROGRAMS
    # ===================================================================== #
    # Right now we hardcode-limit this to 15 entries.
    # ===================================================================== #
    n_programs_in_total = @work_on_n_programs
    array = array[0..(n_programs_in_total-1)]
  end
  array.each_with_index {|entry, index| index += 1
    # ===================================================================== #
    # First show the colourized index.
    # ===================================================================== #
    e ; e '('+plum(index.to_s)+') '; e
    report_this_program(entry.strip)
  }
end

#set_input(i = '') ⇒ Object

#

set_input

#


82
83
84
85
86
87
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 82

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup
  @input = i
  menu(@input)
end

#set_work_on_n_programs(i) ⇒ Object

#

set_work_on_n_programs

#


92
93
94
95
# File 'lib/rbt/check_for_updates/check_for_blfs_updates.rb', line 92

def set_work_on_n_programs(i)
  i = i.to_s.delete('-')
  @work_on_n_programs = i.to_i
end