Added children support to changesets.
HGChangeset>>children returns all child changesets of given one.
This can be used to figure out newer changesets.
--- a/mercurial/HGChangeset.st Wed Dec 05 15:10:10 2012 +0000
+++ b/mercurial/HGChangeset.st Wed Dec 05 18:09:53 2012 +0000
@@ -1,7 +1,8 @@
"{ Package: 'stx:libscm/mercurial' }"
HGRepositoryObject subclass:#HGChangeset
- instanceVariableNames:'id branches author timestamp message parent1 parent2 root'
+ instanceVariableNames:'id branches author timestamp message parent1 parent2 children
+ root'
classVariableNames:''
poolDictionaries:''
category:'SCM-Mercurial-Core'
@@ -77,6 +78,17 @@
"Created: / 27-11-2012 / 20:40:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+children
+ 1 to: children size do:[:i|
+ (children at:i) class == HGChangesetId ifTrue:[
+ children at:i put: (repository changesetWithId: (children at:i))
+ ].
+ ].
+ ^children.
+
+ "Created: / 05-12-2012 / 17:31:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
construct: name
"Return an HGChangesetFile representing a file
(in root of the directory)"
@@ -169,6 +181,12 @@
"Created: / 27-11-2012 / 20:25:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+setChildren: aCollection
+ children := aCollection
+
+ "Created: / 05-12-2012 / 17:32:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
setId: anHGNodeId
id := anHGNodeId
--- a/mercurial/HGCommandParser.st Wed Dec 05 15:10:10 2012 +0000
+++ b/mercurial/HGCommandParser.st Wed Dec 05 18:09:53 2012 +0000
@@ -36,6 +36,7 @@
'{rev}:{node}
{branch}
{parents}
+{children}
{author}
{date|isodate}
{desc}
@@ -43,7 +44,7 @@
'
"Created: / 12-11-2012 / 23:06:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 13-11-2012 / 17:18:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-12-2012 / 17:21:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGCommandParser methodsFor:'accessing'!
@@ -176,6 +177,7 @@
rev setBranches: branches.
rev setParent1Id: self parseNodeId. self expectSpace.
rev setParent2Id: self parseNodeId. self expectSpace. self expectLineEnd.
+ rev setChildren: self parseNodeIdList. self expectLineEnd.
rev setAuthor: self nextLine.
rev setTimestamp: self parseDate. self expectLineEnd.
message := String streamContents:[:s|
@@ -191,7 +193,7 @@
^rev
"Created: / 13-11-2012 / 09:45:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 27-11-2012 / 20:32:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-12-2012 / 17:32:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
parseName
@@ -240,6 +242,24 @@
"Created: / 13-11-2012 / 10:22:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 13-11-2012 / 16:52:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseNodeIdList
+ "Parses node id list from stream and returns it. Support both,
+ short and full node ids."
+
+ | ids |
+
+ stream atEnd ifTrue:[ ^ #() ].
+ stream peek == Character cr ifTrue:[ ^ #() ].
+ ids := OrderedCollection new.
+ [ stream peek ~~ Character cr ] whileTrue:[
+ ids add: self parseNodeId.
+ stream peek == Character space ifTrue:[stream next].
+ ].
+ ^ids
+
+ "Created: / 05-12-2012 / 17:24:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGCommandParser methodsFor:'parsing - commands'!
--- a/mercurial/HGCommandParserTests.st Wed Dec 05 15:10:10 2012 +0000
+++ b/mercurial/HGCommandParserTests.st Wed Dec 05 18:09:53 2012 +0000
@@ -151,13 +151,14 @@
"Created: / 13-11-2012 / 16:34:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-test_misc_03
+test_misc_03a
| rev |
rev := (HGCommandParser on: '4:6f88e1f44d9eb86e0b56ca15e30e5d786acd83c7
default
3:912a64597e4f133ffbc1fdabdda99167a2d69ce2 -1:0000000000000000000000000000000000000000
+
Jan Vrany <jan.vrany@fit.cvut.cz>
2012-10-17 13:20 +0200
Commit 4
@@ -167,10 +168,10 @@
self assert: rev id revno = 4.
self assert: rev author = 'Jan Vrany <jan.vrany@fit.cvut.cz>'.
self assert: rev timestamp hour = 13.
- self assert: rev message = 'Commit 4'
+ self assert: rev message = 'Commit 4'.
+ self assert: (rev instVarNamed:#children) isEmpty.
- "Created: / 13-11-2012 / 17:16:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 21-11-2012 / 18:07:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 05-12-2012 / 17:37:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
test_misc_03b
@@ -180,6 +181,7 @@
rev := (HGCommandParser on: '4:6f88e1f44d9eb86e0b56ca15e30e5d786acd83c7
default
3:912a64597e4f133ffbc1fdabdda99167a2d69ce2 -1:0000000000000000000000000000000000000000
+5:3f88e1f44d9e
Jan Vrany <jan.vrany@fit.cvut.cz>
2012-10-17 13:20 +0200
Commit 4
@@ -188,9 +190,36 @@
') parseLogEntry.
self assert: rev message = 'Commit 4
-Two lones'
+Two lones'.
+ self assert: (rev instVarNamed:#children) size == 1.
+ self assert: (rev instVarNamed:#children) first revno == 5.
"Created: / 21-11-2012 / 18:09:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-12-2012 / 17:38:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_misc_03c
+
+ | rev |
+
+ rev := (HGCommandParser on: '4:6f88e1f44d9eb86e0b56ca15e30e5d786acd83c7
+default
+3:912a64597e4f133ffbc1fdabdda99167a2d69ce2 -1:0000000000000000000000000000000000000000
+5:3f88e1f44d9e 6:3f88e1f44d9d
+Jan Vrany <jan.vrany@fit.cvut.cz>
+2012-10-17 13:20 +0200
+Commit 4
+Two lones
+**EOE**
+') parseLogEntry.
+
+ self assert: rev message = 'Commit 4
+Two lones'.
+ self assert: (rev instVarNamed:#children) size == 2.
+ self assert: (rev instVarNamed:#children) first revno == 5.
+ self assert: (rev instVarNamed:#children) second revno == 6.
+
+ "Created: / 05-12-2012 / 17:39:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
test_misc_04
@@ -200,6 +229,7 @@
revs := (HGCommandParser on: '4:6f88e1f44d9eb86e0b56ca15e30e5d786acd83c7
default
3:912a64597e4f133ffbc1fdabdda99167a2d69ce2 -1:0000000000000000000000000000000000000000
+
Jan Vrany <jan.vrany@fit.cvut.cz>
2012-10-17 13:20 +0200
Commit 4
@@ -207,6 +237,7 @@
3:912a64597e4f133ffbc1fdabdda99167a2d69ce2
default
2:db43a5baa9acaf2536d8b12c070b4f5e0363d45c -1:0000000000000000000000000000000000000000
+4:6f88e1f44d9e
Jan Vrany <jan.vrany@fit.cvut.cz>
2012-10-17 13:20 +0200
Commit 3
@@ -216,6 +247,7 @@
self assert: revs size == 2
"Created: / 13-11-2012 / 17:31:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-12-2012 / 17:36:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
test_version_2_3_3
--- a/mercurial/HGTests.st Wed Dec 05 15:10:10 2012 +0000
+++ b/mercurial/HGTests.st Wed Dec 05 18:09:53 2012 +0000
@@ -246,6 +246,24 @@
self assert: cs parent2 id revno = 4.
"Created: / 27-11-2012 / 20:54:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_changeset_07
+ "
+ Test accessing changesets
+ "
+
+ | repo cs0 cs1 |
+
+ repo := self repositoryNamed:'test_repo_01'.
+
+ cs0 := repo @ 0.
+ cs1 := repo @ 1.
+
+ self assert: cs0 children size == 1.
+ self assert: (cs0 children includesIdentical: cs1).
+
+ "Created: / 05-12-2012 / 17:41:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGTests methodsFor:'tests - commit'!
--- a/mercurial/Make.proto Wed Dec 05 15:10:10 2012 +0000
+++ b/mercurial/Make.proto Wed Dec 05 18:09:53 2012 +0000
@@ -96,9 +96,7 @@
# copy state changes. Together with --guessVersion it ensures that package
# definition class always contains correct binary revision string.
ifneq (**NOHG**, $(shell hg root 2> /dev/null || echo -n '**NOHG**'))
-
-stx_libscm_mercurial.$(O): $(shell hg root)/.hg/dirstate
-
+stx_libscm_mercurial.$(O): $(shell hg root)/.hg/dirstate
endif