diff --git a/helpers.inc.php b/helpers.inc.php index 81c188a..1153e64 100644 --- a/helpers.inc.php +++ b/helpers.inc.php @@ -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 = "