160 lines
4.8 KiB
Bash
160 lines
4.8 KiB
Bash
|
#
|
||
|
# Package
|
||
|
#
|
||
|
# Current package version.
|
||
|
# These package managers supported:
|
||
|
# * npm
|
||
|
# * Lerna
|
||
|
# * Cargo
|
||
|
# * Composer
|
||
|
# * Julia
|
||
|
# * Maven
|
||
|
# * Gradle
|
||
|
# * Python (using pyproject.toml)
|
||
|
# * Dart (Flutter)
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# Configuration
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
SPACESHIP_PACKAGE_SHOW="${SPACESHIP_PACKAGE_SHOW=true}"
|
||
|
SPACESHIP_PACKAGE_SHOW_PRIVATE="${SPACESHIP_PACKAGE_SHOW_PRIVATE=false}"
|
||
|
SPACESHIP_PACKAGE_ASYNC="${SPACESHIP_PACKAGE_ASYNC=true}"
|
||
|
SPACESHIP_PACKAGE_PREFIX="${SPACESHIP_PACKAGE_PREFIX="is "}"
|
||
|
SPACESHIP_PACKAGE_SUFFIX="${SPACESHIP_PACKAGE_SUFFIX="$SPACESHIP_PROMPT_DEFAULT_SUFFIX"}"
|
||
|
SPACESHIP_PACKAGE_SYMBOL="${SPACESHIP_PACKAGE_SYMBOL="📦 "}"
|
||
|
SPACESHIP_PACKAGE_COLOR="${SPACESHIP_PACKAGE_COLOR="red"}"
|
||
|
|
||
|
if [ -z "$SPACESHIP_PACKAGE_ORDER" ]; then
|
||
|
SPACESHIP_PACKAGE_ORDER=(npm lerna cargo composer julia maven gradle python dart)
|
||
|
fi
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# Package Managers
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
spaceship_package::npm() {
|
||
|
spaceship::exists npm || return
|
||
|
|
||
|
local package_json=$(spaceship::upsearch package.json) || return
|
||
|
|
||
|
local package_version="$(spaceship::datafile --json $package_json version)"
|
||
|
local is_private_package="$(spaceship::datafile --json $package_json private)"
|
||
|
|
||
|
if [[ "$SPACESHIP_PACKAGE_SHOW_PRIVATE" == false && "$is_private_package" == true ]]; then
|
||
|
return 0
|
||
|
fi
|
||
|
|
||
|
if [[ "$package_version" == '0.0.0-development' || $package_version == '0.0.0-semantic'* ]]; then
|
||
|
package_version="(semantic)"
|
||
|
fi
|
||
|
|
||
|
echo "$package_version"
|
||
|
}
|
||
|
|
||
|
spaceship_package::lerna() {
|
||
|
# Show package version from lerna.json if is a lerna monorepo
|
||
|
# Note: lerna does not have to be installed in the global context
|
||
|
# so checking for lerna binary does not make sense
|
||
|
spaceship::exists npm || return
|
||
|
|
||
|
local lerna_json=$(spaceship::upsearch lerna.json) || return
|
||
|
|
||
|
local package_version="$(spaceship::datafile --json $lerna_json version)"
|
||
|
|
||
|
if [[ "$package_version" == "independent" ]]; then
|
||
|
package_version="($package_version)"
|
||
|
fi
|
||
|
|
||
|
echo "$package_version"
|
||
|
}
|
||
|
|
||
|
spaceship_package::cargo() {
|
||
|
spaceship::exists cargo || return
|
||
|
spaceship::upsearch -s Cargo.toml || return
|
||
|
|
||
|
# Handle missing field `version` in Cargo.toml.
|
||
|
# `cargo pkgid` need Cargo.lock exists too. If it does't, do not show package version
|
||
|
# https://github.com/spaceship-prompt/spaceship-prompt/pull/617
|
||
|
local pkgid=$(cargo pkgid 2>&1)
|
||
|
echo "$pkgid" | grep -q "error:" && return
|
||
|
echo "${pkgid##*\#}"
|
||
|
}
|
||
|
|
||
|
spaceship_package::composer() {
|
||
|
spaceship::exists composer || return
|
||
|
|
||
|
local composer_json=$(spaceship::upsearch composer.json) || return
|
||
|
|
||
|
spaceship::datafile --json $composer_json "version"
|
||
|
}
|
||
|
|
||
|
spaceship_package::julia() {
|
||
|
spaceship::exists julia || return
|
||
|
|
||
|
local project_toml=$(spaceship::upsearch Project.toml) || return
|
||
|
|
||
|
spaceship::datafile --toml $project_toml "version"
|
||
|
}
|
||
|
|
||
|
spaceship_package::maven() {
|
||
|
spaceship::upsearch -s pom.xml || return
|
||
|
|
||
|
local maven_exe=$(spaceship::upsearch mvnw) || (spaceship::exists mvn && maven_exe="mvn") || return
|
||
|
|
||
|
$maven_exe help:evaluate -q -DforceStdout -D"expression=project.version" 2>/dev/null
|
||
|
}
|
||
|
|
||
|
spaceship_package::gradle() {
|
||
|
spaceship::upsearch -s settings.gradle settings.gradle.kts || return
|
||
|
|
||
|
local gradle_exe=$(spaceship::upsearch gradlew) || (spaceship::exists gradle && gradle_exe="gradle") || return
|
||
|
|
||
|
$gradle_exe properties --no-daemon --console=plain -q 2>/dev/null | grep "^version:" | awk '{printf $2}'
|
||
|
}
|
||
|
|
||
|
spaceship_package::python() {
|
||
|
local pyproject_toml=$(spaceship::upsearch pyproject.toml) || return
|
||
|
|
||
|
spaceship::datafile --toml $project_toml "tool.poetry.version"
|
||
|
if [[ $? != 0 ]]; then
|
||
|
spaceship::datafile --toml $project_toml "project.version"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
spaceship_package::dart() {
|
||
|
spaceship::exists dart || return
|
||
|
|
||
|
local pubspec_file=$(spaceship::upsearch pubspec.yaml pubspec.yml) || return
|
||
|
|
||
|
spaceship::datafile --yaml $pubspec_file "version"
|
||
|
}
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# Section
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
spaceship_package() {
|
||
|
[[ $SPACESHIP_PACKAGE_SHOW == false ]] && return
|
||
|
|
||
|
# Show package version only when repository is a package
|
||
|
local package_version
|
||
|
|
||
|
for manager in "${SPACESHIP_PACKAGE_ORDER[@]}"; do
|
||
|
package_version="$(spaceship_package::$manager)"
|
||
|
|
||
|
if [[ -z $package_version || "$package_version" == "null" || "$package_version" == "undefined" ]]; then
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
spaceship::section \
|
||
|
--color "$SPACESHIP_PACKAGE_COLOR" \
|
||
|
--prefix "$SPACESHIP_PACKAGE_PREFIX" \
|
||
|
--suffix "$SPACESHIP_PACKAGE_SUFFIX" \
|
||
|
--symbol "$SPACESHIP_PACKAGE_SYMBOL" \
|
||
|
"$package_version"
|
||
|
|
||
|
return
|
||
|
done
|
||
|
}
|