From 3694108f42e6c2fa884061e9c852688fa539d5d1 Mon Sep 17 00:00:00 2001 From: Pierre Goiffon Date: Thu, 1 Jul 2021 17:08:43 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B03870=20updateLicenses=20:=20fix=20genera?= =?UTF-8?q?ting=20wrong=20product=20names=20on=20Windows=20Was=20including?= =?UTF-8?q?=20paths=20fragments.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Example : C:\Dev\wamp64\www\itop-dev\.make\license/../..//datamodels/2.x/authent-cas/vendor/apereo/phpcas Instead of : apereo/phpcas --- .make/license/updateLicenses.php | 49 ++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/.make/license/updateLicenses.php b/.make/license/updateLicenses.php index 7df2fe3cb..7531aa003 100644 --- a/.make/license/updateLicenses.php +++ b/.make/license/updateLicenses.php @@ -10,10 +10,6 @@ * `curl -L -o /usr/bin/jq.exe https://github.com/stedolan/jq/releases/latest/download/jq-win64.exe` * this is a Windows port : https://stedolan.github.io/jq/ * - * Known bug on Windows : - * Licenses added from Composer contains a path in the product node (N°3870) - * `C:\Dev\wamp64\www\itop-dev\.make\license/../..//lib/symfony/console` - * * Licenses sources : * * `composer licenses --format json` (see https://getcomposer.org/doc/03-cli.md#licenses) * * keep every existing nodes with `/licenses/license[11]/product/@scope` not in ['lib', 'datamodels'] @@ -70,18 +66,47 @@ function get_license_nodes($file_path) $xp = new DOMXPath($dom); $licenseList = $xp->query('/licenses/license'); - $licenses = iterator_to_array($licenseList); + $licenses = iterator_to_array($licenseList); usort($licenses, 'sort_by_product'); return $licenses; } +/** @noinspection SuspiciousAssignmentsInspection */ +function fix_product_name(DOMNode &$oProductNode) +{ + $sProductNameOrig = $oProductNode->nodeValue; + + // sample : `C:\Dev\wamp64\www\itop-27\.make\license/../..//lib/symfony/polyfill-ctype` + $sProductNameFixed = remove_dir_from_string($sProductNameOrig, 'lib/'); + + // sample : `C:\Dev\wamp64\www\itop-27\.make\license/../..//datamodels/2.x/authent-cas/vendor/apereo/phpcas` + $sProductNameFixed = remove_dir_from_string($sProductNameFixed, 'vendor/'); + + $oProductNode->nodeValue = $sProductNameFixed; +} + +function remove_dir_from_string($sString, $sNeedle) +{ + if (strpos($sString, $sNeedle) === false) { + return $sString; + } + + $sStringTmp = strstr($sString, $sNeedle); + $sStringFixed = str_replace($sNeedle, '', $sStringTmp); + + // DEBUG trace O:) +// echo "$sNeedle = $sString => $sStringFixed\n"; + + return $sStringFixed; +} + $old_licenses = get_license_nodes($xmlFilePath); //generate file with updated licenses -echo "- Generating licences..."; $generated_license_file_path = __DIR__."/provfile.xml"; +echo "- Generating licences..."; exec("bash ".__DIR__."/gen-community-license.sh $iTopFolder > ".$generated_license_file_path); echo "OK!\n"; @@ -107,8 +132,16 @@ $root = $new_dom->createElement("licenses"); $new_dom->appendChild($root); foreach ($new_licenses as $b) { - $node = $new_dom->importNode($b,true); - $root->appendChild($new_dom->importNode($b,true)); + $node = $new_dom->importNode($b, true); + + // N°3870 fix when running script in Windows + // fix should be in gen-community-license.sh but it is easier to do it here ! + if (strncasecmp(PHP_OS, 'WIN', 3) === 0) { + $oProductNodeOrig = get_product_node($node); + fix_product_name($oProductNodeOrig); + } + + $root->appendChild($node); } $new_dom->save($xmlFilePath);