On Thu, 2009-12-31 at 00:55 +0100, Paolo Bonzini wrote:
> On 12/30/2009 11:15 PM, Gwenael Casaccio wrote:
> > +    parseVersion: aString [
> > +   <category: 'version parsing'>
> > +
> > +   | tokens |
> > +   (tokens := aString tokenize: '\.') size = 3 ifFalse: [ self error: 'Bad 
> > version string : ', aString, ' should be xx.yy.zz' ].
> > +   self version: (Version major: tokens first asInteger minor: tokens 
> > second asInteger patch: tokens third asInteger)
> > +    ]
> 
> This should:
> 
> 1) use #subStrings: or alternatively a single regex match
> 
>      ^(\d+)\.(\d+)(?:\.(\d+))$
> 
> instead of tokenize.
> 
> 2) be in Version class>>#fromString:
> 
> 3) accept a version like 1.0 and change it to 1.0.0 (see regex above).
> 
> Otherwise looks fine, filtering of prerequisites based on their version 
> can be done later.
> 
> Paolo

Hi,

Here are the changes.

Cheers,
Gwen
diff --git a/kernel/PkgLoader.st b/kernel/PkgLoader.st
index 2118433..475d544 100644
--- a/kernel/PkgLoader.st
+++ b/kernel/PkgLoader.st
@@ -1106,6 +1106,14 @@ Namespace current: Kernel [
 Object subclass: Version [
     | major minor patch |
 
+    Version class >> fromString: aString [
+	<category: 'instance creation'>
+
+	| result |
+	[ result := aString searchRegex: '^(\d+)\.(\d+)(?:\.(\d+))?' ] on: Error do: [ :ex | self error: 'Bad version format ', aString, ' should be xx.yy(.zz)' ].
+	^ self major: result first asInteger minor: result second asInteger patch: (result third ifNil: [ 0 ] ifNotNil: [ result third asInteger ])
+    ]
+
     Version class >> major: major minor: minor patch: patch [
 	<category: 'instance creation'>
 
@@ -1519,9 +1527,7 @@ XML.'>
     parseVersion: aString [
 	<category: 'version parsing'>
 
-	| tokens |
-	(tokens := aString tokenize: '\.') size = 3 ifFalse: [ self error: 'Bad version string : ', aString, ' should be xx.yy.zz' ].
-	self version: (Version major: tokens first asInteger minor: tokens second asInteger patch: tokens third asInteger)
+	self version: (Version fromString: aString)
     ]
 
     primFileIn [
_______________________________________________
help-smalltalk mailing list
help-smalltalk@gnu.org
http://lists.gnu.org/mailman/listinfo/help-smalltalk

Reply via email to