IDE: save lpk files: keep eol type and encoding, bug #16224

git-svn-id: trunk@24507 -
This commit is contained in:
mattias 2010-04-08 13:03:52 +00:00
parent 653230ad6b
commit 19dd8f0be3
2 changed files with 20 additions and 12 deletions

View File

@ -38,8 +38,8 @@ interface
uses
Classes, SysUtils, LCLProc, LResources, Forms, Controls, Dialogs, FileUtil,
Laz_XMLCfg, Laz_XMLWrite, CodeCache, CodeToolManager, AVL_Tree,
LazIDEIntf,
Laz_XMLCfg, Laz_XMLWrite, CodeToolsConfig, CodeCache, CodeToolManager,
AVL_Tree, LazIDEIntf,
IDEProcs, LazarusIDEStrConsts, IDEDialogs;
type
@ -78,7 +78,8 @@ function LoadXMLConfigFromCodeBuffer(const Filename: string; Config: TXMLConfig;
ShowAbort: boolean
): TModalResult;
function SaveXMLConfigToCodeBuffer(const Filename: string; Config: TXMLConfig;
var ACodeBuffer: TCodeBuffer): TModalResult;
var ACodeBuffer: TCodeBuffer;
KeepFileAttributes: boolean): TModalResult;
function CreateEmptyFile(const Filename: string;
ErrorButtons: TMsgDlgButtons): TModalResult;
function CheckCreatingFile(const AFilename: string;
@ -324,6 +325,8 @@ begin
ACodeBuffer.SaveToStream(ms);
ms.Position:=0;
try
if Config is TCodeBufXMLConfig then
TCodeBufXMLConfig(Config).KeepFileAttributes:=true;
Config.ReadFromStream(ms);
except
on E: Exception do begin
@ -342,12 +345,16 @@ begin
end;
function SaveXMLConfigToCodeBuffer(const Filename: string;
Config: TXMLConfig; var ACodeBuffer: TCodeBuffer): TModalResult;
Config: TXMLConfig; var ACodeBuffer: TCodeBuffer; KeepFileAttributes: boolean
): TModalResult;
var
ms: TMemoryStream;
begin
if ACodeBuffer=nil then begin
ACodeBuffer:=CodeToolBoss.CreateFile(Filename);
if KeepFileAttributes and FileExistsCached(Filename) then
ACodeBuffer:=CodeToolBoss.LoadFile(Filename,true,false)
else
ACodeBuffer:=CodeToolBoss.CreateFile(Filename);
if ACodeBuffer=nil then
exit(mrCancel);
end;

View File

@ -47,8 +47,8 @@ uses
TypInfo, Classes, SysUtils, LCLProc, Forms, Controls, Dialogs, Menus,
StringHashList, Translations,
// codetools
CodeToolManager, CodeCache, NonPascalCodeTools, BasicCodeTools,
DefineTemplates, FileProcs, AVL_Tree, Laz_XMLCfg,
CodeToolsConfig, CodeToolManager, CodeCache, NonPascalCodeTools,
BasicCodeTools, DefineTemplates, FileProcs, AVL_Tree, Laz_XMLCfg,
// IDE Interface
SrcEditorIntf, IDEExternToolIntf, NewItemIntf, ProjectIntf, PackageIntf, MenuIntf,
PropEdits, IDEMsgIntf, MacroIntf, LazIDEIntf,
@ -2443,7 +2443,7 @@ begin
// load the package file
try
XMLConfig:=TXMLConfig.Create(nil);
XMLConfig:=TCodeBufXMLConfig.Create(nil);
try
APackage.Filename:=AFilename;
Result:=LoadXMLConfigFromCodeBuffer(AFilename,XMLConfig,
@ -2498,7 +2498,7 @@ end;
function TPkgManager.DoSavePackage(APackage: TLazPackage;
Flags: TPkgSaveFlags): TModalResult;
var
XMLConfig: TXMLConfig;
XMLConfig: TCodeBufXMLConfig;
PkgLink: TPackageLink;
Code: TCodeBuffer;
begin
@ -2513,7 +2513,7 @@ begin
// check if package needs saving
if (not (psfSaveAs in Flags))
and (not APackage.ReadOnly) and (not APackage.Modified)
and FileExistsUTF8(APackage.Filename) then begin
and FileExistsCached(APackage.Filename) then begin
Result:=mrOk;
exit;
end;
@ -2551,12 +2551,13 @@ begin
// save
try
XMLConfig:=TXMLConfig.Create(nil);
XMLConfig:=TCodeBufXMLConfig.Create(nil);
try
XMLConfig.Clear;
XMLConfig.KeepFileAttributes:=true;
APackage.SaveToXMLConfig(XMLConfig,'Package/');
Code:=nil;
Result:=SaveXMLConfigToCodeBuffer(APackage.Filename,XMLConfig,Code);
Result:=SaveXMLConfigToCodeBuffer(APackage.Filename,XMLConfig,Code,true);
if Result<>mrOk then exit;
APackage.LPKSource:=Code;
PkgLink:=PkgLinks.AddUserLink(APackage);