-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Separate packageinfo.* files for dealing with PackageInfo files
- Loading branch information
Showing
8 changed files
with
115 additions
and
114 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#! @Description | ||
#! Attempts to download and install a package from a valid `PackageInfo.g` | ||
#! file. The argument <A>info</A> should be either a valid package info | ||
#! record, or a URL that points to a valid `PackageInfo.g` file. Returns | ||
#! <K>true</K> if the installation was successful, and <K>false</K> otherwise. | ||
#! @Arguments info | ||
#! @Returns | ||
#! <K>true</K> or <K>false</K> | ||
DeclareGlobalFunction("InstallPackageFromInfo"); | ||
|
||
DeclareGlobalFunction("PKGMAN_GetPackageInfo"); | ||
DeclareGlobalFunction("PKGMAN_RefreshPackageInfo"); | ||
DeclareGlobalFunction("PKGMAN_ValidatePackageInfo"); | ||
|
||
# PackageInfo files must at least contain the following: | ||
PKGMAN_RequiredPackageInfoFields := ["PackageName", | ||
"PackageDoc", | ||
"Version", | ||
"Date"]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
InstallGlobalFunction(InstallPackageFromInfo, | ||
function(info, version...) | ||
local formats, format, url; | ||
|
||
# Check input | ||
if not (IsString(info) or IsRecord(info)) then | ||
ErrorNoReturn("PackageManager: InstallPackageFromInfo: ", | ||
"<info> should be a rec or URL"); | ||
fi; | ||
|
||
# Get file from URL | ||
if IsString(info) then | ||
info := PKGMAN_DownloadPackageInfo(info); | ||
if info = fail then | ||
return false; | ||
fi; | ||
fi; | ||
|
||
# Check the version condition. | ||
if Length(version) = 1 and IsString(version[1]) | ||
and not CompareVersionNumbers(info.Version, version[1]) then | ||
Info(InfoPackageManager, 1, "Version \"", version[1], "\" of package \"", | ||
info.PackageName, "\" cannot be satisfied"); | ||
Info(InfoPackageManager, 2, | ||
"The newest version available is ", info.Version); | ||
return false; | ||
fi; | ||
|
||
# Read the information we want from it | ||
formats := SplitString(info.ArchiveFormats, "", ", \n\r\t"); | ||
format := First(PKGMAN_ArchiveFormats, f -> f in formats); | ||
if format = fail then | ||
Info(InfoPackageManager, 1, | ||
"No supported archive formats available, so could not install"); | ||
Info(InfoPackageManager, 1, "Only ", formats, " available"); | ||
return false; | ||
fi; | ||
url := Concatenation(info.ArchiveURL, format); | ||
|
||
# Download the archive | ||
return InstallPackageFromArchive(url); | ||
end); | ||
|
||
InstallGlobalFunction(PKGMAN_GetPackageInfo, | ||
function(dir_or_stream) | ||
local fname, info; | ||
if IsString(dir_or_stream) or IsDirectory(dir_or_stream) then | ||
fname := Filename(Directory(dir_or_stream), "PackageInfo.g"); | ||
if not IsReadableFile(fname) then | ||
Info(InfoPackageManager, 1, "Could not find PackageInfo.g file"); | ||
return fail; | ||
fi; | ||
Read(fname); | ||
GAPInfo.PackageInfoCurrent.InstallationPath := fname; | ||
elif IsInputStream(dir_or_stream) then | ||
info := dir_or_stream; | ||
Read(info); | ||
else | ||
Error("invalid input"); | ||
fi; | ||
return GAPInfo.PackageInfoCurrent; | ||
end); | ||
|
||
InstallGlobalFunction(PKGMAN_RefreshPackageInfo, | ||
function() | ||
GAPInfo.PackagesInfoInitialized := false; | ||
InitializePackagesInfoRecords(); | ||
Info(InfoPackageManager, 4, "Reloaded all package info records"); | ||
end); | ||
|
||
InstallGlobalFunction(PKGMAN_ValidatePackageInfo, | ||
function(info) | ||
local quiet; | ||
# Suppress output unless info level is maximum | ||
quiet := InfoLevel(InfoPackageManager) < 4; | ||
return ValidatePackageInfo(info : quiet := quiet); | ||
end); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Install a package from a PackageInfo.g URL (includes redirect) | ||
gap> InstallPackage("https://gap-packages.github.io/autpgrp/PackageInfo.g"); | ||
true | ||
gap> ForAny(DirectoryContents(PKGMAN_PackageDir()), | ||
> f -> StartsWith(f, "autpgrp")); | ||
true | ||
gap> RemovePackage("autpgrp", false); | ||
true | ||
|
||
# InstallPackageFromInfo input failure | ||
gap> InstallPackageFromInfo(42); | ||
Error, PackageManager: InstallPackageFromInfo: <info> should be a rec or URL | ||
|
||
# InstallPackageFromInfo failure | ||
gap> InstallPackage("http://www.nothing.rubbish/PackageInfo.g"); | ||
#I Unable to download from http://www.nothing.rubbish/PackageInfo.g | ||
false |