diff --git a/bucket-tool b/bucket-tool index f00213f..a311219 100755 --- a/bucket-tool +++ b/bucket-tool @@ -29,7 +29,8 @@ Actions: restore : Restore previous state of file stored in bucket. Value can be hash or filename/filepath : Note: To restore to an alternate path you will need to provide the path via the -o flag : - backup : Backup the file to the bucket (will work relatively unless full path is provided) + backup : Backup the file to the bucket + delete : Delete the entry from the bucket Restore Flags: -o | --output-file : Used to provide an alternate restoral path for the restore function @@ -235,7 +236,7 @@ if not (ARGV & ['-d', '--debug']).empty? end i=0 case ARGV[i] - when 'search', 'get', 'restore', 'backup' + when 'search', 'get', 'restore', 'backup', 'delete' $CONFIG[:action]=ARGV[i] log "$CONFIG[:action] was set to #{ARGV[i]}" log "user provided search action ARGV[i.next] == #{ARGV[i.next]}" @@ -285,6 +286,9 @@ while i < ARGV.count usage exit end + when '-d', '--debug' + log "#{ARGV[i]} as specified, and the $CONFIG[:debug] flag was already enabled" + i+=1 when '-b', '--bucket' log "user provided ARGV[i.next] == #{ARGV[i.next]}" @@ -413,6 +417,54 @@ class BucketEntry end end + def delete + returncode = true + log "User has chosen to delete this BucketEntry" + + Dir.chdir(@entry_dir){ + log "Changed to #{@entry_dir} to delete children files" + Dir.children(@entry_dir).each{|file| + log "Deleting #{file}" + if File.unlink(file) + log "#{file} deleted" + else + puts "There was an issue deleting #{File.expand_path(file)}" + exit + end + } + } + + log "Deleting #{@entry_dir}" + if Dir.delete(@entry_dir) + log "Deleted #{@entry_dir}" + else + puts "There was an issue when attempting to delete #{@entry_dir}" + end + + dir = @entry_dir + + log "Beginning to delete trailing dirs unless one has children other than those that make up #{File.dirname(@entry_dir)}" + for i in 1..8 + dir = File.dirname(dir) + log "Beginning to delete #{dir}" + children = Dir.children(dir) + log "Dir[#{dir}] children found to be #{children.join(',')}" + if children.empty? + if Dir.delete(dir) + log "Deleted #{dir}" + else + puts "There was an issue when attempting to delete #{dir}" + exit + end + else + log "#{dir} showed to contain another child directory. Not deleting and breaking loop" + break + end + end + + returncode + end + end class Bucket @@ -648,6 +700,22 @@ def backup_file (bucket) puts "File #{$CONFIG[:search_term]} was backed up to #{entry_dir}" end +def delete_entry (bucket) + if bucket.entries.has_key? $CONFIG[:search_term] + entry = bucket.entries[$CONFIG[:search_term]] + else + puts "BucketEntry[#{$CONFIG[:search_term]}] Does not exist. Please make sure you provided the correct hash value" + end + + puts "Corresponding Entry: #{entry.info}" + if get_verification "Are you sure you want to delete BucketEntry[#{entry.hash}]? " + if get_verification "This cannot be undone. Are you sure you want to continue?: " + entry.delete + end + end + +end + # END: Work Functions @@ -674,6 +742,9 @@ if __FILE__ == $0 when 'backup' backup_file bucket + + when 'delete' + delete_entry bucket end end