Class: RBT::RegisterProgramFilesIntoYamlDatabase

Inherits:
Base show all
Defined in:
lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb

Overview

RBT::RegisterProgramFilesIntoYamlDatabase

Constant Summary collapse

DEFAULT_INPUT_DIRECTORY =
#

DEFAULT_INPUT_DIRECTORY

#
'/home/Programs/Xload/Current'

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

#

initialize

The first argument tells us where we should register.

#


75
76
77
78
79
80
81
82
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 75

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

Class Method Details

.batchObject

#

RBT::RegisterProgramFilesIntoYamlDatabase.batch

This method will run through all entries at /Programs, and register it.

#


305
306
307
308
309
310
311
312
313
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 305

def self.batch
  files = Dir["#{RBT.programs_directory?}*"].map {|entry| entry << '/Current/'}
  files.sort.each {|entry|
    e "Working on #{sfancy(entry)} next."
    e
    new(entry) # Instantiate it here.
    e
  }
end

Instance Method Details

#entries?Boolean Also known as: files?

#

entries?

#

Returns:

  • (Boolean)


278
279
280
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 278

def entries?
  @internal_hash[:entries]
end

#fetch_entriesObject

#

fetch_entries

#


165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 165

def fetch_entries
  where = where?.dup.strip
  if where.include? '$'
    where = convert_global_env(where)
  end
  orev "Obtaining all files from `#{sdir(where?)}#{rev}`."
  path = "#{@register_where}**/**"
  _ = Dir[path]
  # ======================================================================= #
  # Select only files:
  # ======================================================================= #
  _.select! {|entry| File.file? entry }
  @internal_hash[:entries] = _
end

#register_into_yaml_fileObject

#

register_into_yaml_file

This method will use the Current symlink.

#


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
270
271
272
273
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 206

def register_into_yaml_file # This will register @array_register_these_files finally
  _ = register_where?
  set_versioned_directory(_)
  if (_.count('/') < 3) and !_.end_with?('Current/')
    _ << 'Current/'
    unless File.symlink?(_) and return_pwd.include?(programs_dir?) # Try to re-create the Symlink here if we are in the /Programs directory.
      target = @register_where
      target = File.dirname(target) if target.end_with? 'Current/'
      if File.directory? target
        cd(target)
        target = get_directories_from(target).sort.first
        set_versioned_directory(target)
        if target
          remove_directory('Current') if File.directory?('Current') # Must be a Symlink.
          symlink(target.chop, _.chop) # .chop to get rid of '/'.
        end
      else
        opne sdir(target)+swarn(' is not a directory.')
      end
    end
  end
  _ << 'yaml/'
  mkdir _ unless File.directory? _ # The directory should exist.
  # ======================================================================= #
  # We will store in a yaml/ subdirectory, in a file called
  # registered_files.yml
  # ======================================================================= #
  registered_files = rds("#{_}registered_files.yml")
  if run_simulation?
    e "We would now remove #{simp(registered_files.to_s)} if we"
    e 'would not be in simulation mode.'
  else
    # ===================================================================== #
    # Get rid of the old .yml file, if it exists.
    # ===================================================================== #
    remove(registered_files) if File.exist? registered_files
  end
  unless run_simulation?
    if entries?.empty?
      orev 'We will not store the registered files as'
      orev 'the dataset is empty.'
    else
      orev "Storing the dataset (#{sfancy(registered_files.size.to_s)}"\
           " #{rev}files) into:"
      orev "  `#{sfile(registered_files)}`"
      _ = entries?.map {|entry|
        entry.sub(/#{@register_where}/,'')
      }
      _.reject! {|entry|
        entry.include?  'registered_files.yml'
      } # Reject self-name.
      _.reject! {|entry|
        entry.end_with? 'Resources/full_configure_command'    or
        entry.end_with? 'Resources/full_configure_command.md' or
        entry.end_with? 'Resources/Architecture'
      }
      _.map! {|entry| entry.gsub(/#{Regexp.quote(@versioned_directory)}/,'')   }
      unless _.empty?
        # ================================================================= #
        # We must sort if alphabetically next:
        # ================================================================= #
        _    = _.sort
        what = YAML.dump(_)
        save_what_into( what, registered_files )
      end
    end
  end
end

#register_where?Boolean Also known as: where?

#

register_where?

#

Returns:

  • (Boolean)


183
184
185
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 183

def register_where?
  @register_where
end

#report_filesObject

#

report_files (report tag)

#


285
286
287
288
289
290
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 285

def report_files
  opnn
  entries?.each {|entry|
    e entry
  }
end

#resetObject

#

reset (reset tag)

#


87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 87

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === :entries
  # ======================================================================= #
  @internal_hash[:entries] = []
  # ======================================================================= #
  # === @run_simulation
  # ======================================================================= #
  @run_simulation = false
end

#runObject

#

run (run tag)

#


295
296
297
298
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 295

def run
  fetch_entries
  register_into_yaml_file
end

#run_simulation=(i) ⇒ Object

#

run_simulation=

#


197
198
199
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 197

def run_simulation=(i)
  @run_simulation = i
end

#run_simulation?Boolean Also known as: run_simulation

#

run_simulation?

#

Returns:

  • (Boolean)


190
191
192
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 190

def run_simulation?
  @run_simulation
end

#set_register_where(i = DEFAULT_INPUT_DIRECTORY) ⇒ Object

#

set_register_where

#


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
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 103

def set_register_where(
    i = DEFAULT_INPUT_DIRECTORY
  )
  i = DEFAULT_INPUT_DIRECTORY if i.nil?
  i = i.to_s.dup # Get a copy here. Must be a String.
  case i # case tag
  # ========================================================================= #
  # === register_program_files --batch
  # ========================================================================= #
  when /^-?-?batch$/
    self.class.batch
  # ========================================================================= #
  # === register_program_files --pwd
  #
  # This entry point can, for example, be invoked in a directory such
  # as /home/Programs/Htop/Current.
  # ========================================================================= #
  when /^-?-?pwd$/i,
       'Dir.pwd',
       'cwd',
       'HERE' # Handle pwd
    i = return_pwd
  end
  i = rds(i)
  i << '/' unless i.end_with? '/'
  # ========================================================================= #
  # === Ensure that a trailing "Current/" string exists
  #
  # Append 'Current/'. A proper target must end with 'Current/', since
  # that is the symlink scheme used on GoboLinux.
  # ========================================================================= #
  if i.include? programs_dir?
    n_slashes = i.sub(/^#{Regexp.quote(programs_dir?)}/, '').count('/')
    if n_slashes < 2
      i << 'Current/' unless i.include? 'Current/'
    end
  end
  # ========================================================================= #
  # i.delete!('-') if i.include? '-' # Added Aug 2014.
  # ^^^ Disabled the above as of Sep 2017. If we want to use this, then
  # we may have to use a configuration setting for the whole RBT
  # project. If this is done, then we can re-enable the above,
  # but for now, it stays disabled.
  # ========================================================================= #
  @register_where = i
end

#set_versioned_directory(i) ⇒ Object

#

set_versioned_directory

We need to keep track here so that we can get rid of the version string of the directory when we save into the yaml file.

#


156
157
158
159
160
# File 'lib/rbt/utility_scripts/register_program_files_into_yaml_database.rb', line 156

def set_versioned_directory(i)
  i = i.to_s.dup
  i << '/' unless i.end_with? '/'
  @versioned_directory = i
end