contrib/editmergeps.ps1
author Matt Harbison <matt_harbison@yahoo.com>
Sun, 22 Aug 2021 17:59:21 -0400
branchstable
changeset 47858 4162f6b40f2c
parent 32603 92bcaef3420b
permissions -rw-r--r--
windows: degrade to py2 behavior when reading a non-symlink as a symlink While waiting for the push to hg-committed in WSL to complete, I ran a `phabimport` from Windows and got this traceback: $ hg phabimport 11313 ** Unknown exception encountered with possibly-broken third-party extension "mercurial_keyring" (version N/A) ** which supports versions unknown of Mercurial. ** Please disable "mercurial_keyring" and try your action again. ** If that fixes the bug please report it to https://foss.heptapod.net/mercurial/mercurial_keyring/issues ** Python 3.9.5 (default, May 6 2021, 17:29:31) [MSC v.1928 64 bit (AMD64)] ** Mercurial Distributed SCM (version 5.9rc1+hg32.0e2f5733563d) ** Extensions loaded: absorb, blackbox, evolve 10.3.3, extdiff, fastannotate, fix, mercurial_keyring, mq, phabblocker 20210126, phabricator, rebase, show, strip, topic 0.22.3 Traceback (most recent call last): File "mercurial.lock", line 279, in _trylock File "mercurial.vfs", line 202, in makelock File "mercurial.util", line 2147, in makelock FileExistsError: [WinError 183] Cannot create a file when that file already exists: b'hp-omen:78348' -> b'C:\\Users\\Matt\\hg/.hg/store/lock' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<string>", line 24, in <module> File "mercurial.dispatch", line 144, in run File "mercurial.dispatch", line 250, in dispatch File "mercurial.dispatch", line 294, in _rundispatch File "mercurial.dispatch", line 470, in _runcatch File "mercurial.dispatch", line 480, in _callcatch File "mercurial.scmutil", line 153, in callcatch File "mercurial.dispatch", line 460, in _runcatchfunc File "mercurial.dispatch", line 1273, in _dispatch File "mercurial.dispatch", line 918, in runcommand File "mercurial.dispatch", line 1285, in _runcommand File "mercurial.dispatch", line 1271, in <lambda> File "mercurial.util", line 1886, in check File "mercurial.util", line 1886, in check File "hgext.mq", line 4239, in mqcommand File "mercurial.util", line 1886, in check File "mercurial.util", line 1886, in check File "hgext.phabricator", line 314, in inner File "hgext.phabricator", line 2222, in phabimport File "hgext.phabricator", line 2123, in readpatch File "hgext.phabricator", line 2199, in _write File "mercurial.localrepo", line 2956, in lock File "mercurial.localrepo", line 2918, in _lock File "mercurial.lock", line 152, in trylock File "mercurial.lock", line 283, in _trylock File "mercurial.lock", line 314, in _readlock File "mercurial.vfs", line 221, in readlock File "mercurial.util", line 2163, in readlock File "mercurial.windows", line 619, in readlink ValueError: not a symbolic link Both exceptions look accurate (the file exists, and the Windows side can't read WSL side symlinks). I didn't try to reproduce this entirely within the Windows side, but we can do better than a cryptic stacktrace. With this change, the same scenario results in this abort: abort: C:\Users\Matt\hg/.hg/store/lock: The file cannot be accessed by the system When both the `push` and `phabimport` are done on the Windows side, it prints a message about waiting for the lock, and successfully applies the patch after the push completes. I'm not sure if there's enough info to be able to convert the abort into the wait scenario. As it stands now, we don't support symlinks on Windows, which requires either a UAC Administrator level process or an opt-in in developer mode, and there are several places where the new symlink on Windows support in py3 was explicitly disabled in order to get tests to pass quicker. Differential Revision: https://phab.mercurial-scm.org/D11333
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