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}\"");
        }
Exemplo n.º 9
0
        private void OpenFile(string fileName)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                return;
            }

            fileName = fileName.Replace("/", "\\");
            var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>();

            dte.ExecuteCommand("File.OpenFile", fileName);
        }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
 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();
        }
Exemplo n.º 14
0
        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);
            });
        }
Exemplo n.º 15
0
        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();
        }
Exemplo n.º 16
0
        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);
            });
        }
Exemplo n.º 20
0
        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();
        }
Exemplo n.º 23
0
        //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>();
 }
Exemplo n.º 27
0
 public override void OnToolWindowCreated()
 {
     sccProviderService = BasicSccProvider.GetServiceEx <SccProviderService>();
     Refresh(sccProviderService.CurrentTracker); // refresh when the tool window becomes visible
 }
Exemplo n.º 28
0
        internal bool hasFileSaved()
        {
            var dte = BasicSccProvider.GetServiceEx <EnvDTE.DTE>();

            return(dte.ItemOperations.PromptToSave != EnvDTE.vsPromptResult.vsPromptResultCancelled);
        }
Exemplo n.º 29
0
 private GlobalCommandHook(BasicSccProvider provider)
 {
     _provider = provider;
 }
 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;
 }