contrib/editmergeps.ps1
author Kyle Lippincott <spectral@google.com>
Wed, 21 Mar 2018 12:36:29 -0700
changeset 37080 1e30a26a65d0
parent 32603 92bcaef3420b
permissions -rw-r--r--
filemerge: make the 'local' path match the format that 'base' and 'other' use If we pass a separate '$output' arg to the merge tool, we produce four files: local, base, other, and output. In this situation, 'output' will be the original filename, 'base' and 'other' are temporary files, and previously 'local' would be the backup file (so if 'output' was foo.txt, 'local' would be foo.txt.orig). This change makes it so that 'local' follows the same pattern as 'base' and 'other' - it will be a temporary file either in the `experimental.mergetempdirprefix`-controlled directory with a name like foo~local.txt, or in the normal system-wide temp dir with a name like foo~local.RaNd0m.txt. For the cases where the merge tool does not use an '$output' arg, 'local' is still the destination filename, and 'base' and 'other' are unchanged. The hope is that this is much easier for people to reason about; rather than having a tool like Meld pop up with three panes, one of them with the filename "foo.txt.orig", one with the filename "foo.txt", and one with "foo~other.StuFf2.txt", we can (when the merge temp dir stuff is enabled) make it show up as "foo~local.txt", "foo.txt" and "foo~other.txt", respectively. This also opens the door to future customization, such as getting the operation-provided labels and a hash prefix into the filenames (so we see something like "foo~dest.abc123", "foo.txt", and "foo~src.d4e5f6"). Differential Revision: https://phab.mercurial-scm.org/D2889
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32368
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
32384
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
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: 32383
diff changeset
    39
    ($ed -eq "nano") -or ($ed -eq "notepad++"))
32368
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
  {
32384
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    50
    if ($ed -eq "notepad++")
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    51
    {
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    52
        $linearg = "-n$firstline"
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    53
    }
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    54
    else
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    55
    {
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    56
        $linearg = "+$firstline"
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    57
    }
a438f5a3bc09 contrib: make editmergeps able to work with notepad++
Kostia Balytskyi <ikostia@fb.com>
parents: 32383
diff changeset
    58
32601
4daf5c18055a contrib: make editmergeps use -NoNewWindow option in Start-Process cmdlet
Kostia Balytskyi <ikostia@fb.com>
parents: 32384
diff changeset
    59
    Start-Process -Wait -NoNewWindow $ed $linearg,$file
32368
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
{
32602
04e18be6e188 contrib: fix a bug preventing editmergeps.ps1 from running unknonw editors
Kostia Balytskyi <ikostia@fb.com>
parents: 32601
diff changeset
    67
  & "$ed" $file
32368
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