@@ -48,52 +48,96 @@ pub mod version {
4848 use chrono:: Duration ;
4949 use chrono_humanize:: { Accuracy , Tense } ;
5050 use crossterm:: style:: Stylize ;
51- use semver :: Version ;
51+ use std :: fmt ;
5252
5353 use crate :: utils:: update;
5454
55+ pub enum ParseableVersion {
56+ Version ( semver:: Version ) ,
57+ Prerelease ( semver:: Prerelease ) ,
58+ }
59+
60+ impl fmt:: Display for ParseableVersion {
61+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
62+ match self {
63+ ParseableVersion :: Version ( v) => write ! ( f, "{}" , v) ,
64+ ParseableVersion :: Prerelease ( p) => write ! ( f, "{}" , p) ,
65+ }
66+ }
67+ }
68+
5569 pub fn print ( ) {
5670 // print current version
5771 let current = current ( ) ;
58- // not eprintln because if it is old release then time passed with be displayed beside it
59- eprint ! (
60- "
72+
73+ match current {
74+ ParseableVersion :: Version ( current_version) => {
75+ // not eprintln because if it is old release then time passed with be displayed beside it
76+ eprint ! (
77+ "
6178 {} {} " ,
62- "Current Version:" . to_string( ) . blue( ) . bold( ) ,
63- current
64- ) ;
65-
66- // check for latest release, if it cannot be fetched then print error as warn and return
67- let latest_release = match update:: get_latest ( ) {
68- Ok ( latest_release) => latest_release,
69- Err ( e) => {
70- log:: warn!( "{}" , e) ;
71- return ;
72- }
73- } ;
79+ "Current Version:" . to_string( ) . blue( ) . bold( ) ,
80+ current_version
81+ ) ;
7482
75- if latest_release. version > current {
76- let time_since_latest_release = chrono:: Utc :: now ( ) - latest_release. date ;
77- let time_since_latest_release = humanize_time ( time_since_latest_release) ;
83+ // check for latest release, if it cannot be fetched then print error as warn and return
84+ let latest_release = match update:: get_latest ( ) {
85+ Ok ( latest_release) => latest_release,
86+ Err ( e) => {
87+ log:: warn!( "{}" , e) ;
88+ return ;
89+ }
90+ } ;
7891
79- let fmt_latest_version = format ! (
80- "( v{} released {} ago )" ,
81- latest_release. version, time_since_latest_release
82- ) ;
92+ if latest_release. version > current_version {
93+ let time_since_latest_release = chrono:: Utc :: now ( ) - latest_release. date ;
94+ let time_since_latest_release = humanize_time ( time_since_latest_release) ;
8395
84- eprint ! ( "{}" , fmt_latest_version. yellow( ) . bold( ) ) ;
85- eprintln ! (
86- "
96+ let fmt_latest_version = format ! (
97+ "( v{} released {} ago )" ,
98+ latest_release. version, time_since_latest_release
99+ ) ;
100+
101+ eprint ! ( "{}" , fmt_latest_version. yellow( ) . bold( ) ) ;
102+ eprintln ! (
103+ "
87104 Download latest version from https://github.com/parseablehq/parseable/releases/latest"
88- ) ;
89- } else {
90- eprintln ! ( ) ;
105+ ) ;
106+ } else {
107+ eprintln ! ( ) ;
108+ }
109+ }
110+ ParseableVersion :: Prerelease ( current_prerelease) => {
111+ eprint ! (
112+ "
113+ {} {} " ,
114+ "Current Version:" . to_string( ) . blue( ) . bold( ) ,
115+ current_prerelease
116+ ) ;
117+ }
91118 }
92119 }
93120
94- pub fn current ( ) -> Version {
95- let current = env ! ( "VERGEN_BUILD_SEMVER" ) ;
96- semver:: Version :: parse ( current) . expect ( "VERGEN_BUILD_SEMVER is always valid semver" )
121+ pub fn current ( ) -> ParseableVersion {
122+ let build_semver = env ! ( "VERGEN_BUILD_SEMVER" ) ;
123+
124+ let mut git_semver = env ! ( "VERGEN_GIT_SEMVER" ) ;
125+
126+ if & git_semver[ ..1 ] == "v" {
127+ git_semver = & git_semver[ 1 ..] ;
128+ }
129+
130+ if build_semver == git_semver {
131+ ParseableVersion :: Version (
132+ semver:: Version :: parse ( build_semver)
133+ . expect ( "VERGEN_BUILD_SEMVER is always valid semver" ) ,
134+ )
135+ } else {
136+ ParseableVersion :: Prerelease (
137+ semver:: Prerelease :: new ( git_semver)
138+ . expect ( "VERGEN_GIT_SEMVER is always valid semver" ) ,
139+ )
140+ }
97141 }
98142
99143 fn humanize_time ( time_passed : Duration ) -> String {
0 commit comments