summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2014-09-16 13:19:22 +0200
committerErich Eckner <git@eckner.net>2014-09-16 13:19:22 +0200
commit39df1af298d79f06282b87033e559bbc494141fa (patch)
treeff34f9c80d43f436909c1b86c8d8799074ce1478
parent5994d8d97ca8f83b689d5ce8efe910eb906b2602 (diff)
downloadMake-39df1af298d79f06282b87033e559bbc494141fa.tar.xz
Prüfsummen ermöglicht
-rwxr-xr-xMakebin1359741 -> 1373158 bytes
-rw-r--r--Make.lpr176
-rw-r--r--Make.lps68
3 files changed, 174 insertions, 70 deletions
diff --git a/Make b/Make
index 5151bd0..75e13c7 100755
--- a/Make
+++ b/Make
Binary files differ
diff --git a/Make.lpr b/Make.lpr
index d8769e6..347facb 100644
--- a/Make.lpr
+++ b/Make.lpr
@@ -46,10 +46,6 @@ type
Datum: TDateTime;
end;
-var
- jetzt: TDateTime;
- inputfile: string;
-
{ TAbhaengigkeit }
constructor TAbhaengigkeit.create;
@@ -100,6 +96,35 @@ begin
inherited destroy;
end;
+function pruefsumme(datei: string): string;
+var p: tProcess;
+ rb: longint;
+const leseHappen=65536;
+begin
+ p:=tProcess.create(nil);
+ p.Executable:='/usr/bin/sha512sum';
+ p.Parameters.add(datei);
+ p.Options:=p.Options + [poUsePipes];
+ p.Execute;
+ result:='';
+ rb:=0;
+ 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);
+ end;
+ end;
+ if p.Output.NumBytesAvailable>0 then begin
+ setlength(result,rb+leseHappen);
+ rb:=rb+p.Output.Read(result[rb+1],leseHappen);
+ end;
+ setlength(result,rb);
+ delete(result,pos(' ',result),length(result));
+ result:=trim(result);
+ p.free;
+end;
+
function liesZeile(var dat: textfile; out s: string): boolean;
begin
repeat
@@ -177,14 +202,15 @@ begin
result:=0;
end;
-function liesMakeFile(datNam: string; out Abh: TAbhaengigkeiten; out dats: TDateienMitDaten): boolean;
+function liesMakeFile(datNam,sumNam: string; out Abh: TAbhaengigkeiten; out dats: TDateienMitDaten; jetzt: extended): boolean;
var f: textfile;
s,t: string;
NA: TAbhaengigkeit;
beg,fin,rek: boolean;
- wo,num: integer;
+ wo,num,i: integer;
begin
result:=false;
+
NA:=TAbhaengigkeit.create;
setlength(dats,0);
setlength(Abh,0);
@@ -261,6 +287,31 @@ begin
end;
closefile(f);
NA.free;
+
+ if 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;
+ closefile(f);
+ end;
+
+
result:=true;
end;
@@ -285,7 +336,7 @@ begin
end;
end;
-function Quellersetzung(var worin: string; Quelle: string): boolean;
+function Quellersetzung(var worin: string; Quelle, inputfile: string): boolean;
var s,t: string;
i,a,e: integer;
begin
@@ -390,13 +441,13 @@ begin
RE.free;
end;
-procedure ZieleHinzufuegen(var Ziele: TDateienMitDaten; Ziel,Quelle: string; var dats: TDateienMitDaten);
+procedure ZieleHinzufuegen(var Ziele: TDateienMitDaten; Ziel,Quelle,inputfile: string; var dats: TDateienMitDaten);
var i,Anz,Ende: integer;
s,t,u: string;
wasda: boolean;
begin
if pos('{',Ziel)=0 then begin
- if not Quellersetzung(Ziel,Quelle) then exit;
+ if not Quellersetzung(Ziel,Quelle,inputfile) then exit;
Ziel:=unescape(Ziel);
i:=0;
wasda:=false;
@@ -434,32 +485,32 @@ begin
u:=copy(Ziel,Ende+1,length(Ziel));
if unescapedpos('..',t)>0 then begin
for i:=strtoint(copy(t,1,unescapedpos('..',t)-1)) to strtoint(copy(t,unescapedpos('..',t)+2,length(t))) do
- ZieleHinzufuegen(Ziele,s+inttostr(i)+u,Quelle,dats);
+ ZieleHinzufuegen(Ziele,s+inttostr(i)+u,Quelle,inputfile,dats);
end
else begin
t:=t+',';
while unescapedpos(',',t)>0 do begin
- ZieleHinzufuegen(Ziele,s+copy(t,1,unescapedpos(',',t)-1)+u,Quelle,dats);
+ ZieleHinzufuegen(Ziele,s+copy(t,1,unescapedpos(',',t)-1)+u,Quelle,inputfile,dats);
delete(t,1,unescapedpos(',',t));
end;
end;
end;
end;
-procedure findeMehrZiele(var Ziele: TDateienMitDaten; ZieleFkt: TStringList; Quelle: string; var dats: TDateienMitDaten);
+procedure findeMehrZiele(var Ziele: TDateienMitDaten; ZieleFkt: TStringList; Quelle,inputfile: string; var dats: TDateienMitDaten);
var i: integer;
begin
for i:=0 to ZieleFkt.Count-1 do
- ZieleHinzufuegen(Ziele,ZieleFkt[i],Quelle,dats);
+ ZieleHinzufuegen(Ziele,ZieleFkt[i],Quelle,inputfile,dats);
end;
-procedure findeZiele(out Ziele: TDateienMitDaten; ZieleFkt: TStringList; Quelle: string; var dats: TDateienMitDaten);
+procedure findeZiele(out Ziele: TDateienMitDaten; ZieleFkt: TStringList; Quelle,inputfile: string; var dats: TDateienMitDaten);
begin
setlength(Ziele,0);
- findeMehrZiele(Ziele,ZieleFkt,Quelle,dats);
+ findeMehrZiele(Ziele,ZieleFkt,Quelle,inputfile,dats);
end;
-procedure findeWasZuTunIst(var mgl: TAbhaengigkeiten; out zuTun: TAbhaengigkeiten; var dats: TDateienMitDaten);
+procedure findeWasZuTunIst(var mgl: TAbhaengigkeiten; out zuTun: TAbhaengigkeiten; var dats: TDateienMitDaten; inputfile: string; jetzt: extended);
var i,j,k,l: integer;
neues,schonda: boolean;
quNeu,
@@ -496,7 +547,7 @@ begin
for k:=0 to mgl[i]^.Befehle.Count-1 do begin
s:=mgl[i]^.Befehle[k];
- if Quellersetzung(s,dats[j]^.Name) then begin
+ if Quellersetzung(s,dats[j]^.Name,inputfile) then begin
if k=0 then mgl[i]^.Erben[0]^.Befehle.Clear;
mgl[i]^.Erben[0]^.Befehle.Add(s);
end;
@@ -520,11 +571,11 @@ begin
mgl[length(mgl)-1]^.AbhArt:=aaFinal;
SetLength(mgl[length(mgl)-1]^.Quellen,1);
mgl[length(mgl)-1]^.Quellen[0]:=dats[j];
- findeZiele(mgl[length(mgl)-1]^.Ziele,mgl[i]^.ZieleFkt,dats[j]^.name,dats);
+ findeZiele(mgl[length(mgl)-1]^.Ziele,mgl[i]^.ZieleFkt,dats[j]^.name,inputfile,dats);
mgl[length(mgl)-1]^.Befehle.Clear;
for k:=0 to mgl[i]^.Befehle.Count-1 do begin
s:=mgl[i]^.Befehle[k];
- if Quellersetzung(s,dats[j]^.Name) then
+ if Quellersetzung(s,dats[j]^.Name,inputfile) then
mgl[length(mgl)-1]^.Befehle.Add(s);
end;
if mgl[length(mgl)-1]^.Befehle.Count=0 then begin
@@ -544,7 +595,7 @@ begin
quNeu:=max(quNeu,mgl[i]^.Quellen[j]^.Datum);
if length(mgl[i]^.Ziele)=0 then begin
for j:=0 to length(mgl[i]^.Quellen)-1 do
- findeMehrZiele(mgl[i]^.Ziele,mgl[i]^.ZieleFkt,mgl[i]^.Quellen[j]^.Name,dats);
+ findeMehrZiele(mgl[i]^.Ziele,mgl[i]^.ZieleFkt,mgl[i]^.Quellen[j]^.Name,inputfile,dats);
if length(mgl[i]^.Ziele)=0 then begin
mgl[i]^.AbhArt:=aaIgnore;
continue;
@@ -561,7 +612,7 @@ begin
SetLength(mgl[i]^.Erben,1);
mgl[i]^.Erben[0]:=zuTun[length(zuTun)-1];
for j:=0 to length(mgl[i]^.Ziele)-1 do
- mgl[i]^.Ziele[j]^.Datum:=jetzt;
+ mgl[i]^.Ziele[j]^.Datum:=jetzt+2; // neu erzeugte Dateien sind dann formal von übermorgen
neues:=true;
end;
end;
@@ -572,15 +623,33 @@ begin
until not neues;
end;
-procedure tueWasZuTunIst(zuTun: TAbhaengigkeiten; nurAnzeigen: boolean; Ausgabedatei: string);
-var Prior,i,j: integer;
- Ausg: Textfile;
- Befehle: TStringlist;
+procedure tueWasZuTunIst(alles,zuTun: TAbhaengigkeiten; nurAnzeigen, allesNeu: boolean; Ausgabedatei,Summendatei: string);
+var Prior,i,j: integer;
+ Ausg: Textfile;
+ Befehle,geaenderteDateien,alteDateien: TStringlist;
+ ms: boolean;
begin
Befehle:=TStringlist.create;
Prior:=0;
+ ms:=Summendatei<>'';
for i:=0 to length(zuTun)-1 do
Prior:=max(Prior,zuTun[i]^.Prioritaet);
+ if ms then begin
+ geaenderteDateien:=TStringlist.create;
+ if allesNeu then
+ for i:=0 to length(alles)-1 do begin
+ for j:=0 to length(alles[i]^.Ziele)-1 do
+ geaenderteDateien.add(alles[i]^.Ziele[j]^.Name);
+ for j:=0 to length(alles[i]^.Quellen)-1 do
+ geaenderteDateien.add(alles[i]^.Quellen[j]^.Name);
+ end;
+ for i:=0 to length(zuTun)-1 do begin
+ for j:=0 to length(zuTun[i]^.Ziele)-1 do
+ geaenderteDateien.add(zuTun[i]^.Ziele[j]^.Name);
+ for j:=0 to length(zuTun[i]^.Quellen)-1 do
+ geaenderteDateien.add(zuTun[i]^.Quellen[j]^.Name);
+ end;
+ end;
while Prior>=0 do begin
for i:=0 to length(zuTun)-1 do
if zuTun[i]^.Prioritaet=Prior then
@@ -588,6 +657,33 @@ begin
Befehle.Add(zuTun[i]^.Befehle[j]);
dec(Prior);
end;
+ if ms then begin
+ for i:=geaenderteDateien.count-1 downto 0 do
+ for j:=0 to i-1 do
+ if geaenderteDateien[i]=geaenderteDateien[j] then begin
+ geaenderteDateien.Delete(i);
+ break;
+ end;
+ if geaenderteDateien.count>0 then
+ Befehle.Add('echo -ne "Sha512summen erneuern ..."');
+ for i:=0 to geaenderteDateien.count-1 do
+ Befehle.Add('/usr/bin/sha512sum '+geaenderteDateien[i]+' >> '+Summendatei);
+ if geaenderteDateien.count>0 then
+ Befehle.Add('echo " fertig"');
+ if not nurAnzeigen then begin
+ alteDateien:=tStringlist.create;
+ alteDateien.LoadFromFile(Summendatei);
+ for i:=alteDateien.Count-1 downto 0 do
+ for j:=0 to geaenderteDateien.count-1 do
+ if trim(copy(alteDateien[i],pos(' ',alteDateien[i]),length(alteDateien[i])))=geaenderteDateien[j] then begin
+ alteDateien.delete(i);
+ break;
+ end;
+ alteDateien.SaveToFile(Summendatei);
+ alteDateien.free;
+ end;
+ end;
+
if length(zuTun)=0 then
Befehle.Add('echo "Es gibt hier nichts zu tun!"');
Befehle.Add('sleep 2');
@@ -603,20 +699,21 @@ begin
Closefile(Ausg);
end;
Befehle.Free;
+ if ms then
+ geaenderteDateien.Free;
end;
{ TMake }
procedure TMake.DoRun;
var
- ErrorMsg: String;
- mglAbhaengigkeiten,
- zutunAbhaengigkeiten: TAbhaengigkeiten;
- Dateien: TDateienMitDaten;
+ inputfile,pruefsummenfile,ErrorMsg: String;
+ mglAbhaengigkeiten,zutunAbhaengigkeiten: TAbhaengigkeiten;
+ Dateien: TDateienMitDaten;
begin
- ErrorMsg:=CheckOptions('A:HWD:','Ausgabe: Hilfe Watte Datei:');
+ ErrorMsg:=CheckOptions('A:HWD:P:a','Ausgabe: Hilfe Watte Datei: Prüfsummen: alleSummenErneuern');
if ErrorMsg<>'' then begin
- ShowException(Exception.Create(ErrorMsg));
+ ShowException(Exception.Create(ErrorMsg+#10'Hilfe: '+Exename+' -H/--Hilfe'));
Terminate;
Exit;
end;
@@ -636,10 +733,17 @@ begin
if HasOption('D','Datei') then inputfile:=GetOptionValue('D','Datei')
else inputfile:='Machdatei';
- jetzt:=now;
+ if HasOption('P','Prüfsummen') then pruefsummenfile:=GetOptionValue('P','Prüfsummen')
+ else pruefsummenfile:='';
+
+ if HasOption('a','alleSummenErneuern') and (pruefsummenfile='') then begin
+ ShowException(Exception.Create('Ich kann alle Summen nur dann erneuern (-a/--alleSummenErneuern), wenn ich eine Prüfsummendatei habe (-P/--Pfrüfsummen)!'));
+ Terminate;
+ Exit;
+ end;
if fileexists(inputfile) then begin
- if not liesMakeFile(inputfile,mglAbhaengigkeiten,Dateien) then begin
+ if not liesMakeFile(inputfile,pruefsummenfile,mglAbhaengigkeiten,Dateien,now) then begin
ShowException(Exception.Create('Datei '''+inputfile+''' ist fehlerhaft!'));
Terminate;
Exit;
@@ -652,9 +756,9 @@ begin
end;
writeln('Regeln: '+inttostr(length(mglAbhaengigkeiten))+', Dateien: '+inttostr(length(Dateien)));
- findeWasZuTunIst(mglAbhaengigkeiten,zuTunAbhaengigkeiten,Dateien);
+ findeWasZuTunIst(mglAbhaengigkeiten,zuTunAbhaengigkeiten,Dateien,inputfile,now);
writeln('anzuwendende Regeln: '+inttostr(length(zuTunAbhaengigkeiten)));
- tueWasZuTunIst(zuTunAbhaengigkeiten,HasOption('W','Watte'),GetOptionValue('A','Ausgabe'));
+ tueWasZuTunIst(mglAbhaengigkeiten,zuTunAbhaengigkeiten,HasOption('W','Watte'),HasOption('a','alleSummenErneuern'),GetOptionValue('A','Ausgabe'),pruefsummenfile);
Terminate;
end;
@@ -668,7 +772,7 @@ end;
procedure TMake.WriteHelp;
begin
writeln('Verwendung:');
- writeln(' ',ExeName,' -A/--Ausgabe -H/--Hilfe -W/--Watte -D/--Datei');
+ writeln(' ',ExeName,' -A/--Ausgabe $Ausgabedatei -H/--Hilfe -W/--Watte -D/--Datei $Machdatei -P/--Prüfsummen $Prüfsummendatei -a/--alleSummenErneuern');
end;
var
diff --git a/Make.lps b/Make.lps
index c7bb64c..4d2377a 100644
--- a/Make.lps
+++ b/Make.lps
@@ -11,9 +11,9 @@
<IsVisibleTab Value="True"/>
<EditorIndex Value="0"/>
<WindowIndex Value="0"/>
- <TopLine Value="637"/>
- <CursorPos X="60" Y="658"/>
- <UsageCount Value="30"/>
+ <TopLine Value="236"/>
+ <CursorPos X="22" Y="274"/>
+ <UsageCount Value="31"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@@ -22,7 +22,7 @@
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="1" Y="1"/>
- <UsageCount Value="30"/>
+ <UsageCount Value="31"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit1>
<Unit2>
@@ -40,123 +40,123 @@
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="Make.lpr"/>
- <Caret Line="82" Column="33" TopLine="48"/>
+ <Caret Line="239" Column="33" TopLine="217"/>
</Position1>
<Position2>
<Filename Value="Make.lpr"/>
- <Caret Line="96" Column="10" TopLine="62"/>
+ <Caret Line="658" Column="60" TopLine="635"/>
</Position2>
<Position3>
<Filename Value="Make.lpr"/>
- <Caret Line="221" Column="24" TopLine="22"/>
+ <Caret Line="613" Column="44" TopLine="591"/>
</Position3>
<Position4>
<Filename Value="Make.lpr"/>
- <Caret Line="1" Column="1" TopLine="1"/>
+ <Caret Line="353" Column="76" TopLine="333"/>
</Position4>
<Position5>
<Filename Value="Make.lpr"/>
- <Caret Line="287" Column="24" TopLine="278"/>
+ <Caret Line="653" Column="28" TopLine="635"/>
</Position5>
<Position6>
<Filename Value="Make.lpr"/>
- <Caret Line="1" Column="1" TopLine="1"/>
+ <Caret Line="287" Column="61" TopLine="281"/>
</Position6>
<Position7>
<Filename Value="Make.lpr"/>
- <Caret Line="287" Column="24" TopLine="252"/>
+ <Caret Line="392" Column="78" TopLine="377"/>
</Position7>
<Position8>
<Filename Value="Make.lpr"/>
- <Caret Line="354" Column="26" TopLine="343"/>
+ <Caret Line="436" Column="65" TopLine="415"/>
</Position8>
<Position9>
<Filename Value="Make.lpr"/>
- <Caret Line="454" Column="32" TopLine="401"/>
+ <Caret Line="441" Column="85" TopLine="420"/>
</Position9>
<Position10>
<Filename Value="Make.lpr"/>
- <Caret Line="1" Column="1" TopLine="1"/>
+ <Caret Line="448" Column="84" TopLine="431"/>
</Position10>
<Position11>
<Filename Value="Make.lpr"/>
- <Caret Line="217" Column="12" TopLine="190"/>
+ <Caret Line="455" Column="90" TopLine="437"/>
</Position11>
<Position12>
<Filename Value="Make.lpr"/>
- <Caret Line="107" Column="28" TopLine="44"/>
+ <Caret Line="498" Column="58" TopLine="478"/>
</Position12>
<Position13>
<Filename Value="Make.lpr"/>
- <Caret Line="154" Column="11" TopLine="119"/>
+ <Caret Line="461" Column="129" TopLine="449"/>
</Position13>
<Position14>
<Filename Value="Make.lpr"/>
- <Caret Line="158" Column="11" TopLine="123"/>
+ <Caret Line="522" Column="92" TopLine="501"/>
</Position14>
<Position15>
<Filename Value="Make.lpr"/>
- <Caret Line="175" Column="97" TopLine="140"/>
+ <Caret Line="526" Column="60" TopLine="505"/>
</Position15>
<Position16>
<Filename Value="Make.lpr"/>
- <Caret Line="217" Column="13" TopLine="204"/>
+ <Caret Line="546" Column="95" TopLine="525"/>
</Position16>
<Position17>
<Filename Value="Make.lpr"/>
- <Caret Line="300" Column="11" TopLine="238"/>
+ <Caret Line="652" Column="71" TopLine="631"/>
</Position17>
<Position18>
<Filename Value="Make.lpr"/>
- <Caret Line="369" Column="62" TopLine="335"/>
+ <Caret Line="656" Column="3" TopLine="635"/>
</Position18>
<Position19>
<Filename Value="Make.lpr"/>
- <Caret Line="360" Column="50" TopLine="339"/>
+ <Caret Line="63" Column="1" TopLine="62"/>
</Position19>
<Position20>
<Filename Value="Make.lpr"/>
- <Caret Line="288" Column="24" TopLine="280"/>
+ <Caret Line="656" Column="3" TopLine="635"/>
</Position20>
<Position21>
<Filename Value="Make.lpr"/>
- <Caret Line="1" Column="1" TopLine="1"/>
+ <Caret Line="461" Column="121" TopLine="439"/>
</Position21>
<Position22>
<Filename Value="Make.lpr"/>
- <Caret Line="288" Column="24" TopLine="253"/>
+ <Caret Line="639" Column="1" TopLine="626"/>
</Position22>
<Position23>
<Filename Value="Make.lpr"/>
- <Caret Line="395" Column="27" TopLine="375"/>
+ <Caret Line="49" Column="1" TopLine="40"/>
</Position23>
<Position24>
<Filename Value="Make.lpr"/>
- <Caret Line="439" Column="25" TopLine="408"/>
+ <Caret Line="458" Column="146" TopLine="416"/>
</Position24>
<Position25>
<Filename Value="Make.lpr"/>
- <Caret Line="444" Column="25" TopLine="410"/>
+ <Caret Line="611" Column="9" TopLine="589"/>
</Position25>
<Position26>
<Filename Value="Make.lpr"/>
- <Caret Line="451" Column="25" TopLine="432"/>
+ <Caret Line="635" Column="1" TopLine="633"/>
</Position26>
<Position27>
<Filename Value="Make.lpr"/>
- <Caret Line="461" Column="17" TopLine="447"/>
+ <Caret Line="611" Column="1" TopLine="590"/>
</Position27>
<Position28>
<Filename Value="Make.lpr"/>
- <Caret Line="525" Column="51" TopLine="504"/>
+ <Caret Line="638" Column="50" TopLine="627"/>
</Position28>
<Position29>
<Filename Value="Make.lpr"/>
- <Caret Line="239" Column="33" TopLine="217"/>
+ <Caret Line="22" Column="1" TopLine="22"/>
</Position29>
<Position30>
<Filename Value="Make.lpr"/>
- <Caret Line="658" Column="60" TopLine="635"/>
+ <Caret Line="638" Column="12" TopLine="619"/>
</Position30>
</JumpHistory>
</ProjectSession>