On Tue, 2016-02-23 at 18:23 +0000, Burton, Ross wrote: > > On 23 February 2016 at 18:01, Christopher Larson > wrote: > > db isn't the only recipe doing that. The fetcher unpack method > > knows where it's unpacking to, I think if anyone should be clearing > > out the destination first, it should. > If that's true for tarballs, I agree. I was also wondering if this > should just be unpack[cleandirs] = ${S} The problem is that the fetcher does not now the target directory, i.e. it does not examine the content of tar/zip. Implementing that logic for different archive formats would require a lot more work. Using cleandirs sounds good to me. I.e. something like: diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass index 1372f38..aa107d4 100644 --- a/meta/classes/base.bbclass +++ b/meta/classes/base.bbclass @@ -133,23 +133,15 @@ python base_do_fetch() { addtask unpack after do_fetch do_unpack[dirs] = "${WORKDIR}" +do_unpack[cleandirs] = "${@d.getVar('S', True) if d.getVar('S', True) != d.getVar('WORKDIR', True) else ''}" python base_do_unpack() { src_uri = (d.getVar('SRC_URI', True) or "").split() if len(src_uri) == 0: return - rootdir = d.getVar('WORKDIR', True) - - # Ensure that we cleanup ${S}/patches - # TODO: Investigate if we can remove - # the entire ${S} in this case. - s_dir = d.getVar('S', True) - p_dir = os.path.join(s_dir, 'patches') - bb.utils.remove(p_dir, True) - try: fetcher = bb.fetch2.Fetch(src_uri, d) - fetcher.unpack(rootdir) + fetcher.unpack(d.getVar('WORKDIR', True)) except bb.fetch2.BBFetchException as e: raise bb.build.FuncFailed(e) }