From 58f376b11845b98e7461a864059be6edd858f05f Mon Sep 17 00:00:00 2001 From: Shivam Mathur Date: Thu, 5 Mar 2020 05:58:24 +0530 Subject: [PATCH] Fix caching PDO extensions on linux --- __tests__/extensions.test.ts | 8 ++++---- dist/index.js | 10 ++++++++-- src/extensions.ts | 10 ++++++++-- src/scripts/linux.sh | 36 ++++++++++++++++++++++++++++++------ 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/__tests__/extensions.test.ts b/__tests__/extensions.test.ts index 262ce269..e8c5cb29 100644 --- a/__tests__/extensions.test.ts +++ b/__tests__/extensions.test.ts @@ -35,15 +35,15 @@ describe('Extension tests', () => { it('checking addExtensionOnLinux', async () => { let linux: string = await extensions.addExtension( - 'xdebug, pcov, ast-beta, xdebug-alpha, grpc-1.2.3', + 'xdebug, pcov, ast-beta, pdo_mysql, pdo-odbc, xdebug-alpha, grpc-1.2.3', '7.4', 'linux' ); expect(linux).toContain('update_extension xdebug 2.9.1'); - expect(linux).toContain( - 'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php7.4-pcov' - ); + expect(linux).toContain('sudo $debconf_fix apt-get install -y php7.4-pcov'); expect(linux).toContain('add_unstable_extension ast beta extension'); + expect(linux).toContain('add_pdo_extension mysql'); + expect(linux).toContain('add_pdo_extension odbc'); expect(linux).toContain('add_pecl_extension grpc 1.2.3 extension'); expect(linux).toContain( 'add_unstable_extension xdebug alpha zend_extension' diff --git a/dist/index.js b/dist/index.js index 8d46cf46..2b3b82ad 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2917,12 +2917,18 @@ function addExtensionLinux(extension_csv, version, pipe) { '\n' + (yield utils.addLog('$tick', 'xdebug', 'Enabled', 'linux')); return; + // match pdo extensions + case /.*pdo[_-].*/.test(version_extension): + script += + '\nadd_pdo_extension ' + + extension.replace('pdo_', '').replace('pdo-', ''); + return; default: install_command = - 'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' + + 'sudo $debconf_fix apt-get install -y php' + version + '-' + - extension.replace('pdo_', '').replace('pdo-', '') + + extension + pipe; break; } diff --git a/src/extensions.ts b/src/extensions.ts index a0d35cfb..cd4c4d29 100644 --- a/src/extensions.ts +++ b/src/extensions.ts @@ -241,12 +241,18 @@ export async function addExtensionLinux( '\n' + (await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux')); return; + // match pdo extensions + case /.*pdo[_-].*/.test(version_extension): + script += + '\nadd_pdo_extension ' + + extension.replace('pdo_', '').replace('pdo-', ''); + return; default: install_command = - 'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' + + 'sudo $debconf_fix apt-get install -y php' + version + '-' + - extension.replace('pdo_', '').replace('pdo-', '') + + extension + pipe; break; } diff --git a/src/scripts/linux.sh b/src/scripts/linux.sh index 35077fa0..d70a28d2 100644 --- a/src/scripts/linux.sh +++ b/src/scripts/linux.sh @@ -56,8 +56,7 @@ get_pecl_version() { # Function to test if extension is loaded check_extension() { - extension=$1 - php -m | grep -i -q -w "$extension" + php -m | grep -i -q -w "$1" } # Function to delete extensions @@ -77,6 +76,32 @@ remove_extension() { delete_extension "$extension" } +# Function to enable existing extension +enable_extension() { + if ! check_extension "$1" && [ -e "$ext_dir/$1.so" ]; then + echo "$2=$1.so" >>"$ini_file" + fi +} + +# Funcion to add PDO extension +add_pdo_extension() { + pdo_ext="pdo_$1" + if check_extension "$pdo_ext"; then + add_log "$tick" "$pdo_ext" "Enabled" + else + read -r ext ext_name <<< "$1 $1" + sudo rm -rf "$scan_dir"/*pdo.ini >/dev/null 2>&1 && enable_extension "pdo" "extension" >/dev/null 2>&1 + if [ "$ext" = "mysql" ]; then + enable_extension "mysqlnd" "extension" + ext_name="mysqli" + fi + add_extension "$ext_name" "$apt_install php$version-$ext" "extension" >/dev/null 2>&1 + enable_extension "$pdo_ext" "extension" + (check_extension "$pdo_ext" && add_log "$tick" "$pdo_ext" "Enabled") || + add_log "$cross" "$pdo_ext" "Could not install $pdo_ext on PHP $semver" + fi +} + # Function to setup extensions add_extension() { extension=$1 @@ -85,11 +110,10 @@ add_extension() { if [[ "$version" =~ $old_versions ]]; then install_command="update_ppa && ${install_command/5\.[4-5]-$extension/5-$extension=$release_version}" fi - if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then - echo "$prefix=$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" - elif check_extension "$extension"; then + enable_extension "$extension" "$prefix" + if check_extension "$extension"; then add_log "$tick" "$extension" "Enabled" - elif ! check_extension "$extension"; then + else eval "$install_command" >/dev/null 2>&1 || (update_ppa && eval "$install_command" >/dev/null 2>&1) || sudo pecl install -f "$extension" >/dev/null 2>&1