Class: RBT::CheckForInvalidCurrentSymlinks

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

Overview

Constant Summary

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

#

initialize

#


28
29
30
31
32
33
34
35
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 28

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

Class Method Details

.[](i = ARGV) ⇒ Object

#
#


210
211
212
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 210

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

Instance Method Details

#autocorrect_erroneous_entriesObject

#

autocorrect_erroneous_entries

#


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

def autocorrect_erroneous_entries
  _ = main_array?
  unless _.empty?
    _.each {|entry|
      opne "Next autocorrecting `#{sfancy(entry)}`."
      # =================================================================== #
      # First, determine the possible targets. One of these targets will
      # become our new main symlink.
      # =================================================================== #
      dirname = File.dirname(entry)
      possible_targets = Dir[dirname+'/*'].select {|line|
        File.basename(line) =~ /^\d+/
      }.sort_by {|line|
        File.basename(line)
      }.reverse
      this_target = possible_targets.first
      # =================================================================== #
      # Then, remove that directory.
      # =================================================================== #
      if File.directory? entry
        remove_directory(entry)
      end
      # =================================================================== #
      # Finally, set up the new symlink there. The old_target is the
      # current program version of the program in question, such
      # as "/Programs/Htop/2.0.2".
      # =================================================================== #
      old_target = this_target
      new_target = entry # This is the entry, yup.
      if File.exist? old_target
        symlink(old_target, new_target)
      else
        opnn; no_target_exists_at(old_target)
      end
    }
  end
end
#

This will fill up the Array @array_these_entries_are_not_symlinks.

Note that this method will NOT report anything - look at the report method instead if you require output from this class.

#


181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 181

def discover_which_entries_are_not_symlinks
  _ = programs_directory?
  array_all_programs = Dir["#{_}*"].sort
  array_all_programs.each {|entry|
    _ = rds(entry+'/Current')
    if File.exist? _
      is_it_a_symlink = File.symlink?(_)
      unless is_it_a_symlink
        @array_these_entries_are_not_symlinks << _
      end
    end
  }
end

#inform_the_user_what_can_be_done_about_incorrect_entriesObject

#

inform_the_user_what_can_be_done_about_incorrect_entries

#


72
73
74
75
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 72

def inform_the_user_what_can_be_done_about_incorrect_entries
  opne "You can correct this by passing "\
       "#{orange('--autocorrect')} to this class."
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


65
66
67
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 65

def input?
  @input
end

#main_array?Boolean

#

main_array?

#

Returns:

  • (Boolean)


108
109
110
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 108

def main_array?
  @array_these_entries_are_not_symlinks
end
#

menu (menu tag)

#


80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 80

def menu(i)
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i
    # ===================================================================== #
    # === check_for_invalid_current_symlinks --help
    # ===================================================================== #
    when /^-?-?help$/i
      opne 'Right now only '+steelblue('--autocorrect')+
           ' exists as an option.'
      opne 'Alternatively, do not pass any argument to this class.'
      exit
    # ===================================================================== #
    # === check_for_invalid_current_symlinks --autocorrect
    #
    # The user has to specifically enable this.
    # ===================================================================== #
    when /^-?-?autocorrect/
      autocorrect_erroneous_entries
      exit
    end
  end
end

#notify_the_user_that_everything_appears_to_be_fineObject

#

notify_the_user_that_everything_appears_to_be_fine

#


168
169
170
171
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 168

def notify_the_user_that_everything_appears_to_be_fine
  opne 'Everything appears to be fine. The checked '
  opne "directory was `#{sdir(programs_dir?)}`"
end

#resetObject

#

reset (reset tag)

#


40
41
42
43
44
45
46
47
48
49
50
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 40

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @array_these_entries_are_not_symlinks
  #
  # We collect all non-symlinks into the following Array.
  # ======================================================================= #
  @array_these_entries_are_not_symlinks = []
  discover_which_entries_are_not_symlinks # Fill up our main Array first, always.
end

#runObject

#

run (run tag)

#


198
199
200
201
202
203
204
205
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 198

def run
  show_which_entries_are_not_symlinks
  if main_array?.empty?
    notify_the_user_that_everything_appears_to_be_fine
  else
    inform_the_user_what_can_be_done_about_incorrect_entries
  end
end

#set_input(i = '') ⇒ Object

#

set_input

#


55
56
57
58
59
60
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 55

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


156
157
158
159
160
161
162
163
# File 'lib/rbt/utility_scripts/check_for_invalid_current_symlinks.rb', line 156

def show_which_entries_are_not_symlinks
  unless main_array?.empty?
    main_array?.each {|entry|
      e "#{rev}Note that #{sfancy(entry.ljust(37))} is #{sfancy('NOT')}"\
        " a symlink."
    }; e
  end
end