]> diplodocus.org Git - flac-archive/blobdiff - rewrite-tags
Obviously haven't run this in a while; forgot to remove my dead taglib module...
[flac-archive] / rewrite-tags
index a4650cfa7b3005b9aa00e921b258203f633a634b..6d47eaadad6873173eb7d2dc00296e36b3ec4680 100755 (executable)
@@ -8,24 +8,30 @@ from org.diplodocus.util import run_or_die
 from flac_archive.tags import Tags
 
 class SubprocessError(Exception):
-    def __init__(self, status, stderr=None):
+    def __init__(self, status, command=None, stderr=None):
+        if command is None:
+            command_msg = None
+        else:
+            command_msg = ': ' + ' '.join(command)
         if status < 0:
-            msg = 'exited due to signal %d'
+            msg = 'exited due to signal %d%s'
         else:
-            msg = 'exit status %d'
-        Exception.__init__(self, msg % (status,))
+            msg = 'exit status %d%s'
+        Exception.__init__(self, msg % (abs(status), command_msg))
         self.status = status
+        self.command = command
         self.stderr = stderr
 
 def get_tags(fn):
     tags = Tags()
-    p = Popen(['metaflac', '--no-utf8-convert', '--export-tags-to=-', fn],
-              stdout=PIPE)
+
+    command = ['metaflac', '--no-utf8-convert', '--export-tags-to=-', fn]
+    p = Popen(command, stdout=PIPE)
     tags.load(p.stdout)
 
     status = p.wait()
     if status != 0:
-        raise SubprocessError(status, p.stderr)
+        raise SubprocessError(status, command=command, stderr=p.stderr)
 
     return tags
 
@@ -34,11 +40,14 @@ def do_read(filenames):
     all_tags = {}
     # Build the collated result in this Tags object.
     coll_tags = Tags()
+    # XXX The Tags interface is horrible.  It's gotta be almost 10 years since
+    # I wrote it, so not surprising...
     for fn in filenames:
         tags = get_tags(fn)
         track_tags = tags.get('TRACKNUMBER')
         if len(track_tags) != 1:
-            raise Exception('bogus TRACKNUMBER %s for %s' % (track_tags, fn))
+            sys.stderr.write('bogus TRACKNUMBER %s: %s\n' % (track_tags, fn))
+            return 3
         track = int(track_tags[0])
         for tag, values in tags._global.iteritems():
             for value in values:
@@ -55,6 +64,7 @@ def do_read(filenames):
             for track, tags in coll_tags._tracks.iteritems():
                 del tags[tag]
     print '\n'.join(coll_tags.all())
+    return 0
 
 def main(args):
     if len(args) < 3: