We've just done this on a one client's system. Unfortunately the source was encrypted so we were only able to compare the dates / times. In the end, we just compared the persistent data structures (Classes, properties and references) and then did a full schema load (with appropriate scripts.)
I've also done schema file comparisons between systems as Allistar suggested. (I use TextPad for this) Some times I've stripped the userModifiedTimestamps fom the schema file to remove errors due to different time stamps etc. (Code below)
If you have a copy of the Jade 6.0 documentation, the Developers Reference has the Schema File Syntax. It hasn't been published by Jade since, but is basically the same.
Code: Select all
cleanSchemaFile();
// Cleans a schema file removing all the modified time stamps
vars
oInputFile : File;
oOutputFile : File;
oFileOpenDlg : CMDFileOpen;
sLine : String;
begin
create oFileOpenDlg transient;
oFileOpenDlg.filter := "All Schema Files (*.scm, *.mth, *.cls)|*.scm;*.cls;*.mth|Schema Files (*.scm)|*.scm|Class Files (*.cls)|*.cls|Method Files (*.mth)|*.mth|All Files (*.*)|*.*";
oFileOpenDlg.dialogTitle := "Schema File Clean";
oFileOpenDlg.fileMustExist := true;
oFileOpenDlg.validate := true;
if oFileOpenDlg.open() = 0 then
create oInputFile transient;
oInputFile.fileName := oFileOpenDlg.fileName;
oInputFile.shareMode := File.Share_Read;
oInputFile.kind := File.Kind_Unknown_Text;
oInputFile.mode := File.Mode_Input;
oInputFile.open();
create oOutputFile transient;
oOutputFile.fileName := oFileOpenDlg.fileName.getFileStem & "_Cleaned." & oFileOpenDlg.fileName.extractFileExtension;
oOutputFile.shareMode := File.Share_Exclusive;
oOutputFile.kind := File.Kind_Unknown_Text;
oOutputFile.mode := File.Mode_Output;
oOutputFile.open;
while not oInputFile.endOfFile do
sLine := oInputFile.readLine;
if sLine[1:22] = " setModifiedTimeStamp" then
else
oOutputFile.writeLine( sLine );
endif;
if sLine = "typeSources" or sLine = "externalFunctionSources" then
break;
endif;
endwhile;
// Got to the message sources so just write all the method source.
while not oInputFile.endOfFile do
oOutputFile.writeString( oInputFile.readString( 2048 ) );
endwhile;
endif;
epilog
delete oFileOpenDlg;
delete oInputFile;
delete oOutputFile;
end;