Change default SVN diffing tool

前端 未结 10 2279
无人及你
无人及你 2020-12-14 19:55

Following a blog, I created a batch file, wm.bat:

\"d:\\svnroot\\external\\winmerge\\WinMerge.exe\" /B /WAIT \"d:\\svnroot\\external\\winmerge\\WinMergeU.exe         


        
10条回答
  •  借酒劲吻你
    2020-12-14 20:21

    I had 3 issues with the simple .bat file, especially when the revision didn't match the one in the working directory:

    • svn may write the files to be compared to a temp directory - then delete them before WinMerge has a chance to look at them
    • svn may pick up the file from an .svn\pristine subdirectory, where its filename is a long string of hex digits
    • WinMerge bases its syntax highlighting on the file extensions and when svn uses a temp file, it has no extension

    So I ended up wrapping a little PowerShell into the .bat file to work around these issues:

    ;@echo off
    ;set  leftdesc=%~3
    ;set rightdesc=%~5
    ;set  leftfile=%~6
    ;set rightfile=%~7
    ;Findstr -rbv ; %0 | powershell -c -
    ;goto:sCode
    
    &{
      $leftExt, $rightExt = ($env:leftdesc, $env:rightdesc) -replace '.*([.]\w+).*','$1'
      if ($env:leftfile.EndsWith($leftExt)){
        $leftFile = $env:leftfile
      }else{
        $leftFile = Join-Path $env:temp ((Split-Path $env:leftfile -Leaf) + $leftExt)
        Copy-Item $env:leftfile $leftFile -Force
      }
      if ($env:rightfile.EndsWith($rightExt)){
        $rightFile = $env:rightfile
      }else{
        $rightFile = Join-Path $env:temp ((Split-Path $env:rightfile -Leaf) + $rightExt)
        Copy-Item $env:rightfile $rightFile -Force
      }
      $descriptions = '/dl "' + $env:leftdesc + '" /dr "' + $env:rightdesc + '"'
      $fileNames    = '"' + $leftFile + '" "' + $rightFile + '"'
      start 'C:\Program Files (x86)\WinMerge\WinMergeU.exe' ('/e /u ' +$descriptions + ' ' + $fileNames)
    }
    
    ;:sCode
    ;goto :eof
    

    Thanks to Walid Toumi for the wrapper.

提交回复
热议问题