From 6c6ce16b28526c66c4270fe29e32d629adbc6910 Mon Sep 17 00:00:00 2001 From: balazs Date: Thu, 22 Apr 2021 06:54:13 +0000 Subject: [PATCH] Opkman: Correctly resolve dependencies for external packages. git-svn-id: trunk@65050 - --- .../opkman_downloader.pas | 19 ++++++++++++------- .../onlinepackagemanager/opkman_mainfrm.pas | 2 +- .../opkman_packagelistfrm.pas | 6 +++--- .../opkman_serializablepackages.pas | 6 ++++++ .../opkman_visualtree.pas | 12 ++++++++++-- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/components/onlinepackagemanager/opkman_downloader.pas b/components/onlinepackagemanager/opkman_downloader.pas index 0460ff98a6..7070a617ec 100644 --- a/components/onlinepackagemanager/opkman_downloader.pas +++ b/components/onlinepackagemanager/opkman_downloader.pas @@ -391,14 +391,17 @@ begin begin if FNeedToBreak then Break; - if (SerializablePackages.Items[I].Checked) and (Trim(SerializablePackages.Items[I].DownloadZipURL) <> '') then + if (SerializablePackages.Items[I].Checked) then begin Inc(FCnt); FUpackageName := SerializablePackages.Items[I].Name; - FUPackageURL := SerializablePackages.Items[I].DownloadZipURL; + if SerializablePackages.Items[I].IsDependencyPackage then + FUPackageURL := Options.RemoteRepository[Options.ActiveRepositoryIndex] + SerializablePackages.Items[I].RepositoryFileName + else + FUPackageURL := SerializablePackages.Items[I].DownloadZipURL; FUTyp := 0; Synchronize(@DoOnPackageUpdateProgress); - UpdateSize := GetUpdateSize(SerializablePackages.Items[I].DownloadZipURL, FUErrMsg); + UpdateSize := GetUpdateSize(FUPackageURL, FUErrMsg); if UpdateSize > -1 then begin if UpdateSize = 0 then @@ -435,11 +438,13 @@ begin begin if NeedToBreak then Break; - if (SerializablePackages.Items[I].Checked) and (Trim(SerializablePackages.Items[I].DownloadZipURL) <> '') and - (SerializablePackages.Items[I].UpdateSize > -1) and (not (psError in SerializablePackages.Items[I].PackageStates)) then + if (SerializablePackages.Items[I].Checked) and (SerializablePackages.Items[I].UpdateSize > -1) and (not (psError in SerializablePackages.Items[I].PackageStates)) then begin Inc(FCnt); - FFrom := FixProtocol(SerializablePackages.Items[I].DownloadZipURL); + if SerializablePackages.Items[I].IsDependencyPackage then + FFrom := Options.RemoteRepository[Options.ActiveRepositoryIndex] + SerializablePackages.Items[I].RepositoryFileName + else + FFrom := FixProtocol(SerializablePackages.Items[I].DownloadZipURL); FTo := FDownloadTo + SerializablePackages.Items[I].RepositoryFileName; FCurSize := SerializablePackages.Items[I].UpdateSize; DS := TDownloadStream.Create(TFileStream.Create(FTo, fmCreate)); @@ -584,7 +589,7 @@ begin FTotCnt := 0; FTotSize := 0; for I := 0 to SerializablePackages.Count - 1 do - if (SerializablePackages.Items[I].Checked) and (Trim(SerializablePackages.Items[I].DownloadZipURL) <> '') then + if (SerializablePackages.Items[I].Checked) then Inc(FTotCnt); if (Assigned(LazarusIDE) and LazarusIDE.IDEStarted and (not LazarusIDE.IDEIsClosing)) then Start; diff --git a/components/onlinepackagemanager/opkman_mainfrm.pas b/components/onlinepackagemanager/opkman_mainfrm.pas index c764788856..293f48320f 100644 --- a/components/onlinepackagemanager/opkman_mainfrm.pas +++ b/components/onlinepackagemanager/opkman_mainfrm.pas @@ -787,7 +787,7 @@ var InstallStatus: TInstallStatus; NeedToRebuild: Boolean; begin - if not IsSomethingChecked(False) then + if not IsSomethingChecked(True) then Exit; CanGo := True; diff --git a/components/onlinepackagemanager/opkman_packagelistfrm.pas b/components/onlinepackagemanager/opkman_packagelistfrm.pas index c1ff3644b7..991c6b1976 100644 --- a/components/onlinepackagemanager/opkman_packagelistfrm.pas +++ b/components/onlinepackagemanager/opkman_packagelistfrm.pas @@ -162,6 +162,7 @@ var LazarusPkg: TLazarusPackage; ChkCnt, InvCnt: Integer; LazComp, FPCComp, WSComp: Boolean; + NoURL: Boolean; begin SetupControls(ATyp); ChkCnt := 0; @@ -202,9 +203,8 @@ begin if (SerializablePackages.Items[I].Checked) then begin Inc(ChkCnt); - if (Trim(SerializablePackages.Items[I].DownloadURL) = '') or - (Trim(SerializablePackages.Items[I].DownloadZipURL) = '') then {or - (SerializablePackages.GetPackageInstallState(SerializablePackages.Items[I]) = 0) then} + NoURL := (Trim(SerializablePackages.Items[I].DownloadURL) = '') or (Trim(SerializablePackages.Items[I].DownloadZipURL) = ''); + if NoURL and (not SerializablePackages.Items[I].IsDependencyPackage) then begin Inc(InvCnt); Node := FVST.AddChild(nil); diff --git a/components/onlinepackagemanager/opkman_serializablepackages.pas b/components/onlinepackagemanager/opkman_serializablepackages.pas index 29805105f3..09f14ee6e0 100644 --- a/components/onlinepackagemanager/opkman_serializablepackages.pas +++ b/components/onlinepackagemanager/opkman_serializablepackages.pas @@ -124,6 +124,7 @@ type FDependencies: TPackageDependencies; FDependenciesAsString: String; FChecked: Boolean; + FIsDependencyPackage: Boolean; function GetVersionAsString: String; function GetDependenciesAsString: String; procedure SetVersionAsString(const AValue: String); @@ -143,6 +144,7 @@ type property UpdateVersion: String read FUpdateVersion write FUpdateVersion; property PackageAbsolutePath: String read FPackageAbsolutePath write FPackageAbsolutePath; property Checked: Boolean read FChecked write FChecked; + property IsDependencyPackage: Boolean read FIsDependencyPackage write FIsDependencyPackage; property IsInstallable: Boolean read GetInstallable; property ForceNotify: Boolean read FForceNotify write FForceNotify; property InternalVersion: Integer read FInternalVersion write FInternalVersion; @@ -178,6 +180,7 @@ type FRepositoryFileSize: Int64; FRepositoryFileHash: String; FChecked: Boolean; + FIsDependencyPackage: Boolean; FRepositoryDate: TDateTime; FPackageState: TPackageState; FPackageStates: TPackageStates; @@ -220,6 +223,7 @@ type property ExternalDependecies: String read FExternalDependencies write FExternalDependencies; property OrphanedPackage: Integer read FOrphanedPackage write FOrphanedPackage; property Checked: Boolean read FChecked write FChecked; + property IsDependencyPackage: Boolean read FIsDependencyPackage write FIsDependencyPackage; property RepositoryFileName: String read FRepositoryFileName write FRepositoryFileName; property RepositoryFileSize: int64 read FRepositoryFileSize write FRepositoryFileSize; property RepositoryFileHash: String read FRepositoryFileHash write FRepositoryFileHash; @@ -1479,10 +1483,12 @@ begin begin MetaPkg := TMetaPackage(Items[I]); MetaPkg.Checked := False; + MetaPkg.IsDependencyPackage := False; for J := 0 to Items[I].FLazarusPackages.Count - 1 do begin LazarusPkg := TLazarusPackage(Items[I].FLazarusPackages.Items[J]); LazarusPkg.Checked := False; + LazarusPkg.IsDependencyPackage := False; end; end; end; diff --git a/components/onlinepackagemanager/opkman_visualtree.pas b/components/onlinepackagemanager/opkman_visualtree.pas index 27997ea807..80217d7df0 100644 --- a/components/onlinepackagemanager/opkman_visualtree.pas +++ b/components/onlinepackagemanager/opkman_visualtree.pas @@ -1133,7 +1133,11 @@ begin if (FVST.CheckState[Node] = csCheckedNormal) or (FVST.CheckState[Node] = csMixedNormal) then begin if (FVST.IsVisible[Node]) or (Data^.IsDependencyNode) then - MetaPkg.Checked := True + begin + MetaPkg.Checked := True; + if Data^.IsDependencyNode then + MetaPkg.IsDependencyPackage := True; + end else MetaPkg.Checked := False; end @@ -1149,7 +1153,11 @@ begin if FVST.CheckState[Node] = csCheckedNormal then begin if (FVST.IsVisible[Node]) or (Data^.IsDependencyNode) then - LazarusPkg.Checked := True + begin + LazarusPkg.Checked := True; + if Data^.IsDependencyNode then + LazarusPkg.IsDependencyPackage:= True + end else LazarusPkg.Checked := False; end