
On Tue, Aug 04, 2020 at 07:48:15PM +0200, Martin Kletzander wrote:
On Tue, Aug 04, 2020 at 06:27:08PM +0200, Erik Skultety wrote:
By default, symlink re-creation fails if the link already exists, more specifically in case of meson-install-symlink.py:
Traceback (most recent call last): File "/<path_to_libvirt_repo>/scripts/meson-install-symlink.py", line 15, in <module> os.symlink(target, link) FileExistsError: File exists: '../default.xml' -> 'default.xml'
Unfortunately, Python can't mimic "ln -sf", so we have to fix this differently - create a temporary name which is then going to be used for the temporary link followed by a rename with the original link's name. Note that this solution is racy as mktemp() doesn't guarantee atomicity in link creation, so theoretically another process could come and create a file with the same name as the temporary link name, but a proper solution would be longer and not as elegant.
Well, you could do subprocess.check_output(['ln', '-sf', ...]) (yuck), but it does essentially the same thing anyway.
Well, obviously I could issue a call to subprocess, but...yes, yuck.
I don't think a race here would cause anything. I would probably remove the file and then create the symlink and if there is something/someone else installing the same file than it is good that we error our because there are bigger issues than that. The whole installation process should not be interfered with and you cannot make it atomic anyway.
I agree with your thinking I just found it important to underline the fact that the solution isn't 100% correct, but like you said, we should not care that much during the installation phase, it would only point out a bigger issue. Erik