Rocksolid Light

News from da outaworlds

mail  files  register  groups  login

Message-ID:  

Be free and open and breezy! Enjoy! Things won't get any better so get used to it.


comp / comp.lang.python / Re: shutil.rmtree() fails when used in Fedora (rpm) "mock" environment

SubjectAuthor
o Re: shutil.rmtree() fails when used in Fedora (rpm) "mock" environmentMRAB

1
Subject: Re: shutil.rmtree() fails when used in Fedora (rpm) "mock" environment
From: MRAB
Newsgroups: comp.lang.python
Date: Thu, 24 Oct 2024 14:45 UTC
References: 1 2
Path: eternal-september.org!news.eternal-september.org!feeder2.eternal-september.org!fu-berlin.de!uni-berlin.de!not-for-mail
From: python@mrabarnett.plus.com (MRAB)
Newsgroups: comp.lang.python
Subject: Re: shutil.rmtree() fails when used in Fedora (rpm) "mock" environment
Date: Thu, 24 Oct 2024 15:45:47 +0100
Lines: 93
Message-ID: <mailman.33.1729781336.4695.python-list@python.org>
References: <4a13731716200669342338ae409e73ca@posteo.de>
<8d82b75d-a773-4854-bf44-cf480fdf3b84@mrabarnett.plus.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Trace: news.uni-berlin.de QzdNSQOq7NUDDBNQgmd6CgXsUz2D11XqNRaxj4vrXLEw==
Cancel-Lock: sha1:PhW439fR43iRUxSyBRIRPFA80Po= sha256:fKR+gfvPmteDcu+fLVGPnuMFLwPfUfv06fqKVOzxXsw=
Return-Path: <python@mrabarnett.plus.com>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
reason="2048-bit key; unprotected key"
header.d=plus.com header.i=@plus.com header.b=VrIp6xo9;
dkim-adsp=none (unprotected policy); dkim-atps=neutral
X-Spam-Status: OK 0.005
X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'def': 0.04;
'subject:when': 0.07; 'fails': 0.09; 'fedora': 0.09;
'from:addr:python': 0.09; 'happens.': 0.09;
'received:192.168.1.64': 0.09; 'skip:_ 20': 0.09; 'url-ip:140/8':
0.14; '(especially': 0.16; 'assert': 0.16; 'cleaned': 0.16;
'elements:': 0.16; 'from:addr:mrabarnett.plus.com': 0.16;
'from:name:mrab': 0.16; 'functions,': 0.16; 'intention': 0.16;
'message-id:@mrabarnett.plus.com': 0.16; 'path:': 0.16;
'received:plus.net': 0.16; 'reproduce': 0.16; 'subject:() ': 0.16;
'subject:Fedora': 0.16; 'subject:fails': 0.16; 'subject:used':
0.16; 'wrote:': 0.16; 'url-ip:140.82.121/24': 0.17; 'url-
ip:140.82/16': 0.17; 'values': 0.17; 'code.': 0.19; 'solve': 0.19;
'to:addr:python-list': 0.20; 'issue': 0.21; 'maybe': 0.22;
'url:github': 0.23; 'idea': 0.24; 'seems': 0.26; 'do?': 0.26;
'else': 0.27; 'output': 0.28; 'error': 0.29; 'header:User-
Agent:1': 0.30; 'packages': 0.31; 'christian': 0.32; 'python-
list': 0.32; 'received:192.168.1': 0.32; 'path': 0.33; 'header:In-
Reply-To:1': 0.34; 'able': 0.34; "didn't": 0.34; 'item': 0.35;
"we're": 0.35; 'those': 0.36; 'using': 0.37; 'directory': 0.37;
'received:192.168': 0.37; 'file': 0.38; 'read': 0.38; 'thanks':
0.39; 'use': 0.39; 'hello,': 0.39; 'break': 0.39; 'hand': 0.40;
'should': 0.40; 'four': 0.60; 'skip:o 10': 0.61; 'me.': 0.64;
'skip:t 20': 0.65; 'supply': 0.65; 'tool': 0.65; 'look': 0.65;
'[1]': 0.67; 'skip:t 30': 0.67; 'operations': 0.68; 'skip:i 40':
0.68; 'skip:/ 30': 0.69; '[2]': 0.70; 'raised': 0.70; 'note:':
0.71; 'suite': 0.71; 'operate': 0.75; 'subsequent': 0.76; 'clue':
0.84; 'behind': 0.88; 'replacing': 0.91
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=plus.com; s=042019;
t=1729781148; bh=9j0uAbeWaCKxYRO7l6RYHwJnzllb9ep8cYeT4E7W9uE=;
h=Date:Subject:To:References:From:In-Reply-To;
b=VrIp6xo9ssdtSsgcfLOFs2wRfpm1aLNCfSvjTzx39psYb/1cTb7339ZGEyUYWUGfk
yg+t3mxLstAbSizbbD9+pujBSLDQbb0dBxRxTInKXd4zjlyozyaXG0iGFa/pCl4ldB
kAItmwi+jVXr2z2g0zCscOTKYB95Ps2zkbRJD+cNdFMTYrePgtK2Y3aFRdeklW0CPj
XiUViYgd7iy69vZq2hdZvHNWaBh32oDXVAyvLDXePkyXnSU7rBc+aJVg6b5ypRevOP
tgxYmI58Va+kTHnQVluVz3AmPkiWVjSRIM2g0gsq/796VpRqmcy7U+w+AIkt+R+k6g
QnboAyrmaXl+A==
X-Clacks-Overhead: "GNU Terry Pratchett"
X-CM-Score: 0.00
X-CNFS-Analysis: v=2.4 cv=XaAqz555 c=1 sm=1 tr=0 ts=671a5d9c
a=0nF1XD0wxitMEM03M9B4ZQ==:117 a=0nF1XD0wxitMEM03M9B4ZQ==:17
a=IkcTkHD0fZMA:10 a=NEAV23lmAAAA:8 a=edoF8RLc8VX77fFdq5UA:9 a=QEXdDO2ut3YA:10
X-AUTH: mrabarnett@:2500
User-Agent: Mozilla Thunderbird
Content-Language: en-GB
In-Reply-To: <4a13731716200669342338ae409e73ca@posteo.de>
X-CMAE-Envelope: MS4xfDtHx69hEeP47b6GDNPaT7nk4vfI/TF7GhfBs/HljaD3h6H4KMETaewda5k1rFh4PlAqSstIk+RDUC0+fWGwExh3evBjALxYJLBl2CHJ1mhSWlDUoKOe
gk5f1XZLBhPTbpcAIOezAFa+zFBM3LazbmS2Sp1xHVsQqbvCi7Z+n86jneqjYk3+3x4GGsVfJh3JQCkP4UarNyZzGeszBAdd9ZM=
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: General discussion list for the Python programming language
<python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
<mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
<mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <8d82b75d-a773-4854-bf44-cf480fdf3b84@mrabarnett.plus.com>
X-Mailman-Original-References: <4a13731716200669342338ae409e73ca@posteo.de>
View all headers

