From 9e61edac342cb99e77941e9b2d14f5cc8a41324c Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Tue, 12 Dec 2017 13:16:02 +0100 Subject: diverses --- Make.lpr | 23 +++--- Make.lps | 112 +++++++++++++++-------------- dateibeziehungen.pas | 196 +++++++++++++++++++-------------------------------- tools.pas | 15 +++- 4 files changed, 152 insertions(+), 194 deletions(-) diff --git a/Make.lpr b/Make.lpr index b0e6ff0..70ea667 100644 --- a/Make.lpr +++ b/Make.lpr @@ -25,19 +25,18 @@ type procedure tMake.doRun; var - mach: tMach; - errorMsg: string; - lOpts,nonOpts: tStringList; + mach: tMach; + errorMsg,md,pd: string; + lOpts,nonOpts: tStringList; begin lOpts:=tStringList.create; lOpts.add('Ausgabe:'); lOpts.add('Datei:'); lOpts.add('Prüfsummen:'); - lOpts.add('alleSummenErneuern'); lOpts.add('leise'); lOpts.add('unsicher'); nonOpts:=tStringList.create; - errorMsg:=checkOptions('A:D:P:alu',lOpts,nil,nonOpts,true); + errorMsg:=checkOptions('A:D:P:lu',lOpts,nil,nonOpts,true); lOpts.free; while nonOpts.count>0 do begin if errorMsg<>'' then @@ -52,24 +51,24 @@ begin if hasOption('l','leise') then __ausgabenMaske:=3; - mach:=tMach.create; - if hasOption('D','Datei') then - mach.machDatei:=getOptionValue('D','Datei') + md:=getOptionValue('D','Datei') else - mach.machDatei:=''; + md:=''; if hasOption('P','Prüfsummen') then - mach.pruefsummenDatei:=getOptionValue('P','Prüfsummen') + pd:=getOptionValue('P','Prüfsummen') else - mach.pruefsummenDatei:=''; + pd:=''; + + mach:=tMach.create(md,pd); gibAus('originale Regeln: '+inttostr(mach.anzOriAbh)+', originale Dateien: '+inttostr(mach.anzDats),3); mach.erzeugeRegeln; gibAus('Regeln: '+inttostr(mach.anzMglAbh)+', Dateien: '+inttostr(mach.anzDats),3); mach.findeWasZuTunIst; gibAus('anzuwendende Regeln: '+inttostr(mach.anzMglAbh),3); - mach.tueWasZuTunIst(hasOption('a','alleSummenErneuern'),hasOption('u','unsicher'),getOptionValue('A','Ausgabe')); + mach.tueWasZuTunIst(hasOption('u','unsicher'),getOptionValue('A','Ausgabe')); terminate; end; diff --git a/Make.lps b/Make.lps index 289a5d9..26b3c13 100644 --- a/Make.lps +++ b/Make.lps @@ -7,45 +7,45 @@ - - - + + + - + - - - - + + + - + - + + - - - - + + + + @@ -65,7 +65,7 @@ - + @@ -134,123 +134,121 @@ - + - + - + - + - + - + - + - + - - + - + - + - + - + - + - - + + - + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + - - + + - - + + diff --git a/dateibeziehungen.pas b/dateibeziehungen.pas index c1cf391..a303910 100644 --- a/dateibeziehungen.pas +++ b/dateibeziehungen.pas @@ -56,8 +56,9 @@ type tGenerischeAbhaengigkeit = class(tObject) private - _quellens,_zieles: array of tDateienMitDaten; - _dats: tDateienMitDaten; + _machDatei,_pruefSummenDatei: string; + _quellens,_zieles: array of tDateienMitDaten; + _dats: tDateienMitDaten; function rQuellen(idx: longint): tDateienMitDaten; function rZiele(idx: longint): tDateienMitDaten; function quellersetzung(var worin: string; quellen: tDateienMitDaten; momentanePosition: longint): boolean; @@ -65,14 +66,13 @@ type function findeMehrZiele(ziele, quellen: tDateienMitDaten): boolean; function matchCount: longint; public - machDatei: string; - quellenREs: array of string; // regexe der Quellen - nur deshalb kein tRegExpr, weil es ohnehin zuerst substituiert werden muss - zieleFkt,befehleFkt: tStringlist; + quellenREs: array of string; // regexe der Quellen - nur deshalb kein tRegExpr, weil es ohnehin zuerst substituiert werden muss + zieleFkt,befehleFkt: tStringlist; property quellen[idx: longint]: tDateienMitDaten read rQuellen; property ziele[idx: longint]: tDateienMitDaten read rZiele; - constructor create(dats: tDateienMitDaten); + constructor create(dats: tDateienMitDaten; machDatei,pruefSummenDatei: string); destructor destroy; override; function findeQuellen(dats: tDateienMitDaten): boolean; procedure generiereErben(var es: tExpliziteAbhaengigkeiten); @@ -96,23 +96,15 @@ type _mglAbh: tExpliziteAbhaengigkeiten; _dats: tDateienMitDaten; _ign: array of tRegExpr; - procedure wMachDatei(md: string); - procedure wPruefsummenDatei(pd: string); function liesMachDatei: boolean; function liesPruefsummenfile: boolean; function sammleDateien(wo: string; rekursiv: boolean): longint; public - property machDatei: string - read _machDatei - write wMachDatei; - property pruefsummenDatei: string - read _pruefsummenDatei - write wPruefsummenDatei; - constructor create; + constructor create(machDatei, pruefSummenDatei: string); destructor destroy; override; procedure erzeugeRegeln; procedure findeWasZuTunIst; - procedure tueWasZuTunIst(allesNeu, unsicher: boolean; ausgabeDatei: string); + procedure tueWasZuTunIst(unsicher: boolean; ausgabeDatei: string); function anzOriAbh: longint; inline; function anzMglAbh: longint; inline; function anzDats: longint; inline; @@ -280,16 +272,17 @@ end; // tGenerischeAbhaengigkeit ************************************************************** -constructor tGenerischeAbhaengigkeit.create(dats: tDateienMitDaten); +constructor tGenerischeAbhaengigkeit.create(dats: tDateienMitDaten; machDatei,pruefSummenDatei: string); begin inherited create; _dats:=dats; setlength(quellenREs,0); zieleFkt:=tStringlist.create; befehleFkt:=tStringlist.create; - machDatei:=''; setlength(_quellens,0); setlength(_zieles,0); + _machDatei:=machDatei; + _pruefSummenDatei:=pruefSummenDatei; end; destructor tGenerischeAbhaengigkeit.destroy; @@ -382,7 +375,7 @@ begin worin:=anfang+mitte+worin; end; - allgemeineErsetzungen(worin,machDatei); // %DIRNAME% %num'...'% + allgemeineErsetzungen(worin,_machDatei); // %DIRNAME% %num'...'% result:=false; tmpRE:=tRegExpr.create; @@ -600,6 +593,23 @@ begin 'Quellen:'#10+ quellen[i].toString ); + if quellen[i].count + ziele[i].count > 0 then begin + // sha512summen erneuern + s:='sed "'; + for j:=0 to quellen[i].count-1 do + s:=s+'/\s'+escape(quellen[i][j].name,'./','\')+'\$/d; '; + for j:=0 to ziele[i].count-1 do + s:=s+'/\s'+escape(ziele[i][j].name,'./','\')+'\$/d; '; + s:=s+'" -i "'+_pruefsummenDatei+'"'; + es.last.befehle.add(s); + s:='sha512sum'; + for j:=0 to quellen[i].count-1 do + s:=s+' "'+quellen[i][j].name+'"'; + for j:=0 to ziele[i].count-1 do + s:=s+' "'+ziele[i][j].name+'"'; + s:=s+' >> '+_pruefsummenDatei; + es.last.befehle.add(s); + end; end; end; @@ -683,12 +693,36 @@ end; // tMach *********************************************************************** -constructor tMach.create; +constructor tMach.create(machDatei, pruefSummenDatei: string); begin inherited create; _oriAbh:=tGenerischeAbhaengigkeiten.create; _mglAbh:=tExpliziteAbhaengigkeiten.create; _dats:=tDateienMitDaten.create; + + // machDatei teilweise prüfen und setzen + if machDatei='' then begin + machDatei:=pwd+'/'; + while (machDatei<>'/') and not fileexists(machDatei+'Machdatei') do begin + delete(machDatei,length(machDatei),1); + machDatei:=extractfilepath(machDatei); + end; + machDatei:=machDatei+'Machdatei'; + end; + _machDatei:=machDatei; + if not fileexists(_machDatei) then + fehler('Datei '''+_machDatei+''' existiert nicht!'); + + // pruefSummenDatei teilweise prüfen und setzen + if pruefSummenDatei='' then + pruefSummenDatei:=extractfilepath(_machDatei)+'.summen'; + _pruefsummenDatei:=pruefSummenDatei; + + // finale Prüfung / finales Einlesen + if not liesMachDatei then + fehler('Datei '''+_machDatei+''' ist fehlerhaft!'); + if not liesPruefsummenfile then + fehler('Datei '''+_pruefsummenDatei+''' ist fehlerhaft!'); end; destructor tMach.destroy; @@ -707,32 +741,6 @@ begin inherited destroy; end; -procedure tMach.wMachDatei(md: string); -begin - if md='' then begin - md:=pwd+'/'; - while (md<>'/') and not fileexists(md+'Machdatei') do begin - delete(md,length(md),1); - md:=extractfilepath(md); - end; - md:=md+'Machdatei'; - end; - _machDatei:=md; - if not fileexists(_machDatei) then - fehler('Datei '''+_machDatei+''' existiert nicht!'); - if not liesMachDatei then - fehler('Datei '''+_machDatei+''' ist fehlerhaft!'); -end; - -procedure tMach.wPruefsummenDatei(pd: string); -begin - if pd='' then - pd:=extractfilepath(machDatei)+'.summen'; - _pruefsummenDatei:=pd; - if not liesPruefsummenfile then - fehler('Datei '''+_pruefsummenDatei+''' ist fehlerhaft!'); -end; - function tMach.liesMachDatei: boolean; var f: tMyStringList; @@ -751,11 +759,10 @@ end; begin result:=false; - na:=tGenerischeAbhaengigkeit.create(_dats); - na.machDatei:=machDatei; + na:=tGenerischeAbhaengigkeit.create(_dats,_machDatei,_pruefSummenDatei); wasWar:=ztSuche; f:=tMyStringList.create; - f.loadFromFile(machDatei); + f.loadFromFile(_machDatei); f.add('%%DATEIENDE%%'); if not f.unfoldMacros then begin f.free; @@ -782,15 +789,14 @@ begin if (wasWar=ztBefehl) and (wasIst<>ztBefehl) then begin _oriAbh.add(na); - na:=tGenerischeAbhaengigkeit.create(_dats); - na.machDatei:=machDatei; + na:=tGenerischeAbhaengigkeit.create(_dats,_machDatei,_pruefsummenDatei); end; if s='%%DATEIENDE%%' then break; case wasIst of ztSuche: begin - allgemeineErsetzungen(s,machDatei); + allgemeineErsetzungen(s,_machDatei); if startetMit('!',s) then begin setlength(_ign,length(_ign)+1); _ign[length(_ign)-1]:=tRegExpr.create; @@ -847,22 +853,22 @@ var gefunden,gut: boolean; begin result:=false; - if pruefsummenDatei='' then begin + if _pruefsummenDatei='' then begin gibAus('Fehler: Leerer Name als Summendatei angegeben!',3); exit; end; - if not fileexists(pruefsummenDatei) then begin - assignfile(f,pruefsummenDatei); + if not fileexists(_pruefsummenDatei) then begin + assignfile(f,_pruefsummenDatei); rewrite(f); closefile(f); end; - if not fileexists(pruefsummenDatei) then begin - gibAus('Fehler: Ich bin nicht in der Lage, die bisher nicht existierende Datei '''+pruefsummenDatei+''' anzulegen!',3); + if not fileexists(_pruefsummenDatei) then begin + gibAus('Fehler: Ich bin nicht in der Lage, die bisher nicht existierende Datei '''+_pruefsummenDatei+''' anzulegen!',3); exit; end; - gutschlecht:=testeSummen(pruefsummenDatei); + gutschlecht:=testeSummen(_pruefsummenDatei); for gut:=false to true do for i:=0 to gutschlecht[gut].count-1 do begin @@ -986,86 +992,31 @@ begin _mglAbh.sort; end; -procedure tMach.tueWasZuTunIst(allesNeu, unsicher: boolean; ausgabeDatei: string); +procedure tMach.tueWasZuTunIst(unsicher: boolean; ausgabeDatei: string); var i,j: longint; ausg: textfile; - befehle,geaenderteDateien, - sumDateien: tMyStringlist; - gefunden: boolean; + befehle,alleDateien: tMyStringlist; lokTest: tRegExpr; - befehl,datei,verzeichnis: string; begin befehle:=tMyStringlist.create; - geaenderteDateien:=tMyStringlist.create; - sumDateien:=dateienMitGueltigerSumme(pruefsummenDatei); - for i:=0 to _dats.count-1 do begin - gefunden:=(_dats[i].name=pruefsummenDatei) or (_dats[i].name=ausgabeDatei); - for j:=0 to sumDateien.count-1 do - if sumDateien[j]=_dats[i].name then begin - gefunden:=true; - sumDateien.delete(j); - break; - end; - if not gefunden then - geaenderteDateien.add(_dats[i].name); - end; - sumDateien.free; - if allesNeu then - for i:=0 to _mglAbh.count-1 do begin - for j:=0 to _mglAbh[i].ziele.count-1 do - geaenderteDateien.add(_mglAbh[i].ziele[j].name); - for j:=0 to _mglAbh[i].quellen.count-1 do - geaenderteDateien.add(_mglAbh[i].quellen[j].name); - end; - for i:=0 to _mglAbh.count-1 do begin - for j:=0 to _mglAbh[i].ziele.count-1 do - geaenderteDateien.add(_mglAbh[i].ziele[j].name); - for j:=0 to _mglAbh[i].quellen.count-1 do - geaenderteDateien.add(_mglAbh[i].quellen[j].name); - end; for i:=0 to _mglAbh.count-1 do for j:=0 to _mglAbh[i].befehle.count-1 do befehle.add(_mglAbh[i].befehle[j]); if not unsicher then begin lokTest:=tRegExpr.create; if (ausgabeDatei='') or - (extractfilepath(ausgabeDatei)=extractfilepath(pruefsummenDatei)) then - lokTest.expression:=unterVerzeichnisRegex([pruefsummenDatei]) + (extractfilepath(ausgabeDatei)=extractfilepath(_pruefsummenDatei)) then + lokTest.expression:=unterVerzeichnisRegex([_pruefsummenDatei]) else - lokTest.expression:=unterVerzeichnisRegex([ausgabeDatei,pruefsummenDatei]); + lokTest.expression:=unterVerzeichnisRegex([ausgabeDatei,_pruefsummenDatei]); + alleDateien:=_dats.toMyStringList; + alleDateien.grep('^\.uralt\.$',true); for i:=0 to befehle.count-1 do - testeObBefehlLokal(befehle[i],extractfiledir(ausgabeDatei),geaenderteDateien,lokTest); + testeObBefehlLokal(befehle[i],extractfiledir(ausgabeDatei),alleDateien,lokTest); + alleDateien.free; lokTest.free; end; - verzeichnis:=extractfilepath(pruefsummenDatei); - for i:=0 to geaenderteDateien.count-1 do begin - datei:=geaenderteDateien[i]; - if startetMit(verzeichnis,datei) then - geaenderteDateien[i]:=datei; - end; - for i:=geaenderteDateien.count-1 downto 0 do begin - if geaenderteDateien[i]='.uralt.' then begin - geaenderteDateien.delete(i); - continue; - end; - for j:=0 to i-1 do - if geaenderteDateien[i]=geaenderteDateien[j] then begin - geaenderteDateien.delete(i); - break; - end; - end; - if geaenderteDateien.count>0 then begin - befehle.add('echo -n "Sha512summen erneuern ..."'); - befehl:='sed "'; - for i:=0 to geaenderteDateien.count-1 do - befehl:=befehl+'/\s'+escape(geaenderteDateien[i],'./','\')+'\$/d; '; - befehl:=befehl+'" -i "'+pruefsummenDatei+'"'; - befehle.add(befehl); - for i:=0 to geaenderteDateien.count-1 do - befehle.add('(cd '+extractfilepath(pruefsummenDatei)+'; sha512sum "'+geaenderteDateien[i]+'") >> '+pruefsummenDatei); - befehle.add('echo " fertig"'); - end; if _mglAbh.count=0 then befehle.add('echo "Es gibt hier nichts zu tun!"'); @@ -1083,7 +1034,6 @@ begin closeFile(ausg); end; befehle.free; - geaenderteDateien.free; end; function tMach.anzOriAbh: longint; diff --git a/tools.pas b/tools.pas index e07be8b..63d88cb 100644 --- a/tools.pas +++ b/tools.pas @@ -31,6 +31,7 @@ type function gleicheNamenWie(dmd: tDateienMitDaten): boolean; function toString: string; override; procedure append(dmd: tDateienMitDaten); + function toMyStringList: tMyStringList; end; function min(a1,a2: tAktualitaet): tAktualitaet; inline; overload; @@ -123,7 +124,16 @@ begin end; end; -// allgemeine Funktionen +function tDateienMitDaten.toMyStringList: tMyStringList; +var + i: longint; +begin + result:=tMyStringList.create; + for i:=0 to count-1 do + result.add(items[i].name); +end; + +// allgemeine Funktionen ******************************************************* function min(a1,a2: tAktualitaet): tAktualitaet; begin @@ -260,7 +270,8 @@ begin (exe='epstopdf') or (exe='latexmk') or (exe='mpost') or - (exe='pdflatex') then + (exe='pdflatex') or + (exe='sed') then exit else begin regex:=''; -- cgit v1.2.3-54-g00ecf