version_HG changed to return string.
Bu default, there is no real changeset id in the string (unless
KeywordsExtension is enabled). However, there is no need for stc
itself now embeds changeset id into binary revision.
"{ Package: 'stx:libscm/mercurial' }"
Object subclass:#HGRevisionInfo
instanceVariableNames:'changesetId className'
classVariableNames:''
poolDictionaries:''
category:'SCM-Mercurial-StX'
!
!HGRevisionInfo class methodsFor:'documentation'!
documentation
"
A Mercurial-specific VersionInfo.
[author:]
Jan Vrany <jan.vrany@fit.cvut.cz>
[see also:]
VersionInfo
CVSVersionInfo
"
! !
!HGRevisionInfo class methodsFor:'instance creation'!
readFrom: aStringOrStream onError: aBlock
| s id |
s := aStringOrStream readStream.
s skipSeparators.
s peek ~~ $$ ifTrue:[^aBlock value].
s next.
s skipSeparators.
(s next: 10) ~= 'Changeset:' ifTrue:[^aBlock value].
s skipSeparators.
s peek == $< ifTrue:[
"/Not expanded...
id := HGChangesetId null.
] ifFalse:[
id := HGChangesetId fromHexString: (s next: 40).
].
^self new changesetId: id
"Created: / 20-11-2012 / 00:33:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 30-11-2012 / 21:31:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGRevisionInfo methodsFor:'accessing'!
at:aKey
"backward compatible dictionary-like accessing"
(self respondsTo:aKey) ifTrue:[
^ self perform:aKey
].
^ self errorKeyNotFound:aKey
"
self new at:#binaryRevision
self new at:#foo
"
"Modified: / 22-10-2008 / 20:23:31 / cg"
!
at:aKey ifAbsent:replacement
"backward compatible dictionary-like accessing"
(self respondsTo:aKey) ifTrue:[
^ (self perform:aKey) ? replacement
].
^ replacement
"
self new at:#binaryRevision
self new at:#foo ifAbsent:#bar
"
"Created: / 22-10-2008 / 20:19:42 / cg"
!
at:aKey put:value
"backward compatible dictionary-like accessing"
(self respondsTo:aKey) ifTrue:[
self perform:(aKey,':') asSymbol with:value.
^ value "/ sigh
].
^ self errorKeyNotFound:aKey
"
self new at:#binaryRevision put:#bar
self new at:#foo put:#bar
"
"Created: / 22-10-2008 / 20:20:54 / cg"
!
changesetId
^ changesetId
!
changesetId:anHGNodeId
changesetId := anHGNodeId.
! !
!HGRevisionInfo methodsFor:'accessing-properties'!
author
^ self user
"Created: / 21-12-2011 / 23:09:54 / cg"
!
binaryRevision
^ changesetId printString
"Modified: / 20-11-2012 / 10:26:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
binaryRevision: aString
"Created: / 20-11-2012 / 10:15:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
date
^ nil
"Modified: / 20-11-2012 / 10:26:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
fileName
| cls |
className isNil ifTrue:[ ^ nil ].
cls := Smalltalk at: className.
^cls notNil ifTrue:[
className , '.' , (cls programingLanguage sourceFileSuffix)
] ifFalse:[
className , '.st'
].
"Modified: / 20-11-2012 / 10:17:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
repositoryPathName
^ self fileName
"Modified: / 20-11-2012 / 10:03:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
revision
^ changesetId printString
"Modified: / 20-11-2012 / 10:15:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
time
^ nil
"Modified: / 20-11-2012 / 10:15:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
timezone
"raise an error: must be redefined in concrete subclass(es)"
^ nil "Not known"
"Modified: / 23-11-2011 / 13:54:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
user
^ nil
"Modified: / 20-11-2012 / 10:15:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGRevisionInfo methodsFor:'enumerating'!
keysAndValuesDo:aBlock
self class instVarNames do:[:nm |
aBlock value:(nm asSymbol) value:(self perform:nm asSymbol)
].
"Created: / 22-10-2008 / 20:48:08 / cg"
! !
!HGRevisionInfo methodsFor:'private'!
properties
#(
revision
binaryRevision
user
date
time
fileName
repositoryPathName
)
"Created: / 20-11-2012 / 10:01:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGRevisionInfo class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !