Remove packages from db before adding new version
							parent
							
								
									c8a10261c4
								
							
						
					
					
						commit
						79b47a76e2
					
				|  | @ -74,6 +74,9 @@ fn (r &Repo) add(pkg &package.Pkg) ?bool { | ||||||
| 		return false | 		return false | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// We remove the older package version first, if present | ||||||
|  | 	r.remove(pkg.info.name, false) ? | ||||||
|  | 
 | ||||||
| 	os.mkdir(pkg_dir) or { return error('Failed to create package directory.') } | 	os.mkdir(pkg_dir) or { return error('Failed to create package directory.') } | ||||||
| 
 | 
 | ||||||
| 	os.write_file(os.join_path_single(pkg_dir, 'desc'), pkg.to_desc()) or { | 	os.write_file(os.join_path_single(pkg_dir, 'desc'), pkg.to_desc()) or { | ||||||
|  | @ -92,6 +95,31 @@ fn (r &Repo) add(pkg &package.Pkg) ?bool { | ||||||
| 	return true | 	return true | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // remove removes a package from the database. It returns false if the package | ||||||
|  | // wasn't present in the database. | ||||||
|  | fn (r &Repo) remove(pkg_name string, sync bool) ?bool { | ||||||
|  | 	// We iterate over every directory in the repo dir | ||||||
|  | 	for d in os.ls(r.repo_dir) ? { | ||||||
|  | 		name := d.split('-')#[..-2].join('-') | ||||||
|  | 
 | ||||||
|  | 		if name == pkg_name { | ||||||
|  | 			// We lock the mutex here to prevent other routines from creating a | ||||||
|  | 			// new archive while we removed an entry | ||||||
|  | 			lock r.mutex { | ||||||
|  | 				os.rmdir_all(os.join_path_single(r.repo_dir, d)) ? | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if sync { | ||||||
|  | 				r.sync() ? | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Returns the path where the given package's desc & files files are stored | // Returns the path where the given package's desc & files files are stored | ||||||
| fn (r &Repo) pkg_path(pkg &package.Pkg) string { | fn (r &Repo) pkg_path(pkg &package.Pkg) string { | ||||||
| 	return os.join_path(r.repo_dir, '$pkg.info.name-$pkg.info.version') | 	return os.join_path(r.repo_dir, '$pkg.info.name-$pkg.info.version') | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue