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