@@ -48,52 +48,96 @@ pub mod version {
48
48
use chrono:: Duration ;
49
49
use chrono_humanize:: { Accuracy , Tense } ;
50
50
use crossterm:: style:: Stylize ;
51
- use semver :: Version ;
51
+ use std :: fmt ;
52
52
53
53
use crate :: utils:: update;
54
54
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
+
55
69
pub fn print ( ) {
56
70
// print current version
57
71
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
+ "
61
78
{} {} " ,
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
+ ) ;
74
82
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
+ } ;
78
91
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) ;
83
95
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
+ "
87
104
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
+ }
91
118
}
92
119
}
93
120
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
+ }
97
141
}
98
142
99
143
fn humanize_time ( time_passed : Duration ) -> String {
0 commit comments