Evolve: Added support for loading hidden changesets.
This is necessary to work on repositories where evolve enabled and
used. The pre-loading of changesets may result in an attempt to load
a hidden changeset. In that case the `hg log` command barks and
refuses to print the log. In turn, operations on repository
may spuriously fail because of this.
To avoid this, make sure `--hidden` option is passed to log command
if using Mercurial >= 2.5 (2.5 is the first supporting `--hidden` option)
--- a/mercurial/HGCommand.st Tue Mar 01 19:55:28 2016 +0000
+++ b/mercurial/HGCommand.st Tue Mar 22 20:10:39 2016 +0000
@@ -24,7 +24,9 @@
instanceVariableNames:'workingDirectory result error errors blocker errorReader
outputReader'
classVariableNames:'HGCommandString HGExecutable HGExecutableArguments HGVersion
- HGVersionIsGreaterThan_2_4 HGVersionIsGreaterThan_3_3'
+ HGVersionIsGreaterOrEqualThan_2_4
+ HGVersionIsGreaterOrEqualThan_2_5
+ HGVersionIsGreaterOrEqualThan_3_3'
poolDictionaries:'HGDebugFlags'
category:'SCM-Mercurial-Internal'
!
@@ -107,7 +109,7 @@
!
HGCommand subclass:#log
- instanceVariableNames:'start stop path childrenOnly idsOnly revsets limit'
+ instanceVariableNames:'start stop path childrenOnly idsOnly revsets limit hidden'
classVariableNames:''
poolDictionaries:''
privateIn:HGCommand
@@ -284,7 +286,8 @@
hgCommand: command
HGCommandString := command notNil ifTrue:[ command asString ] ifFalse:[ nil ].
- HGExecutable := HGExecutableArguments := HGVersion := HGVersionIsGreaterThan_2_4 := nil.
+ HGExecutable := HGExecutableArguments := HGVersion := nil.
+ HGVersionIsGreaterOrEqualThan_2_4 := HGVersionIsGreaterOrEqualThan_2_5 := HGVersionIsGreaterOrEqualThan_3_3 := nil.
"
@@ -295,7 +298,7 @@
"
"Created: / 19-11-2012 / 21:49:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 01-12-2014 / 20:38:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 25-03-2016 / 17:25:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
hgCommandValidate: command
@@ -414,22 +417,32 @@
!
hgVersionIsGreaterOrEqualThan_2_4
- HGVersionIsGreaterThan_2_4 isNil ifTrue:[
- HGVersionIsGreaterThan_2_4 := self hgVersionIsGreaterOrEqualThan:#( 2 4 ).
+ HGVersionIsGreaterOrEqualThan_2_4 isNil ifTrue:[
+ HGVersionIsGreaterOrEqualThan_2_4 := self hgVersionIsGreaterOrEqualThan:#( 2 4 ).
].
- ^ HGVersionIsGreaterThan_2_4
+ ^ HGVersionIsGreaterOrEqualThan_2_4
"Created: / 27-11-2014 / 23:16:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 01-12-2014 / 20:39:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 25-03-2016 / 17:22:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hgVersionIsGreaterOrEqualThan_2_5
+ HGVersionIsGreaterOrEqualThan_2_5 isNil ifTrue:[
+ HGVersionIsGreaterOrEqualThan_2_5 := self hgVersionIsGreaterOrEqualThan:#( 2 5 ).
+ ].
+ ^ HGVersionIsGreaterOrEqualThan_2_5
+
+ "Created: / 25-03-2016 / 17:23:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
hgVersionIsGreaterOrEqualThan_3_3
- HGVersionIsGreaterThan_3_3 isNil ifTrue:[
- HGVersionIsGreaterThan_3_3 := self hgVersionIsGreaterOrEqualThan:#( 3 3 ).
+ HGVersionIsGreaterOrEqualThan_3_3 isNil ifTrue:[
+ HGVersionIsGreaterOrEqualThan_3_3 := self hgVersionIsGreaterOrEqualThan:#( 3 3 ).
].
- ^ HGVersionIsGreaterThan_3_3
+ ^ HGVersionIsGreaterOrEqualThan_3_3
"Created: / 14-09-2015 / 05:42:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 25-03-2016 / 17:23:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
hgVersionIsSupported
@@ -1885,6 +1898,14 @@
childrenOnly := aBoolean.
!
+hidden
+ ^ hidden
+!
+
+hidden:aBoolean
+ hidden := aBoolean.
+!
+
idsOnly
^ idsOnly
!
@@ -1981,6 +2002,20 @@
"Modified: / 27-11-2014 / 23:24:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+argumentsGlobalOn:arg
+ "Called to get global options"
+
+ hidden == true ifTrue:[
+ "/ --hidden is supported since 2.5
+ HGCommand hgVersionIsGreaterOrEqualThan_2_5 ifTrue:[
+ arg nextPut: '--hidden'
+ ].
+ ].
+
+ "Created: / 22-03-2016 / 20:02:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 25-03-2016 / 17:25:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
parseError:stream
"Parses output of 'hg' command, i.e. commit, log, update, checkout,
etc."
--- a/mercurial/HGRepository.st Tue Mar 01 19:55:28 2016 +0000
+++ b/mercurial/HGRepository.st Tue Mar 22 20:10:39 2016 +0000
@@ -143,6 +143,7 @@
"Created: / 14-11-2012 / 22:46:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 21-11-2012 / 00:20:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 25-03-2016 / 17:27:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
clone: aFilenameOrUrlOrString to: aStringOrFilename update: update
@@ -862,6 +863,35 @@
!HGRepository methodsFor:'testing'!
+hasExtension: extension
+ "Return true, if the repository has `extension` enabled, false otherwise"
+
+ | extensions value |
+
+ extensions := self config get: 'extensions' default: nil.
+ extensions notNil ifTrue:[
+ value := extensions get: extension default: 0.
+ value ~~ 0 ifTrue:[
+ ^value isEmptyOrNil or:[ value asFilename exists ]
+ ].
+ ].
+ ^ false
+
+ "
+ (HGRepository on: (Smalltalk getPackageDirectoryForPackage: #'stx:libscm')) hasExtension: 'evolve'
+ "
+
+ "Created: / 16-03-2016 / 23:56:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hasExtensionEvolve
+ "Return true, if evolve extension is enabled on the receiver"
+
+ ^ self hasExtension:'evolve'
+
+ "Created: / 16-03-2016 / 23:57:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
isShared
"Return true, if this repository is shared, i.e., created by means
of `hg share`"
@@ -994,10 +1024,13 @@
non-lazy"
| csets cs |
- csets := self repository execute:
+ csets := repository execute:
(HGCommand log
workingDirectory: repository path asString;
revsets: (self loadRevsetsForLoad: id);
+ hidden: true; "/ Hidden changeset are supported since 2.5, but
+ "/ the HGCommand::log cares of this itself, so it's
+ "/ safe to pass true here.
yourself).
"/just to be defensive...
csets do:[:each|
@@ -1020,7 +1053,7 @@
^cs
"Created: / 16-12-2012 / 00:57:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 03-03-2013 / 22:58:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 25-03-2016 / 17:26:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
loadRevsetsForLoad: id
--- a/mercurial/HGTests.st Tue Mar 01 19:55:28 2016 +0000
+++ b/mercurial/HGTests.st Tue Mar 22 20:10:39 2016 +0000
@@ -1217,6 +1217,24 @@
"Created: / 09-12-2012 / 23:01:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+test_hasExtension
+ "
+ Tests HGRepository>>hasExtension:.
+ Since we cannot guarantee that the system under test will
+ have the extension enabled, just test for errors (DNU)
+ "
+
+ | repo |
+
+ repo := self repositoryNamed:'test_repo_02'.
+ "/ This one is likely not enabled...
+ self assert: (repo hasExtension: 'blablablalibscm' , Random nextInteger printString) not.
+ repo hasExtension: 'purge'.
+ repo hasExtension: 'evolve'.
+
+ "Created: / 22-03-2016 / 19:56:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
test_heads_01
"
Test listing repository heads