string) * * @return string */ public static function digestAll($files, $digest = 'md5') { $buffer = ''; foreach ($files as $file) { $buffer .= $digest(file_get_contents($file)); } return $digest($buffer); } /** * Find the path to the main Civi source tree. * * @return string * @throws RuntimeException */ public static function findCoreSourceDir() { $path = str_replace(DIRECTORY_SEPARATOR, '/', __DIR__); if (!preg_match(':(.*)/CRM/Core/CodeGen/Util:', $path, $matches)) { throw new RuntimeException("Failed to determine path of code-gen"); } return $matches[1]; } /** * Find files in several directories using several filename patterns. * * @param array $pairs * Each item is an array(0 => $searchBaseDir, 1 => $filePattern). * @return array * Array of file paths */ public static function findManyFiles($pairs) { $files = array(); foreach ($pairs as $pair) { list ($dir, $pattern) = $pair; $files = array_merge($files, CRM_Utils_File::findFiles($dir, $pattern)); } sort($files); return $files; } }