r3-v2/update_templates.php

176 lines
4.4 KiB
PHP
Executable File

#!/usr/bin/php
<?php
include "utils.php";
$tokens = [
'OPTIONS_START' => 'OPTIONS_END',
'INSTANCE_OPTIONS_MAPPING_START' => 'INSTANCE_OPTIONS_MAPPING_END',
'LINKED_OBJECTS_START' => 'LINKED_OBJECTS_END',
'STATIC_METHODS_START' => 'STATIC_METHODS_END',
'EXCLUDED_FROM_INSTANCE_OPTIONS_START' => 'EXCLUDED_FROM_INSTANCE_OPTIONS_END',
'CUSTOM_OPTIONS_INIT_START' => 'CUSTOM_OPTIONS_INIT_END',
'CUSTOM_BEFORE_INIT_START' => 'CUSTOM_BEFORE_INIT_END',
'CUSTOM_CREATE_INSTANCE_START' => 'CUSTOM_CREATE_INSTANCE_END',
'CUSTOM_UPDATE_INSTANCE_START' => 'CUSTOM_UPDATE_INSTANCE_END',
'CUSTOM_UPDATE_FROM_INSTANCE_START' => 'CUSTOM_UPDATE_FROM_INSTANCE_END',
'CUSTOM_DISPOSE_START' => 'CUSTOM_DISPOSE_END',
'CUSTOM_DISPOSE_INSTANCE_START' => 'CUSTOM_DISPOSE_INSTANCE_END',
'CUSTOM_IMPLEMENTATION_START' => 'CUSTOM_IMPLEMENTATION_END',
'CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START' => 'CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END',
'CUSTOM_[A..Z_]+_METHOD_START' => 'CUSTOM_[A..Z_]+_METHOD_END'
];
function getIndex($needle, $haystack) {
$index = 0;
foreach ($haystack as $value) {
if (preg_match('/\b' . $needle . '\b/', $value)) {
return $index;
}
$index++;
}
return false;
}
global $files;
foreach ($files as $file) {
if ($argv[2] == 'save') {
echo "saving file " . $file . "\n";
$saved = [];
$startSaving = false;
$fn = fopen($file, "r");
while (!feof($fn)) {
$line = fgets($fn);
foreach ($tokens as $startToken => $endToken) {
if (preg_match('/\b' . $startToken . '\b/', $line)) {
$startSaving = true;
break;
}
}
if ($startSaving) {
array_push($saved, $line);
}
foreach ($tokens as $startToken => $endToken) {
if (preg_match('/\b' . $endToken . '\b/', $line)) {
$startSaving = false;
break;
}
}
}
fclose($fn);
file_put_contents($file . '.saved', $saved);
echo "saved file " . $file . ".saved\n";
} else if ($argv[2] == 'restore') {
$saveFile = $file . '.saved';
echo "restoring file " . $saveFile . "\n";
$sh = fopen($saveFile, "r");
$saved = [];
while (!feof($sh)) {
$line = fgets($sh);
array_push($saved, $line);
}
fclose($sh);
$fh = fopen($file, "r");
$merged = [];
$restoreTokenPair = [];
$startRestoring = false;
$saveLine = true;
while (!feof($fh)) {
$line = fgets($fh);
foreach ($tokens as $startToken => $endToken) {
if (preg_match('/\b' . $startToken . '\b/', $line)) {
$startRestoring = true;
$restoreTokenPair = [$startToken, $endToken];
break;
}
}
foreach ($tokens as $startToken => $endToken) {
if (preg_match('/\b' . $endToken . '\b/', $line)) {
$startRestoring = false;
$saveLine = false;
break;
}
}
if ($startRestoring) {
$startToken = $restoreTokenPair[0];
$endToken = $restoreTokenPair[1];
$startIndex = getIndex($startToken, $saved);
$endIndex = getIndex($endToken, $saved);
if ($startIndex === false || $endIndex === false) {
echo "Could not find data to be restored : startIndex = " . $startIndex . ", endIndex = " . $endIndex;
echo "Restore token pair = ";
print_r($restoreTokenPair);
$saveLine = true;
} else {
$restored = array_splice($saved, $startIndex, ($endIndex - $startIndex + 1));
$merged = array_merge($merged, $restored);
$saveLine = false;
}
}
if ($saveLine) {
array_push($merged, $line);
} else {
$saveLine = true;
}
}
fclose($fh);
file_put_contents($file, $merged);
echo "Restored file " . $file;
// unlink($saveFile);
}
}
exit(0);
?>