#!/usr/bin/php
<?php

$forceUpgrade = false;
$verbosity = 0;
$upgradeTableExpression = null;
$scriptDir = 'build/db/upgrades';
$bootstrapFile = null;

for( $i=1; $i<$argc; ++$i ) {
	if( '-f' == $argv[$i] ) {
		$forceUpgrade = true;
	} else if( '-upgrade-table' == $argv[$i] ) {
		$upgradeTableExpression = $argv[++$i];
	} else if( '-bootstrap' == $argv[$i] ) {
		$bootstrapFile = $argv[++$i];
	} else if( '-upgrade-script-dir' == $argv[$i] ) {
		$scriptDir = $argv[++$i];
	} else if( '-v' == $argv[$i] ) {
		$verbosity = 1;
	} else if( '-vv' == $argv[$i] ) {
		$verbosity = 2;
	} else {
		fwrite(STDERR, "Error: Unrecognized argument: {$argv[$i]}\n");
		exit(1);
	}
}

function findBootstrapFile() {
	$bootstrapSearchDirs = array('.', __DIR__.'/..', __DIR__);
	foreach( $bootstrapSearchDirs as $d ) {
		if( file_exists($f = "{$d}/init-environment.php") ) {
			return $f;
		}
	}
	return null;
}

$bootstrapFile = $bootstrapFile ?: findBootstrapFile();
if( $bootstrapFile === null ) {
	fwrite(STDERR, "Error: no bootstrap file specified or found.\n");
	exit(1);
}

$reg = require $bootstrapFile;
$DBA = $reg->getDbAdapter();

$upgrader = new EarthIT_ProjectUtil_DB_DatabaseUpgrader($DBA, $scriptDir);
$upgrader->allowOutOfOrderScripts = $forceUpgrade;
$upgrader->verbosity = $verbosity;
if( $upgradeTableExpression ) $upgrader->setUpgradeTable($upgradeTableExpression);
$upgrader->run();
