diff options
author | Erich Eckner <git@eckner.net> | 2014-09-17 12:20:01 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2014-09-17 12:20:01 +0200 |
commit | 4bec7ee705b23b89a934b544b96457ed985b09a1 (patch) | |
tree | 4b25073e218e28cb289011c2970dbb74cf39b217 | |
parent | 39df1af298d79f06282b87033e559bbc494141fa (diff) | |
download | Make-4bec7ee705b23b89a934b544b96457ed985b09a1.tar.xz |
Prüfsummen repariert
-rwxr-xr-x | Make | bin | 1373158 -> 1376602 bytes | |||
-rw-r--r-- | Make.lpr | 126 | ||||
-rw-r--r-- | Make.lps | 68 |
3 files changed, 125 insertions, 69 deletions
Binary files differ @@ -24,6 +24,7 @@ type TAbhArt = (aaFinal,aaEinsZuEins,aaNZuN,aaIgnore); TDateienMitDaten = array of ^TDateiMitDatum; + tStringlistBArray = array[boolean] of tStringlist; { TAbhaengigkeit } @@ -96,33 +97,48 @@ begin inherited destroy; end; -function pruefsumme(datei: string): string; -var p: tProcess; - rb: longint; +function testeSummen(sumNam: string): tStringlistBArray; +var p: tProcess; + rb,i: longint; + s: string; + erg: tStringlist; + gut: boolean; const leseHappen=65536; begin p:=tProcess.create(nil); p.Executable:='/usr/bin/sha512sum'; - p.Parameters.add(datei); + p.Parameters.add('-c'); + p.Parameters.add(sumNam); p.Options:=p.Options + [poUsePipes]; p.Execute; - result:=''; rb:=0; + s:=''; while p.Running do begin if p.Output.NumBytesAvailable=0 then sleep(10) else begin - setlength(result,rb+leseHappen); - rb:=rb+p.Output.Read(result[rb+1],leseHappen); + setlength(s,rb+leseHappen); + rb:=rb+p.Output.Read(s[rb+1],leseHappen); end; end; if p.Output.NumBytesAvailable>0 then begin - setlength(result,rb+leseHappen); - rb:=rb+p.Output.Read(result[rb+1],leseHappen); + setlength(s,rb+leseHappen); + rb:=rb+p.Output.Read(s[rb+1],leseHappen); end; - setlength(result,rb); - delete(result,pos(' ',result),length(result)); - result:=trim(result); p.free; + setlength(s,rb); + erg:=tStringlist.create; + erg.text:=s; + s:=''; + for gut:=false to true do begin + result[gut]:=tStringlist.create; + rb:=0; + for i:=0 to erg.count-1 do + if not gut xor (rightStr(erg[i],4)=': OK') then begin + result[gut].add(leftStr(erg[i],pos(':',erg[i])-1)); + inc(rb); + end; + end; + erg.free; end; function liesZeile(var dat: textfile; out s: string): boolean; @@ -202,12 +218,12 @@ begin result:=0; end; -function liesMakeFile(datNam,sumNam: string; out Abh: TAbhaengigkeiten; out dats: TDateienMitDaten; jetzt: extended): boolean; +function liesMakeFile(datNam: string; out Abh: TAbhaengigkeiten; out dats: TDateienMitDaten): boolean; var f: textfile; s,t: string; NA: TAbhaengigkeit; beg,fin,rek: boolean; - wo,num,i: integer; + wo,num: integer; begin result:=false; @@ -288,29 +304,56 @@ begin closefile(f); NA.free; - if sumNam<>'' then begin + result:=true; +end; + +function liesPruefsummenfile(sumNam: string; var dats: tDateienMitDaten; jetzt: extended): boolean; +var f: textfile; + i,j: longint; + gutschlecht: tStringlistBArray; + gefunden,gut: boolean; +begin + result:=false; + if sumNam='' then exit; + + if not fileexists(sumNam) then begin assignfile(f,sumNam); - if not fileexists(sumNam) then begin - rewrite(f); - closefile(f); - end; - if not fileexists(sumNam) then - exit; - reset(f); - while not eof(f) do begin - readln(f,s); - t:=copy(s,1,pos(' ',s)-1); - delete(s,1,pos(' ',s)); - s:=trim(s); - for i:=0 to length(dats)-1 do - if s=dats[i]^.Name then begin // bekannte Dateien sind formal uralt (Prüfsumme OK) - dats[i]^.Datum:=(jetzt + 1)*byte(pruefsumme(s)<>t); // oder von morgen (Prüfsumme nicht OK) - break; - end; - end; + rewrite(f); closefile(f); end; + if not fileexists(sumNam) then + exit; + gutschlecht:=testeSummen(sumNam); + + for gut:=false to true do + for i:=0 to gutschlecht[gut].count-1 do begin + gefunden:=false; + for j:=0 to length(dats)-1 do + if dats[j]^.Name=gutschlecht[gut][i] then begin + dats[j]^.Datum:=jetzt*byte(not gut) + 1; + // Prüfsumme OK => Datei formal (ur)alt: + // -> immer überschreiben, wenn es eine Quelle ohne (gültige) Prüfsumme gibt oder diese entstehen wird + // -> von sich aus nie Auslöser für Kompilation (außer eines der Ziele existiert nicht) + // Prüfsumme nicht OK => Datei formal von morgen: + // -> löst Kompilation aus, wenn es eine Quelle ist + // -> wird weiterhin durch Kompilation als Ziel erneuert + gefunden:=true; + break; + end; + if not gefunden then begin + if not gut then begin // Dateien mit ungültiger Prüfsumme können auch nicht vorhanden sein, + setlength(dats,length(dats)+1); // dann werden sie einfach eingefügt + getmem(dats[length(dats)-1],sizeof(tDateiMitDatum)); + dats[length(dats)-1]^.Name:=gutschlecht[gut][i]; + dats[length(dats)-1]^.Datum:=0; // siehe oben + continue; + end; + for gefunden:=false to true do + gutschlecht[gefunden].free; + exit; + end; + end; result:=true; end; @@ -658,12 +701,17 @@ begin dec(Prior); end; if ms then begin - for i:=geaenderteDateien.count-1 downto 0 do + 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 Befehle.Add('echo -ne "Sha512summen erneuern ..."'); for i:=0 to geaenderteDateien.count-1 do @@ -688,6 +736,7 @@ begin Befehle.Add('echo "Es gibt hier nichts zu tun!"'); Befehle.Add('sleep 2'); if nurAnzeigen then begin + writeln('Befehle:'); for i:=0 to Befehle.Count-1 do writeln(Befehle[i]); end @@ -743,7 +792,7 @@ begin end; if fileexists(inputfile) then begin - if not liesMakeFile(inputfile,pruefsummenfile,mglAbhaengigkeiten,Dateien,now) then begin + if not liesMakeFile(inputfile,mglAbhaengigkeiten,Dateien) then begin ShowException(Exception.Create('Datei '''+inputfile+''' ist fehlerhaft!')); Terminate; Exit; @@ -755,6 +804,13 @@ begin Exit; end; + if (pruefsummenfile<>'') and + (not liesPruefsummenfile(pruefsummenfile,Dateien,now)) then begin + ShowException(Exception.Create('Datei '''+pruefsummenfile+''' ist fehlerhaft!')); + Terminate; + Exit; + end; + writeln('Regeln: '+inttostr(length(mglAbhaengigkeiten))+', Dateien: '+inttostr(length(Dateien))); findeWasZuTunIst(mglAbhaengigkeiten,zuTunAbhaengigkeiten,Dateien,inputfile,now); writeln('anzuwendende Regeln: '+inttostr(length(zuTunAbhaengigkeiten))); @@ -11,9 +11,9 @@ <IsVisibleTab Value="True"/> <EditorIndex Value="0"/> <WindowIndex Value="0"/> - <TopLine Value="236"/> - <CursorPos X="22" Y="274"/> - <UsageCount Value="31"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="32"/> <Loaded Value="True"/> </Unit0> <Unit1> @@ -22,7 +22,7 @@ <WindowIndex Value="0"/> <TopLine Value="1"/> <CursorPos X="1" Y="1"/> - <UsageCount Value="31"/> + <UsageCount Value="32"/> <DefaultSyntaxHighlighter Value="None"/> </Unit1> <Unit2> @@ -40,123 +40,123 @@ <JumpHistory Count="30" HistoryIndex="29"> <Position1> <Filename Value="Make.lpr"/> - <Caret Line="239" Column="33" TopLine="217"/> + <Caret Line="63" Column="1" TopLine="62"/> </Position1> <Position2> <Filename Value="Make.lpr"/> - <Caret Line="658" Column="60" TopLine="635"/> + <Caret Line="656" Column="3" TopLine="635"/> </Position2> <Position3> <Filename Value="Make.lpr"/> - <Caret Line="613" Column="44" TopLine="591"/> + <Caret Line="461" Column="121" TopLine="439"/> </Position3> <Position4> <Filename Value="Make.lpr"/> - <Caret Line="353" Column="76" TopLine="333"/> + <Caret Line="639" Column="1" TopLine="626"/> </Position4> <Position5> <Filename Value="Make.lpr"/> - <Caret Line="653" Column="28" TopLine="635"/> + <Caret Line="49" Column="1" TopLine="40"/> </Position5> <Position6> <Filename Value="Make.lpr"/> - <Caret Line="287" Column="61" TopLine="281"/> + <Caret Line="458" Column="146" TopLine="416"/> </Position6> <Position7> <Filename Value="Make.lpr"/> - <Caret Line="392" Column="78" TopLine="377"/> + <Caret Line="611" Column="9" TopLine="589"/> </Position7> <Position8> <Filename Value="Make.lpr"/> - <Caret Line="436" Column="65" TopLine="415"/> + <Caret Line="635" Column="1" TopLine="633"/> </Position8> <Position9> <Filename Value="Make.lpr"/> - <Caret Line="441" Column="85" TopLine="420"/> + <Caret Line="611" Column="1" TopLine="590"/> </Position9> <Position10> <Filename Value="Make.lpr"/> - <Caret Line="448" Column="84" TopLine="431"/> + <Caret Line="638" Column="50" TopLine="627"/> </Position10> <Position11> <Filename Value="Make.lpr"/> - <Caret Line="455" Column="90" TopLine="437"/> + <Caret Line="22" Column="1" TopLine="22"/> </Position11> <Position12> <Filename Value="Make.lpr"/> - <Caret Line="498" Column="58" TopLine="478"/> + <Caret Line="638" Column="12" TopLine="619"/> </Position12> <Position13> <Filename Value="Make.lpr"/> - <Caret Line="461" Column="129" TopLine="449"/> + <Caret Line="751" Column="35" TopLine="733"/> </Position13> <Position14> <Filename Value="Make.lpr"/> - <Caret Line="522" Column="92" TopLine="501"/> + <Caret Line="205" Column="29" TopLine="183"/> </Position14> <Position15> <Filename Value="Make.lpr"/> - <Caret Line="526" Column="60" TopLine="505"/> + <Caret Line="294" Column="44" TopLine="276"/> </Position15> <Position16> <Filename Value="Make.lpr"/> - <Caret Line="546" Column="95" TopLine="525"/> + <Caret Line="317" Column="42" TopLine="305"/> </Position16> <Position17> <Filename Value="Make.lpr"/> - <Caret Line="652" Column="71" TopLine="631"/> + <Caret Line="311" Column="3" TopLine="289"/> </Position17> <Position18> <Filename Value="Make.lpr"/> - <Caret Line="656" Column="3" TopLine="635"/> + <Caret Line="317" Column="43" TopLine="297"/> </Position18> <Position19> <Filename Value="Make.lpr"/> - <Caret Line="63" Column="1" TopLine="62"/> + <Caret Line="327" Column="1" TopLine="304"/> </Position19> <Position20> <Filename Value="Make.lpr"/> - <Caret Line="656" Column="3" TopLine="635"/> + <Caret Line="334" Column="1" TopLine="306"/> </Position20> <Position21> <Filename Value="Make.lpr"/> - <Caret Line="461" Column="121" TopLine="439"/> + <Caret Line="210" Column="18" TopLine="200"/> </Position21> <Position22> <Filename Value="Make.lpr"/> - <Caret Line="639" Column="1" TopLine="626"/> + <Caret Line="771" Column="61" TopLine="751"/> </Position22> <Position23> <Filename Value="Make.lpr"/> - <Caret Line="49" Column="1" TopLine="40"/> + <Caret Line="312" Column="1" TopLine="293"/> </Position23> <Position24> <Filename Value="Make.lpr"/> - <Caret Line="458" Column="146" TopLine="416"/> + <Caret Line="99" Column="55" TopLine="95"/> </Position24> <Position25> <Filename Value="Make.lpr"/> - <Caret Line="611" Column="9" TopLine="589"/> + <Caret Line="27" Column="53" TopLine="1"/> </Position25> <Position26> <Filename Value="Make.lpr"/> - <Caret Line="635" Column="1" TopLine="633"/> + <Caret Line="303" Column="36" TopLine="288"/> </Position26> <Position27> <Filename Value="Make.lpr"/> - <Caret Line="611" Column="1" TopLine="590"/> + <Caret Line="143" Column="1" TopLine="107"/> </Position27> <Position28> <Filename Value="Make.lpr"/> - <Caret Line="638" Column="50" TopLine="627"/> + <Caret Line="136" Column="59" TopLine="115"/> </Position28> <Position29> <Filename Value="Make.lpr"/> - <Caret Line="22" Column="1" TopLine="22"/> + <Caret Line="326" Column="35" TopLine="312"/> </Position29> <Position30> <Filename Value="Make.lpr"/> - <Caret Line="638" Column="12" TopLine="619"/> + <Caret Line="347" Column="47" TopLine="317"/> </Position30> </JumpHistory> </ProjectSession> |