getnim/src/getnimpkg/versions.nim

51 lines
1.7 KiB
Nim

import os, algorithm, sequtils
import nimblepkg/version
from nimblepkg/packageinfo import getNameVersion
import download, cliparams, channel, switcher
proc getLocalVersions(params: CliParams): seq[Version] =
proc cmpVersions(x: Version, y: Version): int =
if x == y: return 0
if x < y: return -1
return 1
var localVersions: seq[Version] = @[]
# check for the locally installed versions of Nim,
for path in walkDirs(params.getInstallDir() & "/*"):
let (_, version) = getNameVersion(path)
let displayVersion = version.newVersion
if isVersionInstalled(params, displayVersion):
localVersions.add(displayVersion)
localVersions.sort(cmpVersions, SortOrder.Descending)
return localVersions
proc getSpecialVersions*(params: CliParams): seq[Version] =
var specialVersions = getLocalVersions(params)
specialVersions.keepItIf(it.isSpecial())
return specialVersions
proc getInstalledVersions*(params: CliParams): seq[Version] =
var installedVersions = getLocalVersions(params)
installedVersions.keepItIf(not it.isSpecial())
return installedVersions
proc getAvailableVersions*(params: CliParams): seq[Version] =
var releases = getOfficialReleases(params)
return releases
proc getCurrentVersion*(params: CliParams): Version =
let path = getSelectedPath(params)
let (_, currentVersion) = getNameVersion(path)
return currentVersion.newVersion
proc getLatestVersion*(params: CliParams): Version =
let channel = getCurrentChannel(params)
let latest = getChannelVersion(channel, params)
return latest.newVersion
proc isLatestVersion*(params: CliParams, version: Version): bool =
let isLatest = (getLatestVersion(params) == version)
return isLatest