[bitbake-devel] [PATCH] bitbake: Correct broken symlink behaviour
Roman Savchenko
gmstima at gmail.com
Tue Sep 27 10:22:47 UTC 2016
From: Roman Savchenko <roman.savchenko at attocapital.com>
When making new symlink in case when link name does not exist
possible broken symlink behaviour should be taken into account.
Signed-off-by: Roman Savchenko <gmstima at gmail.com>
---
bitbake/lib/bb/fetch2/__init__.py | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index 6ef0c6f..6638b34 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -925,6 +925,17 @@ def rename_bad_checksum(ud, suffix):
bb.utils.movefile(ud.localpath, new_localpath)
+def create_symlink_if_not_exist(source, link_name):
+ """
+ Tries to make link to passed source if link name does not
+ exist or it is the invalid symlink.
+ """
+ if not os.path.exists(link_name):
+ if os.path.islink(link_name):
+ os.unlink(link_name)
+
+ os.symlink(source, link_name)
+
def try_mirror_url(fetch, origud, ud, ld, check = False):
# Return of None or a value means we're finished
# False means try another url
@@ -962,20 +973,14 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
bb.utils.mkdirhier(os.path.dirname(ud.donestamp))
open(ud.donestamp, 'w').close()
dest = os.path.join(dldir, os.path.basename(ud.localpath))
- if not os.path.exists(dest):
- os.symlink(ud.localpath, dest)
+ create_symlink_if_not_exist(ud.localpath, dest)
if not verify_donestamp(origud, ld) or origud.method.need_update(origud, ld):
origud.method.download(origud, ld)
if hasattr(origud.method,"build_mirror_data"):
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)
-
- os.symlink(ud.localpath, origud.localpath)
+ create_symlink_if_not_exist(ud.localpath, origud.localpath)
update_stamp(origud, ld)
return ud.localpath
--
2.7.4
More information about the bitbake-devel
mailing list