Completed
Branch master (939199)
by
unknown
39:35
created

maintenance/cdb.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * cdb inspector tool
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License along
16
 * with this program; if not, write to the Free Software Foundation, Inc.,
17
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
 * http://www.gnu.org/copyleft/gpl.html
19
 *
20
 * @file
21
 * @todo document
22
 * @ingroup Maintenance
23
 */
24
use \Cdb\Exception as CdbException;
25
use \Cdb\Reader as CdbReader;
26
27
/** */
28
require_once __DIR__ . '/commandLine.inc';
29
30
function cdbShowHelp( $command ) {
31
	$commandList = [
32
		'load' => 'load a cdb file for reading',
33
		'get' => 'get a value for a key',
34
		'exit' => 'exit cdb',
35
		'quit' => 'exit cdb',
36
		'help' => 'help about a command',
37
	];
38
	if ( !$command ) {
39
		$command = 'fullhelp';
40
	}
41
	if ( $command === 'fullhelp' ) {
42
		$max_cmd_len = max( array_map( 'strlen', array_keys( $commandList ) ) );
43
		foreach ( $commandList as $cmd => $desc ) {
44
			printf( "%-{$max_cmd_len}s: %s\n", $cmd, $desc );
45
		}
46
	} elseif ( isset( $commandList[$command] ) ) {
47
		print "$command: $commandList[$command]\n";
48
	} else {
49
		print "$command: command does not exist or no help for it\n";
50
	}
51
}
52
53
do {
54
	$bad = false;
55
	$showhelp = false;
56
	$quit = false;
57
	static $fileHandle = false;
58
59
	$line = Maintenance::readconsole();
60
	if ( $line === false ) {
61
		exit;
62
	}
63
64
	$args = explode( ' ', $line, 2 );
65
	$command = array_shift( $args );
66
67
	// process command
68
	switch ( $command ) {
69
		case 'help':
70
			// show an help message
71
			cdbShowHelp( array_shift( $args ) );
72
			break;
73
		case 'load':
74
			if ( !isset( $args[0] ) ) {
75
				print "Need a filename there buddy\n";
76
				break;
77
			}
78
			$file = $args[0];
79
			print "Loading cdb file $file...";
80
			try {
81
				$fileHandle = CdbReader::open( $file );
82
			} catch ( CdbException $e ) {
83
			}
84
85
			if ( !$fileHandle ) {
86
				print "not a cdb file or unable to read it\n";
87
			} else {
88
				print "ok\n";
89
			}
90
			break;
91
		case 'get':
92
			if ( !$fileHandle ) {
93
				print "Need to load a cdb file first\n";
94
				break;
95
			}
96
			if ( !isset( $args[0] ) ) {
97
				print "Need to specify a key, Luke\n";
98
				break;
99
			}
100
			try {
101
				$res = $fileHandle->get( $args[0] );
102
			} catch ( CdbException $e ) {
103
				print "Unable to read key from file\n";
104
				break;
105
			}
106 View Code Duplication
			if ( $res === false ) {
107
				print "No such key/value pair\n";
108
			} elseif ( is_string( $res ) ) {
109
				print "$res\n";
110
			} else {
111
				var_dump( $res );
0 ignored issues
show
Security Debugging Code introduced by
var_dump($res); looks like debug code. Are you sure you do not want to remove it? This might expose sensitive data.
Loading history...
112
			}
113
			break;
114
		case 'quit':
115
		case 'exit':
116
			$quit = true;
117
			break;
118
119
		default:
120
			$bad = true;
121
	} // switch() end
122
123
	if ( $bad ) {
124
		if ( $command ) {
125
			print "Bad command\n";
126
		}
127
	} else {
128
		if ( function_exists( 'readline_add_history' ) ) {
129
			readline_add_history( $line );
130
		}
131
	}
132
} while ( !$quit );
133