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
[email protected]
http://lists.gnu.org/mailman/listinfo/help-smalltalk