changeset 32368: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
+