diff options
| author | Yen Chi Hsuan <yan12125@gmail.com> | 2015-05-14 14:51:00 +0800 | 
|---|---|---|
| committer | Yen Chi Hsuan <yan12125@gmail.com> | 2015-05-14 14:51:00 +0800 | 
| commit | fbff30d2dbc6462c628384ea5960c2461e7cdcca (patch) | |
| tree | f52cf3837802c1f1ade1fd7aec49f882a517d1a4 | |
| parent | 86c7fdb17c0dcbff88a8daa131fddc57b6304b83 (diff) | |
[xattr] Catch 'Argument list too long'
| -rw-r--r-- | youtube_dl/postprocessor/xattrpp.py | 12 | 
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. ' +  | 
