Class: RBT::Cookbooks::FindDuplicateBinaries
- Inherits:
-
Base
show all
- Defined in:
- lib/rbt/cookbooks/find_duplicate_binaries.rb
Overview
RBT::Cookbooks::FindDuplicateBinaries
Constant Summary
collapse
- DELETE_DUPLICATE_FILES =
#
DELETE_DUPLICATE_FILES
If this constant is true then we will also delete the duplicate binaries. This can be toggled by the user on the commandline.
By default, we will NOT delete the duplicate entries and this will also not be changed. The user specifically has to enable it on his/her own.
#
false
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
#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, #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_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 = nil, run_already = true) ⇒ FindDuplicateBinaries
48
49
50
51
52
53
54
55
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 48
def initialize(
i = nil,
run_already = true
)
reset
set_input(i)
run if run_already
end
|
Instance Method Details
#are_the_two_target_directories_the_same_directory? ⇒ Boolean
#
are_the_two_target_directories_the_same_directory?
#
264
265
266
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 264
def are_the_two_target_directories_the_same_directory?
sysdir == ubin_dir
end
|
#delete_duplicates? ⇒ Boolean
72
73
74
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 72
def delete_duplicates?
@delete_duplicate_files
end
|
#detect_duplicate_files ⇒ Object
#
detect_duplicate_files
This will detect all duplicate files.
#
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 200
def detect_duplicate_files
@duplicate_files = [] ubin_array = @usr_bin.map {|entry| File.basename(entry) }.sort
sysbin_array = @system_executables.map {|entry| File.basename(entry) }.sort
counter = 0
ubin_array.each {|entry|
if sysbin_array.include? entry
counter += 1
_ = ("(#{simp(counter.to_s)}) ").rjust(20)
e _+'Yes, '+slateblue(entry)+' is included. It is thus '+
steelblue('a duplicate')+'.'
@duplicate_files << entry
end
}
@duplicate_files.sort! end
|
#do_delete_duplicate_files ⇒ Object
#
do_delete_duplicate_files
This will delete only files in the /usr/bin/ hierarchy.
#
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 168
def do_delete_duplicate_files
if delete_duplicates? and !@duplicate_files.empty?
opne 'Now deleting duplicate files from the '+sdir(ubin?)+
rev+' directory.'
@duplicate_files.each {|entry|
_ = sysbin?+File.basename(entry)
if File.exist? _ e 'The file path at '+
sfile(ubin?+entry)+
' is a duplicate '\
'of `'+sfile(File.readlink(_))+'`.'
e "Thus we can delete `#{sfile(ubin?+entry)}`."
delete(ubin?+entry) end
}
end
end
|
#found_duplicates? ⇒ Boolean
110
111
112
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 110
def found_duplicates?
!@duplicate_files.empty?
end
|
#grab_files_from_system_index_bin(i = sysbin_directory?)
) ⇒ Object
#
grab_files_from_system_index_bin
This will typically obtain all entries from /System/Index/bin/.
#
191
192
193
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 191
def grab_files_from_system_index_bin(i = sysbin_directory?)
@system_executables = Dir["#{i}*"]
end
|
#grab_files_from_usr_bin ⇒ Object
#
grab_files_from_usr_bin
#
95
96
97
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 95
def grab_files_from_usr_bin
@usr_bin = Dir["#{ubin_dir}*"]
end
|
88
89
90
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 88
def input?
@input
end
|
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 117
def (
i = @input
)
i = i.first if i.is_a? Array
case i when /^-?-?help$/i
show_help_options
exit
when /^-?-?delete$/i,
/^-?-?purge$/i,
'--toggle'
@delete_duplicate_files = true end
end
|
#report_duplicate_files ⇒ Object
#
report_duplicate_files
This method will report whether we have duplicate files.
#
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 236
def report_duplicate_files
if found_duplicates?
opne 'We have found these '+simp(@duplicate_files.size.to_s)+' '\
'duplicates.'
opne "They originate from the directory `#{sdir(ubin_dir?)}` and"
opne 'are compared to the directory `'+sdir(sysbin_dir?)+'.'
else
opne 'We did not find any duplicate entries. Thus, we will '\
'do no further action.'
end
end
|
#reset ⇒ Object
60
61
62
63
64
65
66
67
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 60
def reset
super()
infer_the_namespace
@delete_duplicate_files = DELETE_DUPLICATE_FILES
end
|
#run ⇒ Object
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 271
def run
report_to_the_user_what_we_will_do_next
if are_the_two_target_directories_the_same_directory?
opne 'The two directories are the same, so we can not '\
'compare them -'
opne 'it would make no sense.'
else
grab_files_from_system_index_bin
grab_files_from_usr_bin
detect_duplicate_files
report_duplicate_files
do_delete_duplicate_files if delete_duplicates?
end
end
|
79
80
81
82
83
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 79
def set_input(i = '')
i = i.first if i.is_a? Array
i = i.to_s.dup if i
@input = i
end
|
#show_help_options ⇒ Object
#
show_help_options (help tag)
#
141
142
143
144
145
146
147
148
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 141
def show_help_options
e 'Currently we support only one option:'
e
' --delete # delete duplicate files found in '\
'the '+sdir(ubin?)+
(' hierarchy') e
end
|
#sysdir? ⇒ Boolean
Also known as:
sysbin?, sysdir, main_dir?, sysbin_dir?
#
sysdir (sysdir tag)
This method will refer to “/System/Index/bin” normally - at the least on a GoboLinux-like system.
#
156
157
158
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 156
def sysdir?
sysbin_directory?
end
|
#ubin_dir ⇒ Object
Also known as:
ubin?, ubin_dir?
102
103
104
|
# File 'lib/rbt/cookbooks/find_duplicate_binaries.rb', line 102
def ubin_dir
'/usr/bin/'
end
|