Class: RBT::Cookbooks::IncrementProgramVersion

Inherits:
Base show all
Defined in:
lib/rbt/utility_scripts/increment_program_version/constants.rb,
lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb

Overview

RBT::Cookbooks::IncrementProgramVersion

Constant Summary collapse

DEFAULT_PROGRAM =
#

DEFAULT_PROGRAM

#
'php'
TRY_TO_REPACKAGE_INTO_TAR_XZ_FORMAT =
#

TRY_TO_REPACKAGE_INTO_TAR_XZ_FORMAT

If the following constant is true then incremented programs will be repackaged into .tar.xz, unless they are already in this format.

This constant is thus mostly a convenience setting, if you wish to keep archives in .tar.xz, which I do.

#
true

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 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, #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) ⇒ IncrementProgramVersion

#

initialize

#


34
35
36
37
38
39
40
41
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 34

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

Class Method Details

.[](i = '') ⇒ Object

#

RBT::Cookbooks::IncrementProgramVersion[]

#


414
415
416
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 414

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

Instance Method Details

#assign_url_to_dataset_url(use_this_dataset) ⇒ Object

#

assign_url_to_dataset_url

#


299
300
301
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 299

def assign_url_to_dataset_url(use_this_dataset)
  @url = use_this_dataset.url1?
end

#check_for_incremented_remote_versions(i = url? ) ⇒ Object

#

check_for_incremented_remote_versions

This is the method that will check for the remote versions.

#


101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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
186
187
188
189
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
259
260
261
262
263
264
265
266
267
268
269
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 101

