IDE: removed auto resolving symlinks. Filenames must fit the search paths

git-svn-id: trunk@15795 -
This commit is contained in:
mattias 2008-07-16 23:22:54 +00:00
parent b38ec6cfc3
commit 19b259bb99
8 changed files with 41 additions and 72 deletions

View File

@ -508,7 +508,7 @@ begin
DebugLn('FindAllDelphiPackageUnits file not found: "',CurFilename,'"'); DebugLn('FindAllDelphiPackageUnits file not found: "',CurFilename,'"');
continue; continue;
end; end;
PkgFile:=APackage.FindPkgFile(CurFilename,false,true,false); PkgFile:=APackage.FindPkgFile(CurFilename,true,false);
if PkgFile=nil then begin if PkgFile=nil then begin
if FilenameIsPascalUnit(CurFilename) then begin if FilenameIsPascalUnit(CurFilename) then begin
// check unitname // check unitname

View File

@ -7211,7 +7211,7 @@ begin
Result:=mrOk; Result:=mrOk;
if Filename='' then exit; if Filename='' then exit;
UnitIndex:=Project1.IndexOfFilename(TrimFilename(Filename), UnitIndex:=Project1.IndexOfFilename(TrimFilename(Filename),
[pfsfOnlyEditorFiles,pfsfResolveFileLinks]); [pfsfOnlyEditorFiles]);
if UnitIndex<0 then exit; if UnitIndex<0 then exit;
AnUnitInfo:=Project1.Units[UnitIndex]; AnUnitInfo:=Project1.Units[UnitIndex];
if AnUnitInfo.EditorIndex>=0 then if AnUnitInfo.EditorIndex>=0 then
@ -7295,10 +7295,14 @@ begin
AFilename:=TrimFilename(AFilename); AFilename:=TrimFilename(AFilename);
DiskFilename:=FindDiskFilename(AFilename); DiskFilename:=FindDiskFilename(AFilename);
if DiskFilename<>AFilename then begin if DiskFilename<>AFilename then begin
debugln('WARNING: TMainIDE.DoOpenEditorFile Opening "',DiskFilename,'" instead "',AFilename,'"'); // the case is different
DebugLn(['TMainIDE.DoOpenEditorFile Fixing file case: ',AFilename,' -> ',DiskFilename]);
AFilename:=DiskFilename; AFilename:=DiskFilename;
end; end;
// check if symlink and ask user open the real file instead
ChooseSymlink(AFilename);
FilenameNoPath:=ExtractFilename(AFilename); FilenameNoPath:=ExtractFilename(AFilename);
// check to not open directories // check to not open directories
@ -7355,7 +7359,7 @@ begin
ReOpen:=(UnitIndex>=0); ReOpen:=(UnitIndex>=0);
// check if there is already a symlinked file open in the editor // check if there is already a symlinked file open in the editor
OtherUnitIndex:=Project1.IndexOfFilename(AFilename, OtherUnitIndex:=Project1.IndexOfFilename(AFilename,
[pfsfOnlyEditorFiles,pfsfResolveFileLinks]); [pfsfOnlyEditorFiles]);
if (OtherUnitIndex>=0) and (OtherUnitIndex<>UnitIndex) then begin if (OtherUnitIndex>=0) and (OtherUnitIndex<>UnitIndex) then begin
// There is another file open in the editor symlinked to the same file // There is another file open in the editor symlinked to the same file
// ToDo // ToDo

View File