On 2024-10-24 08:33, Christian Buhtz via Python-list wrote:
> Hello,
> I am upstream maintainer of "Back In Time" [1] investigating an issue a
> distro maintainer from Fedora reported [2] to me.
>
> On one hand Fedora seems to use a tool called "mock" to build packages
> in a chroot environment.
> On the other hand the test suite of "Back In Time" does read and write
> to the real file system.
> One test fails because a temporary directory is cleaned up using
> shutil.rmtree(). Please see the output below.
>
> I am not familiar with Fedora and "mock". So I am not able to reproduce
> this on my own.
> It seems the Fedora maintainer also has no clue how to solve it or why
> it happens.
>
> Can you please have a look (especially at the line "assert func is
> os.lstat").
> Maybe you have an idea what is the intention behind this error raised by
> an "assert" statement inside "shutil.rmtree()".
>
> Thanks in advance,
> Christian Buhtz
>
> [1] -- <https://github.com/bit-team/backintime>
> [2] -- <https://github.com/bit-team/backintime/issues/1911>
>
> __________________________ General.test_ctor_defaults
> __________________________
> self = <test.test_uniquenessset.General testMethod=test_ctor_defaults>
> def test_ctor_defaults(self):
> """Default values in constructor."""
>> with TemporaryDirectory(prefix='bit.') as temp_name:
> test/test_uniquenessset.py:47:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _ _ _ _
> /usr/lib64/python3.13/tempfile.py:946: in __exit__
> self.cleanup()
> /usr/lib64/python3.13/tempfile.py:950: in cleanup
> self._rmtree(self.name, ignore_errors=self._ignore_cleanup_errors)
> /usr/lib64/python3.13/tempfile.py:930: in _rmtree
> _shutil.rmtree(name, onexc=onexc)
> /usr/lib64/python3.13/shutil.py:763: in rmtree
> _rmtree_safe_fd(stack, onexc)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _ _ _ _
> stack = []
> onexc = <function TemporaryDirectory._rmtree.<locals>.onexc at
> 0xffffb39bc860>
> def _rmtree_safe_fd(stack, onexc):
> # Each stack item has four elements:
> # * func: The first operation to perform: os.lstat, os.close or
> os.rmdir.
> # Walking a directory starts with an os.lstat() to detect
> symlinks; in
> # this case, func is updated before subsequent operations and
> passed to
> # onexc() if an error occurs.
> # * dirfd: Open file descriptor, or None if we're processing the
> top-level
> # directory given to rmtree() and the user didn't supply
> dir_fd.
> # * path: Path of file to operate upon. This is passed to
> onexc() if an
> # error occurs.
> # * orig_entry: os.DirEntry, or None if we're processing the
> top-level
> # directory given to rmtree(). We used the cached stat() of
> the entry to
> # save a call to os.lstat() when walking subdirectories.
> func, dirfd, path, orig_entry = stack.pop()
> name = path if orig_entry is None else orig_entry.name
> try:
> if func is os.close:
> os.close(dirfd)
> return
> if func is os.rmdir:
> os.rmdir(name, dir_fd=dirfd)
> return
>
> # Note: To guard against symlink races, we use the standard
> # lstat()/open()/fstat() trick.
>> assert func is os.lstat
> E AssertionError
> /usr/lib64/python3.13/shutil.py:663: AssertionError
>
What does "mock" do?

func should be either os.close, os.rmdir or os.lstat.

If mock is somehow replacing one of those functions, then it might break
the code.

1

rocksolid light 0.9.8
clearnet tor