@@ -39,6 +39,12 @@ import (
39
39
// that is going to be replaced by the new one.
40
40
// This is the result of a call to InstallPrerequisiteCheck.
41
41
type LibraryInstallPlan struct {
42
+ // Name of the library to install
43
+ Name string
44
+
45
+ // Version of the library to install
46
+ Version * semver.Version
47
+
42
48
// TargetPath is the path where the library should be installed.
43
49
TargetPath * paths.Path
44
50
@@ -88,6 +94,8 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semve
88
94
}
89
95
90
96
return & LibraryInstallPlan {
97
+ Name : name ,
98
+ Version : version ,
91
99
TargetPath : libPath ,
92
100
ReplacedLib : replaced ,
93
101
UpToDate : upToDate ,
@@ -99,12 +107,40 @@ func (lm *LibrariesManager) Install(indexLibrary *librariesindex.Release, instal
99
107
return indexLibrary .Resource .Install (lm .DownloadsDir , installPath .Parent (), installPath )
100
108
}
101
109
102
- // InstallLibraryFromFolder installs a library by copying it from the given folder.
103
- func (lm * LibrariesManager ) InstallLibraryFromFolder (libPath * paths.Path , installPath * paths.Path ) error {
104
- if installPath .Exist () {
105
- return fmt .Errorf ("%s: %s" , tr ("destination directory already exists" ), installPath )
110
+ // importLibraryFromDirectory installs a library by copying it from the given directory.
111
+ func (lm * LibrariesManager ) importLibraryFromDirectory (libPath * paths.Path , overwrite bool ) error {
112
+ // Check if the library is valid and load metatada
113
+ if err := validateLibrary (libPath ); err != nil {
114
+ return err
115
+ }
116
+ library , err := libraries .Load (libPath , libraries .User )
117
+ if err != nil {
118
+ return err
106
119
}
107
- if err := libPath .CopyDirTo (installPath ); err != nil {
120
+
121
+ // Check if the library is already installed and determine install path
122
+ installPlan , err := lm .InstallPrerequisiteCheck (library .Name , library .Version , libraries .User )
123
+ if err != nil {
124
+ return err
125
+ }
126
+
127
+ if installPlan .UpToDate {
128
+ if ! overwrite {
129
+ return fmt .Errorf (tr ("library %s already installed" ), installPlan .Name )
130
+ }
131
+ }
132
+ if installPlan .ReplacedLib != nil {
133
+ if ! overwrite {
134
+ return fmt .Errorf (tr ("Library %[1]s is already installed, but with a different version: %[2]s" , installPlan .Name , installPlan .ReplacedLib ))
135
+ }
136
+ if err := lm .Uninstall (installPlan .ReplacedLib ); err != nil {
137
+ return err
138
+ }
139
+ }
140
+ if installPlan .TargetPath .Exist () {
141
+ return fmt .Errorf ("%s: %s" , tr ("destination directory already exists" ), installPlan .TargetPath )
142
+ }
143
+ if err := libPath .CopyDirTo (installPlan .TargetPath ); err != nil {
108
144
return fmt .Errorf ("%s: %w" , tr ("copying library to destination directory:" ), err )
109
145
}
110
146
return nil
@@ -159,38 +195,8 @@ func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *path
159
195
}
160
196
tmpInstallPath := libRootFiles [0 ]
161
197
162
- // Check if the library is valid and load metatada
163
- if err := validateLibrary (tmpInstallPath ); err != nil {
164
- return err
165
- }
166
- library , err := libraries .Load (tmpInstallPath , libraries .User )
167
- if err != nil {
168
- return err
169
- }
170
-
171
- // Check if the library is already installed
172
- installPlan , err := lm .InstallPrerequisiteCheck (library .Name , library .Version , libraries .User )
173
- if err != nil {
174
- return err
175
- }
176
- if installPlan .UpToDate {
177
- if ! overwrite {
178
- return fmt .Errorf (tr ("library %s already installed" ), library .Name )
179
- }
180
- }
181
-
182
- // Remove the old library if present
183
- if installPlan .ReplacedLib != nil {
184
- if ! overwrite {
185
- return fmt .Errorf (tr ("Library %[1]s is already installed, but with a different version: %[2]s" , library .Name , installPlan .ReplacedLib ))
186
- }
187
- if err := lm .Uninstall (installPlan .ReplacedLib ); err != nil {
188
- return err
189
- }
190
- }
191
-
192
198
// Install extracted library in the destination directory
193
- if err := lm .InstallLibraryFromFolder (tmpInstallPath , installPlan . TargetPath ); err != nil {
199
+ if err := lm .importLibraryFromDirectory (tmpInstallPath , overwrite ); err != nil {
194
200
return fmt .Errorf (tr ("moving extracted archive to destination dir: %s" ), err )
195
201
}
196
202
@@ -238,36 +244,8 @@ func (lm *LibrariesManager) InstallGitLib(gitURL string, overwrite bool) error {
238
244
// We don't want the installed library to be a git repository thus we delete this folder
239
245
tmpInstallPath .Join (".git" ).RemoveAll ()
240
246
241
- // Check if the library is valid and load metatada
242
- if err := validateLibrary (tmpInstallPath ); err != nil {
243
- return err
244
- }
245
- library , err := libraries .Load (tmpInstallPath , libraries .User )
246
- if err != nil {
247
- return err
248
- }
249
-
250
- // Check if the library is already installed and determine install path
251
- installPlan , err := lm .InstallPrerequisiteCheck (library .Name , library .Version , libraries .User )
252
- if err != nil {
253
- return err
254
- }
255
- if installPlan .UpToDate {
256
- if ! overwrite {
257
- return fmt .Errorf (tr ("library %s already installed" ), library .Name )
258
- }
259
- }
260
- if installPlan .ReplacedLib != nil {
261
- if ! overwrite {
262
- return fmt .Errorf (tr ("Library %[1]s is already installed, but with a different version: %[2]s" , library .Name , installPlan .ReplacedLib ))
263
- }
264
- if err := lm .Uninstall (installPlan .ReplacedLib ); err != nil {
265
- return err
266
- }
267
- }
268
-
269
247
// Install extracted library in the destination directory
270
- if err := lm .InstallLibraryFromFolder (tmpInstallPath , installPlan . TargetPath ); err != nil {
248
+ if err := lm .importLibraryFromDirectory (tmpInstallPath , overwrite ); err != nil {
271
249
return fmt .Errorf (tr ("moving extracted archive to destination dir: %s" ), err )
272
250
}
273
251
0 commit comments