Mercurial > hg
view contrib/editmergeps.ps1 @ 45465:9bd60ec60601
tests: add criss cross merging tests whose behavior need to be fixed
Merging two changesets can mark a file as removed post merge. However, in some
cases, a user might not want to remove that file and they revert the removal
back and commit the merge. All this works perfectly well.
However, when we do criss-cross merges with such merge where user explicitly
choose to revert the removal with one where another user choose the removal,
we does not get any conflict.
The intent here is conflicting and merge should result in conflicts. One user
merged and want to keep the file while other user merged and want to remove the
file. Merging those merges should result in conflicts.
This patch adds test cases for these cases.
Differential Revision: https://phab.mercurial-scm.org/D8939
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 19 Jun 2020 13:27:46 +0200 |
parents | 92bcaef3420b |
children |
line wrap: on
line source
# A simple script for opening merge conflicts in editor # A loose translation of contrib/editmerge to powershell # Please make sure that both editmergeps.bat and editmerge.ps1 are available # via %PATH% and use the following Mercurial settings to enable it # # [ui] # editmergeps # editmergeps.args=$output # editmergeps.check=changed # editmergeps.premerge=keep $file=$args[0] function Get-Lines { Select-String "^<<<<<<" $file | % {"$($_.LineNumber)"} } $ed = $Env:HGEDITOR; if ($ed -eq $nil) { $ed = $Env:VISUAL; } if ($ed -eq $nil) { $ed = $Env:EDITOR; } if ($ed -eq $nil) { $ed = $(hg showconfig ui.editor); } if ($ed -eq $nil) { Write-Error "merge failed - unable to find editor" exit 1 } if (($ed -eq "vim") -or ($ed -eq "emacs") -or ` ($ed -eq "nano") -or ($ed -eq "notepad++")) { $lines = Get-Lines $firstline = if ($lines.Length -gt 0) { $lines[0] } else { $nil } $previousline = $nil; # open the editor to the first conflict until there are no more # or the user stops editing the file while (($firstline -ne $nil) -and ($firstline -ne $previousline)) { if ($ed -eq "notepad++") { $linearg = "-n$firstline" } else { $linearg = "+$firstline" } Start-Process -Wait -NoNewWindow $ed $linearg,$file $previousline = $firstline $lines = Get-Lines $firstline = if ($lines.Length -gt 0) { $lines[0] } else { $nil } } } else { & "$ed" $file } $conflicts=Get-Lines if ($conflicts.Length -ne 0) { Write-Output "merge failed - resolve the conflicts (line $conflicts) then use 'hg resolve --mark'" exit 1 } exit 0