forked from BrainiumLLC/cargo-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Better app version number handling. (BrainiumLLC#67)
* Add back missing closing delimiter to `app_dependencies_platform` * Start working on supporting version numbers with N numbers * Mode progress on Version Struct that supports N versions * Let user specify a longer VersionNumber * Progress on setting build version * Remove Build number from Raw/Config * Slight cleanup to getting app version in Archive * Progress on setting app version for xcodebuild * fix agvtool command * Add more error logging for ios bundle versions * Rename ret to result * Rename `WithCurrentDirError` to `WithWorkingDirError` * remove std::path::* specifier * Fix Typo * Fix typo * Rename IosVersionNumberError * Use impure command for xcrun * cleanup * make InvalidVersionConfiguration error message more clear * a bit more cleanup * add `from_other_and_number` to VersionNumber * simplify xcrun command * Add back Pod use * fix xcrun command * roll back to pure parse for xcrun * better with_working_dir * Make VersionNumber iOS only * point-free * Remove trivial `from_version_number` function * some more point-frees * err instead of cause * map free once again * small cleanup * cleanup a bit more * Use `push_extra` instead of `from_other_and_number` * cleanup
- Loading branch information
1 parent
35e419d
commit cc755c4
Showing
7 changed files
with
270 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
use crate::util::{VersionTriple, VersionTripleError}; | ||
use serde::{ser::Serializer, Serialize}; | ||
use std::fmt::{self, Debug, Display}; | ||
use thiserror::Error; | ||
|
||
#[derive(Debug, Error)] | ||
pub enum VersionNumberError { | ||
#[error("Failed to parse version triple.")] | ||
VersionTripleInvalid(#[from] VersionTripleError), | ||
#[error("Failed to parse extra version from {version:?}: {source}")] | ||
ExtraVersionInvalid { | ||
version: String, | ||
source: std::num::ParseIntError, | ||
}, | ||
} | ||
|
||
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] | ||
pub struct VersionNumber { | ||
pub triple: VersionTriple, | ||
pub extra: Option<Vec<u32>>, | ||
} | ||
|
||
impl Display for VersionNumber { | ||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||
write!(f, "{}", self.triple)?; | ||
if let Some(extra) = &self.extra { | ||
for number in extra { | ||
write!(f, ".{}", number)?; | ||
} | ||
} | ||
Ok(()) | ||
} | ||
} | ||
|
||
impl Serialize for VersionNumber { | ||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> | ||
where | ||
S: Serializer, | ||
{ | ||
serializer.collect_str(self) | ||
} | ||
} | ||
|
||
impl VersionNumber { | ||
pub fn new_from_triple(triple: VersionTriple) -> Self { | ||
Self { | ||
triple, | ||
extra: None, | ||
} | ||
} | ||
|
||
pub const fn new(triple: VersionTriple, extra: Option<Vec<u32>>) -> Self { | ||
Self { triple, extra } | ||
} | ||
|
||
pub fn from_str(v: &str) -> Result<Self, VersionNumberError> { | ||
match v.split(".").count() { | ||
1 | 2 | 3 => { | ||
let triple = VersionTriple::from_str(v)?; | ||
Ok(Self { | ||
triple, | ||
extra: None, | ||
}) | ||
} | ||
// Even when splitting a string that does not contain the delimeter, we should always get at least 1 split | ||
// (the full string, which could be the empty string) | ||
0 => unreachable!(), | ||
_ => { | ||
let mut s = v.split("."); | ||
let triple = VersionTriple::from_split(&mut s, v)?; | ||
let extra = Some( | ||
s.map(|s| { | ||
s.parse() | ||
.map_err(|source| VersionNumberError::ExtraVersionInvalid { | ||
version: v.to_owned(), | ||
source, | ||
}) | ||
}) | ||
.collect::<Result<Vec<_>, _>>()?, | ||
); | ||
Ok(Self { triple, extra }) | ||
} | ||
} | ||
} | ||
|
||
pub fn push_extra(&mut self, number: u32) { | ||
self.extra.get_or_insert_with(Default::default).push(number); | ||
} | ||
} |
Oops, something went wrong.