summaryrefslogtreecommitdiff
path: root/dateibeziehungen.pas
diff options
context:
space:
mode:
Diffstat (limited to 'dateibeziehungen.pas')
-rw-r--r--dateibeziehungen.pas196
1 files changed, 73 insertions, 123 deletions
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;