contrib/editmergeps.ps1
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 03 Aug 2021 19:26:26 +0200
branchstable
changeset 47804 5ad37164a8fe
parent 32570 92bcaef3420b
permissions -rw-r--r--
testing: make sure write_file is "atomic" This make sure viewer cannot see the new file with partial content. This was likely the cause of some flakiness in `test-nointerrupt.t` Differential Revision: https://phab.mercurial-scm.org/D11250
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32329
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     1
# A simple script for opening merge conflicts in editor
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     2
# A loose translation of contrib/editmerge to powershell
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     3
# Please make sure that both editmergeps.bat and editmerge.ps1 are available
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     4
# via %PATH% and use the following Mercurial settings to enable it
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     5
#
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     6
# [ui]
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     7
# editmergeps
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     8
# editmergeps.args=$output
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
     9
# editmergeps.check=changed
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    10
# editmergeps.premerge=keep
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    11
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    12
$file=$args[0]
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    13
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    14
function Get-Lines
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    15
{
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    16
  Select-String "^<<<<<<" $file | % {"$($_.LineNumber)"}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    17
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    18
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    19
$ed = $Env:HGEDITOR;
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    20
if ($ed -eq $nil)
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    21
{
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    22
  $ed = $Env:VISUAL;
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    23
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    24
if ($ed -eq $nil)
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    25
{
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    26
  $ed = $Env:EDITOR;
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    27
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    28
if ($ed -eq $nil)
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    29
{
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    30
  $ed = $(hg showconfig ui.editor);
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    31
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    32
if ($ed -eq $nil)
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    33
{
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    34
  Write-Error "merge failed - unable to find editor"
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    35
  exit 1
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    36
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    37
32345
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    38
if (($ed -eq "vim") -or ($ed -eq "emacs") -or `
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    39
    ($ed -eq "nano") -or ($ed -eq "notepad++"))
32329
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    40
{
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    41
  $lines = Get-Lines
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    42
  $firstline = if ($lines.Length -gt 0) { $lines[0] } else { $nil }
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    43
  $previousline = $nil;
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    44
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    45
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    46
  # open the editor to the first conflict until there are no more
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    47
  # or the user stops editing the file
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    48
  while (($firstline -ne $nil) -and ($firstline -ne $previousline))
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    49
  {
32345
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    50
    if ($ed -eq "notepad++")
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    51
    {
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    52
        $linearg = "-n$firstline"
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    53
    }
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    54
    else
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    55
    {
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    56
        $linearg = "+$firstline"
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    57
    }
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32344
diff changeset
    58
32568
4daf5c18055a contrib: make editmergeps use -NoNewWindow option in Start-Process cmdlet
Kostia Balytskyi <ikostia@fb.com>
parents: 32345
diff changeset
    59
    Start-Process -Wait -NoNewWindow $ed $linearg,$file
32329
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    60
    $previousline = $firstline
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    61
    $lines = Get-Lines
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    62
    $firstline = if ($lines.Length -gt 0) { $lines[0] } else { $nil }
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    63
  }
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    64
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    65
else
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    66
{
32569
04e18be6e188 contrib: fix a bug preventing editmergeps.ps1 from running unknonw editors
Kostia Balytskyi <ikostia@fb.com>
parents: 32568
diff changeset
    67
  & "$ed" $file
32329
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    68
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    69
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    70
$conflicts=Get-Lines
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    71
if ($conflicts.Length -ne 0)
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    72
{
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    73
  Write-Output "merge failed - resolve the conflicts (line $conflicts) then use 'hg resolve --mark'"
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    74
  exit 1
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    75
}
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    76
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    77
exit 0
799615bbf5bf contrib: add editmerge version for powershell
Kostia Balytskyi <ikostia@fb.com>
parents:
diff changeset
    78