IDE: Added TLazPackageGraph.FChangeStamp

git-svn-id: trunk@50153 -
This commit is contained in:
ondrej 2015-10-24 17:47:35 +00:00
parent 5ec7988f47
commit 3ca8d0b170
3 changed files with 27 additions and 17 deletions

View File

@ -1049,19 +1049,16 @@ end;
{ TPackageCommandsStamp } { TPackageCommandsStamp }
function TPackageCommandsStamp.Changed(AUnitInfo: TUnitInfo): Boolean; function TPackageCommandsStamp.Changed(AUnitInfo: TUnitInfo): Boolean;
var
xPackagesChangeStamp: Int64;
begin begin
xPackagesChangeStamp := PackageGraph.PackagesChangeStamp;
Result := not( Result := not(
(UnitInfo = AUnitInfo) (UnitInfo = AUnitInfo)
and (PackagesChangeStamp = xPackagesChangeStamp) and (PackagesChangeStamp = PackageGraph.ChangeStamp)
); );
if not Result then Exit; if not Result then Exit;
UnitInfo := AUnitInfo; UnitInfo := AUnitInfo;
PackagesChangeStamp := xPackagesChangeStamp; PackagesChangeStamp := PackageGraph.ChangeStamp;
end; end;
{ TProjectCommandsStamp } { TProjectCommandsStamp }

View File

@ -520,6 +520,7 @@ type
FAuthor: string; FAuthor: string;
FAutoUpdate: TPackageUpdatePolicy; FAutoUpdate: TPackageUpdatePolicy;
FFPDocPackageName: string; FFPDocPackageName: string;
FOnModifySilently: TNotifyEvent;
FOptionsBackup: TLazPackage; FOptionsBackup: TLazPackage;
FComponents: TFPList; // TFPList of TPkgComponent FComponents: TFPList; // TFPList of TPkgComponent
FDefineTemplates: TLazPackageDefineTemplates; FDefineTemplates: TLazPackageDefineTemplates;
@ -787,6 +788,7 @@ type
property UserReadOnly: boolean read FUserReadOnly write SetUserReadOnly; property UserReadOnly: boolean read FUserReadOnly write SetUserReadOnly;
property UserIgnoreChangeStamp: integer read FUserIgnoreChangeStamp property UserIgnoreChangeStamp: integer read FUserIgnoreChangeStamp
write FUserIgnoreChangeStamp; write FUserIgnoreChangeStamp;
property OnModifySilently: TNotifyEvent read FOnModifySilently write FOnModifySilently;
end; end;
PLazPackage = ^TLazPackage; PLazPackage = ^TLazPackage;
@ -2589,6 +2591,8 @@ begin
inc(FChangeStamp) inc(FChangeStamp)
else else
FChangeStamp:=low(FChangeStamp); FChangeStamp:=low(FChangeStamp);
if Assigned(FOnModifySilently) then
FOnModifySilently(Self);
end; end;
procedure TLazPackage.SetModified(const AValue: boolean); procedure TLazPackage.SetModified(const AValue: boolean);

View File

