summaryrefslogtreecommitdiff
path: root/utils/fppkg
diff options
context:
space:
mode:
authorjoost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-05-10 08:31:33 +0000
committerjoost <joost@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-05-10 08:31:33 +0000
commit345341cc033717977db8519d1d818a393f06e2a6 (patch)
tree21b165327b4c9170868e63d61ce5d0a2e87b6844 /utils/fppkg
parent765aab7e8168aa3c6f83cb8e481f996c413f027e (diff)
downloadfpc-345341cc033717977db8519d1d818a393f06e2a6.tar.gz
* Added -l/--showlocation option for the list command to show which packages are installed locally and globally
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15250 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'utils/fppkg')
-rw-r--r--utils/fppkg/fppkg.pp3
-rw-r--r--utils/fppkg/fprepos.pp16
-rw-r--r--utils/fppkg/pkgcommands.pp2
-rw-r--r--utils/fppkg/pkgoptions.pp2
-rw-r--r--utils/fppkg/pkgrepos.pp45
5 files changed, 54 insertions, 14 deletions
diff --git a/utils/fppkg/fppkg.pp b/utils/fppkg/fppkg.pp
index caf6a6750a..503f85de65 100644
--- a/utils/fppkg/fppkg.pp
+++ b/utils/fppkg/fppkg.pp
@@ -176,6 +176,7 @@ begin
Writeln(' -f --force Force installation also if the package is already installed');
Writeln(' -r --recovery Recovery mode, use always internal fpmkunit');
Writeln(' -b --broken Do not stop on broken packages');
+ Writeln(' -l --showlocation Show if the packages are installed globally or locally');
Writeln('Actions:');
Writeln(' update Update packages list');
Writeln(' list List available and installed packages');
@@ -266,6 +267,8 @@ begin
GlobalOptions.RecoveryMode:=true
else if CheckOption(I,'b','broken') then
GlobalOptions.AllowBroken:=true
+ else if CheckOption(I,'l','showlocation') then
+ GlobalOptions.ShowLocation:=true
else if CheckOption(I,'h','help') then
begin
ShowUsage;
diff --git a/utils/fppkg/fprepos.pp b/utils/fppkg/fprepos.pp
index a7affe644e..89b63807db 100644
--- a/utils/fppkg/fprepos.pp
+++ b/utils/fppkg/fprepos.pp
@@ -113,11 +113,13 @@ type
FAuthor: String;
FDescription: String;
FEmail: String;
+ FInstalledLocally: boolean;
FLicense: String;
FName: String;
FHomepageURL: String;
FDownloadURL: String;
FFileName: String;
+ FUnusedVersion: TFPVersion;
FVersion: TFPVersion;
FDependencies : TFPDependencies;
FOSes : TOSES;
@@ -127,6 +129,7 @@ type
FLocalFileName : String;
function GetFileName: String;
procedure SetName(const AValue: String);
+ procedure SetUnusedVersion(const AValue: TFPVersion);
procedure SetVersion(const AValue: TFPVersion);
Public
Constructor Create(ACollection : TCollection); override;
@@ -136,6 +139,9 @@ type
Procedure Assign(Source : TPersistent); override;
Function AddDependency(Const APackageName : String; const AMinVersion : String = '') : TFPDependency;
Property Dependencies : TFPDependencies Read FDependencies;
+ // Only for installed packages: (is false for packages which are installed globally)
+ Property InstalledLocally : boolean read FInstalledLocally write FInstalledLocally;
+ Property UnusedVersion : TFPVersion Read FUnusedVersion Write SetUnusedVersion;
Published
Property Name : String Read FName Write SetName;
Property Author : String Read FAuthor Write FAuthor;
@@ -506,6 +512,7 @@ constructor TFPPackage.Create(ACollection: TCollection);
begin
inherited Create(ACollection);
FVersion:=TFPVersion.Create;
+ FUnusedVersion:=TFPVersion.Create;
FChecksum:=$ffffffff;
FOSes:=AllOSes;
FCPUs:=AllCPUs;
@@ -517,6 +524,7 @@ destructor TFPPackage.Destroy;
begin
FreeAndNil(FDependencies);
FreeAndNil(FVersion);
+ FreeAndNil(FUnusedVersion);
inherited Destroy;
end;
@@ -533,6 +541,14 @@ begin
end;
+procedure TFPPackage.SetUnusedVersion(const AValue: TFPVersion);
+begin
+ if FUnusedVersion=AValue then
+ exit;
+ FUnusedVersion.Assign(AValue);
+end;
+
+
function TFPPackage.GetFileName: String;
var
URI : TURI;
diff --git a/utils/fppkg/pkgcommands.pp b/utils/fppkg/pkgcommands.pp
index feda46fb6b..3205942815 100644
--- a/utils/fppkg/pkgcommands.pp
+++ b/utils/fppkg/pkgcommands.pp
@@ -147,7 +147,7 @@ end;
procedure TCommandListPackages.Execute;
begin
- ListPackages;
+ ListPackages(GlobalOptions.ShowLocation);
end;
diff --git a/utils/fppkg/pkgoptions.pp b/utils/fppkg/pkgoptions.pp
index 22385ae143..a9e1da48c3 100644
--- a/utils/fppkg/pkgoptions.pp
+++ b/utils/fppkg/pkgoptions.pp
@@ -49,6 +49,7 @@ Type
FInstallGlobal,
FRecoveryMode : Boolean;
FOptionParser: TTemplateParser;
+ FShowLocation: Boolean;
function GetOptString(Index: integer): String;
procedure SetOptString(Index: integer; const AValue: String);
procedure UpdateLocalRepositoryOption;
@@ -80,6 +81,7 @@ Type
Property InstallGlobal : Boolean Read FInstallGlobal Write FInstallGlobal;
Property RecoveryMode : Boolean Read FRecoveryMode Write FRecoveryMode;
Property AllowBroken : Boolean Read FAllowBroken Write FAllowBroken;
+ Property ShowLocation : Boolean Read FShowLocation Write FShowLocation;
end;
diff --git a/utils/fppkg/pkgrepos.pp b/utils/fppkg/pkgrepos.pp
index 32e59dc62a..63d8fddf6e 100644
--- a/utils/fppkg/pkgrepos.pp
+++ b/utils/fppkg/pkgrepos.pp
@@ -18,11 +18,11 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
function PackageIsBroken(APackage:TFPPackage):boolean;
function FindBrokenPackages(SL:TStrings):Boolean;
procedure CheckFPMakeDependencies;
-function PackageInstalledVersionStr(const AName:String):string;
+function PackageInstalledVersionStr(const AName:String;const ShowUsed: boolean = false;const Local: boolean = false):string;
function PackageInstalledStateStr(const AName:String):string;
function PackageAvailableVersionStr(const AName:String):string;
procedure ListAvailablePackages;
-procedure ListPackages;
+procedure ListPackages(const ShowGlobalAndLocal: boolean);
procedure ListRemoteRepository;
procedure RebuildRemoteRepository;
@@ -256,17 +256,19 @@ end;
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
- function AddInstalledPackage(const AName,AFileName: String):TFPPackage;
+ function AddInstalledPackage(const AName,AFileName: String; const Local: boolean):TFPPackage;
begin
result:=InstalledRepository.FindPackage(AName);
if not assigned(result) then
result:=InstalledRepository.AddPackage(AName)
else
begin
+ result.UnusedVersion:=result.Version;
// Log packages found in multiple locations (local and global) ?
if showdups then
Log(vlDebug,SDbgPackageMultipleLocations,[result.Name,ExtractFilePath(AFileName)]);
end;
+ result.InstalledLocally:=Local;
end;
procedure LoadPackagefpcFromFile(APackage:TFPPackage;const AFileName: String);
@@ -284,7 +286,7 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
end;
end;
- function CheckUnitDir(const AUnitDir:string):boolean;
+ function CheckUnitDir(const AUnitDir:string; const Local: boolean):boolean;
var
SR : TSearchRec;
P : TFPPackage;
@@ -302,7 +304,7 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
UF:=UD+UnitConfigFileName;
if FileExistsLog(UF) then
begin
- P:=AddInstalledPackage(SR.Name,UF);
+ P:=AddInstalledPackage(SR.Name,UF,Local);
LoadUnitConfigFromFile(P,UF)
end
else
@@ -311,7 +313,7 @@ procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boole
UF:=UD+'Package.fpc';
if FileExistsLog(UF) then
begin
- P:=AddInstalledPackage(SR.Name,UF);
+ P:=AddInstalledPackage(SR.Name,UF,Local);
LoadPackagefpcFromFile(P,UF);
end;
end;
@@ -327,9 +329,9 @@ begin
// First scan the global directory
// The local directory will overwrite the versions
if ACompilerOptions.GlobalUnitDir<>'' then
- CheckUnitDir(ACompilerOptions.GlobalUnitDir);
+ CheckUnitDir(ACompilerOptions.GlobalUnitDir, False);
if ACompilerOptions.LocalUnitDir<>'' then
- CheckUnitDir(ACompilerOptions.LocalUnitDir);
+ CheckUnitDir(ACompilerOptions.LocalUnitDir, True);
end;
@@ -466,13 +468,22 @@ begin
end;
-function PackageInstalledVersionStr(const AName:String):string;
+function PackageInstalledVersionStr(const AName:String;const ShowUsed: boolean = false;const Local: boolean = false):string;
var
P : TFPPackage;
begin
P:=InstalledRepository.FindPackage(AName);
if P<>nil then
- result:=P.Version.AsString
+ begin
+ if not ShowUsed then
+ result:=P.Version.AsString
+ else if Local=p.InstalledLocally then
+ result:=P.Version.AsString
+ else if not P.UnusedVersion.Empty then
+ result:=P.UnusedVersion.AsString
+ else
+ result:='-';
+ end
else
result:='-';
end;
@@ -513,7 +524,7 @@ begin
end;
-procedure ListPackages;
+procedure ListPackages(const ShowGlobalAndLocal: boolean);
var
i : integer;
SL : TStringList;
@@ -526,12 +537,20 @@ begin
SL.Add(AvailableRepository.Packages[i].Name);
for i:=0 to InstalledRepository.PackageCount-1 do
SL.Add(InstalledRepository.Packages[i].Name);
- Writeln(Format('%-20s %-12s %-3s %-12s',['Name','Installed','','Available']));
+ if ShowGlobalAndLocal then
+ Writeln(Format('%-20s %-14s %-14s %-3s %-12s',['Name','Installed (G)','Installed (L)','','Available']))
+ else
+ Writeln(Format('%-20s %-12s %-3s %-12s',['Name','Installed','','Available']));
for i:=0 to SL.Count-1 do
begin
PackageName:=SL[i];
if (PackageName<>CmdLinePackageName) and (PackageName<>CurrentDirPackageName) then
- Writeln(Format('%-20s %-12s %-3s %-12s',[PackageName,PackageInstalledVersionStr(PackageName),PackageInstalledStateStr(PackageName),PackageAvailableVersionStr(PackageName)]));
+ begin
+ if ShowGlobalAndLocal then
+ Writeln(Format('%-20s %-14s %-14s %-3s %-12s',[PackageName,PackageInstalledVersionStr(PackageName,True,False),PackageInstalledVersionStr(PackageName,True,True),PackageInstalledStateStr(PackageName),PackageAvailableVersionStr(PackageName)]))
+ else
+ Writeln(Format('%-20s %-12s %-3s %-12s',[PackageName,PackageInstalledVersionStr(PackageName),PackageInstalledStateStr(PackageName),PackageAvailableVersionStr(PackageName)]));
+ end;
end;
FreeAndNil(SL);
end;