Mercurial > hg
changeset 32329:799615bbf5bf
contrib: add editmerge version for powershell
This just adds a translation of existing contrib/editmerge to powershell.
It allows users on Windows to iteratively resolve conflicts in their
editor of choice.
# no-check-commit
author | Kostia Balytskyi <ikostia@fb.com> |
---|---|
date | Thu, 18 May 2017 14:36:46 -0700 |
parents | 531e6a57abd2 |
children | ab5f5429e3d2 |
files | contrib/editmergeps.bat contrib/editmergeps.ps1 |
diffstat | 2 files changed, 71 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/editmergeps.bat Thu May 18 14:36:46 2017 -0700 @@ -0,0 +1,2 @@ +@echo off +powershell -NoProfile -ExecutionPolicy unrestricted -Command "& 'editmergeps.ps1' %*"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/editmergeps.ps1 Thu May 18 14:36:46 2017 -0700 @@ -0,0 +1,69 @@ +# 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")) +{ + $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)) + { + & "$ed" "+$firstline" "$file" + $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 +