nlopess Tue Jun 28 12:59:36 2005 EDT
Modified files:
/phpdoc/scripts/iniupdate generate_changelog.php ini-update.php
ini_search_lib.php insert_db.php
make_db.php update_db.php
Log:
lots of changes:
* unify file recursion in the ini_search_lib. most 'dirty work' is now done
here
* implement a big TODO for this script: fetch data from cfg_get_*(). it is
experimental, as it is very difficult to get data from this. some tunes to
regex might be still needed
* optimize where I could, so that the script doesnt get too slow
# most changes werent tested yet. Commiting just to test in a another box.
But at least it fails in 3 ini options (not bad :))
http://cvs.php.net/diff.php/phpdoc/scripts/iniupdate/generate_changelog.php?r1=1.2&r2=1.3&ty=u
Index: phpdoc/scripts/iniupdate/generate_changelog.php
diff -u phpdoc/scripts/iniupdate/generate_changelog.php:1.2
phpdoc/scripts/iniupdate/generate_changelog.php:1.3
--- phpdoc/scripts/iniupdate/generate_changelog.php:1.2 Sat Mar 26 08:22:31 2005
+++ phpdoc/scripts/iniupdate/generate_changelog.php Tue Jun 28 12:59:35 2005
@@ -105,7 +105,6 @@
}
-$error = '';
if (!$idx = sqlite_open('ini_changelog.sqlite', 0666, $error)) {
die("Couldn't open the DB: $error");
http://cvs.php.net/diff.php/phpdoc/scripts/iniupdate/ini-update.php?r1=1.2&r2=1.3&ty=u
Index: phpdoc/scripts/iniupdate/ini-update.php
diff -u phpdoc/scripts/iniupdate/ini-update.php:1.2
phpdoc/scripts/iniupdate/ini-update.php:1.3
--- phpdoc/scripts/iniupdate/ini-update.php:1.2 Sat Mar 26 08:22:31 2005
+++ phpdoc/scripts/iniupdate/ini-update.php Tue Jun 28 12:59:35 2005
@@ -27,61 +27,7 @@
/******* END of configurations *****/
-
-/* Search for INI entrys and C macros in php-src/pecl directory */
-
-function recurse($dir) {
- global $array, $replace;
-
- if (!$dh = opendir($dir)) {
- die ("couldn't open the specified dir ($dir)");
- }
-
- while (($file = readdir($dh)) !== false) {
-
- if($file == '.' || $file == '..') {
- continue;
- }
-
- $path = $dir . '/' .$file;
-
- if(is_dir($path)) {
- recurse($path);
- } else {
- $file = file_get_contents($path);
-
- /* delete comments */
- $file = preg_replace('@(//.*$)|(/\*.*\*/)@SmsU', '', $file);
-
- /* The MAGIC Regexp :) */
-
if(preg_match_all('/(?:PHP|ZEND)_INI_(?:ENTRY(?:_EX)?|BOOLEAN)\s*\(\s*"([^"]+)"\s*,((?:".*"|[^,])+)\s*,\s*([^,]+)/S',
$file, $matches)) {
-
- $count = count($matches[0]);
- for($i=0;$i<$count;$i++) {
-
- $default = htmlspecialchars(trim($matches[2][$i]),
ENT_NOQUOTES);
-
- $permissions = preg_replace(array('/\s+/', '/ZEND/'),
array('', 'PHP'), $matches[3][$i]);
- $permissions = ($permissions ==
'PHP_INI_PERDIR|PHP_INI_SYSTEM' || $permissions ==
'PHP_INI_SYSTEM|PHP_INI_PERDIR') ? 'PHP_INI_PERDIR' : $permissions;
-
- $array[] = $matches[1][$i] . '-!!-' . $default . '-!!-' .
$permissions;
- }
- } //end of the magic regex
-
- /* search for C macros */
- if(preg_match_all('/#\s*define\s+(\S{5,})[ \t]+(.+)/S', $file,
$matches)) {
- $count = count($matches[0]);
- for($i=0;$i<$count;$i++) {
- $replace[$matches[1][$i]] = rtrim($matches[2][$i]);
- }
- } // end of macros
-
- } //!is_dir()
- } //while() loop
-
- closedir($dh);
-}
-
+require './ini_search_lib.php';
/* Fix ini.xml files */
@@ -138,13 +84,11 @@
$array = array();
$replace = array();
+recurse(array($php_src_dir, $pecl_dir), true);
-recurse($php_src_dir);
-recurse($pecl_dir);
-
-natcasesort($array);
$string = '';
+echo 'Found ' . count($array) . " entries\n";
// get the changelog info
$included = true;
@@ -175,23 +119,19 @@
}
/* Generate the XML code */
-foreach($array as $key => $value) {
- $arr = explode('-!!-', $value);
- $entry = $arr[0];
+foreach($array as $entry => $arr) {
- if(isset($info[$entry])) {
- continue;
- }
+ $oldentry = $entry;
/* link entries */
if (isset($links[$entry])) {
$entry = '<link linkend="' . $links[$entry] . '">' . $entry .
'</link>';
- unset($link_files[$arr[0]]);
+ unset($link_files[$oldentry]);
}
/* replace macros and make the $default var */
- $new = $arr[1];
+ $new = $arr[0];
do {
$old = $new;
@@ -215,19 +155,19 @@
/* end of $default stuff */
- $permissions = isset($special[$arr[0]]) ? '&php.ini; only' : $arr[2];
+ $permissions = isset($special[$oldentry]) ? '&php.ini; only' : $arr[1];
- $info[$arr[0]]['default'] = $default;
- $info[$arr[0]]['permissions'] = $permissions;
- $info[$arr[0]]['changelog'] = isset($changelog[$arr[0]]) ?
$changelog[$arr[0]] : '';
+ $info[$oldentry]['default'] = $default;
+ $info[$oldentry]['permissions'] = $permissions;
+ $info[$oldentry]['changelog'] = isset($changelog[$oldentry]) ?
$changelog[$oldentry] : '';
$string .= ' <row>' . PHP_EOL.
" <entry>$entry</entry>" . PHP_EOL.
" <entry>$default</entry>" . PHP_EOL.
" <entry>$permissions</entry>" . PHP_EOL.
- " <entry>{$info[$arr[0]]['changelog']}</entry>" . PHP_EOL.
+ " <entry>{$info[$oldentry]['changelog']}</entry>" .
PHP_EOL.
' </row>'.PHP_EOL;
}
http://cvs.php.net/diff.php/phpdoc/scripts/iniupdate/ini_search_lib.php?r1=1.2&r2=1.3&ty=u
Index: phpdoc/scripts/iniupdate/ini_search_lib.php
diff -u phpdoc/scripts/iniupdate/ini_search_lib.php:1.2
phpdoc/scripts/iniupdate/ini_search_lib.php:1.3
--- phpdoc/scripts/iniupdate/ini_search_lib.php:1.2 Sat Mar 26 08:22:31 2005
+++ phpdoc/scripts/iniupdate/ini_search_lib.php Tue Jun 28 12:59:35 2005
@@ -17,9 +17,34 @@
+----------------------------------------------------------------------+
*/
-function recurse($dir) {
+function recurse($dirs, $search_macros = false) {
global $array;
+ $cfg_get = array();
+
+ if (is_array($dirs)) {
+ foreach($dirs as $dir)
+ recurse_aux($dir, $search_macros);
+ } else {
+ recurse_aux($dirs, $search_macros);
+ }
+
+ /* insert only if the key doesn't exist, as will probably have
+ more accurant data in $array than here */
+ foreach($cfg_get as $entry) {
+ if (!isset($array[$entry[0]]))
+ $array[$entry[0]] = array($entry[1], 'PHP_INI_ALL');
+
+ }
+
+ uksort($array, 'strnatcasecmp');
+}
+
+
+// recurse through the dirs and do the 'dirty work'
+function recurse_aux($dir, $search_macros) {
+ global $array, $replace, $cfg_get;
+
if (!$dh = opendir($dir)) {
die ("couldn't open the specified dir ($dir)");
}
@@ -51,10 +76,40 @@
$permissions = preg_replace(array('/\s+/', '/ZEND/'),
array('', 'PHP'), $matches[3][$i]);
$permissions = ($permissions ==
'PHP_INI_PERDIR|PHP_INI_SYSTEM' || $permissions ==
'PHP_INI_SYSTEM|PHP_INI_PERDIR') ? 'PHP_INI_PERDIR' : $permissions;
- $array[] = array($matches[1][$i], $permissions);
+ $array[$matches[1][$i]] = array($default, $permissions);
}
+
} //end of the magic regex
+
+ // find the nasty cfg_get_*() stuff
+
if(preg_match_all('/cfg_get_([^(]+)\s*\(\s*"([^"]+)",\s*&([^\s=]+)\s*\)/S',
$file, $match, PREG_SET_ORDER)) {
+
+ foreach($match as $arr) {
+
preg_match('/(?:(FAILURE|SUCCESS)\s*==\s*)?'.preg_quote($arr[0]).'(?:\s*==\s*(FAILURE|SUCCESS))?(?:(?:.|[\r\n]){1,30}'.preg_quote($arr[3]).'\s*=\s*(.+);)?/',
$file, $m);
+
+ if ($m[1] == 'FAILURE' || $m[2] == 'FAILURE') {
+ $cfg_get[] = array($arr[2], $arr[1] == 'string' ?
$m[3] : '"'.$m[3].'"');
+
+ } else { //$m[1] == 'SUCCESS'
+ if ($arr[1] == 'string')
+ $cfg_get[] = array($arr[2], '""');
+ else
+ $cfg_get[] = array($arr[2], '"0"');
+ }
+ } //foreach cfg_get_*()
+ } //end of nasty cfg_get_*() regex
+
+
+ /* search for C macros */
+ if($search_macros && preg_match_all('/#\s*define\s+(\S{5,})[
\t]+(.+)/S', $file, $matches)) {
+ $count = count($matches[0]);
+ for($i=0;$i<$count;$i++) {
+ $replace[$matches[1][$i]] = rtrim($matches[2][$i]);
+ }
+ } // end of macros
+
+
} //!is_dir()
} //while() loop
http://cvs.php.net/diff.php/phpdoc/scripts/iniupdate/insert_db.php?r1=1.1&r2=1.2&ty=u
Index: phpdoc/scripts/iniupdate/insert_db.php
diff -u phpdoc/scripts/iniupdate/insert_db.php:1.1
phpdoc/scripts/iniupdate/insert_db.php:1.2
--- phpdoc/scripts/iniupdate/insert_db.php:1.1 Tue Feb 22 12:54:58 2005
+++ phpdoc/scripts/iniupdate/insert_db.php Tue Jun 28 12:59:35 2005
@@ -23,20 +23,13 @@
global $array, $idx;
$sql = '';
- $sanity = array();
- foreach ($array as $entry) {
+ foreach ($array as $key => $data) {
- if (isset($sanity[$entry[0]])) {
- continue;
- }
-
- $sanity[$entry[0]] = 1;
-
- if ($a= sqlite_single_query($idx, "SELECT name FROM changelog WHERE
name='{$entry[0]}'")) {
- $sql .= "UPDATE changelog SET $tag='{$entry[1]}' WHERE
name='{$entry[0]}';";
+ if (sqlite_single_query($idx, "SELECT name FROM changelog WHERE
name='$key'")) {
+ $sql .= "UPDATE changelog SET $tag='{$data[1]}' WHERE
name='$key';";
} else {
- $sql .= "INSERT INTO changelog (name, $tag) VALUES ('{$entry[0]}',
'{$entry[1]}');";
+ $sql .= "INSERT INTO changelog (name, $tag) VALUES ('$key',
'{$data[1]}');";
}
}
@@ -46,7 +39,6 @@
-$error = '';
$db_open = isset($idx) ? true : false;
if (!$db_open && !$idx = sqlite_open('ini_changelog.sqlite', 0666, $error)) {
http://cvs.php.net/diff.php/phpdoc/scripts/iniupdate/make_db.php?r1=1.1&r2=1.2&ty=u
Index: phpdoc/scripts/iniupdate/make_db.php
diff -u phpdoc/scripts/iniupdate/make_db.php:1.1
phpdoc/scripts/iniupdate/make_db.php:1.2
--- phpdoc/scripts/iniupdate/make_db.php:1.1 Tue Feb 22 12:54:58 2005
+++ phpdoc/scripts/iniupdate/make_db.php Tue Jun 28 12:59:35 2005
@@ -17,7 +17,6 @@
+----------------------------------------------------------------------+
*/
-$error = '';
$db_open = isset($idx) ? true : false;
if (!$db_open && !$idx = sqlite_open('ini_changelog.sqlite', 0666, $error)) {
http://cvs.php.net/diff.php/phpdoc/scripts/iniupdate/update_db.php?r1=1.1&r2=1.2&ty=u
Index: phpdoc/scripts/iniupdate/update_db.php
diff -u phpdoc/scripts/iniupdate/update_db.php:1.1
phpdoc/scripts/iniupdate/update_db.php:1.2
--- phpdoc/scripts/iniupdate/update_db.php:1.1 Tue Feb 22 12:54:58 2005
+++ phpdoc/scripts/iniupdate/update_db.php Tue Jun 28 12:59:35 2005
@@ -17,15 +17,15 @@
+----------------------------------------------------------------------+
*/
-$error = '';
copy('ini_changelog.sqlite', 'backup.sqlite');
if (!$idx = sqlite_open('ini_changelog.sqlite', 0666, $error)) {
- die("Couldn't create the DB: $error");
+ die("Couldn't open the DB: $error");
}
$olddata = sqlite_fetch_all(sqlite_query($idx, 'SELECT * FROM changelog'),
SQLITE_ASSOC);
-$columns = sqlite_fetch_array(sqlite_query($idx, 'SELECT * FROM changelog
LIMIT 1'), SQLITE_ASSOC);
+$columns = array_keys($olddata[0]);
+$columns_str = implode(',', $columns);
sqlite_query($idx, 'DROP TABLE changelog; VACUUM;');
@@ -35,14 +35,7 @@
$sql = '';
foreach ($olddata as $row) {
- $keys = '';
-
- foreach ($row as $key => $val) {
- $keys .= ",$key";
- }
- $keys = substr($keys, 1);
-
- $sql .= "INSERT INTO changelog ($keys) VALUES (\"" . implode('", "', $row)
. '");';
+ $sql .= "INSERT INTO changelog ($columns_str) VALUES (\"" . implode('",
"', $row) . '");';
}
sqlite_query($idx, $sql);
@@ -56,6 +49,8 @@
}
}
+unset($tmp, $columns, $sql);
+
// finally recurse through the new PHP versions
include './insert_db.php';