@@ -39,6 +39,12 @@ import (
3939// that is going to be replaced by the new one. 
4040// This is the result of a call to InstallPrerequisiteCheck. 
4141type  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+ 
4248	// TargetPath is the path where the library should be installed. 
4349	TargetPath  * paths.Path 
4450
@@ -88,6 +94,8 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semve
8894	}
8995
9096	return  & LibraryInstallPlan {
97+ 		Name :        name ,
98+ 		Version :     version ,
9199		TargetPath :  libPath ,
92100		ReplacedLib : replaced ,
93101		UpToDate :    upToDate ,
@@ -99,12 +107,40 @@ func (lm *LibrariesManager) Install(indexLibrary *librariesindex.Release, instal
99107	return  indexLibrary .Resource .Install (lm .DownloadsDir , installPath .Parent (), installPath )
100108}
101109
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 
106119	}
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  {
108144		return  fmt .Errorf ("%s: %w" , tr ("copying library to destination directory:" ), err )
109145	}
110146	return  nil 
@@ -159,38 +195,8 @@ func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *path
159195	}
160196	tmpInstallPath  :=  libRootFiles [0 ]
161197
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- 
192198	// 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  {
194200		return  fmt .Errorf (tr ("moving extracted archive to destination dir: %s" ), err )
195201	}
196202
@@ -238,36 +244,8 @@ func (lm *LibrariesManager) InstallGitLib(gitURL string, overwrite bool) error {
238244	// We don't want the installed library to be a git repository thus we delete this folder 
239245	tmpInstallPath .Join (".git" ).RemoveAll ()
240246
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- 
269247	// 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  {
271249		return  fmt .Errorf (tr ("moving extracted archive to destination dir: %s" ), err )
272250	}
273251
0 commit comments