@ -210,11 +210,11 @@ type
FUpdateLock: integer; FUpdateLock: integer;
FVerbosity: TPkgVerbosityFlags; FVerbosity: TPkgVerbosityFlags;
FFindFileCache: TLazPackageGraphFileCache; FFindFileCache: TLazPackageGraphFileCache;
FChangeStamp: Int64;
function CreateDefaultPackage: TLazPackage; function CreateDefaultPackage: TLazPackage;
function GetCount: Integer; function GetCount: Integer;
function GetPackages(Index: integer): TLazPackage; function GetPackages(Index: integer): TLazPackage;
procedure DoDependencyChanged(Dependency: TPkgDependency); procedure DoDependencyChanged(Dependency: TPkgDependency);
function GetPackagesChangeStamp: Int64;
procedure SetRegistrationPackage(const AValue: TLazPackage); procedure SetRegistrationPackage(const AValue: TLazPackage);
procedure UpdateBrokenDependenciesToPackage(APackage: TLazPackage); procedure UpdateBrokenDependenciesToPackage(APackage: TLazPackage);
function OpenDependencyWithPackageLink(Dependency: TPkgDependency; function OpenDependencyWithPackageLink(Dependency: TPkgDependency;
@ -230,6 +230,9 @@ type
var Note: string): TModalResult; var Note: string): TModalResult;
procedure InvalidateStateFile(APackage: TLazPackage); procedure InvalidateStateFile(APackage: TLazPackage);
procedure OnExtToolBuildStopped(Sender: TObject); procedure OnExtToolBuildStopped(Sender: TObject);
procedure PkgModify(Sender: TObject);
protected
procedure IncChangeStamp;
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
@ -443,7 +446,7 @@ type
property Packages[Index: integer]: TLazPackage read GetPackages; default; // see Count for the number property Packages[Index: integer]: TLazPackage read GetPackages; default; // see Count for the number
property UpdateLock: integer read FUpdateLock; property UpdateLock: integer read FUpdateLock;
property Verbosity: TPkgVerbosityFlags read FVerbosity write FVerbosity; property Verbosity: TPkgVerbosityFlags read FVerbosity write FVerbosity;
property PackagesChangeStamp: Int64 read GetPackagesChangeStamp; property ChangeStamp: Int64 read FChangeStamp;
// base packages // base packages
property FCLPackage: TLazPackage read FFCLPackage; property FCLPackage: TLazPackage read FFCLPackage;
@ -917,6 +920,7 @@ begin
XMLConfig:=TXMLConfig.Create(nil); XMLConfig:=TXMLConfig.Create(nil);
NewPackage:=TLazPackage.Create; NewPackage:=TLazPackage.Create;
NewPackage.Filename:=AFilename; NewPackage.Filename:=AFilename;
NewPackage.OnModifySilently := @PkgModify;
Result:=LoadXMLConfigFromCodeBuffer(AFilename,XMLConfig, Result:=LoadXMLConfigFromCodeBuffer(AFilename,XMLConfig,
Code,[lbfUpdateFromDisk,lbfRevert],ShowAbort); Code,[lbfUpdateFromDisk,lbfRevert],ShowAbort);
if Result<>mrOk then exit; if Result<>mrOk then exit;
@ -1115,6 +1119,7 @@ begin
if FUpdateLock<=0 then RaiseException('TLazPackageGraph.EndUpdate'); if FUpdateLock<=0 then RaiseException('TLazPackageGraph.EndUpdate');
dec(FUpdateLock); dec(FUpdateLock);
if FUpdateLock=0 then begin if FUpdateLock=0 then begin
IncChangeStamp;
if Assigned(OnEndUpdate) then OnEndUpdate(Self,fChanged); if Assigned(OnEndUpdate) then OnEndUpdate(Self,fChanged);
end; end;
end; end;
@ -1670,6 +1675,11 @@ begin
end; end;
end; end;
procedure TLazPackageGraph.PkgModify(Sender: TObject);
begin
IncChangeStamp;
end;
function TLazPackageGraph.DependencyExists(Dependency: TPkgDependency; function TLazPackageGraph.DependencyExists(Dependency: TPkgDependency;
Flags: TFindPackageFlags): boolean; Flags: TFindPackageFlags): boolean;
begin begin
@ -1706,6 +1716,7 @@ function TLazPackageGraph.CreateNewPackage(const Prefix: string): TLazPackage;
begin begin
BeginUpdate(true); BeginUpdate(true);
Result:=TLazPackage.Create; Result:=TLazPackage.Create;
Result.OnModifySilently:=@PkgModify;
Result.Name:=CreateUniquePkgName(Prefix,nil); Result.Name:=CreateUniquePkgName(Prefix,nil);
AddPackage(Result); AddPackage(Result);
EndUpdate; EndUpdate;
@ -1941,7 +1952,9 @@ begin
AddRequiredDependency(SynEditPackage.CreateDependencyWithOwner(Result)); AddRequiredDependency(SynEditPackage.CreateDependencyWithOwner(Result));
Modified:=false; Modified:=false;
OnModifySilently:=@PkgModify;
end; end;
IncChangeStamp;
end; end;
function TLazPackageGraph.GetCount: Integer; function TLazPackageGraph.GetCount: Integer;
@ -5159,20 +5172,15 @@ begin
end; end;
end; end;
function TLazPackageGraph.GetPackagesChangeStamp: Int64; procedure TLazPackageGraph.IncChangeStamp;
var begin
I: Integer; if FUpdateLock = 0 then
xPck: TLazPackage;
begin begin
{$push}{$R-} // range check off {$push}{$R-} // range check off
Result := 0; Inc(FChangeStamp);
for I := 0 to Count-1 do
begin
xPck := Packages[I];
Inc(Result, xPck.ChangeStamp);
end;
{$pop} {$pop}
end; end;
end;
procedure TLazPackageGraph.SortDependencyListTopologicallyOld( procedure TLazPackageGraph.SortDependencyListTopologicallyOld(
var FirstDependency: TPkgDependency; TopLevelFirst: boolean); var FirstDependency: TPkgDependency; TopLevelFirst: boolean);
@ -5746,6 +5754,7 @@ begin
UsageOptions.UnitPath:=''; UsageOptions.UnitPath:='';
Modified:=false; Modified:=false;
OnModifySilently:=@PkgModify;
EndUpdate; EndUpdate;
end; end;
AddPackage(BrokenPackage); AddPackage(BrokenPackage);