Thanks! My bad. The example I looked up in Python docs had a break and I just realized it was a looping example.
Here’s the updated patch (or should I submit it again via git send-email?) >From 9deb390dcdcaef66cec2fae39454c7fb3c81c4e4 Mon Sep 17 00:00:00 2001 From: Devendra Tewari <devendra.tew...@gmail.com> Date: Mon, 29 Mar 2021 19:41:02 -0300 Subject: [PATCH] Use shutil.move when os.rename fails Incremental build in Docker fails with OSError: [Errno 18] Invalid cross-device link When source and destination are on different overlay filesystems. This change handles the error with os.rename and retries with shutil.move. --- meta/classes/sstate.bbclass | 22 ++++++++++++++++++---- vscode-bitbake-build/executeBitBakeCmd.sh | 3 +++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100755 vscode-bitbake-build/executeBitBakeCmd.sh diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass index f579168162..301dfc27db 100644 --- a/meta/classes/sstate.bbclass +++ b/meta/classes/sstate.bbclass @@ -384,6 +384,7 @@ def sstate_installpkg(ss, d): def sstate_installpkgdir(ss, d): import oe.path import subprocess + import shutil sstateinst = d.getVar("SSTATE_INSTDIR") d.setVar('SSTATE_FIXMEDIR', ss['fixmedir']) @@ -401,7 +402,10 @@ def sstate_installpkgdir(ss, d): for state in ss['dirs']: prepdir(state[1]) - os.rename(sstateinst + state[0], state[1]) + try: + os.rename(sstateinst + state[0], state[1]) + except OSError: + shutil.move(sstateinst + state[0], state[1]) sstate_install(ss, d) for plain in ss['plaindirs']: @@ -413,7 +417,10 @@ def sstate_installpkgdir(ss, d): dest = plain bb.utils.mkdirhier(src) prepdir(dest) - os.rename(src, dest) + try: + os.rename(src, dest) + except OSError: + shutil.move(src, dest) return True @@ -638,6 +645,7 @@ python sstate_hardcode_path () { def sstate_package(ss, d): import oe.path + import shutil tmpdir = d.getVar('TMPDIR') @@ -664,7 +672,10 @@ def sstate_package(ss, d): continue bb.error("sstate found an absolute path symlink %s pointing at %s. Please replace this with a relative link." % (srcpath, link)) bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], sstatebuild + state[0])) - os.rename(state[1], sstatebuild + state[0]) + try: + os.rename(state[1], sstatebuild + state[0]) + except OSError: + shutil.move(state[1], sstatebuild + state[0]) workdir = d.getVar('WORKDIR') sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared") @@ -674,7 +685,10 @@ def sstate_package(ss, d): pdir = plain.replace(sharedworkdir, sstatebuild) bb.utils.mkdirhier(plain) bb.utils.mkdirhier(pdir) - os.rename(plain, pdir) + try: + os.rename(plain, pdir) + except OSError: + shutil.move(plain, pdir) d.setVar('SSTATE_BUILDDIR', sstatebuild) d.setVar('SSTATE_INSTDIR', sstatebuild) diff --git a/vscode-bitbake-build/executeBitBakeCmd.sh b/vscode-bitbake-build/executeBitBakeCmd.sh new file mode 100755 index 0000000000..d7a4c5a5aa --- /dev/null +++ b/vscode-bitbake-build/executeBitBakeCmd.sh @@ -0,0 +1,3 @@ +#!/bin/bash +. ./oe-init-build-env vscode-bitbake-build > /dev/null +bitbake-layers show-layers \ No newline at end of file -- 2.29.2 > On 29 Mar 2021, at 17:38, Richard Purdie <richard.pur...@linuxfoundation.org> > wrote: > > On Mon, 2021-03-29 at 12:14 -0300, Devendra Tewari wrote: >> --- >> meta/classes/sstate.bbclass | 26 ++++++++++++++++++++++---- >> 1 file changed, 22 insertions(+), 4 deletions(-) >> >> diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass >> index f579168162..f94aa96d70 100644 >> --- a/meta/classes/sstate.bbclass >> +++ b/meta/classes/sstate.bbclass >> @@ -384,6 +384,7 @@ def sstate_installpkg(ss, d): >> def sstate_installpkgdir(ss, d): >> import oe.path >> import subprocess >> + import shutil >> >> >> sstateinst = d.getVar("SSTATE_INSTDIR") >> d.setVar('SSTATE_FIXMEDIR', ss['fixmedir']) >> @@ -401,7 +402,11 @@ def sstate_installpkgdir(ss, d): >> >> >> for state in ss['dirs']: >> prepdir(state[1]) >> - os.rename(sstateinst + state[0], state[1]) >> + try: >> + os.rename(sstateinst + state[0], state[1]) >> + break > > That break should definitely not be there, that changes behaviour. > >> + except OSError: >> + shutil.move(sstateinst + state[0], state[1]) >> sstate_install(ss, d) >> >> >> for plain in ss['plaindirs']: >> @@ -413,7 +418,11 @@ def sstate_installpkgdir(ss, d): >> dest = plain >> bb.utils.mkdirhier(src) >> prepdir(dest) >> - os.rename(src, dest) >> + try: >> + os.rename(src, dest) >> + break > > Same here... > >> + except OSError: >> + shutil.move(src, dest) >> >> >> return True >> >> >> @@ -638,6 +647,7 @@ python sstate_hardcode_path () { >> >> >> def sstate_package(ss, d): >> import oe.path >> + import shutil >> >> >> tmpdir = d.getVar('TMPDIR') >> >> >> @@ -664,7 +674,11 @@ def sstate_package(ss, d): >> continue >> bb.error("sstate found an absolute path symlink %s pointing >> at %s. Please replace this with a relative link." % (srcpath, link)) >> bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], >> sstatebuild + state[0])) >> - os.rename(state[1], sstatebuild + state[0]) >> + try: >> + os.rename(state[1], sstatebuild + state[0]) >> + break > > and again... > >> + except OSError: >> + shutil.move(state[1], sstatebuild + state[0]) >> >> >> workdir = d.getVar('WORKDIR') >> sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared") >> @@ -674,7 +688,11 @@ def sstate_package(ss, d): >> pdir = plain.replace(sharedworkdir, sstatebuild) >> bb.utils.mkdirhier(plain) >> bb.utils.mkdirhier(pdir) >> - os.rename(plain, pdir) >> + try: >> + os.rename(plain, pdir) >> + break > > > and again... > >> + except OSError: >> + shutil.move(plain, pdir) >> >> >> d.setVar('SSTATE_BUILDDIR', sstatebuild) >> d.setVar('SSTATE_INSTDIR', sstatebuild) >>
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#150062): https://lists.openembedded.org/g/openembedded-core/message/150062 Mute This Topic: https://lists.openembedded.org/mt/81698791/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-