Skip to content

Commit 642594f

Browse files
committed
fix: compas_rhino.uninstall loops through all possible locations
1 parent 60ed1d6 commit 642594f

File tree

2 files changed

+35
-37
lines changed

2 files changed

+35
-37
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
### Changed
1313

14+
* `compas_rhino.uninstall` will try to remove compas packages from all possible
15+
install locations.
16+
1417
### Removed
1518

1619

src/compas_rhino/uninstall.py

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,22 @@ def uninstall(version=None, packages=None):
4040
"""
4141
version = compas_rhino._check_rhino_version(version)
4242

43-
if version == "8.0":
44-
# In Rhino 8 there is no scripts folder
45-
installation_path = compas_rhino._get_default_rhino_ironpython_sitepackages_path(version)
46-
else:
47-
# We install COMPAS packages in the scripts folder
48-
# instead of directly as IPy module.
49-
installation_path = compas_rhino._get_rhino_scripts_path(version)
43+
installation_paths = []
44+
45+
# In Rhino <8 We install COMPAS packages in the scripts folder
46+
# instead of directly as IPy module.
47+
installation_paths.append(compas_rhino._get_rhino_scripts_path(version))
48+
49+
# In Rhino 8 there is no scripts folder
50+
try:
51+
installation_paths.append(compas_rhino._get_default_rhino_ironpython_sitepackages_path(version))
52+
except NotImplementedError:
53+
pass
5054

5155
# This is for old installs
5256
ipylib_path = compas_rhino._get_rhino_ironpython_lib_path(version)
57+
if ipylib_path:
58+
installation_paths.append(ipylib_path)
5359

5460
# Filter the provided list of packages
5561
# If no packages are provided
@@ -58,31 +64,26 @@ def uninstall(version=None, packages=None):
5864

5965
# Also remove all broken symlinks
6066
# because ... they're broken!
61-
for name in os.listdir(installation_path):
62-
path = os.path.join(installation_path, name)
63-
if os.path.islink(path):
64-
if not os.path.exists(path):
65-
if name not in packages:
66-
packages.append(name)
67+
for installation_path in installation_paths:
68+
for name in os.listdir(installation_path):
69+
path = os.path.join(installation_path, name)
70+
if os.path.islink(path):
71+
if not os.path.exists(path):
72+
if name not in packages:
73+
packages.append(name)
6774

6875
# Collect paths for removal based on package names
6976
symlinks_to_uninstall = []
7077

7178
for package in packages:
72-
symlink_path = os.path.join(installation_path, package)
73-
symlinks_to_uninstall.append(dict(name=package, link=symlink_path))
74-
75-
# Handle legacy install location
76-
# This does not always work,
77-
# and especially not in cases where it is in any case not necessary :)
78-
if ipylib_path:
79-
legacy_path = os.path.join(ipylib_path, package)
80-
if os.path.exists(legacy_path):
81-
symlinks_to_uninstall.append(dict(name=package, link=legacy_path))
79+
for installation_path in installation_paths:
80+
symlink_path = os.path.join(installation_path, package)
81+
if os.path.exists(symlink_path):
82+
symlinks_to_uninstall.append(dict(name=package, link=symlink_path))
8283

8384
# There is nothing to uninstall
8485
if not symlinks_to_uninstall:
85-
print("\nNo packages to uninstall from Rhino {0} scripts folder: \n{1}.".format(version, installation_path))
86+
print("\nNo packages to uninstall from Rhino {0} scripts folders: \n{1}.".format(version, installation_paths))
8687
return
8788

8889
# -------------------------
@@ -117,7 +118,12 @@ def uninstall(version=None, packages=None):
117118
)
118119

119120
else:
120-
if compas_rhino._try_remove_bootstrapper(installation_path):
121+
bootstrapper_removed = False
122+
for installation_path in installation_paths:
123+
if compas_rhino._try_remove_bootstrapper(installation_path):
124+
bootstrapper_removed = True
125+
126+
if bootstrapper_removed:
121127
results.append(("compas_bootstrapper", "OK"))
122128
else:
123129
results.append(
@@ -127,22 +133,11 @@ def uninstall(version=None, packages=None):
127133
)
128134
)
129135

130-
# Handle legacy bootstrapper
131-
# Again, only if possible...
132-
if ipylib_path:
133-
if not compas_rhino._try_remove_bootstrapper(ipylib_path):
134-
results.append(
135-
(
136-
"compas_bootstrapper",
137-
"ERROR: Cannot remove legacy compas_bootstrapper, try to run as administrator.",
138-
)
139-
)
140-
141136
# -------------------------
142137
# Output results
143138
# -------------------------
144139

145-
print("Uninstalling COMPAS packages from Rhino {0} scripts folder: \n{1}".format(version, installation_path))
140+
print("Uninstalling COMPAS packages from Rhino {0} scripts folders: \n{1}".format(version, installation_paths))
146141
print("\nThe following packages have been detected and will be uninstalled:\n")
147142

148143
for package, status in results:

0 commit comments

Comments
 (0)