summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorPeter Kjellerstedt <peter.kjellerstedt@axis.com>2022-01-29 22:44:53 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-02-09 23:15:15 +0000
commit64a0161bdfb6640309e80395313c6a64ecd7a1f3 (patch)
tree9a7d9e5de0b647c79ea60e82c33a12f8fe71ff75 /meta
parent6560edf43cc26a4c417a93ac5a16f5db9e058588 (diff)
downloadpoky-64a0161bdfb6640309e80395313c6a64ecd7a1f3.tar.gz
sstate: A third fix for for touching files inside pseudo
This continues where commit676757f "sstate: fix touching files inside pseudo" and commit 29fc8599 "sstate: another fix for touching files inside pseudo" left off. The previous changes switched from trying to check if the sstate file is writable before touching it, to always touching the sstate file and ignoring any errors. However, if the sstate file is actually a symbolic link that links to nothing, this would actually result in an empty sstate file being created. And this in turn leads to that future setscene tasks will fail when they try to unpack the empty file. Change the code so that if an sstate file linking to nothing already exists, it is overwritten with the new sstate file. Also change it so that the temporary file that is used is always removed, even if ln fails to link the sstate file to it. (From OE-Core rev: b2a5d9bc61e0b2b7e0f187a262a514952ed30563) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/sstate.bbclass14
1 files changed, 9 insertions, 5 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index ba2c9fee35..566a58dafb 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -852,14 +852,18 @@ sstate_create_package () {
852 fi 852 fi
853 chmod 0664 $TFILE 853 chmod 0664 $TFILE
854 # Skip if it was already created by some other process 854 # Skip if it was already created by some other process
855 if [ ! -e ${SSTATE_PKG} ]; then 855 if [ -h ${SSTATE_PKG} ] && [ ! -e ${SSTATE_PKG} ]; then
856 # There is a symbolic link, but it links to nothing.
857 # Forcefully replace it with the new file.
858 ln -f $TFILE ${SSTATE_PKG} || true
859 elif [ ! -e ${SSTATE_PKG} ]; then
856 # Move into place using ln to attempt an atomic op. 860 # Move into place using ln to attempt an atomic op.
857 # Abort if it already exists 861 # Abort if it already exists
858 ln $TFILE ${SSTATE_PKG} && rm $TFILE 862 ln $TFILE ${SSTATE_PKG} || true
859 else 863 else
860 rm $TFILE 864 touch ${SSTATE_PKG} 2>/dev/null || true
861 fi 865 fi
862 touch ${SSTATE_PKG} 2>/dev/null || true 866 rm $TFILE
863} 867}
864 868
865python sstate_sign_package () { 869python sstate_sign_package () {
@@ -889,7 +893,7 @@ python sstate_report_unihash() {
889sstate_unpack_package () { 893sstate_unpack_package () {
890 tar -xvzf ${SSTATE_PKG} 894 tar -xvzf ${SSTATE_PKG}
891 # update .siginfo atime on local/NFS mirror if it is a symbolic link 895 # update .siginfo atime on local/NFS mirror if it is a symbolic link
892 [ ! -h ${SSTATE_PKG}.siginfo ] || touch -a ${SSTATE_PKG}.siginfo 2>/dev/null || true 896 [ ! -h ${SSTATE_PKG}.siginfo ] || [ ! -e ${SSTATE_PKG}.siginfo ] || touch -a ${SSTATE_PKG}.siginfo 2>/dev/null || true
893 # update each symbolic link instead of any referenced file 897 # update each symbolic link instead of any referenced file
894 touch --no-dereference ${SSTATE_PKG} 2>/dev/null || true 898 touch --no-dereference ${SSTATE_PKG} 2>/dev/null || true
895 [ ! -e ${SSTATE_PKG}.sig ] || touch --no-dereference ${SSTATE_PKG}.sig 2>/dev/null || true 899 [ ! -e ${SSTATE_PKG}.sig ] || touch --no-dereference ${SSTATE_PKG}.sig 2>/dev/null || true