diff options
| -rwxr-xr-x | git-tools/merge.php | 175 | ||||
| -rw-r--r-- | phpBB/includes/functions.php | 2 | ||||
| -rw-r--r-- | phpBB/memberlist.php | 28 | ||||
| -rw-r--r-- | phpBB/styles/prosilver/template/ucp_groups_manage.html | 2 | 
4 files changed, 203 insertions, 4 deletions
| diff --git a/git-tools/merge.php b/git-tools/merge.php new file mode 100755 index 0000000000..cbd84b896f --- /dev/null +++ b/git-tools/merge.php @@ -0,0 +1,175 @@ +#!/usr/bin/env php +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2011 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +function show_usage() +{ +	$filename = basename(__FILE__); + +	echo "$filename merges a github pull request.\n"; +	echo "\n"; + +	echo "Usage: [php] $filename -p pull_request_id [OPTIONS]\n"; +	echo "\n"; + +	echo "Options:\n"; +	echo " -p pull_request_id             The pull request id to be merged (mandatory)\n"; +	echo " -r remote                      Remote of upstream, defaults to 'upstream' (optional)\n"; +	echo " -d                             Outputs the commands instead of running them (optional)\n"; +	echo " -h                             This help text\n"; + +	exit(2); +} + +// Handle arguments +$opts = getopt('p:r:dh'); + +if (empty($opts) || isset($opts['h'])) +{ +	show_usage(); +} + +$pull_id	= get_arg($opts, 'p', ''); +$remote		= get_arg($opts, 'r', 'upstream'); +$dry_run	= !get_arg($opts, 'd', true); + +try +{ +	exit(work($pull_id, $remote)); +} +catch (RuntimeException $e) +{ +	echo $e->getMessage(); +	exit($e->getCode()); +} + +function work($pull_id, $remote) +{ +	// Get some basic data +	$pull = get_pull('phpbb', 'phpbb3', $pull_id); + +	if (!$pull_id) +	{ +		show_usage(); +	} + +	if ($pull['state'] != 'open') +	{ +		throw new RuntimeException(sprintf("Error: pull request is closed\n", +			$target_branch), 5); +	} + +	$pull_user = $pull['head'][0]; +	$pull_branch = $pull['head'][1]; +	$target_branch = $pull['base'][1]; + +	switch ($target_branch) +	{ +		case 'develop-olympus': +			run("git checkout develop-olympus"); +			run("git pull $remote develop-olympus"); + +			add_remote($pull_user, 'phpbb3'); +			run("git fetch $pull_user"); +			run("git merge --no-ff $pull_user/$pull_branch"); +			run("phpunit"); + +			run("git checkout develop"); +			run("git pull $remote develop"); +			run("git merge --no-ff develop-olympus"); +			run("phpunit"); +		break; + +		case 'develop': +			run("git checkout develop"); +			run("git pull $remote develop"); + +			add_remote($pull_user, 'phpbb3'); +			run("git fetch $pull_user"); +			run("git merge --no-ff $pull_user/$pull_branch"); +			run("phpunit"); +		break; + +		default: +			throw new RuntimeException(sprintf("Error: pull request target branch '%s' is not a main branch\n", +				$target_branch), 5); +		break; +	} +} + +function add_remote($username, $repository, $pushable = false) +{ +	$url = get_repository_url($username, $repository, false); +	run("git remote add $username $url", true); + +	if ($pushable) +	{ +		$ssh_url = get_repository_url($username, $repository, true); +		run("git remote set-url --push $username $ssh_url"); +	} +} + +function get_repository_url($username, $repository, $ssh = false) +{ +	$url_base = ($ssh) ? 'git@github.com:' : 'git://github.com/'; + +	return $url_base . $username . '/' . $repository . '.git'; +} + +function api_request($query) +{ +	$contents = file_get_contents("http://github.com/api/v2/json/$query"); + +	if ($contents === false) +	{ +		throw new RuntimeException("Error: failed to retrieve pull request data\n", 4); +	} + +	return json_decode($contents); +} + +function get_pull($username, $repository, $pull_id) +{ +	$request = api_request("pulls/$username/$repository/$pull_id"); + +	$pull = $request->pull; + +	$pull_data = array( +		'base'  => array($pull->base->user->login, $pull->base->ref), +		'head'  => array($pull->head->user->login, $pull->head->ref), +		'state' => $pull->state, +	); + +	return $pull_data; +} + +function get_arg($array, $index, $default) +{ +	return isset($array[$index]) ? $array[$index] : $default; +} + +function run($cmd, $ignore_fail = false) +{ +	global $dry_run; + +	if (!empty($dry_run)) +	{ +		echo "$cmd\n"; +	} +	else +	{ +		passthru(escapeshellcmd($cmd), $status); + +		if ($status != 0 && !$ignore_fail) +		{ +			throw new RuntimeException(sprintf("Error: command '%s' failed with status %s'\n", +				$cmd, $status), 6); +		} +	} +} diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index d6330f6d85..585e23b2ee 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -240,8 +240,8 @@ function unique_id($extra = 'c')  	if ($dss_seeded !== true && ($config['rand_seed_last_update'] < time() - rand(1,10)))  	{ -		set_config('rand_seed', $config['rand_seed'], true);  		set_config('rand_seed_last_update', time(), true); +		set_config('rand_seed', $config['rand_seed'], true);  		$dss_seeded = true;  	} diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index 2fa2d11ee1..599cd0b3e7 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -1069,8 +1069,32 @@ switch ($mode)  			$sql_where .= ($msn) ? ' AND u.user_msnm ' . $db->sql_like_expression(str_replace('*', $db->any_char, $msn)) . ' ' : '';  			$sql_where .= ($jabber) ? ' AND u.user_jabber ' . $db->sql_like_expression(str_replace('*', $db->any_char, $jabber)) . ' ' : '';  			$sql_where .= (is_numeric($count) && isset($find_key_match[$count_select])) ? ' AND u.user_posts ' . $find_key_match[$count_select] . ' ' . (int) $count . ' ' : ''; -			$sql_where .= (sizeof($joined) > 1 && isset($find_key_match[$joined_select])) ? " AND u.user_regdate " . $find_key_match[$joined_select] . ' ' . gmmktime(0, 0, 0, intval($joined[1]), intval($joined[2]), intval($joined[0])) : ''; -			$sql_where .= ($auth->acl_get('u_viewonline') && sizeof($active) > 1 && isset($find_key_match[$active_select])) ? " AND u.user_lastvisit " . $find_key_match[$active_select] . ' ' . gmmktime(0, 0, 0, $active[1], intval($active[2]), intval($active[0])) : ''; + +			if (isset($find_key_match[$joined_select]) && sizeof($joined) == 3) +			{ +				// Before PHP 5.1 an error value -1 can be returned instead of false. +				// Theoretically gmmktime() can also legitimately return -1 as an actual timestamp. +				// But since we do not pass the $second parameter to gmmktime(), +				// an actual unix timestamp -1 cannot be returned in this case. +				// Thus we can check whether it is -1 and treat -1 as an error. +				$joined_time = gmmktime(0, 0, 0, (int) $joined[1], (int) $joined[2], (int) $joined[0]); + +				if ($joined_time !== false && $joined_time !== -1) +				{ +					$sql_where .= " AND u.user_regdate " . $find_key_match[$joined_select] . ' ' . $joined_time; +				} +			} + +			if (isset($find_key_match[$active_select]) && sizeof($active) == 3 && $auth->acl_get('u_viewonline')) +			{ +				$active_time = gmmktime(0, 0, 0, (int) $active[1], (int) $active[2], (int) $active[0]); + +				if ($active_time !== false && $active_time !== -1) +				{ +					$sql_where .= " AND u.user_lastvisit " . $find_key_match[$active_select] . ' ' . $active_time; +				} +			} +  			$sql_where .= ($search_group_id) ? " AND u.user_id = ug.user_id AND ug.group_id = $search_group_id AND ug.user_pending = 0 " : '';  			if ($search_group_id) diff --git a/phpBB/styles/prosilver/template/ucp_groups_manage.html b/phpBB/styles/prosilver/template/ucp_groups_manage.html index 2171250621..bce31431cb 100644 --- a/phpBB/styles/prosilver/template/ucp_groups_manage.html +++ b/phpBB/styles/prosilver/template/ucp_groups_manage.html @@ -118,7 +118,7 @@  			</thead>  			<tbody>  		<!-- ELSEIF member.S_APPROVED --> -			<!-- IF member.S_PENDING_SET --> +			<!-- IF S_PENDING_SET -->  				</tbody>  				</table>  			<!-- ENDIF --> | 
