yalay / vim

Automatically exported from code.google.com/p/vim
0 stars 0 forks source link

TFS Plugin Broken by latest VIM #127

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Download the VIM executable provided by vim.org for Windows (7.3.46)
2. Install the plugin to work with TFS: 
http://www.vim.org/scripts/script.php?script_id=3808
3. Verify that TFS functions operate as expected (checkout, status, etc..)
4. Download the latest VIM source code (currently 7.3.884) and compile using 
MSVC 2012.
5. Replace the VIM 7.3.46 .exe file with the .exe versioned 7.3.884
6. Verify that the TFS functions do not work.  They show in the command bar 
like they are executing but they do not execute.

What is the expected output? What do you see instead?
I expect the TFS plugin to work like it does in VIM version 7.3.46.  The plugin 
has been broken by 7.3.884

What version of the product are you using? On what operating system?
Versions 7.3.46 and 7.3.884 on Windows 7 X64.  Both versions of VIM are 
compiled for 32 bit and all other plugins work as expected.

Please provide any additional information below.
I attempted to use the VIMScript debugger to debug the scripts but I am a 
relatively new VIM user and so I wasn't able to accurately determine the 
problem.

Original issue reported on code.google.com by lukemaul...@gmail.com on 9 Apr 2013 at 9:03

GoogleCodeExporter commented 9 years ago
> 4. Download the latest VIM source code (currently 7.3.884) and compile using 
MSVC 2012.
> 5. Replace the VIM 7.3.46 .exe file with the .exe versioned 7.3.884

In general this will not work as well as you hope. There are a lot of "runtime" 
files, including syntax scripts, standard plugins, documentation, and more 
which are also part of the 7.3.884 source code. You will have none of these if 
you just copy over the executable.

> 6. Verify that the TFS functions do not work.  They show in the command bar 
like they are executing but they do not execute.

Can you give a specific command (exact key sequence if a mapping), and the 
specific output you expected, and what you got instead?

One possible source of the problem MIGHT be a few changes that were done 
somewhere in those 884 patches to make shell quoting work by default in most 
cases on Windows. Check that your 'shellxquote' and 'shellcmdflag' and 'shell' 
and 'shellescape' options are set appropriately (in most cases they should 
remain at the default).

Without knowing the specific command you tried, and what actually gets 
executed, there's not much way to debug this.

Have you tried contacting the plugin maintainer? They can probably debug the 
problem easier than most others.

Original comment by fritzoph...@gmail.com on 9 Apr 2013 at 10:07

