diff --git a/.make/release/changelog.php b/.make/release/changelog.php new file mode 100644 index 0000000000..bd76f9e7b8 --- /dev/null +++ b/.make/release/changelog.php @@ -0,0 +1,77 @@ + + * Bug_ref;Bug_URL;sha1 + * 1234;https://support.combodo.com/pages/UI.php?operation=details&class=Bug&id=1234;949b213f9|b1ca1f263|a1271da74 + * + * + * 2. List of commits sha1/message without bug ref + * Example : + * + * sha1;subject + * a6aa183e2;:bookmark: Prepare 2.7.5 + * + */ + + +if (count($argv) === 1) { + echo '⚠ You must pass the base tag/sha1 as parameter'; + exit(1); +} +$sBaseReference = $argv[1]; + + +//--- Get log +$sGitLogCommand = 'git log --decorate --pretty="%h;%s" --date-order --no-merges '.$sBaseReference.'..HEAD'; +$sGitLogRaw = shell_exec($sGitLogCommand); + + +//--- Analyze log +$aGitLogLines = preg_split('/\n/', trim($sGitLogRaw));; +$aLogLinesWithBugRef = []; +$aLogLineNoBug = []; +foreach ($aGitLogLines as $sLogLine) { + $sBugRef = preg_match('/[nN]°(\d{3,4})/', $sLogLine, $aLineBugRef); + if (($sBugRef === false) || empty($aLineBugRef)) { + $aLogLineNoBug[] = $sLogLine; + continue; + } + + $iBugId = $aLineBugRef[1]; + $sSha = substr($sLogLine, 0, 9); + + if (array_key_exists($iBugId, $aLogLinesWithBugRef)) { + $aBugShaRefs = $aLogLinesWithBugRef[$iBugId]; + $aBugShaRefs[] = $sSha; + $aLogLinesWithBugRef[$iBugId] = $aBugShaRefs; + } else { + $aLogLinesWithBugRef[$iBugId] = [$sSha]; + } +} +$aBugsList = array_keys($aLogLinesWithBugRef); +sort($aBugsList, SORT_NUMERIC); + + +//-- Output results +echo "# Bugs included\n"; +echo "Bug_ref;Bug_URL;sha1\n"; +foreach ($aBugsList as $sBugRef) { + $sShaRefs = implode('|', $aLogLinesWithBugRef[$sBugRef]); + echo "{$sBugRef};https://support.combodo.com/pages/UI.php?operation=details&class=Bug&id={$sBugRef};$sShaRefs\n"; +} +echo "\n"; +echo "# Logs line without bug referenced\n"; +echo "sha1;subject\n"; +foreach ($aLogLineNoBug as $sLogLine) { + echo "$sLogLine\n"; +} \ No newline at end of file diff --git a/application/utils.inc.php b/application/utils.inc.php index a19f03583a..261f446cee 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -664,16 +664,16 @@ public static function ReadFromFile($sFileName) } /** - * Helper function to convert a value expressed in a 'user friendly format' - * as in php.ini, e.g. 256k, 2M, 1G etc. Into a number of bytes + * @param mixed $value The value as read from php.ini (eg 256k, 2M, 1G etc.) * - * @param mixed $value The value as read from php.ini + * @return int conversion to number of bytes * - * @return number + * @since 2.7.5 3.0.0 convert to int numeric values + * + * @link https://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes Shorthand bytes value reference in PHP.net FAQ */ public static function ConvertToBytes($value) { - $iReturn = $value; if (!is_numeric($value)) { $iLength = strlen($value); $iReturn = substr($value, 0, $iLength - 1); @@ -686,6 +686,8 @@ public static function ConvertToBytes($value) case 'K': $iReturn *= 1024; } + } else { + $iReturn = (int)$value; } return $iReturn; diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index 1fe4a515bb..d904eb35b3 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -69,6 +69,7 @@ class MFCompiler * If this file is present, then we don't recalculate hkeys * * @var string + * @since 2.7.5 3.0.0 N°4020 */ public const REBUILD_HKEYS_NEVER= APPROOT.'data/.setup-rebuild-hkeys-never'; @@ -182,9 +183,9 @@ public static function SetUseSymbolicLinksFlag(bool $bUseSymbolicLinks): void * @uses \file_exists() * @uses REBUILD_HKEYS_NEVER * - * @since 2.7.5 + * @since 2.7.5 3.0.0 */ - public static function SkipRebuildHKeys(): bool + public static function SkipRebuildHKeys() { return (file_exists(static::REBUILD_HKEYS_NEVER)); } diff --git a/test/application/UtilsTest.php b/test/application/UtilsTest.php index c4058d771d..654141a860 100644 --- a/test/application/UtilsTest.php +++ b/test/application/UtilsTest.php @@ -562,12 +562,14 @@ public function testConvertToBytes($sExpressionToConvert, $iExpectedConvertedVal { $iCurrentConvertedValue = utils::ConvertToBytes($sExpressionToConvert); self::assertEquals($iExpectedConvertedValue, $iCurrentConvertedValue, 'Converted value wasn\'t the one expected !'); + self::assertSame($iExpectedConvertedValue, $iCurrentConvertedValue, 'Value was converted but not of the expected type'); } public function ConvertToBytesProvider() { return [ - '123' => ['123', 123], + '123 int value' => ['123', 123], + '-1 no limit' => ['-1', -1], '56k' => ['56k', 56 * 1024], '512M' => ['512M', 512 * 1024 * 1024], '2G' => ['2G', 2 * 1024 * 1024 * 1024],