diff --git a/bitbake/lib/bb/fetch2/gomod.py b/bitbake/lib/bb/fetch2/gomod.py index 03f649bc2f..53c1d8d115 100644 --- a/bitbake/lib/bb/fetch2/gomod.py +++ b/bitbake/lib/bb/fetch2/gomod.py @@ -107,23 +107,23 @@ class GoMod(Wget): if ud.path != '/': module += ud.path ud.parm['module'] = module + version = ud.parm['version'] # Set URL and filename for wget download - path = escape(module + '/@v/' + ud.parm['version']) if ud.parm.get('mod', '0') == '1': - path += '.mod' + ext = '.mod' else: - path += '.zip' - ud.parm['unpack'] = '0' + ext = '.zip' + path = escape(f"{module}/@v/{version}{ext}") ud.url = bb.fetch2.encodeurl( ('https', proxy, '/' + path, None, None, None)) - ud.parm['downloadfilename'] = path + ud.parm['downloadfilename'] = f"{module.replace('/', '.')}@{version}{ext}" - ud.parm['name'] = f"{module}@{ud.parm['version']}" + # Set name for checksum verification + ud.parm['name'] = f"{module}@{version}" - # Set subdir for unpack - ud.parm['subdir'] = os.path.join(moddir, 'cache/download', - os.path.dirname(path)) + # Set path for unpack + ud.parm['unpackpath'] = os.path.join(moddir, 'cache/download', path) super().urldata_init(ud, d) @@ -131,13 +131,22 @@ class GoMod(Wget): """Unpack the module in the module cache.""" # Unpack the module zip file or go.mod file - super().unpack(ud, rootdir, d) + unpackpath = os.path.join(rootdir, ud.parm['unpackpath']) + unpackdir = os.path.dirname(unpackpath) + bb.utils.mkdirhier(unpackdir) + ud.unpack_tracer.unpack("file-copy", unpackdir) + cmd = f"cp {ud.localpath} {unpackpath}" + path = d.getVar('PATH') + if path: + cmd = f"PATH={path} {cmd}" + name = os.path.basename(unpackpath) + bb.note(f"Unpacking {name} to {unpackdir}/") + subprocess.check_call(cmd, shell=True, preexec_fn=subprocess_setup) - if ud.localpath.endswith('.zip'): + if name.endswith('.zip'): # Unpack the go.mod file from the zip file module = ud.parm['module'] - unpackdir = os.path.join(rootdir, ud.parm['subdir']) - name = os.path.basename(ud.localpath).rsplit('.', 1)[0] + '.mod' + name = name.rsplit('.', 1)[0] + '.mod' bb.note(f"Unpacking {name} to {unpackdir}/") with zipfile.ZipFile(ud.localpath) as zf: with open(os.path.join(unpackdir, name), mode='wb') as mf: diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index 486c10cd08..f2f140ff24 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py @@ -3378,6 +3378,8 @@ class GoModTest(FetcherTest): fetcher = bb.fetch2.Fetch(urls, self.d) ud = fetcher.ud[urls[0]] self.assertEqual(ud.url, 'https://proxy.golang.org/github.com/%21azure/azure-sdk-for-go/sdk/storage/azblob/%40v/v1.0.0.zip') + self.assertEqual(ud.parm['downloadfilename'], 'github.com.Azure.azure-sdk-for-go.sdk.storage.azblob@v1.0.0.zip') + self.assertEqual(ud.parm['name'], 'github.com/Azure/azure-sdk-for-go/sdk/storage/azblob@v1.0.0') fetcher.download() fetcher.unpack(self.unpackdir) @@ -3395,6 +3397,8 @@ class GoModTest(FetcherTest): fetcher = bb.fetch2.Fetch(urls, self.d) ud = fetcher.ud[urls[0]] self.assertEqual(ud.url, 'https://proxy.golang.org/github.com/%21azure/azure-sdk-for-go/sdk/storage/azblob/%40v/v1.0.0.mod') + self.assertEqual(ud.parm['downloadfilename'], 'github.com.Azure.azure-sdk-for-go.sdk.storage.azblob@v1.0.0.mod') + self.assertEqual(ud.parm['name'], 'github.com/Azure/azure-sdk-for-go/sdk/storage/azblob@v1.0.0') fetcher.download() fetcher.unpack(self.unpackdir) @@ -3409,6 +3413,7 @@ class GoModTest(FetcherTest): fetcher = bb.fetch2.Fetch(urls, self.d) ud = fetcher.ud[urls[0]] self.assertEqual(ud.url, 'https://proxy.golang.org/gopkg.in/ini.v1/%40v/v1.67.0.zip') + self.assertEqual(ud.parm['downloadfilename'], 'gopkg.in.ini.v1@v1.67.0.zip') self.assertEqual(ud.parm['name'], 'gopkg.in/ini.v1@v1.67.0') fetcher.download() @@ -3427,6 +3432,8 @@ class GoModTest(FetcherTest): fetcher = bb.fetch2.Fetch(urls, self.d) ud = fetcher.ud[urls[0]] self.assertEqual(ud.url, 'https://proxy.golang.org/gopkg.in/ini.v1/%40v/v1.67.0.zip') + self.assertEqual(ud.parm['downloadfilename'], 'gopkg.in.ini.v1@v1.67.0.zip') + self.assertEqual(ud.parm['name'], 'gopkg.in/ini.v1@v1.67.0') fetcher.download() fetcher.unpack(self.unpackdir) @@ -3444,6 +3451,8 @@ class GoModTest(FetcherTest): fetcher = bb.fetch2.Fetch(urls, self.d) ud = fetcher.ud[urls[0]] self.assertEqual(ud.url, 'https://proxy.golang.org/go.opencensus.io/%40v/v0.24.0.zip') + self.assertEqual(ud.parm['downloadfilename'], 'go.opencensus.io@v0.24.0.zip') + self.assertEqual(ud.parm['name'], 'go.opencensus.io@v0.24.0') fetcher.download() fetcher.unpack(self.unpackdir)