Fix commit with class renames for Mercurial 4.8 and later
Starting with Mercurial 4.8 one has to use `-f` option to force
rename of file over a file that is already tracked, otherwuse
`hg mv` fails. This is tested by `#test_commit_17h`.
This commit fixes this issue.
--- a/common/SCMAbstractFileoutLikeTask.st Tue Nov 13 15:43:08 2018 +0100
+++ b/common/SCMAbstractFileoutLikeTask.st Thu Jan 10 21:25:14 2019 +0000
@@ -447,25 +447,31 @@
renames := OrderedCollection new.
names := OrderedCollection new.
ChangeSet current do:
- [:chg|
- chg isClassRenameChange ifTrue:[
- renames add: chg className -> chg oldName.
- names add: chg fullClassName.
- ]].
+ [:chg|
+ chg isClassRenameChange ifTrue:[
+ renames add: chg className -> chg oldName.
+ names add: chg fullClassName.
+ ]].
packages do:[:each |
- each isVirtual ifFalse: [
- (self classesToFileOutFor: each) do:[:cls|
- (names includes: cls name) ifTrue:[
- self doRenameContainerForClassNamed: cls name for: each using: renames language: cls programmingLanguage.
- ]
- ]
- ]
+ each isVirtual ifFalse: [
+ | classes |
+
+ "/ We need to perform renames in stable order and, preferably,
+ "/ in the prder in which they have been done. Following ensures
+ "/ at least a stable order depending on order of renames.
+ classes := self classesToFileOutFor: each.
+ classes := classes select:[:cls | names includes: cls name ].
+ classes := classes asArray sortBy:[ :a :b | (names indexOf: a name) < (names indexOf: b name) ].
+ classes do:[:cls|
+ self doRenameContainerForClassNamed: cls name for: each using: renames language: cls programmingLanguage.
+ ]
+ ]
].
"Created: / 11-04-2008 / 11:00:27 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 19-08-2009 / 15:03:51 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Created: / 06-08-2011 / 21:13:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 27-02-2014 / 22:55:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (format): / 29-01-2019 / 23:02:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doUpdateBuildSupportFiles
--- a/mercurial/HGCommand.st Tue Nov 13 15:43:08 2018 +0100
+++ b/mercurial/HGCommand.st Thu Jan 10 21:25:14 2019 +0000
@@ -27,7 +27,8 @@
HGVersionIsGreaterOrEqualThan_2_4
HGVersionIsGreaterOrEqualThan_2_5
HGVersionIsGreaterOrEqualThan_3_3
- HGVersionIsGreaterOrEqualThan_4_1'
+ HGVersionIsGreaterOrEqualThan_4_1
+ HGVersionIsGreaterOrEqualThan_4_8'
poolDictionaries:'HGDebugFlags'
category:'SCM-Mercurial-Internal'
!
@@ -124,7 +125,7 @@
!
HGCommand subclass:#mv
- instanceVariableNames:'source destination'
+ instanceVariableNames:'source destination force'
classVariableNames:''
poolDictionaries:''
privateIn:HGCommand
@@ -293,7 +294,8 @@
HGCommandString := command notNil ifTrue:[ command asString ] ifFalse:[ nil ].
HGExecutable := HGExecutableArguments := HGVersion := nil.
HGVersionIsGreaterOrEqualThan_2_4 := HGVersionIsGreaterOrEqualThan_2_5 :=
- HGVersionIsGreaterOrEqualThan_3_3 := HGVersionIsGreaterOrEqualThan_4_1 := nil.
+ HGVersionIsGreaterOrEqualThan_3_3 := HGVersionIsGreaterOrEqualThan_4_1 :=
+ HGVersionIsGreaterOrEqualThan_4_8 := nil.
"
@@ -304,7 +306,7 @@
"
"Created: / 19-11-2012 / 21:49:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 29-03-2018 / 15:54:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-01-2019 / 14:43:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
hgCommandValidate: command
@@ -464,6 +466,19 @@
"Created: / 28-03-2018 / 15:31:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+hgVersionIsGreaterOrEqualThan_4_8
+ HGVersionIsGreaterOrEqualThan_4_8 isNil ifTrue:[
+ HGVersionIsGreaterOrEqualThan_4_8 := self hgVersionIsGreaterOrEqualThan:#( 4 8 ).
+ ].
+ ^ HGVersionIsGreaterOrEqualThan_4_8
+
+ "
+ HGCommand hgVersionIsGreaterOrEqualThan_4_8
+ "
+
+ "Created: / 10-01-2019 / 14:43:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
hgVersionIsSupported
^ self hgVersionIsSupported:self hgVersion
@@ -2154,6 +2169,14 @@
destination := something.
!
+force
+ ^ force
+!
+
+force:aBoolean
+ force := aBoolean.
+!
+
source
^ source
!
@@ -2176,9 +2199,13 @@
destination isNil ifTrue:[
self error:'No destination'
].
+ force == true ifTrue:[
+ stream nextPut: '-f'
+ ].
stream nextPut: source asString; nextPut: destination.
"Created: / 15-11-2012 / 00:21:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-01-2019 / 15:36:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
parseOutput:stream
--- a/mercurial/HGCommandParser.st Tue Nov 13 15:43:08 2018 +0100
+++ b/mercurial/HGCommandParser.st Thu Jan 10 21:25:14 2019 +0000
@@ -1047,7 +1047,10 @@
| status path |
stream peek == Character space ifTrue:[
- statusesAndPaths last first"status" isAdded ifTrue:[
+ | last |
+
+ last := statusesAndPaths last first.
+ (last isAdded or:[last isModified]) ifTrue:[
stream next.
self expectSpace.
path := self nextLine.
@@ -1065,7 +1068,7 @@
^ statusesAndPaths
"Created: / 23-10-2012 / 10:57:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 21-11-2012 / 01:09:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-01-2019 / 21:04:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
parseCommandUpdate
--- a/mercurial/HGCommandParserTests.st Tue Nov 13 15:43:08 2018 +0100
+++ b/mercurial/HGCommandParserTests.st Thu Jan 10 21:25:14 2019 +0000
@@ -702,6 +702,22 @@
"Created: / 21-11-2012 / 01:09:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+test_cmd_status_04
+
+ | statuses |
+
+ statuses := (HGCommandParser on: 'M HGRevisionInfo.st
+ HGVersionInfo.st
+') parseCommandStatus.
+
+ self assert: statuses size == 1.
+ self assert: statuses first first isCopied.
+ self assert: statuses first first source = 'HGVersionInfo.st'.
+ self assert: statuses first second = 'HGRevisionInfo.st'.
+
+ "Created: / 10-01-2019 / 21:03:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
test_cmd_update_01
| nergeinfo |
--- a/mercurial/HGWorkingCopyFile.st Tue Nov 13 15:43:08 2018 +0100
+++ b/mercurial/HGWorkingCopyFile.st Thu Jan 10 21:25:14 2019 +0000
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
stx:libscm - a new source code management library for Smalltalk/X
Copyright (C) 2012-2015 Jan Vrany
@@ -351,6 +349,7 @@
workingDirectory: filename directory;
source: filename pathName;
destination: destination pathName;
+ force: (HGCommand hgVersionIsGreaterOrEqualThan_4_8 and:[ destination exists and:[destination isTracked ]]);
yourself)
].
filename exists ifTrue:[
@@ -358,7 +357,7 @@
].
"Created: / 15-11-2012 / 00:23:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 03-03-2013 / 23:02:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-01-2019 / 21:14:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
remove
@@ -681,6 +680,6 @@
!
version_SVN
- ^ '§Id:: §'
+ ^ '§Id:: §'
! !