BCS
BCS

Reputation: 78683

"SVN Blame" plugin for VisualStudio

I found this question but the referenced options don't say anything about supporting "blame". What I'm looking for is an integrated way to ask "Who edited the line under the cursor last?".

I know most/all SVN clients give this in some form but I'd like something that makes it easy enough that I can do it on a whim: "Humm, who wrote that? [tap tap] Oh him."

Upvotes: 19

Views: 9815

Answers (5)

Bert Huijben
Bert Huijben

Reputation: 19622

The daily builds of AnkhSVN 2.0 have a completely new annotate (blame) implementation inspired by the TFS annotate feature.

AnkhSVN Annotate Preview
(source: qqn.nl)

Not really visible in these screenshots, but it uses the Visual Studio editor for syntax coloring, etc. (You can see the sizeof() in the right bottom of the next image is blue). As you can see in the second picture it also allows several commands on the revision regions in the left bar.

It currently doesn't implement the jump to active line. But you can use the Visual Studio goto line (Ctrl+G) command in it. (You might be able to script this in a macro)

The easiest way to start annotate is right click on the editor ->Subversion->Annotate.

AnkhSVN Annotate Commands
(source: qqn.nl)

[Update 2009-02-03: This feature is now commonly available in the new Stable release]

Upvotes: 16

Kevin Pang
Kevin Pang

Reputation: 41442

I use a set of external tools wired to TortoiseProc.exe to perform SVN operations like log, diff, blame, revert, commit, update, etc. Then I create toolbar shortcuts to these external tools so that I have all the basic SVN operations accessible within the IDE.

Here are the steps to create a button to do a blame on the current file:

  1. Go to tools -> external tools and click "Add"
  2. Enter whatever title you want (e.g. "Blame")
  3. For the command, enter the following (the path will be different if you installed TortoiseSVN to a different directory): c:\Program Files\TortoiseSVN\bin\TortoiseProc.exe
  4. For the arguments, enter the following: /command:blame /path:"$(ItemPath)" /notempfile
  5. For the initial directory, enter:$(ItemDir)

Now, whenever you have a file open, simply go to tools -> Blame and it should generate the Blame in a popup window. You can also customize the toolbar and create a shortcut for this external tool to make it even easier.

Upvotes: 7

Bergius
Bergius

Reputation: 959

Here's a working version of crashmstr's and Derek Dahmer's macro code:

Sub Blame()
    Dim sCurrFileFull = DTE.ActiveDocument.FullName
    Dim activeDoc = DTE.ActiveDocument
    Dim nLine = activeDoc.Selection.CurrentLine
    Dim sTorEXE = "TortoiseProc.exe"
    ' Add path if you don't have TortoiseSVN on your PATH
    Dim sShellCommand = sTorEXE & " /command:blame /startrev:1 /endrev:-1 /path:""" & sCurrFileFull & """ /notempfile /line:" & nLine.ToString()
    Shell(sShellCommand, AppWinStyle.MaximizedFocus, False)
End Sub

As per Derek Dahmer's instructions, add it to a new or existing macro module using the Tools > Macros > Macro IDE.

For easy access, I added the macro to my code window context menu:

Customize > Commands > Context menu > Editor Context Menus | Code Window
Add Command > Macros > Find your macro
Modify Selection > Name: Bla&me

Having it in the context menu enables easy keyboard access, but you can, of course, add a keyboard shortcut to it as well. I have it on Ctrl-Shift-M, which is not used by anything useful by default :).

Upvotes: 1

crashmstr
crashmstr

Reputation: 28583

I wrote a Visual Studio macro to get line number info and pass it to tortoiseproc.exe (which is part of TortoiseSVN)

Take a look at the parameter info: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-automation.html

Here is my macro:


Sub Blame()
  sCurrFileFull = DTE.ActiveDocument.FullName
  Dim activeDoc As Document
  activeDoc = DTE.ActiveDocument
  Dim nLine As Integer
  nLine = activeDoc.Selection.CurrentLine

  sShellCommand = sTorEXE & " /command:blame /startrev:1 /endrev:-1 /path:""" &
                   sCurrFileFull & """ /notempfile /line:" & nLine.ToString()
  Shell(sShellCommand, AppWinStyle.MaximizedFocus, False)
End Sub

Upvotes: 8

Jon Skeet
Jon Skeet

Reputation: 1503439

In VisualSVN supports blame to some extent - you can right-click on a file and select "Blame". However, it pops up a new window, which may not be as integrated as you want.

Upvotes: 3

Related Questions