Class: RBT::Action::RemoveOutdatedArchives

Inherits:
RBT::Action show all
Defined in:
lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb

Overview

RBT::Action::RemoveOutdatedArchives

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 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(i = ARGV, run_already = true, &block) ⇒ RemoveOutdatedArchives

#

initialize

#


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 48

def initialize(
    i           = ARGV,
    run_already = true,
    &block
  )
  reset
  set_commandline_arguments(i)
  case run_already
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet
    run_already = false
  end
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::RemoveOutdatedArchives[]

#


354
355
356
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 354

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

Instance Method Details

#add(i) ⇒ Object

#

add (add tag)

This method will simply append (aka add) to the main Array of this class.

#


246
247
248
249
250
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 246

def add(i)
  @array_work_on_these_programs << i
  @array_work_on_these_programs.flatten!
  @array_work_on_these_programs.compact!
end

#format_type?Boolean

#

format_type?

#

Returns:

  • (Boolean)


99
100
101
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 99

def format_type?
  @look_only_for_these_archive_types
end
#

menu (menu tag)

#


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
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 106

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    if i.start_with?(':') or i.is_a?(Symbol) or i.start_with?('--')
      if i.is_a?(String) and i.include?(':')
        i = i.dup if i.frozen?
        i.delete!(':')
      end
      case i # case
      # =================================================================== #
      # === all_programs=n
      #
      # Use this entry with care.
      #
      # Invocation example:
      #
      #   oldbegone --all-programs=5
      #
      # =================================================================== #
      when /^-?-?all(_|-)?programs=(\d{1,2})$/i
        array = []
        n_programs_as_threshold = $2.to_i
        available_programs?.each {|entry|
          _ = Dir[src_dir?+entry+'/*']
          if _.size >= n_programs_as_threshold
            array << entry
          end
        }
        add(array) 
      # =================================================================== #
      # === all_programs
      #
      # Use this entry with care.
      #
      # Invocation example:
      #
      #   oldbegone --all-programs
      #
      # =================================================================== #
      when /^-?-?all(_|-)?programs$/i,
           :all_programs
        add available_programs?
      # =================================================================== #
      # === python_addons
      #
      # Invocation example:
      #
      #   oldbegone --python-addons
      #
      # =================================================================== #
      when /^-?-?python(_|-)?addons$/i,
           :python_addons,
           /^-?-?python$/i
        add RBT.return_python_addons
      # =================================================================== #
      # === xfce_desktop
      #
      # Invocation example:
      #
      #   oldbegone --xfce-desktop
      #
      # =================================================================== #
      when /^-?-?xfce(_|-)?desktop$/i,
           :xfce_desktop,
           /^-?-?xfce$/i
        add RBT.return_xfce_desktop_components
      # =================================================================== #
      # === mate_desktop
      #
      # Invocation example:
      #
      #   oldbegone --mate-desktop
      #
      # =================================================================== #
      when /^-?-?mate(_|-)?desktop$/i,
           :mate_desktop,
           /^-?-?mate$/i
        add RBT.return_mate_desktop_components
      # =================================================================== #
      # === kde_foundation
      #
      # Invocation example:
      #
      #   oldbegone --kde-foundation
      #
      # =================================================================== #
      when /^-?-?kde(_|-)?foundation$/i,
           :kde_foundation,
           :kde5_foundation
        add RBT.return_kde5_foundation
      # =================================================================== #
      # === kde_plasma
      #
      # Invocation example:
      #
      #   oldbegone --kde-plasma
      #
      # =================================================================== #
      when /^-?-?kde(_|-)?plasma$/i,
           :kde_plasma
        add RBT.return_kde5_plasma
      # =================================================================== #
      # === xorg_apps
      #
      # Invocation example:
      #
      #   oldbegone --xorg-apps
      #
      # =================================================================== #
      when /^-?-?xorg(_|-)?apps$/i,
           :xorg_apps
        add RBT.return_xorg_apps
      # =================================================================== #
      # === kde_applications
      #
      # Return all KDE5 applications next.
      #
      # Invocation example:
      #
      #   old_are_gone --kde_apps
      #
      # =================================================================== #
      when /^-?-?kde(_|-)?applications$/i,
           :kde_applications,
           /^-?-?kde(_|-)?apps$/i,
           :kde_apps
        add RBT.return_kde5_applications
      end
    end
  end
end

