diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/fppkg/fppkg.pp | 3 | ||||
-rw-r--r-- | utils/fppkg/fprepos.pp | 16 | ||||
-rw-r--r-- | utils/fppkg/pkgcommands.pp | 2 | ||||
-rw-r--r-- | utils/fppkg/pkgoptions.pp | 2 | ||||
-rw-r--r-- | utils/fppkg/pkgrepos.pp | 45 |
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; |