editmergeps.ps1
79 lines
| 1.6 KiB
| text/x-powershell
|
PowerShellLexer
/ contrib / editmergeps.ps1
Kostia Balytskyi
|
r32329 | # 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 | ||||
} | ||||
Kostia Balytskyi
|
r32345 | if (($ed -eq "vim") -or ($ed -eq "emacs") -or ` | ||
($ed -eq "nano") -or ($ed -eq "notepad++")) | ||||
Kostia Balytskyi
|
r32329 | { | ||
$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)) | ||||
{ | ||||
Kostia Balytskyi
|
r32345 | if ($ed -eq "notepad++") | ||
{ | ||||
$linearg = "-n$firstline" | ||||
} | ||||
else | ||||
{ | ||||
$linearg = "+$firstline" | ||||
} | ||||
Kostia Balytskyi
|
r32344 | Start-Process -Wait $ed $linearg,$file | ||
Kostia Balytskyi
|
r32329 | $previousline = $firstline | ||
$lines = Get-Lines | ||||
$firstline = if ($lines.Length -gt 0) { $lines[0] } else { $nil } | ||||
Write-Output "firstline is: $firstline, previousline is: $previousline" | ||||
} | ||||
} | ||||
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 | ||||