#notify_the_user_as_to_how_many_files_were_removedObject

#

notify_the_user_as_to_how_many_files_were_removed

#


255
256
257
258
259
260
261
262
263
264
265
266
267
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 255

def notify_the_user_as_to_how_many_files_were_removed
  if @n_files_were_removed > 0
    opne 'A total of '+sfancy(@n_files_were_removed.to_s)+
         rev+' files were removed.'
    opne "#{rev}The total filesize of these archives was: "+
            sfancy(@total_file_size.to_s)+
            tomato('B')+' '+
            sfancy(
              (@total_file_size.to_f / (1000.0 * 1000.0)).round(1)
            )+
            tomato('MB')
  end
end

#purge_these_entries(i) ⇒ Object

#

purge_these_entries (purge tag)

#


329
330
331
332
333
334
335
336
337
338
339
340
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 329

def purge_these_entries(i)
  if i.is_a? Array
    i.flatten.each {|entry| purge_these_entries(entry) }
  else
    if File.file?(i) and i.end_with?(format_type?)
      opne "#{rev}The entry `#{sfile(i)}#{rev}` will be removed next."
      @n_files_were_removed += 1
      @total_file_size += File.size(i)
      remove_file(i)
    end
  end
end

#resetObject

#

reset (reset tag)

#


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 68

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @look_only_for_these_archive_types
  #
  # The next variable determines which archive types we are looking
  # for.
  # ======================================================================= #
  @look_only_for_these_archive_types = '.tar.xz'
  # ======================================================================= #
  # === @array_work_on_these_programs
  #
  # This Array keeps track on the programs that will be handled by this
  # class. It will be empty on startup, so as to require the user to
  # tell this class which programs it ought to handle.
  # ======================================================================= #
  @array_work_on_these_programs = []
  # ======================================================================= #
  # === @n_files_were_removed
  # ======================================================================= #
  @n_files_were_removed = 0
  # ======================================================================= #
  # === @total_file_size
  # ======================================================================= #
  @total_file_size = 0
end

#runObject

#

run (run tag)

#


345
346
347
348
349
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 345

def run
  menu
  work_through_the_programs
  notify_the_user_as_to_how_many_files_were_removed
end

#work_on_which_programs?Boolean

#

work_on_which_programs?

#

Returns:

  • (Boolean)


272
273
274
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 272

def work_on_which_programs?
  @array_work_on_these_programs
end

#work_through_the_programs(i = work_on_which_programs? ) ⇒ Object

#

work_through_the_programs

This is the method that will iterate over all available program.

#


281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
# File 'lib/rbt/actions/individual_actions/remove_outdated_archives/remove_outdated_archives.rb', line 281

def work_through_the_programs(
    i = work_on_which_programs?
  )
  if i.empty?
    opne "#{rev}No program was given to remove its outdated archive(s)."
  else
    i.each {|this_program|
      this_directory = "#{src_dir?}#{this_program}/"
      opne "#{rev}Working on the directory #{sdir(this_directory)} #{rev}next:"
      # =================================================================== #
      # Obtain all entries of that directory next, in a sorted manner. This
      # may yield wrong results though, such as:
      #
      #   kcontacts-5.114.0.tar.xz
      #   kcontacts-5.93.0.tar.xz
      #
      # Applying .max there yields the wrong result.
      # =================================================================== #
      use_this_regex = /\d{1,8}\.?\d{0,12}\.?\d{0,12}/ # See: https://rubular.com/r/ypXFhDrhYI4NEN
      files_in_that_directory = Dir[
        this_directory+'*'+@look_only_for_these_archive_types
      ].sort_by {|entry|
        entry = remove_archive_at_the_end(entry)
        extracted_number = entry.scan(use_this_regex).flatten
        if extracted_number.respond_to?(:first)
          extracted_number = extracted_number.first
        end
        Gem::Version.new(extracted_number) # Make use of Gem::Version to get the "real" version.
      }.reverse
      # =================================================================== #
      # Next, determine the highest entry that will be kept.
      # =================================================================== #
      highest_entry = files_in_that_directory[0] # .max
      # =================================================================== #
      # The next variable denotes which entries will be purged (aka
      # removed).
      # =================================================================== #
      array_of_entries_that_are_to_be_purged = files_in_that_directory.reject {|entry|
        entry.include? highest_entry
      }
      purge_these_entries(array_of_entries_that_are_to_be_purged)
    }
  end
end