summary refs log tree commit diff
diff options
context:
space:
mode:
authorYen Chi Hsuan <yan12125@gmail.com>2015-05-14 14:51:00 +0800
committerYen Chi Hsuan <yan12125@gmail.com>2015-05-14 14:51:00 +0800
commitfbff30d2dbc6462c628384ea5960c2461e7cdcca (patch)
treef52cf3837802c1f1ade1fd7aec49f882a517d1a4
parent86c7fdb17c0dcbff88a8daa131fddc57b6304b83 (diff)
downloadyoutube-dl-fbff30d2dbc6462c628384ea5960c2461e7cdcca.tar.gz
youtube-dl-fbff30d2dbc6462c628384ea5960c2461e7cdcca.tar.xz
youtube-dl-fbff30d2dbc6462c628384ea5960c2461e7cdcca.zip
[xattr] Catch 'Argument list too long'
-rw-r--r--youtube_dl/postprocessor/xattrpp.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/youtube_dl/postprocessor/xattrpp.py b/youtube_dl/postprocessor/xattrpp.py
index 16f2966e9..27e273000 100644
--- a/youtube_dl/postprocessor/xattrpp.py
+++ b/youtube_dl/postprocessor/xattrpp.py
@@ -25,6 +25,8 @@ class XAttrMetadataError(PostProcessingError):
         if (self.code in (errno.ENOSPC, errno.EDQUOT) or
                 'No space left' in self.msg or 'Disk quota excedded' in self.msg):
             self.reason = 'NO_SPACE'
+        elif self.code == errno.E2BIG or 'Argument list too long' in self.msg:
+            self.reason = 'VALUE_TOO_LONG'
         else:
             self.reason = 'NOT_SUPPORTED'
 
@@ -103,8 +105,11 @@ class XAttrMetadataPP(PostProcessor):
                                [encodeArgument(o) for o in opts] +
                                [encodeFilename(path, True)])
 
-                        p = subprocess.Popen(
-                            cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
+                        try:
+                            p = subprocess.Popen(
+                                cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
+                        except EnvironmentError as e:
+                            raise XAttrMetadataError(e.errno, e.strerror)
                         stdout, stderr = p.communicate()
                         stderr = stderr.decode('utf-8', 'replace')
                         if p.returncode != 0:
@@ -158,6 +163,9 @@ class XAttrMetadataPP(PostProcessor):
                 self._downloader.report_warning(
                     'There\'s no disk space left or disk quota exceeded. ' +
                     'Extended attributes are not written.')
+            elif e.reason == 'VALUE_TOO_LONG':
+                self._downloader.report_warning(
+                    'Unable to write extended attributes due to too long values.')
             else:
                 self._downloader.report_error(
                     'This filesystem doesn\'t support extended attributes. ' +