diff --git a/platformio/managers/package.py b/platformio/managers/package.py index 8350c330..76cac33c 100644 --- a/platformio/managers/package.py +++ b/platformio/managers/package.py @@ -170,6 +170,13 @@ class PkgInstallerMixin(object): fu = FileUnpacker(source_path, dest_dir) return fu.start() + @staticmethod + def generate_install_dirname(manifest): + name = manifest['name'] + if "id" in manifest: + name += "_ID%d" % manifest['id'] + return name + def get_vcs_manifest_path(self, pkg_dir): for item in os.listdir(pkg_dir): if not isdir(join(pkg_dir, item)): @@ -325,11 +332,8 @@ class PkgInstallerMixin(object): tmp_manifest = self.load_manifest(tmp_manifest_path) assert set(["name", "version"]) <= set(tmp_manifest.keys()) - name = tmp_manifest['name'] + name = self.generate_install_dirname(tmp_manifest) pkg_dir = join(self.package_dir, name) - if "id" in tmp_manifest: - name += "_ID%d" % tmp_manifest['id'] - pkg_dir = join(self.package_dir, name) # package should satisfy requirements if requirements: @@ -604,7 +608,9 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin): # unfix package with the same name package_dir = self.get_package_dir(manifest['name']) if package_dir and "@" in package_dir: - os.rename(package_dir, join(self.package_dir, manifest['name'])) + os.rename(package_dir, + join(self.package_dir, + self.generate_install_dirname(manifest))) self.reset_cache() click.echo("[%s]" % click.style("OK", fg="green")) diff --git a/tests/commands/test_lib.py b/tests/commands/test_lib.py index 79db2e28..3b3a213a 100644 --- a/tests/commands/test_lib.py +++ b/tests/commands/test_lib.py @@ -126,7 +126,7 @@ def test_global_lib_uninstall(clirunner, validate_cliresult, validate_cliresult(result) items1 = [d.basename for d in isolated_pio_home.join("lib").listdir()] items2 = [ - "DHT22_ID58", "ArduinoJson_ID64@5.6.7", "ESPAsyncTCP_ID305", + "DHT22_ID58", "ArduinoJson_ID64", "ESPAsyncTCP_ID305", "pubsubclient", "PJON", "rs485-nodeproto", "RadioHead_ID124" ] assert set(items1) == set(items2)