@ -148,7 +148,7 @@ begin
end; end;
// check if file is already in the package // check if file is already in the package
PkgFile:=APackage.FindPkgFile(Filename,false,true,false); PkgFile:=APackage.FindPkgFile(Filename,true,false);
if PkgFile<>nil then begin if PkgFile<>nil then begin
MessageDlg(lisPkgMangFileIsAlreadyInPackage, MessageDlg(lisPkgMangFileIsAlreadyInPackage,
Format(lisAF2PTheFileIsAlreadyInThePackage, ['"', Filename, '"', #13, Format(lisAF2PTheFileIsAlreadyInThePackage, ['"', Filename, '"', #13,
@ -335,7 +335,7 @@ begin
// skip readonly packages // skip readonly packages
if APackage.ReadOnly then continue; if APackage.ReadOnly then continue;
// skip packages, that already contains the file // skip packages, that already contains the file
if APackage.FindPkgFile(AFilename,false,true,false)<>nil then continue; if APackage.FindPkgFile(AFilename,true,false)<>nil then continue;
if not ShowAllCheckBox.Checked then begin if not ShowAllCheckBox.Checked then begin
// skip packages, where the filename is not in the package directory // skip packages, where the filename is not in the package directory
// or one of its source directories // or one of its source directories

View File

@ -344,7 +344,7 @@ begin
// check if file already exists in package // check if file already exists in package
if FilenameIsAbsolute(AFilename) then begin if FilenameIsAbsolute(AFilename) then begin
PkgFile:=LazPackage.FindPkgFile(AFilename,true,true,false); PkgFile:=LazPackage.FindPkgFile(AFilename,true,false);
if PkgFile<>nil then begin if PkgFile<>nil then begin
Msg:=Format(lisA2PFileAlreadyExistsInTheProject, ['"', AFilename, '"']); Msg:=Format(lisA2PFileAlreadyExistsInTheProject, ['"', AFilename, '"']);
if PkgFile.Filename<>AFilename then if PkgFile.Filename<>AFilename then
@ -606,7 +606,7 @@ begin
mtError,[mbCancel],0); mtError,[mbCancel],0);
exit; exit;
end; end;
if LazPackage.FindPkgFile(Params.UnitFilename,true,true,false)<>nil then begin if LazPackage.FindPkgFile(Params.UnitFilename,true,false)<>nil then begin
MessageDlg(lisA2PFileAlreadyInPackage, MessageDlg(lisA2PFileAlreadyInPackage,
Format(lisA2PTheFileIsAlreadyInThePackage, ['"', Params.UnitFilename, '"'] Format(lisA2PTheFileIsAlreadyInThePackage, ['"', Params.UnitFilename, '"']
), ),
@ -825,7 +825,7 @@ begin
NewFileType:=FileNameToPkgFileType(Filename); NewFileType:=FileNameToPkgFileType(Filename);
if LazPackage.FindPkgFile(Filename,true,true,false)<>nil then begin if LazPackage.FindPkgFile(Filename,true,false)<>nil then begin
// file already in package // file already in package
FilesListView.Items.Delete(i); FilesListView.Items.Delete(i);
continue; continue;

View File

@ -723,8 +723,7 @@ type
procedure ShortenFilename(var ExpandedFilename: string; UseUp: boolean); procedure ShortenFilename(var ExpandedFilename: string; UseUp: boolean);
procedure LongenFilename(var AFilename: string); procedure LongenFilename(var AFilename: string);
function FindPkgFile(const AFilename: string; function FindPkgFile(const AFilename: string;
ResolveLinks, IgnoreRemoved, FindNewFile: boolean IgnoreRemoved, FindNewFile: boolean): TPkgFile;
): TPkgFile;
function FindUnit(const TheUnitName: string): TPkgFile; function FindUnit(const TheUnitName: string): TPkgFile;
function FindUnit(const TheUnitName: string; IgnoreRemoved: boolean): TPkgFile; function FindUnit(const TheUnitName: string; IgnoreRemoved: boolean): TPkgFile;
function FindUnit(const TheUnitName: string; IgnoreRemoved: boolean; function FindUnit(const TheUnitName: string; IgnoreRemoved: boolean;
@ -2859,7 +2858,7 @@ begin
end; end;
function TLazPackage.FindPkgFile(const AFilename: string; function TLazPackage.FindPkgFile(const AFilename: string;
ResolveLinks, IgnoreRemoved, FindNewFile: boolean): TPkgFile; IgnoreRemoved, FindNewFile: boolean): TPkgFile;
var var
TheFilename: String; TheFilename: String;
Cnt: Integer; Cnt: Integer;
@ -2880,32 +2879,18 @@ begin
end; end;
end; end;
if ResolveLinks and FilenameIsAbsolute(TheFilename) then begin
TheFilename:=ReadAllLinks(TheFilename,false);
if TheFilename='' then TheFilename:=AFilename;
end;
Cnt:=FileCount; Cnt:=FileCount;
for i:=0 to Cnt-1 do begin for i:=0 to Cnt-1 do begin
Result:=Files[i]; Result:=Files[i];
if ResolveLinks then begin if CompareFilenames(Result.Filename,TheFilename)=0 then
if CompareFilenames(Result.GetResolvedFilename,TheFilename)=0 then exit;
exit;
end else begin
if CompareFilenames(Result.Filename,TheFilename)=0 then
exit;
end;
end; end;
if not IgnoreRemoved then begin if not IgnoreRemoved then begin
Cnt:=RemovedFilesCount; Cnt:=RemovedFilesCount;
for i:=0 to Cnt-1 do begin for i:=0 to Cnt-1 do begin
Result:=RemovedFiles[i]; Result:=RemovedFiles[i];
if ResolveLinks then begin if CompareFilenames(Result.Filename,TheFilename)=0 then
if CompareFilenames(Result.GetResolvedFilename,TheFilename)=0 then exit;
exit;
end else begin
if CompareFilenames(Result.Filename,TheFilename)=0 then
exit;
end;
end; end;
end; end;
Result:=nil; Result:=nil;

View File

@ -980,7 +980,7 @@ procedure TPackageEditorForm.AddBitBtnClick(Sender: TObject);
if AddParams.AutoAddLFMFile then begin if AddParams.AutoAddLFMFile then begin
NewLFMFilename:=ChangeFileExt(AddParams.UnitFilename,'.lfm'); NewLFMFilename:=ChangeFileExt(AddParams.UnitFilename,'.lfm');
if FileExists(NewLFMFilename) if FileExists(NewLFMFilename)
and (LazPackage.FindPkgFile(NewLFMFilename,false,true,false)=nil) then and (LazPackage.FindPkgFile(NewLFMFilename,true,false)=nil) then
LazPackage.AddFile(NewLFMFilename,'',pftLFM,[],cpNormal) LazPackage.AddFile(NewLFMFilename,'',pftLFM,[],cpNormal)
else else
NewLFMFilename:=''; NewLFMFilename:='';
@ -989,7 +989,7 @@ procedure TPackageEditorForm.AddBitBtnClick(Sender: TObject);
if AddParams.AutoAddLRSFile then begin if AddParams.AutoAddLRSFile then begin
NewLRSFilename:=ChangeFileExt(AddParams.UnitFilename,'.lrs'); NewLRSFilename:=ChangeFileExt(AddParams.UnitFilename,'.lrs');
if FileExists(NewLRSFilename) if FileExists(NewLRSFilename)
and (LazPackage.FindPkgFile(NewLRSFilename,false,true,false)=nil) then and (LazPackage.FindPkgFile(NewLRSFilename,true,false)=nil) then
LazPackage.AddFile(NewLRSFilename,'',pftLRS,[],cpNormal) LazPackage.AddFile(NewLRSFilename,'',pftLRS,[],cpNormal)
else else
NewLRSFilename:=''; NewLRSFilename:='';

View File

@ -200,19 +200,16 @@ type
var File1: TPkgFile; var File1: TPkgFile;
var ConflictPkg: TLazPackage): boolean; var ConflictPkg: TLazPackage): boolean;
function FindFileInAllPackages(const TheFilename: string; function FindFileInAllPackages(const TheFilename: string;
ResolveLinks, IgnoreDeleted, IgnoreDeleted, FindNewFile: boolean): TPkgFile;
FindNewFile: boolean): TPkgFile;
procedure FindPossibleOwnersOfUnit(const TheFilename: string; procedure FindPossibleOwnersOfUnit(const TheFilename: string;
OwnerList: TFPList; OwnerList: TFPList);
ResolveLinks: boolean);
function FindLowestPkgNodeByName(const PkgName: string): TAVLTreeNode; function FindLowestPkgNodeByName(const PkgName: string): TAVLTreeNode;
function FindNextSameName(ANode: TAVLTreeNode): TAVLTreeNode; function FindNextSameName(ANode: TAVLTreeNode): TAVLTreeNode;
function FindNodeOfDependency(Dependency: TPkgDependency; function FindNodeOfDependency(Dependency: TPkgDependency;
Flags: TFindPackageFlags): TAVLTreeNode; Flags: TFindPackageFlags): TAVLTreeNode;
function FindOpenPackage(Dependency: TPkgDependency; function FindOpenPackage(Dependency: TPkgDependency;
Flags: TFindPackageFlags): TLazPackage; Flags: TFindPackageFlags): TLazPackage;
function FindPackageWithFilename(const TheFilename: string; function FindPackageWithFilename(const TheFilename: string): TLazPackage;
ResolveLinks: boolean): TLazPackage;
function FindPackageWithID(PkgID: TLazPackageID): TLazPackage; function FindPackageWithID(PkgID: TLazPackageID): TLazPackage;
function FindPackageWithIDMask(PkgIDMask: TLazPackageID): TLazPackage; function FindPackageWithIDMask(PkgIDMask: TLazPackageID): TLazPackage;
function FindPackageProvidingName(FirstDependency: TPkgDependency; function FindPackageProvidingName(FirstDependency: TPkgDependency;
@ -984,14 +981,14 @@ begin
end; end;
function TLazPackageGraph.FindFileInAllPackages(const TheFilename: string; function TLazPackageGraph.FindFileInAllPackages(const TheFilename: string;
ResolveLinks, IgnoreDeleted, FindNewFile: boolean): TPkgFile; IgnoreDeleted, FindNewFile: boolean): TPkgFile;
var var
Cnt: Integer; Cnt: Integer;
i: Integer; i: Integer;
begin begin
Cnt:=Count; Cnt:=Count;
for i:=0 to Cnt-1 do begin for i:=0 to Cnt-1 do begin
Result:=Packages[i].FindPkgFile(TheFilename,ResolveLinks,IgnoreDeleted, Result:=Packages[i].FindPkgFile(TheFilename,IgnoreDeleted,
FindNewFile); FindNewFile);
if Result<>nil then exit; if Result<>nil then exit;
end; end;
@ -999,22 +996,16 @@ begin
end; end;
procedure TLazPackageGraph.FindPossibleOwnersOfUnit(const TheFilename: string; procedure TLazPackageGraph.FindPossibleOwnersOfUnit(const TheFilename: string;
OwnerList: TFPList; ResolveLinks: boolean); OwnerList: TFPList);
var var
Cnt: Integer; Cnt: Integer;
i: Integer; i: Integer;
AFilename: string;
APackage: TLazPackage; APackage: TLazPackage;
PkgDirs: String; PkgDirs: String;
SrcDir: String; SrcDir: String;
begin begin
if not FilenameIsAbsolute(TheFilename) then exit; if not FilenameIsAbsolute(TheFilename) then exit;
Cnt:=Count; Cnt:=Count;
AFilename:=TheFilename;
if ResolveLinks then begin
AFilename:=ReadAllLinks(TheFilename,false);
if AFilename='' then AFilename:=TheFilename;
end;
SrcDir:=ExtractFilePath(TheFilename); SrcDir:=ExtractFilePath(TheFilename);
for i:=0 to Cnt-1 do begin for i:=0 to Cnt-1 do begin
APackage:=Packages[i]; APackage:=Packages[i];
@ -1030,29 +1021,18 @@ begin
end; end;
end; end;
function TLazPackageGraph.FindPackageWithFilename(const TheFilename: string; function TLazPackageGraph.FindPackageWithFilename(const TheFilename: string
ResolveLinks: boolean): TLazPackage; ): TLazPackage;
var var
Cnt: Integer; Cnt: Integer;
i: Integer; i: Integer;
AFilename: string;
begin begin
Cnt:=Count; Cnt:=Count;
AFilename:=TheFilename;
if ResolveLinks then begin
AFilename:=ReadAllLinks(TheFilename,false);
if AFilename='' then AFilename:=TheFilename;
end;
for i:=0 to Cnt-1 do begin for i:=0 to Cnt-1 do begin
Result:=Packages[i]; Result:=Packages[i];
if Result.IsVirtual then continue; if Result.IsVirtual then continue;
if ResolveLinks then begin if CompareFilenames(TheFilename,Result.Filename)=0 then
if CompareFilenames(TheFilename,Result.GetResolvedFilename)=0 then exit;
exit;
end else begin
if CompareFilenames(TheFilename,Result.Filename)=0 then
exit;
end;
end; end;
Result:=nil; Result:=nil;
end; end;

View File

@ -701,7 +701,7 @@ begin
Filename:=ActiveUnitInfo.Filename; Filename:=ActiveUnitInfo.Filename;
PkgFile:=PackageGraph.FindFileInAllPackages(Filename,false,true, PkgFile:=PackageGraph.FindFileInAllPackages(Filename,true,
not ActiveUnitInfo.IsPartOfProject); not ActiveUnitInfo.IsPartOfProject);
if PkgFile=nil then begin if PkgFile=nil then begin
IDEMessageDialog(lisProjAddPackageNotFound, IDEMessageDialog(lisProjAddPackageNotFound,
@ -1157,7 +1157,7 @@ begin
end; end;
// check file name conflicts with files in other packages // check file name conflicts with files in other packages
PkgFile:=PackageGraph.FindFileInAllPackages(NewFilename,true,true,false); PkgFile:=PackageGraph.FindFileInAllPackages(NewFilename,true,false);
if PkgFile<>nil then begin if PkgFile<>nil then begin
Result:=IDEMessageDialog(lisPkgMangFilenameIsUsedByOtherPackage, Result:=IDEMessageDialog(lisPkgMangFilenameIsUsedByOtherPackage,
Format(lisPkgMangTheFileNameIsUsedByThePackageInFile, ['"', Format(lisPkgMangTheFileNameIsUsedByThePackageInFile, ['"',
@ -1856,7 +1856,7 @@ var
PkgFile: TPkgFile; PkgFile: TPkgFile;
begin begin
Result:=''; Result:='';
PkgFile:=PackageGraph.FindFileInAllPackages(Filename,false,true,true); PkgFile:=PackageGraph.FindFileInAllPackages(Filename,true,true);
if PkgFile=nil then exit; if PkgFile=nil then exit;
APackage:=PkgFile.LazPackage; APackage:=PkgFile.LazPackage;
if APackage.AutoCreated or (not APackage.HasDirectory) then exit; if APackage.AutoCreated or (not APackage.HasDirectory) then exit;
@ -2381,7 +2381,7 @@ begin
OpenEditor:=true; OpenEditor:=true;
// check if package is already loaded // check if package is already loaded
APackage:=PackageGraph.FindPackageWithFilename(AFilename,true); APackage:=PackageGraph.FindPackageWithFilename(AFilename);
if (APackage=nil) or (pofRevert in Flags) then begin if (APackage=nil) or (pofRevert in Flags) then begin
// package not yet loaded or it should be reloaded // package not yet loaded or it should be reloaded
@ -2707,13 +2707,13 @@ begin
if (OldFilename=NewFilename) then if (OldFilename=NewFilename) then
exit; exit;
//debugln('TPkgManager.OnRenameFile A OldFilename="',OldFilename,'" New="',NewFilename,'"'); //debugln('TPkgManager.OnRenameFile A OldFilename="',OldFilename,'" New="',NewFilename,'"');
OldPkgFile:=PackageGraph.FindFileInAllPackages(OldFilename,false,true, OldPkgFile:=PackageGraph.FindFileInAllPackages(OldFilename,true,
not IsPartOfProject); not IsPartOfProject);
if (OldPkgFile=nil) or (OldPkgFile.LazPackage.ReadOnly) then if (OldPkgFile=nil) or (OldPkgFile.LazPackage.ReadOnly) then
exit; exit;
OldPackage:=OldPkgFile.LazPackage; OldPackage:=OldPkgFile.LazPackage;
debugln('TPkgManager.OnRenameFile A OldPackage="',OldPackage.Name); debugln('TPkgManager.OnRenameFile A OldPackage="',OldPackage.Name);
NewPkgFile:=PackageGraph.FindFileInAllPackages(NewFilename,false,true,false); NewPkgFile:=PackageGraph.FindFileInAllPackages(NewFilename,true,false);
if (NewPkgFile<>nil) and (OldPackage<>NewPkgFile.LazPackage) then exit; if (NewPkgFile<>nil) and (OldPackage<>NewPkgFile.LazPackage) then exit;
Result:=IDEMessageDialog(lisPkgMangRenameFileInPackage, Result:=IDEMessageDialog(lisPkgMangRenameFileInPackage,
@ -3194,9 +3194,9 @@ begin
// find all packages owning file // find all packages owning file
if piosfIncludeSourceDirectories in Flags then begin if piosfIncludeSourceDirectories in Flags then begin
PackageGraph.FindPossibleOwnersOfUnit(UnitFilename,Result,false); PackageGraph.FindPossibleOwnersOfUnit(UnitFilename,Result);
end else if not (piosfExcludeOwned in Flags) then begin end else if not (piosfExcludeOwned in Flags) then begin
PkgFile:=PackageGraph.FindFileInAllPackages(UnitFilename,false,true,true); PkgFile:=PackageGraph.FindFileInAllPackages(UnitFilename,true,true);
if (PkgFile<>nil) and (PkgFile.LazPackage<>nil) then if (PkgFile<>nil) and (PkgFile.LazPackage<>nil) then
Result.Add(PkgFile.LazPackage); Result.Add(PkgFile.LazPackage);
// check package source files (they usually do not have a TPkgFile) // check package source files (they usually do not have a TPkgFile)
@ -3418,7 +3418,7 @@ begin
end; end;
// check if file is already in a package // check if file is already in a package
PkgFile:=PackageGraph.FindFileInAllPackages(Filename,false,true,true); PkgFile:=PackageGraph.FindFileInAllPackages(Filename,true,true);
if PkgFile<>nil then begin if PkgFile<>nil then begin
Result:=IDEMessageDialog(lisPkgMangFileIsAlreadyInPackage, Result:=IDEMessageDialog(lisPkgMangFileIsAlreadyInPackage,
Format(lisPkgMangTheFileIsAlreadyInThePackage, ['"', Filename, '"', #13, Format(lisPkgMangTheFileIsAlreadyInThePackage, ['"', Filename, '"', #13,