summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2014-09-17 12:20:01 +0200
committerErich Eckner <git@eckner.net>2014-09-17 12:20:01 +0200
commit4bec7ee705b23b89a934b544b96457ed985b09a1 (patch)
tree4b25073e218e28cb289011c2970dbb74cf39b217
parent39df1af298d79f06282b87033e559bbc494141fa (diff)
downloadMake-4bec7ee705b23b89a934b544b96457ed985b09a1.tar.xz
Prüfsummen repariert
-rwxr-xr-xMakebin1373158 -> 1376602 bytes
-rw-r--r--Make.lpr126
-rw-r--r--Make.lps68
3 files changed, 125 insertions, 69 deletions
diff --git a/Make b/Make
index 75e13c7..97cbcb5 100755
--- a/Make
+++ b/Make
Binary files differ
diff --git a/Make.lpr b/Make.lpr
index 347facb..79fe703 100644
--- a/Make.lpr
+++ b/Make.lpr
@@ -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)));
diff --git a/Make.lps b/Make.lps
index 4d2377a..018c282 100644
--- a/Make.lps
+++ b/Make.lps
@@ -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>