summaryrefslogtreecommitdiff
path: root/src/mmo/version.cpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2015-01-06 17:31:21 -0800
committerBen Longbons <b.r.longbons@gmail.com>2015-01-22 23:33:13 -0800
commit2cd52ab17ee1b830bc53321b112411122dddc1c8 (patch)
tree43666d3295c55ae6b395c5d8cd3fd026e71468a3 /src/mmo/version.cpp
parente1418f378c66343a35db3791cbf0d54a4be3fbd3 (diff)
downloadtmwa-2cd52ab17ee1b830bc53321b112411122dddc1c8.tar.gz
tmwa-2cd52ab17ee1b830bc53321b112411122dddc1c8.tar.bz2
tmwa-2cd52ab17ee1b830bc53321b112411122dddc1c8.tar.xz
tmwa-2cd52ab17ee1b830bc53321b112411122dddc1c8.zip
Use Spanned<T> while parsing config
Diffstat (limited to 'src/mmo/version.cpp')
-rw-r--r--src/mmo/version.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/mmo/version.cpp b/src/mmo/version.cpp
index 93ea794..f91b748 100644
--- a/src/mmo/version.cpp
+++ b/src/mmo/version.cpp
@@ -69,8 +69,28 @@ LString CURRENT_VERSION_STRING = VERSION_STRING;
bool impl_extract(XString str, Version *vers)
{
*vers = {};
- // TODO should I try to extract dev and vend also?
- // It would've been useful during the magic migration.
+ // versions look like:
+ // 1.2.3 (release)
+ // 1.2.3+5 (vendor patches)
+ // 1.2.3-4 (dev patches)
+ // 1.2.3-4+5 (dev patches + vendor patches)
+ XString a, b;
+ if (extract(str, record<'+'>(&a, &b)))
+ {
+ if (!extract(b, &vers->vend))
+ {
+ return false;
+ }
+ str = a;
+ }
+ if (extract(str, record<'-'>(&a, &b)))
+ {
+ if (!extract(b, &vers->devel))
+ {
+ return false;
+ }
+ str = a;
+ }
return extract(str, record<'.'>(&vers->major, &vers->minor, &vers->patch));
}