Adding names_hash_changed(..); adding some typehints, removing really obsolete stuff

This commit is contained in:
Pavel Shevaev 2023-11-28 13:15:39 +03:00
parent 9d74b977e4
commit 60e9ad293b
1 changed files with 82 additions and 90 deletions

View File

@ -2,43 +2,43 @@
namespace taskman;
use Exception;
function is_release()
function is_release() : bool
{
return get("GAME_IS_DEV") == 0;
}
function is_dev()
function is_dev() : bool
{
return !is_release();
}
function is_dev_no_env()
function is_dev_no_env() : bool
{
return is_dev() && !getenv("GAME_ENV");
}
function is_win()
function is_win() : bool
{
return !(DIRECTORY_SEPARATOR == '/');
}
function is_linux()
function is_linux() : bool
{
return PHP_OS == 'Linux';
}
function stderr($msg)
function stderr(string $msg)
{
fwrite(STDERR, $msg);
}
function fatal($msg)
function fatal(string $msg)
{
fwrite(STDERR, $msg);
exit(1);
}
function make_tmp_file_name($file_name)
function make_tmp_file_name(string $file_name) : string
{
$meta = stream_get_meta_data(tmpfile());
$tmp_dir = dirname($meta['uri']);
@ -46,7 +46,7 @@ function make_tmp_file_name($file_name)
return $tmp_file;
}
function get_tmp_build_path($file)
function get_tmp_build_path(string $file) : string
{
global $GAME_ROOT;
@ -55,7 +55,7 @@ function get_tmp_build_path($file)
return normalize_path("$GAME_ROOT/build/tmp/$name");
}
function find_recursive($dir, $ext)
function find_recursive(string $dir, string $ext) : array
{
if(is_win())
$cmd = "dir /s /b " . normalize_path("$dir/*$ext");
@ -65,7 +65,7 @@ function find_recursive($dir, $ext)
return $out;
}
function find_files($dir, array $fnmatch_patterns = array())
function find_files(string $dir, array $fnmatch_patterns = []) : array
{
$results = array();
$files = scandir($dir);
@ -89,7 +89,7 @@ function find_files($dir, array $fnmatch_patterns = array())
//obsolete, use find_files instead
function scan_files_rec(array $dirs, array $only_extensions = array(), $mode = 1)
function scan_files_rec(array $dirs, array $only_extensions = [], int $mode = 1) : array
{
$files = array();
foreach($dirs as $dir)
@ -124,7 +124,7 @@ function scan_files_rec(array $dirs, array $only_extensions = array(), $mode = 1
return $files;
}
function normalize_path($path, $unix=null/*null means try to guess*/)
function normalize_path(string $path, ?bool $unix = null/*null means try to guess*/) : string
{
if(is_null($unix))
$unix = !is_win();
@ -147,7 +147,7 @@ function normalize_path($path, $unix=null/*null means try to guess*/)
return $res;
}
function normalize_sed_path($path)
function normalize_sed_path(string $path) : string
{
$path = normalize_path($path);
if(is_win())
@ -157,18 +157,18 @@ function normalize_sed_path($path)
//NOTE: Escaping multibyte unicode chars as \uXXXX impacts decoding performance drastically
//so we unescape them while encoding json
function json_encode_unescaped($arr)
function json_encode_unescaped(array $arr) : string
{
array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });
return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');
}
function json_make_pretty($json)
function json_make_pretty(string $json) : string
{
return prettyJSON($json);
}
function need_to_regen($file, array $deps, $debug = false)
function need_to_regen(string $file, array $deps, bool $debug = false) : bool
{
if(!is_file($file))
{
@ -191,7 +191,7 @@ function need_to_regen($file, array $deps, $debug = false)
return false;
}
function need_to_regen_any(array $files, array $deps, $debug = false)
function need_to_regen_any(array $files, array $deps, bool $debug = false) : bool
{
$earliest_file = null;
$earliest_time = 2e32;
@ -218,7 +218,7 @@ function need_to_regen_any(array $files, array $deps, $debug = false)
return need_to_regen($earliest_file, $deps, $debug);
}
function fnmatch_patterns($file, array $fnmatch_patterns)
function fnmatch_patterns(string $file, array $fnmatch_patterns) : bool
{
foreach($fnmatch_patterns as $pattern)
{
@ -236,10 +236,8 @@ function fnmatch_patterns($file, array $fnmatch_patterns)
//1 - force write always,
//2 - write only if content differs
//3 - write only if content differs, don't even touch if they are same
function gen_file($tpl_file, $result_file, $deps = array(), $force = 0, $perms = 0640)
function gen_file(string $tpl_file, string $result_file, $deps = array(), $force = 0, int $perms = 0640)
{
global $GAME_ROOT;
$deps[] = $tpl_file;
if($force > 0 || need_to_regen($result_file, $deps))
{
@ -393,14 +391,14 @@ function recurse_copy(
closedir($dir);
}
function shell($cmd, &$out=null)
function shell(string $cmd, &$out = null)
{
shell_try($cmd, $ret, $out);
if($ret != 0)
throw new Exception("Shell execution error(exit code $ret)");
}
function shell_try($cmd, &$ret=null, &$out=null)
function shell_try(string $cmd, &$ret = null, &$out = null)
{
msg(" shell: $cmd\n");
msg(" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
@ -411,7 +409,7 @@ function shell_try($cmd, &$ret=null, &$out=null)
_execute_proc_cmd($cmd, $ret, $out);
}
function shell_get($cmd, $as_string = true)
function shell_get(string $cmd, bool $as_string = true)
{
exec($cmd, $out, $code);
if($code !== 0)
@ -419,7 +417,7 @@ function shell_get($cmd, $as_string = true)
return $as_string ? implode("", $out) : $out;
}
function _execute_proc_cmd($cmd, &$ret, &$out)
function _execute_proc_cmd(string $cmd, &$ret, &$out)
{
//TODO: do we really need to redirect error stream?
$proc = popen("$cmd 2>&1", 'r');
@ -442,7 +440,7 @@ function _execute_proc_cmd($cmd, &$ret, &$out)
$ret = pclose($proc);
}
function _ensure_copy_file($src, $dst, $copy_mode = COPY_MODE_BUILTIN, $mtime_check = false)
function _ensure_copy_file(string $src, string $dst, int $copy_mode = COPY_MODE_BUILTIN, bool $mtime_check = false)
{
if($mtime_check && file_exists($dst) && filemtime($src) <= filemtime($dst))
return;
@ -467,7 +465,7 @@ function _ensure_copy_file($src, $dst, $copy_mode = COPY_MODE_BUILTIN, $mtime_ch
throw new Exception("Unrecognized copy mode $copy_mode");
}
function ensure_identical($src, $dst, $excludes = array())
function ensure_identical(string $src, string $dst, $excludes = array())
{
msg_dbg("deleting files missing in $src from $dst ...\n");
@ -509,7 +507,7 @@ function ensure_identical($src, $dst, $excludes = array())
closedir($dir);
}
function ensure_symlink($src, $dst, $dir_perms = 0777)
function ensure_symlink(string $src, string $dst, int $dir_perms = 0777)
{
if(!is_file($src) && !is_dir($src))
throw new Exception("Bad file or dir '$src'");
@ -525,7 +523,7 @@ function ensure_symlink($src, $dst, $dir_perms = 0777)
throw new Exception("Could not create symlink");
}
function ensure_rm($what)
function ensure_rm(string $what)
{
if(is_dir($what) && !is_link($what))
rrmdir($what);
@ -533,7 +531,7 @@ function ensure_rm($what)
unlink($what);
}
function ensure_mkdir($dir, $perms = 0775)
function ensure_mkdir(string $dir, int $perms = 0775)
{
if(is_dir($dir))
return;
@ -547,7 +545,7 @@ function ensure_mkdir($dir, $perms = 0775)
throw new Exception("Could not chmod " . decoct($perms) . " dir '$dir'");
}
function ensure_var_dir($dir)
function ensure_var_dir(string $dir)
{
ensure_mkdir($dir, 0777);
$items = fmatch("$dir/*");
@ -561,7 +559,7 @@ function ensure_var_dir($dir)
}
}
function compare_files_timestamp($file_a, $file_b)
function compare_files_timestamp(string $file_a, string $file_b) : int
{
$file_a_timestamp = file_exists($file_a) ? filemtime($file_a) : 0;
$file_b_timestamp = file_exists($file_b) ? filemtime($file_b) : 0;
@ -571,15 +569,15 @@ function compare_files_timestamp($file_a, $file_b)
return -1;
}
function fmatch($pat)
function fmatch(string $path) : array
{
$res = glob($pat);
$res = glob($path);
if(!is_array($res))
return array();
return $res;
}
function rrmdir($dir, $remove_top_dir = true)
function rrmdir(string $dir, bool $remove_top_dir = true)
{
if(is_dir($dir))
{
@ -605,28 +603,7 @@ function rrmdir($dir, $remove_top_dir = true)
}
}
function run_apple_script($script)
{
$vm = popen("osascript", "w");
fwrite($vm, $script);
// run script will always exit with status 1
pclose($vm);
}
function client_xcode_build($scheme, $config = 'Debug', $sdk = 'iphonesimulator4.3')
{
global $GAME_ROOT;
$xcode_filter = ". $GAME_ROOT/utils/xcodefilter.sh";
ensure_mkdir("$GAME_ROOT/build/client");
shell(_(
"cd $GAME_ROOT/client && " .
"$xcode_filter xcodebuild -workspace %XCODE_WKSPACE% -scheme $scheme -configuration $config -sdk $sdk SYMROOT=$GAME_ROOT/build/client"
));
}
function git_get_info()
function git_get_info() : array
{
global $GAME_ROOT;
@ -654,29 +631,29 @@ function git_get_info()
return array($rev_hash, $branch, $revision_number);
}
function git_get_rev_hash()
function git_get_rev_hash() : string
{
list($rev_hash, $_, $__) = git_get_info();
return $rev_hash;
}
function git_get_branch()
function git_get_branch() : string
{
list($_, $branch, $__) = git_get_info();
return $branch;
}
function git_get_rev_number()
function git_get_rev_number() : string
{
list($_, $__, $rev_number) = git_get_info();
return $rev_number;
}
function git_try_commit($files, $msg)
function git_try_commit(string $paths, string $msg)
{
try
{
exec("git add $files && git commit -m \"$msg\" && git pull && git push");
exec("git add $paths && git commit -m \"$msg\" && git pull && git push");
}
catch(Exception $e)
{
@ -684,7 +661,7 @@ function git_try_commit($files, $msg)
}
}
function check_and_decode_jzon($json)
function check_and_decode_jzon(string $json) : array
{
try
{
@ -723,7 +700,7 @@ function make_dir_md5($dir, $md5_file)
ensure_write($md5_file, $md5);
}
function file_put_contents_atomic($filename, $content, $mode = 0644)
function file_put_contents_atomic(string $filename, string $content, int $mode = 0644)
{
$temp = tempnam(dirname($filename), 'atomic');
if(!($f = @fopen($temp, 'wb')))
@ -740,15 +717,15 @@ function file_put_contents_atomic($filename, $content, $mode = 0644)
chmod($filename, $mode);
}
function gmgetdate($ts = null)
function gmgetdate($ts = null) : array
{
$k = array('seconds','minutes','hours','mday',
'wday','mon','year','yday','weekday','month',0);
return(array_combine($k, explode(":",
gmdate('s:i:G:j:w:n:Y:z:l:F:U',is_null($ts)?time():$ts))));
return array_combine($k, explode(":",
gmdate('s:i:G:j:w:n:Y:z:l:F:U',is_null($ts)?time():$ts)));
}
function prettyJSON($json)
function prettyJSON(string $json) : string
{
$result = '';
$level = 0;
@ -829,12 +806,12 @@ function run_shell_in_project_dir($cmd)
return $out[0];
}
function boolstr($b)
function boolstr(bool $b) : string
{
return $b ? 'true' : 'false';
}
function create_js_template_literal($str)
function create_js_template_literal(string $str) : string
{
$result = str_replace('\\', '\\\\', $str); // replace \ -> \\
$result = str_replace('`', '\\`', $result); // replace ` -> \`
@ -842,7 +819,7 @@ function create_js_template_literal($str)
return "`$result`";
}
function create_go_string_literal($str)
function create_go_string_literal(string $str) : string
{
$result = str_replace('\\', '\\\\', $str); // replace \ -> \\
$result = str_replace('"', '\\"', $result); // replace " -> \"
@ -850,7 +827,7 @@ function create_go_string_literal($str)
return '"' . $result . '"';
}
function convertFileFromDos2UnixFormat($file)
function convertFileFromDos2UnixFormat(string $file)
{
$file_tmp = $file.".tmp";
@ -863,7 +840,7 @@ function convertFileFromDos2UnixFormat($file)
ensure_rm($file_tmp);
}
function removeCarriageReturn($file)
function removeCarriageReturn(string $file)
{
$file_tmp = $file.".tmp";
@ -876,14 +853,14 @@ function removeCarriageReturn($file)
ensure_rm($file_tmp);
}
function replace_text_in_file($search_pattern, $replace_pattern, $from_file, $to_file)
function replace_text_in_file(string $search_pattern, string $replace_pattern, string $from_file, string $to_file)
{
$file_content = ensure_read($from_file);
$res = str_replace($search_pattern, $replace_pattern, $file_content);
ensure_write($to_file, $res);
}
function gamectl_get_props_as_php_code()
function gamectl_get_props_as_php_code() : string
{
$props = props();
$props_str = "<?php\nnamespace taskman;\n";
@ -927,7 +904,7 @@ function run_background_proc($bin, array $args = array(), $redirect_out = '', $r
}
}
function run_background_gamectl_workers($task, array $worker_args)
function run_background_gamectl_workers(string $task, array $worker_args) : array
{
global $GAME_ROOT;
@ -1008,17 +985,17 @@ function run_background_gamectl_workers($task, array $worker_args)
return $results;
}
function kb($str)
function kb(string $data) : string
{
return kb_len(strlen($str));
return kb_len(strlen($data));
}
function kb_len($len)
function kb_len(int $len) : string
{
return round($len/1024,2) . "kb";
}
function gen_uuid_v4()
function gen_uuid_v4() : string
{
$UUID_LENGTH_BYTES = 16;
$data = random_bytes($UUID_LENGTH_BYTES);
@ -1029,7 +1006,7 @@ function gen_uuid_v4()
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
function watch_running_process($pid, $log_file, $exit_matches = array(), $error_matches = array(), $verbose = true, $break_after_sec = -1, $ignored_errors = array(), $noted_warnings = array())
function watch_running_process($pid, string $log_file, $exit_matches = array(), $error_matches = array(), bool $verbose = true, $break_after_sec = -1, $ignored_errors = array(), $noted_warnings = array())
{
$matches_any_fn = function($buffer, array $matches)
{
@ -1108,7 +1085,7 @@ function watch_running_process($pid, $log_file, $exit_matches = array(), $error_
fclose($h);
}
function check_process($pid)
function check_process($pid) : int
{
if(is_win())
{
@ -1123,12 +1100,12 @@ function check_process($pid)
return $ret;
}
function which_dir($bin)
function which_dir(string $bin) : string
{
return realpath(dirname(which_path($bin)));
}
function which_path($bin)
function which_path(string $bin) : string
{
if(is_win())
{
@ -1142,7 +1119,7 @@ function which_path($bin)
}
}
function arg_exists($args, $needle)
function arg_exists(array $args, string $needle) : bool
{
$strict = true;
return in_array($needle, $args, $strict);
@ -1182,12 +1159,27 @@ function arg_opt_check_no_trailing(array $args)
function are_you_sure()
{
echo "Are you sure you want to proceed?(type YES): ";
$resp = trim(fread(STDIN, 10));
//var_dump($resp);
if($resp != "YES")
if(!are_you_sure_ask())
{
echo "exiting then\n";
exit();
}
}
function are_you_sure_ask() : bool
{
echo "Are you sure you want to proceed?(type YES): ";
$resp = trim(fread(STDIN, 10));
return $resp == "YES";
}
function names_hash_changed(string $crc_file, array $names) : bool
{
$ctx = hash_init('crc32');
foreach($names as $name)
hash_update($ctx, $name);
$names_crc = hash_final($ctx, true);
$changed = !file_exists($crc_file) || ensure_read($crc_file) != $names_crc;
ensure_write($crc_file, $names_crc);
return $changed;
}