mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°3870 updateLicenses : fix generating wrong product names on Windows
Was including paths fragments. Example : <product scope="datamodels">C:\Dev\wamp64\www\itop-dev\.make\license/../..//datamodels/2.x/authent-cas/vendor/apereo/phpcas</product> Instead of : <product scope="datamodels">apereo/phpcas</product>
This commit is contained in:
@@ -10,10 +10,6 @@
|
|||||||
* `curl -L -o /usr/bin/jq.exe https://github.com/stedolan/jq/releases/latest/download/jq-win64.exe`
|
* `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/
|
* 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)
|
|
||||||
* `<product scope="lib">C:\Dev\wamp64\www\itop-dev\.make\license/../..//lib/symfony/console</product>`
|
|
||||||
*
|
|
||||||
* Licenses sources :
|
* Licenses sources :
|
||||||
* * `composer licenses --format json` (see https://getcomposer.org/doc/03-cli.md#licenses)
|
* * `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']
|
* * 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);
|
$xp = new DOMXPath($dom);
|
||||||
|
|
||||||
$licenseList = $xp->query('/licenses/license');
|
$licenseList = $xp->query('/licenses/license');
|
||||||
$licenses = iterator_to_array($licenseList);
|
$licenses = iterator_to_array($licenseList);
|
||||||
|
|
||||||
usort($licenses, 'sort_by_product');
|
usort($licenses, 'sort_by_product');
|
||||||
|
|
||||||
return $licenses;
|
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);
|
$old_licenses = get_license_nodes($xmlFilePath);
|
||||||
|
|
||||||
//generate file with updated licenses
|
//generate file with updated licenses
|
||||||
echo "- Generating licences...";
|
|
||||||
$generated_license_file_path = __DIR__."/provfile.xml";
|
$generated_license_file_path = __DIR__."/provfile.xml";
|
||||||
|
echo "- Generating licences...";
|
||||||
exec("bash ".__DIR__."/gen-community-license.sh $iTopFolder > ".$generated_license_file_path);
|
exec("bash ".__DIR__."/gen-community-license.sh $iTopFolder > ".$generated_license_file_path);
|
||||||
echo "OK!\n";
|
echo "OK!\n";
|
||||||
|
|
||||||
@@ -107,8 +132,16 @@ $root = $new_dom->createElement("licenses");
|
|||||||
$new_dom->appendChild($root);
|
$new_dom->appendChild($root);
|
||||||
|
|
||||||
foreach ($new_licenses as $b) {
|
foreach ($new_licenses as $b) {
|
||||||
$node = $new_dom->importNode($b,true);
|
$node = $new_dom->importNode($b, true);
|
||||||
$root->appendChild($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);
|
$new_dom->save($xmlFilePath);
|
||||||
|
|||||||
Reference in New Issue
Block a user