Browse Source

Fix `tootctl media remove-orphans` choking on unknown files in storage (#13765)

Fix #13762

Catch tootctl interrupt to prevent confusing stacktrace
Eugen Rochko 3 years ago
parent
commit
199bbbcb9f
2 changed files with 24 additions and 1 deletions
  1. 7 1
      bin/tootctl
  2. 17 0
      lib/mastodon/media_cli.rb

+ 7 - 1
bin/tootctl

@@ -1,5 +1,11 @@
 #!/usr/bin/env ruby
 APP_PATH = File.expand_path('../config/application', __dir__)
+
 require_relative '../config/boot'
 require_relative '../lib/cli'
-Mastodon::CLI.start(ARGV)
+
+begin
+  Mastodon::CLI.start(ARGV)
+rescue Interrupt
+  exit(130)
+end

+ 17 - 0
lib/mastodon/media_cli.rb

@@ -88,6 +88,11 @@ module Mastodon
             path_segments = object.key.split('/')
             path_segments.delete('cache')
 
+            if path_segments.size != 7
+              progress.log(pastel.yellow("Unrecognized file found: #{object.key}"))
+              next
+            end
+
             model_name      = path_segments.first.classify
             attachment_name = path_segments[1].singularize
             record_id       = path_segments[2..-2].join.to_i
@@ -127,6 +132,11 @@ module Mastodon
           path_segments = key.split(File::SEPARATOR)
           path_segments.delete('cache')
 
+          if path_segments.size != 7
+            progress.log(pastel.yellow("Unrecognized file found: #{key}"))
+            next
+          end
+
           model_name      = path_segments.first.classify
           record_id       = path_segments[2..-2].join.to_i
           attachment_name = path_segments[1].singularize
@@ -246,6 +256,11 @@ module Mastodon
       path_segments = path.split('/')[2..-1]
       path_segments.delete('cache')
 
+      if path_segments.size != 7
+        say('Not a media URL', :red)
+        exit(1)
+      end
+
       model_name = path_segments.first.classify
       record_id  = path_segments[2..-2].join.to_i
 
@@ -294,6 +309,8 @@ module Mastodon
         segments = object.key.split('/')
         segments.delete('cache')
 
+        next if segments.size != 7
+
         model_name = segments.first.classify
         record_id  = segments[2..-2].join.to_i