GoogleCodeExporter commented 9 years ago
Instead of mixing some files of the 7.3.046 distribution with a newly compiled 
executable, you should use a consistent set, for instance the Windows installer 
available as the newest entry at 
http://sourceforge.net/projects/cream/files/Vim/ which Vim-list old-timers have 
dubbed "Vim without Cream". It is currently at patchlevel 7.3.829 but it 
includes a consistent set of runtime files. Also, it is a Win32 executable but 
it will run on a Win64 machine too, and its shorter word length should not give 
you problems except with extremely voluminous files (2 GiB or more, let's say) 
or computations involving extremely big integers (more than 2147483647 in 
absolue value; floating-point numbers, OTOH, are the same on both 
architectures).

Before installing it, you may want to remove, with all its contents, the 
"vim73" directory containing your existing installation (but not the "vim" 
directory above it).

And like Ben Fritz said, try to contact the script maintainer.

Best regards,
Tony.
-- 
ERIC IDLE PLAYED: THE DEAD COLLECTOR, MR BINT (A VILLAGE NE'ER-DO -WELL VERY
                  KEEN ON BURNING WITCHES), SIR ROBIN, THE GUARD WHO DOESN'T
                  HICOUGH BUT TRIES TO GET THINGS STRAIGHT, CONCORDE (SIR
                  LAUNCELOT'S TRUSTY STEED), ROGER THE SHRUBBER (A SHRUBBER),
                  BROTHER MAYNARD
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

Original comment by antoine....@gmail.com on 10 Apr 2013 at 12:18

GoogleCodeExporter commented 9 years ago
I downloaded the latest Win64 build from Haroogan 
(https://bitbucket.org/Haroogan/64-bit-vim-builds-for-windows-64-bit/downloads) 
which is at patch level 7.3.761.  I tried the TFS plugin and the plugin still 
does not work.  
I checked 'shellxquote', 'shellcmdflag', 'shell', and 'shellescape' and those 
are not mentioned in my _vimrc file.
I tried contacting the plugin author but I have received no response.  The 
command puts the following text at the bottom of my VIM window (see screenshot) 
but the file is not actually checked out from TFS.  
I have verified that the file path is correct and if I execute this command 
from a Windows command line, the file is correctly checked out from TFS:
C:\Projects\TFS\NCN - 
Other\MRASystem\Main\Go\src\mrawebtoolboxext>"E:\Programs\VisualStudio2012\Commo
n7\IDE\TF.exe" checkout "C:\projects\tfs\ncn - 
other\mrasystem\main\go\src\mra\logger\logger.go"

Original comment by lukemaul...@gmail.com on 25 Apr 2013 at 3:00

Attachments:

GoogleCodeExporter commented 9 years ago
It looks like the plugin is manually escaping quote characters in the command 
with ^, which with default settings Vim will now do automatically as-needed.

It looks like the format of commands that run are:

  ! start /min cmd /c path/to/tool.exe ^"tool arguments^"

or, depending on the command or specific settings, I'm not sure which:

  r!cmd /c "path/to/tool.exe ^"tool arguments^""

"Does not work" means very little. What specific output do you get when you try 
to run a command that fails?

I don't have TFS installed, and the plugin invokes a big chain of functions to 
execute any command, so I tried the second command format with the 'dir' 
command, as follows:

new
r!cmd /c "dir /b ^"C:\Program Files^""

Doing this gives me:
E485: Can't read file C:/Users/btfritz/AppData/Local/Temp/VIoF289.tmp

If I remove the ^ characters (because Vim's default settings are now set up for 
these not to be needed anymore), I get a directory listing as I expect:

:new
r!cmd /c "dir /b "C:\Program Files""

For now you can try removing the ^ escaping from the commands in the plugin. 
You should contact the plugin maintainer to let him know his plugin needs 
adjustment for Vim's new default shellxquote and shellxescape settings.

Note that ^" isn't actually a valid escape to include a quote within a quote. 
The quotes also prevent special meanings of characters, so the plugin was 
arguably wrong in the first place:

C:\>echo ^^
^
C:\>echo ^"
"
C:\>echo "^""
"^""

Original comment by fritzoph...@gmail.com on 25 Apr 2013 at 3:57

GoogleCodeExporter commented 9 years ago
Removing the ^ worked great, thank you.  Was this a change to VIM's behavior?

Original comment by lukemaul...@gmail.com on 27 Apr 2013 at 4:41

GoogleCodeExporter commented 9 years ago
> Removing the ^ worked great, thank you.  Was this a change to VIM's behavior?

...sort of.

It's a change in the DEFAULT behavior.

Previously something like this:

  "C:\Program Files\MyApp\myapp.exe" "some arguments"

Would get executed directly in cmd.exe with no escaping or anything, which the 
wonderful world of quoting in Windows cmd.exe would interpret as:

  C:\Program Files\MyApp\myapp.exe" "some arguments

Which would obviously fail because "C:\Program" is not an executable program 
(and probably doesn't even exist as a directory).

The plugin you are using dates from when this was still the default behavior 
and is probably the only workaround that worked for the author at the time. 
However, as I pointed out, I have no idea why it worked, because it was wrong 
anyway. You can't escape quotes within quotes in Windows.

Anyway, Vim changed over a series of changes, each one less broken than the 
last, to actually execute something like this in the cmd.exe shell for the 
example I give above:

  (^"C:\Program Files\MyApp\myapp.exe^" ^"some arguments^")

This works in almost every use case, although another thread recently found 
something strange going on with parentheses between quotes or something like 
that.

Support was also added to execute something like this instead, but it's not the 
default, and I'm not actually sure what it fixes:

  "(^"C:\Program Files\MyApp\myapp.exe^" ^"some arguments^")"

Remember how I said that escaping quotes within quotes won't work? You might 
wonder why the above works. Well...cmd.exe will always strip off the first and 
last quote in a line that begins and ends with a quote. So it's actually like 
those aren't even there. Again though, I don't remember the details. I think we 
ended up with defaults that work *almost* all the time but still fail in 
specific less-common scenarios.

It's probably easier to do as some plugin authors do, and just build a .bat 
script in a temp file and execute that, so you don't need to worry about 
quoting.

Original comment by fritzoph...@gmail.com on 29 Apr 2013 at 3:15

GoogleCodeExporter commented 9 years ago

Original comment by chrisbr...@googlemail.com on 30 Sep 2014 at 8:20