/usr/lib/python3/dist-packages/diffoscope/tempfiles.py is in diffoscope 93ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | # -*- coding: utf-8 -*-
#
# diffoscope: in-depth comparison of files, archives, and directories
#
# Copyright © 2016 Chris Lamb <lamby@debian.org>
#
# diffoscope is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# diffoscope is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with diffoscope. If not, see <https://www.gnu.org/licenses/>.
import os
import logging
import tempfile
_DIRS, _FILES = [], []
logger = logging.getLogger(__name__)
def get_named_temporary_file(*args, **kwargs):
kwargs['suffix'] = kwargs.pop('suffix', '_diffoscope')
f = tempfile.NamedTemporaryFile(*args, **kwargs)
_FILES.append(f.name)
return f
def get_temporary_directory(*args, **kwargs):
kwargs['suffix'] = kwargs.pop('suffix', '_diffoscope')
d = tempfile.TemporaryDirectory(*args, **kwargs)
_DIRS.append(d)
return d
def clean_all_temp_files():
logger.debug("Cleaning %d temp files", len(_FILES))
for x in _FILES:
try:
os.unlink(x)
except FileNotFoundError:
pass
except:
logger.exception("Unable to delete %s", x)
logger.debug("Cleaning %d temporary directories", len(_DIRS))
for x in _DIRS:
try:
x.cleanup()
except PermissionError:
# Recursively reset the permissions of temporary directories prior
# to deletion to ensure that non-writable permissions such as 0555
# are removed and do not cause a traceback. (#891363)
for dirpath, ys, _ in os.walk(x.name):
for y in ys:
os.chmod(os.path.join(dirpath, y), 0o777)
# try removing it again now
x.cleanup()
except FileNotFoundError:
pass
except:
logger.exception("Unable to delete %s", x)
|