private void OpenFile(string fileName) { if (string.IsNullOrWhiteSpace(fileName)) { return; } fileName = fileName.Replace("/", "\\"); var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); bool opened = false; Array projects = (Array)dte.ActiveSolutionProjects; foreach (dynamic project in projects) { foreach (dynamic item in project.ProjectItems) { if (string.Compare(item.FileNames[0], fileName, true) == 0) { dynamic wnd = item.Open(EnvDTE.Constants.vsViewKindPrimary); wnd.Activate(); opened = true; break; } } if (opened) { break; } } if (!opened) { dte.ItemOperations.OpenFile(fileName); } }
protected override void Initialize() { base.Initialize(); control = new PendingChangesView(this); // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable, // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on // the object returned by the Content property. base.Content = control; OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; var cmd = new CommandID(GuidList.guidSccProviderCmdSet, CommandId.icmdPendingChangesCommit); var menu = new MenuCommand(new EventHandler(OnCommitCommand), cmd); mcs.AddCommand(menu); cmd = new CommandID(GuidList.guidSccProviderCmdSet, CommandId.icmdPendingChangesAmend); menu = new MenuCommand(new EventHandler(OnAmendCommitCommand), cmd); mcs.AddCommand(menu); cmd = new CommandID(GuidList.guidSccProviderCmdSet, CommandId.icmdPendingChangesRefresh); menu = new MenuCommand(new EventHandler(OnRefreshCommand), cmd); mcs.AddCommand(menu); sccProviderService = BasicSccProvider.GetServiceEx <SccProviderService>(); }
private void menuCompare_Click(object sender, RoutedEventArgs e) { GetSelectedFileFullName(fileName => { var service = BasicSccProvider.GetServiceEx <SccProviderService>(); service.CompareFile(fileName); }); }
private void menuUndo_Click(object sender, RoutedEventArgs e) { GetSelectedFileFullName(fileName => { var service = BasicSccProvider.GetServiceEx <SccProviderService>(); service.UndoFileChanges(fileName); }, false); }
public SccProviderSolutionCache(BasicSccProvider provider) { _sccProvider = provider; _projects = new List<IVsSccProject2>(); _fileProjectLookup = new ConcurrentDictionary<string, List<IVsSccProject2>>(); _fileStatus = new ConcurrentDictionary<string, GitFileStatus>(); _lastNewFileScan = DateTime.MinValue; }
public PendingChangesView(ToolWindowWithEditor <PendingChangesView> toolWindow) { InitializeComponent(); this._toolWindow = toolWindow; this.service = BasicSccProvider.GetServiceEx <SccProviderService>(); SetDiffCodeHightlighter(); VSColorTheme.ThemeChanged += VSColorTheme_ThemeChanged; CurrentTracker = RepositoryManager.Instance.ActiveTracker; RepositoryManager.Instance.ActiveTrackerChanged += Instance_ActiveTrackerChanged; }
public static GlobalCommandHook GetInstance(BasicSccProvider provider) { if (provider == null) throw new ArgumentNullException("provider"); if (_instance == null) _instance = new GlobalCommandHook(provider); return _instance; }
private void OpenFile(string fileName) { if (string.IsNullOrWhiteSpace(fileName)) { return; } var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); dte.ExecuteCommand("File.OpenFile", $"\"{fileName}\""); }
private void OpenFile(string fileName) { if (string.IsNullOrWhiteSpace(fileName)) { return; } fileName = fileName.Replace("/", "\\"); var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); dte.ExecuteCommand("File.OpenFile", fileName); }
public PendingChangesView(ToolWindowWithEditor <PendingChangesView> toolWindow) { InitializeComponent(); this._toolWindow = toolWindow; this.service = BasicSccProvider.GetServiceEx <SccProviderService>(); SetDiffCodeHightlighter(); VSColorTheme.ThemeChanged += VSColorTheme_ThemeChanged; CurrentTracker = RepositoryManager.Instance.ActiveTracker; RepositoryManager.Instance.ActiveTrackerChanged += Instance_ActiveTrackerChanged; //Fix for bug #78 : Commit comment text field shouldn't allow formatting DataObject.AddPastingHandler(textBoxComments, new DataObjectPastingEventHandler(TextBoxPasting)); }
internal void EditIgnore() { if (this.CurrentTracker != null && this.CurrentTracker.HasGitRepository) { var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); var fn = Path.Combine(this.CurrentTracker.GitWorkingDirectory, ".gitignore"); if (!File.Exists(fn)) { File.WriteAllText(fn, "# git ignore file"); } dte.ItemOperations.OpenFile(fn); } }
//private List<GitFileStatusTracker> trackers; #region SccProvider Service initialization/unitialization public SccProviderService(BasicSccProvider sccProvider) { this._sccProvider = sccProvider; _fileCache = new SccProviderSolutionCache(_sccProvider); _fileChangesetManager = new Dictionary <GitRepository, GitChangesetManager>(); RepositoryManager.Instance.FilesChanged += RepositoryManager_FilesChanged; RepositoryManager.Instance.FileStatusUpdate += RepositoryManager_FileStatusUpdate; RepositoryManager.Instance.SolutionTrackerBranchChanged += RepositoryManager_SolutionTrackerBranchChanged; //this.trackers = trackers; SetupSolutionEvents(); SetupDocumentEvents(); }
//private List<GitFileStatusTracker> trackers; #region SccProvider Service initialization/unitialization public SccProviderService(BasicSccProvider sccProvider) { this._sccProvider = sccProvider; _fileCache = new SccProviderSolutionCache(_sccProvider); _fileChangesetManager = new Dictionary<GitRepository, GitChangesetManager>(); RepositoryManager.Instance.FilesChanged += RepositoryManager_FilesChanged; RepositoryManager.Instance.FileStatusUpdate += RepositoryManager_FileStatusUpdate; RepositoryManager.Instance.SolutionTrackerBranchChanged += RepositoryManager_SolutionTrackerBranchChanged; //this.trackers = trackers; SetupSolutionEvents(); SetupDocumentEvents(); }
private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e) { GetSelectedFileFullName((fileName) => { fileName = System.IO.Path.Combine(this.tracker.GitWorkingDirectory, fileName); if (!File.Exists(fileName)) { return; } var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); dte.ItemOperations.OpenFile(fileName); }); }
private async Task HandleDiffOpenFile() { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); int start = 1, column = 1; try { if (!string.IsNullOrWhiteSpace(DiffEditor.Text)) { var doc = DiffEditor.Document; var line = DiffEditor.TextArea.Caret.Line - 1; column = DiffEditor.TextArea.Caret.Column; while (line >= 0) { var text = doc.GetText(doc.Lines[line].Offset, doc.Lines[line].Length); var match = Regex.Match(text, "^@@(.+)@@"); if (match.Success) { var s = match.Groups[1].Value; s = s.Substring(s.IndexOf('+') + 1); s = s.Substring(0, s.IndexOf(',')); start += Convert.ToInt32(s) - 2; break; } else if (text.StartsWith("-")) { start--; } start++; line--; } } } catch (Exception ex) { ShowStatusMessage(ex.Message); Log.WriteLine("Pending Changes View - DiffEditor_MouseDoubleClick: {0}", ex.ToString()); } GetSelectedFileFullName((fileName) => { OpenFile(fileName); var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); var selection = dte.ActiveDocument.Selection as EnvDTE.TextSelection; selection.MoveToLineAndOffset(start, column); }); //Fix bug #80 DiffEditor.Focus(); }
public static GlobalCommandHook GetInstance(BasicSccProvider provider) { if (provider == null) { throw new ArgumentNullException("provider"); } if (_instance == null) { _instance = new GlobalCommandHook(provider); } return(_instance); }
internal async Task AmendCommit() { const string amendMsg = @"You are about to amend a commit that has tags or remotes, which could cause issues in local and remote repositories. Are you sure you want to continue?"; if (string.IsNullOrWhiteSpace(Comments)) { Comments = CurrentTracker.LastCommitMessage; return; } else { if (CurrentTracker.CurrentCommitHasRefs() && MessageBox.Show(amendMsg, "Amend Last Commit", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) { return; } var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); if (dte.ItemOperations.PromptToSave == EnvDTE.vsPromptResult.vsPromptResultCancelled) { return; } StageSelectedFiles(); try { ShowStatusMessage("Amending last Commit ..."); var commitResult = await GitCommandWrappers.AmendCommit(CurrentTracker, Comments, chkSignOff.IsChecked == true); if (commitResult.Succeeded) { ClearUI(); ShowStatusMessage("Amend last commit successfully. Commit Hash: " + commitResult.Item); } else { MessageBox.Show(commitResult.ErrorMessage, "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); ShowStatusMessage(ex.Message); } } }
public SccProviderService(BasicSccProvider sccProvider, List<GitFileStatusTracker> trackers) { this._sccProvider = sccProvider; this.trackers = trackers; // Subscribe to solution events IVsSolution sol = (IVsSolution)sccProvider.GetService(typeof(SVsSolution)); sol.AdviseSolutionEvents(this, out _vsSolutionEventsCookie); var sbm = sccProvider.GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager2; if (sbm != null) { sbm.AdviseUpdateSolutionEvents(this, out _vsIVsUpdateSolutionEventsCookie); } }
private void DiffEditor_MouseDoubleClick(object sender, MouseButtonEventArgs e) { int start = 1, column = 1; try { if (this.textView != null && diffLines != null && diffLines.Length > 0) { int line; textView.GetCaretPos(out line, out column); string text = diffLines[line]; while (line >= 0) { var match = Regex.Match(text, "^@@(.+)@@"); if (match.Success) { var s = match.Groups[1].Value; s = s.Substring(s.IndexOf('+') + 1); s = s.Substring(0, s.IndexOf(',')); start += Convert.ToInt32(s) - 2; break; } else if (text.StartsWith("-")) { start--; } start++; --line; text = line >= 0 ? diffLines[line] : ""; } } } catch (Exception ex) { ShowStatusMessage(ex.Message); Log.WriteLine("Pending Changes View - DiffEditor_MouseDoubleClick: {0}", ex.ToString()); } GetSelectedFileFullName((fileName) => { OpenFile(fileName); var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); var selection = dte.ActiveDocument.Selection as EnvDTE.TextSelection; selection.MoveToLineAndOffset(start, column); }); }
public SccProviderService(BasicSccProvider sccProvider, List <GitFileStatusTracker> trackers) { this._sccProvider = sccProvider; this.trackers = trackers; // Subscribe to solution events IVsSolution sol = (IVsSolution)sccProvider.GetService(typeof(SVsSolution)); sol.AdviseSolutionEvents(this, out _vsSolutionEventsCookie); var sbm = sccProvider.GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager2; if (sbm != null) { sbm.AdviseUpdateSolutionEvents(this, out _vsIVsUpdateSolutionEventsCookie); } }
internal void AmendCommit() { const string amendMsg = @"You are about to amend a commit that has tags or remotes, which could cause issues in local and remote repositories. Are you sure you want to continue?"; if (string.IsNullOrWhiteSpace(Comments)) { Comments = tracker.LastCommitMessage; return; } else { if (tracker.CurrentCommitHasRefs() && MessageBox.Show(amendMsg, "Amend Last Commit", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) { return; } var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); if (dte.ItemOperations.PromptToSave == EnvDTE.vsPromptResult.vsPromptResultCancelled) { return; } using (service.DisableRefresh()) { StageSelectedFiles(false); try { ShowStatusMessage("Amending last Commit ..."); var id = tracker.Commit(Comments, true, chkSignOff.IsChecked == true); ShowStatusMessage("Amend last commit successfully. Commit Hash: " + id); ClearUI(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); ShowStatusMessage(ex.Message); } } service.MarkDirty(false); } }
//private List<GitFileStatusTracker> trackers; #region SccProvider Service initialization/unitialization public SccProviderService(BasicSccProvider sccProvider) { this._sccProvider = sccProvider; _fileCache = new SccProviderSolutionCache(_sccProvider); _fileChangesetManager = new ConcurrentDictionary<GitRepository, GitChangesetManager>(); RepositoryManager.Instance.FilesChanged += RepositoryManager_FilesChanged; RepositoryManager.Instance.FileStatusUpdate += RepositoryManager_FileStatusUpdate; RepositoryManager.Instance.SolutionTrackerBranchChanged += RepositoryManager_SolutionTrackerBranchChanged; //var mcs = sccProvider.GetService(typeof(IMenuCommandService)) as Microsoft.VisualStudio.Shell.OleMenuCommandService; _statusBarManager = new StandardGitStatusBarManager( GuidList.guidSccProviderCmdSet, PackageIds.cmdidBranchmenuStart, PackageIds.cmdidBranchMenuCommandStart, PackageIds.cmdidRepositorymenuStart, sccProvider, this); //this.trackers = trackers; SetupSolutionEvents(); SetupDocumentEvents(); }
//private List<GitFileStatusTracker> trackers; #region SccProvider Service initialization/unitialization public SccProviderService(BasicSccProvider sccProvider) { this._sccProvider = sccProvider; _fileCache = new SccProviderSolutionCache(_sccProvider); _fileChangesetManager = new ConcurrentDictionary <GitRepository, GitChangesetManager>(); RepositoryManager.Instance.FilesChanged += RepositoryManager_FilesChanged; RepositoryManager.Instance.FileStatusUpdate += RepositoryManager_FileStatusUpdate; RepositoryManager.Instance.SolutionTrackerBranchChanged += RepositoryManager_SolutionTrackerBranchChanged; //var mcs = sccProvider.GetService(typeof(IMenuCommandService)) as Microsoft.VisualStudio.Shell.OleMenuCommandService; _statusBarManager = new StandardGitStatusBarManager( GuidList.guidSccProviderCmdSet, PackageIds.cmdidBranchmenuStart, PackageIds.cmdidBranchMenuCommandStart, PackageIds.cmdidRepositorymenuStart, sccProvider, this); //this.trackers = trackers; SetupSolutionEvents(); SetupDocumentEvents(); }
private void OnGitTorCommandExec(object sender, EventArgs e) { var menuCommand = sender as MenuCommand; if (null != menuCommand) { int idx = menuCommand.CommandID.ID - CommandId.icmdGitTorCommand1; Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Run GitTor Command {0}", GitToolCommands.GitTorCommands[idx].Command)); var cmd = GitToolCommands.GitTorCommands[idx]; var targetPath = GetTargetPath(cmd); //#90 + 91 - Autosave if (GitSccOptions.Current.SaveOnCommit) { var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); dte.Documents.SaveAll(); } var tortoiseGitPath = GitSccOptions.Current.TortoiseGitPath; RunDetatched(tortoiseGitPath, cmd.Command + " /path:\"" + targetPath + "\""); } }
public SccProviderService(BasicSccProvider sccProvider) { this._sccProvider = sccProvider; }
public PendingChangesView(ToolWindowWithEditor <PendingChangesView> toolWindow) { InitializeComponent(); this.toolWindow = toolWindow; this.service = BasicSccProvider.GetServiceEx <SccProviderService>(); }
public override void OnToolWindowCreated() { sccProviderService = BasicSccProvider.GetServiceEx <SccProviderService>(); Refresh(sccProviderService.CurrentTracker); // refresh when the tool window becomes visible }
internal bool hasFileSaved() { var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); return(dte.ItemOperations.PromptToSave != EnvDTE.vsPromptResult.vsPromptResultCancelled); }
private GlobalCommandHook(BasicSccProvider provider) { _provider = provider; }
private void ShowStatusMessage(string msg) { var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>(); dte.StatusBar.Text = msg; }
public PendingChangesView() { InitializeComponent(); this.service = BasicSccProvider.GetServiceEx <SccProviderService>(); currentInstance = this; }