@@ -38,7 +38,15 @@ func (pm *PackageManager) IsManagedPlatformRelease(platformRelease *cores.Platfo
38
38
if pm .PackagesDir == nil {
39
39
return false
40
40
}
41
- managed , err := platformRelease .InstallDir .IsInsideDir (pm .PackagesDir )
41
+ installDir := platformRelease .InstallDir .Clone ()
42
+ if installDir .FollowSymLink () != nil {
43
+ return false
44
+ }
45
+ packagesDir := pm .PackagesDir .Clone ()
46
+ if packagesDir .FollowSymLink () != nil {
47
+ return false
48
+ }
49
+ managed , err := installDir .IsInsideDir (packagesDir )
42
50
if err != nil {
43
51
return false
44
52
}
@@ -77,17 +85,35 @@ func (pm *PackageManager) InstallTool(toolRelease *cores.ToolRelease) error {
77
85
return toolResource .Install (pm .DownloadDir , pm .TempDir , destDir )
78
86
}
79
87
88
+ // IsManagedToolRelease returns true if the ToolRelease is managed by the PackageManager
89
+ func (pm * PackageManager ) IsManagedToolRelease (toolRelease * cores.ToolRelease ) bool {
90
+ if pm .PackagesDir == nil {
91
+ return false
92
+ }
93
+ installDir := toolRelease .InstallDir .Clone ()
94
+ if installDir .FollowSymLink () != nil {
95
+ return false
96
+ }
97
+ packagesDir := pm .PackagesDir .Clone ()
98
+ if packagesDir .FollowSymLink () != nil {
99
+ return false
100
+ }
101
+ managed , err := installDir .IsInsideDir (packagesDir )
102
+ if err != nil {
103
+ return false
104
+ }
105
+ return managed
106
+ }
107
+
80
108
// UninstallTool remove a ToolRelease.
81
109
func (pm * PackageManager ) UninstallTool (toolRelease * cores.ToolRelease ) error {
82
110
if toolRelease .InstallDir == nil {
83
111
return fmt .Errorf ("tool not installed" )
84
112
}
85
113
86
114
// Safety measure
87
- if safe , err := toolRelease .InstallDir .IsInsideDir (pm .PackagesDir ); err != nil {
88
- return fmt .Errorf ("checking if tool is installed in data dir: %s" , err )
89
- } else if ! safe {
90
- return fmt .Errorf ("tool is not installed inside data dir" )
115
+ if ! pm .IsManagedToolRelease (toolRelease ) {
116
+ return fmt .Errorf ("Tool %s is not managed by package manager" , toolRelease )
91
117
}
92
118
93
119
if err := toolRelease .InstallDir .RemoveAll (); err != nil {
0 commit comments