diff --git a/manifests/pip.pp b/manifests/pip.pp index 25856fc7..6737cdf0 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -215,14 +215,24 @@ } # Unfortunately this is the smartest way of getting the latest available package version with pip as of now - # Note: we DO need to repeat ourselves with "from version" in both grep and sed as on some systems pip returns - # more than one line with paretheses. - $latest_version = join([ - "${pip_install} ${legacy_resolver} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", - " ${install_args} ${install_editable} '${real_pkgname}==9!0dev0+x' 2>&1", + $version_processing_commands = if $install_args and $install_args =~ /--pre/ { + [ " | sed -nE 's/.*\\(from versions: (.*, )*(.*)\\)/\\2/p'", ' | tr -d "[:space:]"', - ]) + ] + } else { + [ + " | sed -nE 's/.*\\(from versions: ([^\\)]*)\\)/\\1/p'", + ' | awk \'BEGIN {RS=", "} {if ($0 !~ /(a|b|rc|dev)/) {gsub(/\n/,"");stable[arraylen++]=$0}} END {print stable[arraylen-1] }\'', + ] + } + + $latest_version = join( + [ + "${pip_install} ${legacy_resolver} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", + " ${install_args} ${install_editable} '${real_pkgname}==9!0dev0+x' 2>&1", + ] + $version_processing_commands, + ) # Packages with underscores in their names are listed with dashes in their place in `pip freeze` output $pkgname_with_dashes = regsubst($real_pkgname, '_', '-', 'G')