Also, this is due to https://bugzilla.yoctoproject.org/show_bug.cgi?id=1430.
> On 29 Mar 2021, at 12:35, Devendra Tewari <devendra.tew...@gmail.com> wrote: > > Sure. > > Would the following commit message be sufficient? > > 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. > > Thanks, > Devendra > >> On 29 Mar 2021, at 12:23, Konrad Weihmann <kweihm...@outlook.com> wrote: >> >> Yes please quote a bit from the python manpage [1] - I certainly see the >> difference (and the edge cases where os.rename might fail), but that should >> be documented as part of the commit message >> >> [1] https://docs.python.org/3/library/shutil.html#shutil.move >> >> On 29.03.21 17:21, Bruce Ashfield wrote: >>> Can you document the cases that os.rename() is failing ? And also why >>> would we expect the shutil.move() to work in those cases ? >>> If a change like this cases issues in the future, we need that extra >>> information in the commit head for proper triage. >>> Bruce >>> On Mon, Mar 29, 2021 at 11:16 AM Devendra Tewari >>> <devendra.tew...@gmail.com> 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 >>>> + 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 >>>> + 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 >>>> + 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 >>>> + except OSError: >>>> + shutil.move(plain, pdir) >>>> >>>> d.setVar('SSTATE_BUILDDIR', sstatebuild) >>>> d.setVar('SSTATE_INSTDIR', sstatebuild) >>>> -- >>>> 2.29.2 >>>> >>>> >>>> >>>> >>> >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#150054): https://lists.openembedded.org/g/openembedded-core/message/150054 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] -=-=-=-=-=-=-=-=-=-=-=-