def check_for_incremented_remote_versions(
    i = url?
  )
  if i.nil? or i.empty?
    e rev+'No '+steelblue('url1')+rev+' entry could be found. '+
      lightblue('Is the .yml file correct?')
    return
  end
  original_version = ProgramInformation.return_version(i)
  e "#{rev}The input-version was `#{sfancy(original_version)}#{rev}`."
  original_split   = original_version.split('.')
  splitted         = original_split
  # ======================================================================= #
  # === Minor Version Check
  #
  # First check for minor-version part. We must be careful here because
  # some programs use a version scheme such as "009", such as usbutils.
  # ======================================================================= #
  splitted_last_part = splitted.last
  if splitted_last_part
    if splitted_last_part.start_with? '0'
      new_number = splitted_last_part.to_i + 1
      last_part  = new_number.to_s.rjust(splitted_last_part.to_s.size,'0')
    else
      last_part  = splitted_last_part.to_i + 1 # Increment the last part here.
    end
  else
    e "A #{steelblue('nil value')} occurred so something must have went wrong."
    pp splitted
  end
  splitted[-1]    = last_part.to_s
  minor_increment = splitted.join('.')
  url_for_minor_version = i.gsub(/#{original_version}/, minor_increment)
  try_this_URL(url_for_minor_version)
  # ======================================================================= #
  # === Next query whether the remote file exists
  #
  # Up until November 2020, we always relied on "wget" for this, but
  # since as of the 09.11.2020, we will also allow the use of curl
  # instead of wget. The reason for this was that "wget --spider" does
  # not always seem to work reliably well. In fact, that was the
  # reason why support for "curl" was added.
  #
  # Wget will query whether the remote file exists or whether it does
  # not.
  # ======================================================================= #
  case @use_this_program_to_query_whether_the_remote_URL_exists
  # ======================================================================= #
  # === :wget
  # ======================================================================= #
  when :wget
    if Object.const_defined? :Wget
      does_it_exist = Wget.check_if_remote_file_exists(url_for_minor_version)
      if does_it_exist # Minor increment exist, download it.
        register_and_install_this_program(url_for_minor_version)
      else
        e rev+'There was '+seagreen('no minor release')+rev+
          ' for `'+
          sfancy(url_for_minor_version)+rev+
          '`.'
      end
    else
      report_that_wget_is_missing_then_exit
    end
  # ======================================================================= #
  # === :curl
  # ======================================================================= #
  when :curl
    cmd = "curl -Is #{url_for_minor_version}"
    result = `#{cmd}`
    does_it_exist = false
    if result.include? "302 Found\r\n"
      does_it_exist = true
    end
    if does_it_exist # Minor increment exist, download it.
      register_and_install_this_program(url_for_minor_version)
    else
      e rev+'There was '+seagreen('no minor release')+rev+
        ' for `'+
        sfancy(url_for_minor_version)+rev+'`.'
    end
  end
  # ======================================================================= #
  # === Check the subversion next, which is simply a '.1' added.
  #
  # Since as of April 2023 this comes before the increment of the
  # outer version. The reason was to first test e. g. tumbler-4.18.1
  # rather than tumbler-4.19.0
  # ======================================================================= #
  splitted = (original_version+'.1').split('.')
  url_for_subversion = splitted.join('.')
  url_for_subversion = i.gsub(/#{original_version}/, url_for_subversion)
  try_this_URL(url_for_subversion)
  subversion_version_exists = Wget.check_if_remote_file_exists(url_for_subversion)
  if subversion_version_exists
    register_and_install_this_program(url_for_subversion)
  else
    e rev+'There was '+seagreen('no subversion release')+
      rev+' release for '+sfancy(url_for_subversion)+rev+'.'
  end
  # ======================================================================= #
  # Check for another minor-version again.
  # ======================================================================= #
  last_part       = splitted.last.to_i + 1 # Increment the last part here again.
  splitted[-1]    = last_part.to_s
  minor_increment = splitted.join('.')
  url_for_minor_version = i.gsub(/#{original_version}/, minor_increment)
  try_this_URL(url_for_minor_version)
  # ======================================================================= #
  # === Query via Wget whether a remote file exists
  # ======================================================================= #
  if Object.const_defined? :Wget
    does_it_exist = Wget.check_if_remote_file_exists(url_for_minor_version)
    if does_it_exist # Minor increment exist, download it.
      register_and_install_this_program(url_for_minor_version)
    else
      e "#{rev}There was #{seagreen('no minor release')} #{rev}for `"\
        "#{sfancy(url_for_minor_version)}#{rev}`."
    end
  else
    report_that_wget_is_missing_then_exit
  end
  # ======================================================================= #
  # === Middle Version Check
  #
  # Next check for the middle version part.
  # ======================================================================= #
  splitted     = original_version.split('.')
  splitted[1]  = (splitted[1].to_i + 1).to_s
  splitted[-1] = '0' # Last bit is 0.
  middle_increment = splitted.join('.')
  url_for_middle_version = i.gsub(/#{original_version}/, middle_increment)
  _ = "/#{original_split[0]}.#{original_split[1]}/"
  if url_for_middle_version.include? _ # Then apply a .gsub()
    url_for_middle_version.gsub!(/#{_}/,"/#{splitted[0]}.#{splitted[1]}/")
  end
  try_this_URL(url_for_middle_version)
  middle_version_exists = Wget.check_if_remote_file_exists(url_for_middle_version)
  if middle_version_exists
    register_and_install_this_program(url_for_middle_version)
  else
    e rev+'There was '+seagreen('no middle release')+
      rev+' release for '+sfancy(url_for_middle_version)+rev+
      '.'
  end
  # ======================================================================= #
  # === Major Version Check
  #
  # Next check for the middle version part.
  # ======================================================================= #
  splitted = original_version.split('.')
  splitted[0]  = splitted[0].to_i + 1
  splitted[1]  = '0' # Middle bit is now 0 as well.
  splitted[-1] = '0' # Last bit is 0.
  major_increment = splitted.join('.')
  url_for_major_version = i.gsub(/#{original_version}/, major_increment)
  _ = "/#{original_split[0]}.#{original_split[1]}/"
  if url_for_major_version.include? _ # Then apply a .gsub()
    url_for_major_version.gsub!(/#{_}/,"/#{splitted[0]}.#{splitted[1]}/")
  end
  try_this_URL(url_for_major_version)
  major_version_exists = Wget.check_if_remote_file_exists(url_for_major_version)
  if major_version_exists
    register_and_install_this_program(url_for_major_version)
  else
    e "#{rev}There was #{seagreen('no major release')} #{rev}for "\
      "#{sfancy(url_for_major_version)}#{rev}."
  end
end

#check_for_missing_homepage_entryObject

#

check_for_missing_homepage_entry

#


306
307
308
309
310
311
312
313
314
315
316
317
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 306

def check_for_missing_homepage_entry
  homepage = @dataset.homepage?.to_s
  if homepage.empty?
    if is_on_roebe?
      # =================================================================== #
      # Only roebe-systems get the following extra notifications.
      # =================================================================== #
      e "#{rev}The program `#{sfancy(short_name?)}` #{rev}has no "\
        "#{orange('homepage: entry')}#{rev}. Consider adding one."
    end
  end
end

#dataset?Boolean

#

dataset?

#

Returns:

  • (Boolean)


329
330
331
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 329

def dataset?
  @dataset
end

#determine_dataset(i = input? ) ⇒ Object

#

determine_dataset

#


360
361
362
363
364
365
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 360

def determine_dataset(
    i = input?
  )
  @dataset = action(:SanitizeCookbook, i) { :fast }
  check_for_missing_homepage_entry
end

#determine_whether_the_program_exists_or_notObject

#

determine_whether_the_program_exists_or_not

#


336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 336

def determine_whether_the_program_exists_or_not
  _ = program_name?
  # ======================================================================= #
  # === try_to_update_this_program binutils
  # ======================================================================= #
  if RBT.does_include? _
    e rev+'The program '+sfancy(_)+rev+
      ' is included. '+
      steelblue('This class can thus proceed. ')+
      gold(
        cheering_ascii_person
      )
    determine_dataset(_)
    assign_url_to_dataset_url(dataset?)
    check_for_incremented_remote_versions # Here we check for different remote versions.
  else
    e "The program #{sfancy(_)} is #{swarn('NOT')} included. "\
      "Can not proceed."
  end
end

#exit_programObject

#

exit_program

#


281
282
283
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 281

def exit_program
  exit
end

#input?Boolean Also known as: program_name?

#

input?

#

Returns:

  • (Boolean)


92
93
94
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 92

def input?
  @input
end

#register_and_install_this_program(i, shall_we_exit = true) ⇒ Object

#

register_and_install_this_program

This method will delegate into class RBT::UpdateEntry for updating the specific program at hand.

#


390
391
392
393
394
395
396
397
398
399
400
401
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 390

def register_and_install_this_program(
    i, shall_we_exit = true
  )
  e "#{rev}We found a match towards the URL `#{simp(i)}#{rev}`."
  # ======================================================================= #
  # Delegate towards class Cookbooks::UpdateEntry in this case.
  # ======================================================================= #
  RBT::UpdateEntry.new(i) {{
    repackage_into_tar_xz_format: @try_to_repackage_into_tar_xz_format
  }}
  exit_program if shall_we_exit
end

#report_that_wget_is_missing_then_exitObject

#

report_that_wget_is_missing_then_exit

#


288
289
290
291
292
293
294
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 288

def report_that_wget_is_missing_then_exit
  e 'Wget is unavailable. Please install it via:'
  e
  e '  gem install wget'
  e
  exit
end

#report_the_main_namespaceObject

#

report_the_main_namespace

#


370
371
372
373
374
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 370

def report_the_main_namespace
  opnn { :no_trailing }
  e
  e
end

#resetObject

#

reset (reset tag)

#


46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 46

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === try_to_repackage_into_tar_xz_format
  # ======================================================================= #
  @try_to_repackage_into_tar_xz_format = TRY_TO_REPACKAGE_INTO_TAR_XZ_FORMAT
  # ======================================================================= #
  # === @use_this_program_to_query_whether_the_remote_URL_exists
  #
  # The following variable can be either :wget or :curl. Since as of
  # November 2020, the default is :curl.
  # ======================================================================= #
  @use_this_program_to_query_whether_the_remote_URL_exists = :curl
  try_to_require_wget
end

#runObject

#

run (run tag)

#


406
407
408
409
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 406

def run
  report_the_main_namespace
  determine_whether_the_program_exists_or_not
end

#set_input(i = DEFAULT_PROGRAM) ⇒ Object

#

set_input

#


66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 66

def set_input(
    i = DEFAULT_PROGRAM
  )
  i = i.first if i.is_a? Array
  if i.nil? # If the user did not provide any input-argument here.
    if return_pwd.include? archive_dir?
      i = Dir['*'].first # Just pick the first entry in this case.
      if i
        if i.include? '-'
          i = ProgramInformation.return_name(i)
        end 
      else
        e 'There does not appear to be any file in that directory.'
        i = nil
      end
    else
      i = DEFAULT_PROGRAM
    end
  end
  i = i.to_s.dup.delete('-_').downcase
  @input = i
end

#short_name?Boolean

#

short_name?

#

Returns:

  • (Boolean)


322
323
324
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 322

def short_name?
  @dataset.short_name?
end

#try_this_URL(this_URL) ⇒ Object

#

try_this_URL

#


379
380
381
382
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 379

def try_this_URL(this_URL)
  e "Now trying the following URL: "\
    "#{sfancy(this_URL)}"
end

#url?Boolean

#

url?

#

Returns:

  • (Boolean)


274
275
276
# File 'lib/rbt/utility_scripts/increment_program_version/increment_program_version.rb', line 274

def url?
  @url
end