aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUrs Fässler <urs.fassler@bbv.ch>2018-10-15 13:43:21 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-10-17 12:24:05 +0100
commit5e69ca56533666a097bb23d09ab673e5c862051c (patch)
treef1cb63ebd3cd2e3df022e2fab93f4b9f06309036
parent3434e64e7c077c1ecff7b36f02b6c6b59a7d1fe9 (diff)
downloadbitbake-5e69ca56533666a097bb23d09ab673e5c862051c.tar.gz
fetch2: extract the function which ensures that a valid symlink exists
For better readability and future use, we extract the function which ensures that a given symlink exists. Signed-off-by: Urs Fässler <urs.fassler@bbv.ch> Signed-off-by: Pascal Bach <pascal.bach@siemens.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/fetch2/__init__.py27
1 files changed, 17 insertions, 10 deletions
diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py
index cb2f325a8..9aea08b38 100644
--- a/lib/bb/fetch2/__init__.py
+++ b/lib/bb/fetch2/__init__.py
@@ -1018,16 +1018,7 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
origud.method.build_mirror_data(origud, ld)
return origud.localpath
# Otherwise the result is a local file:// and we symlink to it
- if not os.path.exists(origud.localpath):
- if os.path.islink(origud.localpath):
- # Broken symbolic link
- os.unlink(origud.localpath)
-
- # As per above, in case two tasks end up here simultaneously.
- try:
- os.symlink(ud.localpath, origud.localpath)
- except FileExistsError:
- pass
+ ensure_symlink(ud.localpath, origud.localpath)
update_stamp(origud, ld)
return ud.localpath
@@ -1061,6 +1052,22 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
bb.utils.unlockfile(lf)
+def ensure_symlink(target, link_name):
+ if not os.path.exists(link_name):
+ if os.path.islink(link_name):
+ # Broken symbolic link
+ os.unlink(link_name)
+
+ # In case this is executing without any file locks held (as is
+ # the case for file:// URLs), two tasks may end up here at the
+ # same time, in which case we do not want the second task to
+ # fail when the link has already been created by the first task.
+ try:
+ os.symlink(target, link_name)
+ except FileExistsError:
+ pass
+
+
def try_mirrors(fetch, d, origud, mirrors, check = False):
"""
Try to use a mirrored version of the sources.