96 lines
6.4 KiB
VB.net
96 lines
6.4 KiB
VB.net
Imports EnvDTE
|
||
Imports System.Diagnostics
|
||
|
||
Public Module Perforce
|
||
|
||
Function FindInPath(ByVal exeName As String)
|
||
Dim env = System.Environment.GetEnvironmentVariable("Path")
|
||
Dim Paths = Split(env, ";")
|
||
Dim Element
|
||
Dim p4Filename = ""
|
||
For Each Element In Paths
|
||
If Right(Element, 1) <> "\" And Right(Element, 1) <> "/" Then
|
||
Element = Element + "\"
|
||
End If
|
||
If System.IO.File.Exists(Element + exeName) Then
|
||
Return Element + exeName
|
||
End If
|
||
Next
|
||
FindInPath = ""
|
||
End Function
|
||
|
||
Function StripLastDir(ByVal curPath As String)
|
||
Dim testPath = curPath.Replace("/", "\")
|
||
Dim lastIndex = testPath.LastIndexOf("\")
|
||
If lastIndex = -1 Then
|
||
Return ""
|
||
Else
|
||
Return Left(testPath, lastIndex)
|
||
End If
|
||
End Function
|
||
|
||
Function EZRunCommand(ByVal exeName As String, ByVal args As String, ByVal p4StartDir As String)
|
||
' Find the p4 command.
|
||
Dim p4Filename = FindInPath(exeName)
|
||
If p4Filename = "" Then
|
||
MsgBox("Can't find " + exeName + " in path.")
|
||
Return ""
|
||
End If
|
||
|
||
' Run p4 edit <filename>
|
||
Dim p = New System.Diagnostics.Process
|
||
p.StartInfo.UseShellExecute = False
|
||
p.StartInfo.RedirectStandardError = True
|
||
p.StartInfo.Arguments = args
|
||
p.StartInfo.FileName = p4Filename
|
||
p.StartInfo.CreateNoWindow = True
|
||
p.StartInfo.WorkingDirectory = ""
|
||
p.Start()
|
||
Dim outputStr = p.StandardError.ReadToEnd()
|
||
p.WaitForExit()
|
||
If p.ExitCode <> 0 Then
|
||
MsgBox(outputStr)
|
||
Return False
|
||
Else
|
||
Return True
|
||
End If
|
||
End Function
|
||
|
||
Sub OutputDebugStr(ByVal str As String)
|
||
Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
|
||
|
||
' Create handles to the Output window and its panes.
|
||
Dim OW As OutputWindow = win.Object
|
||
|
||
Dim OWp As OutputWindowPane
|
||
|
||
' Add a new pane to the Output window.
|
||
Try
|
||
OWp = OW.OutputWindowPanes.Item("Build")
|
||
Catch e As System.Exception
|
||
OWp = OW.OutputWindowPanes.Add("Build")
|
||
End Try
|
||
|
||
' Add a line of text to the new pane.
|
||
OWp.OutputString(str + System.Environment.NewLine)
|
||
End Sub
|
||
|
||
Sub EditCurrentFile()
|
||
If EZRunCommand("p4.exe", "edit " + Chr(34) + ActiveDocument.FullName + Chr(34), ActiveDocument.FullName) Then
|
||
OutputDebugStr(ActiveDocument.FullName + " edited successfully.")
|
||
End If
|
||
End Sub
|
||
|
||
Sub AddCurrentFile()
|
||
If EZRunCommand("p4.exe", "add " + Chr(34) + ActiveDocument.FullName + Chr(34), ActiveDocument.FullName) Then
|
||
OutputDebugStr(ActiveDocument.FullName + " added successfully.")
|
||
End If
|
||
End Sub
|
||
|
||
Sub RevertCurrentFile()
|
||
If EZRunCommand("p4.exe", "revert " + Chr(34) + ActiveDocument.FullName + Chr(34), ActiveDocument.FullName) Then
|
||
OutputDebugStr(ActiveDocument.FullName + " reverted successfully.")
|
||
End If
|
||
End Sub
|
||
|
||
End Module
|