Class: RBT::RemoveProgram

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

Overview

RBT::RemoveProgram

Constant Summary collapse

DEFAULT_PROGRAM =
#

DEFAULT_PROGRAM

#
'xset'

Constants inherited from LeanPrototype

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

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_options, #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_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_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #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_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_information, #return_program_name_for_gobolinux_systems, #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, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #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(this_program = DEFAULT_PROGRAM, run_already = true) ⇒ RemoveProgram

#

initialize

The default is :app_dir. This means to check under the /Programs/ hierarchy.

#


40
41
42
43
44
45
46
47
# File 'lib/rbt/utility_scripts/remove_program.rb', line 40

def initialize(
    this_program = DEFAULT_PROGRAM,
    run_already  = true
  )
  reset
  set_this_program(this_program)
  run if run_already
end

Instance Method Details

#

Delegate towards class RBT::RemoveSymlinks here.

#


175
176
177
178
# File 'lib/rbt/utility_scripts/remove_program.rb', line 175

def remove_broken_symlinks
  opne 'Removing broken symlinks next.'
  RBT::RemoveSymlinks.new
end
#

This method attempts to remove the ‘Current’ symlink.

#


158
159
160
161
162
163
164
165
166
167
# File 'lib/rbt/utility_scripts/remove_program.rb', line 158

def remove_current_link
  _ = @this_dir[0..-2]
  if File.exist? _
    result = 'Now removing'.dup
    result << ' the symlink' if File.symlink? _
    result << " `#{sdir(_)}`."
    opne result
    remove(_)
  end
end

#remove_program(this_program = @remove_this_program) ⇒ Object

#

remove_program

This is the actual powerhorse of this script.

#


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

def remove_program(
    this_program = @remove_this_program
  )
  _ = @install_type
  case _ # case tag
  # ======================================================================= #
  # === remove_program evince
  # ======================================================================= #
  when :app_dir,
       :gobo,
       :gobolinux_mode
    set_program_path(rds(programs_dir?))
    base_dir = @program_path+this_program
    @this_dir = "#{base_dir}/Current/"
    opne "#{rev}Removing program `#{sdir(@this_dir)}#{rev}` now" # Tell the user what to do.
    # ===================================================================== #
    # First, clean-up any stray symlinks into the /usr/include
    # hierarchy.
    # ===================================================================== #
    try_to_remove_stray_symlinks_from_the_usr_include_hierarchy(
      @this_dir+'include/'
    )
    remove_directory(@this_dir)
    # ===================================================================== #
    # Next, we get rid of the symlinks and the current link.
    # ===================================================================== #
    remove_broken_symlinks # Remove all broken Symlinks.
    remove_current_link    # And remove the 'Current' symlink as well.
  # ======================================================================= #
  # === :fhs
  # ======================================================================= #
  when :fhs
    # ===================================================================== #
    # Currently not implemented.
    # ===================================================================== #
  else
    e "#{rev}Unregistered Type (#{sfancy(_)})#{rev}."
  end
  run_ldconfig
end

#resetObject

#

reset

#


52
53
54
55
56
57
58
59
# File 'lib/rbt/utility_scripts/remove_program.rb', line 52

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @install_type
  # ======================================================================= #
  @install_type = :app_dir
end

#runObject

#

run (run tag)

#


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

def run
  remove_program
end

#run_ldconfigObject

#

run_ldconfig

#


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

def run_ldconfig
  system 'ldconfig' if RBT.configuration?.run_ldconfig
end

#set_program_path(i = rds(programs_dir?)) ⇒ Object

#

set_program_path

#


76
77
78
79
80
# File 'lib/rbt/utility_scripts/remove_program.rb', line 76

def set_program_path(
    i = rds(programs_dir?)
  )
  @program_path = i
end

#set_this_program(i = DEFAULT_PROGRAM) ⇒ Object

#

set_this_program

This will simply set the variable @remove_this_program.

#


66
67
68
69
70
71
# File 'lib/rbt/utility_scripts/remove_program.rb', line 66

def set_this_program(i = DEFAULT_PROGRAM)
  i = i.first if i.is_a? Array
  i = DEFAULT_PROGRAM if i.nil?
  i = i.capitalize
  @remove_this_program = i
end
#
#


85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/rbt/utility_scripts/remove_program.rb', line 85

def try_to_remove_stray_symlinks_from_the_usr_include_hierarchy(
    i = @this_dir+'include/'
  )
  possible_targets = Dir[i+'*']
  possible_targets.each {|entry|
    # ===================================================================== #
    # Specifcy the /usr/include/ target next.
    # ===================================================================== #
    target = "/usr/include/#{File.basename(entry)}"
    # ===================================================================== #
    # Ok, we must check whether the target exists, and whether it is
    # a symlink, and whether it points to @this_dir.
    # ===================================================================== #
    if File.exist?(target) and
       File.symlink?(target) and
       File.readlink(target).include?(@this_dir) # This line is just an additional safeguard.
      opne 'Now removing the symlink at `'+sfile(target)+'` as well.'
      delete(target)
    end
  }
end