#!/usr/bin/php 'OPTIONS_END', 'INSTANCE_OPTIONS_MAPPING_START' => 'INSTANCE_OPTIONS_MAPPING_END', 'LINKED_OBJECTS_START' => 'LINKED_OBJECTS_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' ]; $files = [$argv[2]]; function getIndex($needle, $haystack) { $index = 0; foreach ($haystack as $value) { if (preg_match('/\b' . $needle . '\b/', $value)) { return $index; } $index++; } return false; } foreach ($files as $file) { if ($argv[1] == '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[1] == '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; 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; 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); array_push($merged, $line); } else { $restored = array_splice($saved, $startIndex, $endIndex - $startIndex); $merged = array_merge($merged, $restored); } } else { array_push($merged, $line); } } fclose($fh); file_put_contents($file, $merged); echo "Restored file " . $file; unlink($saveFile); } } exit(0); ?>