Exemple #1
0
        AnkhDiffTool GetAppItem(string appName, DiffToolMode toolMode)
        {
            IList <AnkhDiffTool> tools;

            switch (toolMode)
            {
            case DiffToolMode.Diff:
                tools = DiffToolTemplates;
                break;

            case DiffToolMode.Merge:
                tools = MergeToolTemplates;
                break;

            case DiffToolMode.Patch:
                tools = PatchToolTemplates;
                break;

            default:
                return(null);
            }

            foreach (AnkhDiffTool tool in tools)
            {
                if (string.Equals(tool.Name, appName, StringComparison.OrdinalIgnoreCase))
                {
                    return(tool);
                }
            }

            return(null);
        }
Exemple #2
0
        string GetAppTemplate(string appName, DiffToolMode toolMode)
        {
            AnkhDiffTool tool = GetAppItem(appName, toolMode);

            if (tool != null)
            {
                return(string.Format("\"{0}\" {1}", tool.Program, tool.Arguments));
            }

            return(null);
        }
Exemple #3
0
        string GetAppPath(string appName, DiffToolMode toolMode)
        {
            AnkhDiffTool tool = GetAppItem(appName, toolMode);

            if (tool != null)
            {
                return(tool.Program);
            }

            return(null);
        }
Exemple #4
0
        private bool Substitute(string reference, AnkhDiffToolArgs args, DiffToolMode toolMode, out string program, out string arguments)
        {
            if (string.IsNullOrEmpty(reference))
            {
                throw new ArgumentNullException("reference");
            }
            else if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            // Ok: We received a string with a program and arguments and windows
            // wants a program and arguments separated. Let's find the program before substituting

            reference = reference.TrimStart();

            program   = null;
            arguments = null;

            string app;

            if (!string.IsNullOrEmpty(app = AnkhDiffTool.GetToolNameFromTemplate(reference)))
            {
                // We have a predefined template. Just use it
                AnkhDiffTool tool = GetAppItem(app, toolMode);

                if (tool == null)
                {
                    return(false);
                }
                else if (!tool.IsAvailable)
                {
                    return(false);
                }

                program   = SubstituteArguments(tool.Program, args, toolMode);
                arguments = SubstituteArguments(tool.Arguments, args, toolMode);

                return(!String.IsNullOrEmpty(program) && File.Exists(program));
            }
            else if (!SvnTools.TrySplitCommandLine(reference, SubstituteEmpty, out program, out arguments))
            {
                return(false);
            }

            program   = SubstituteArguments(program, args, toolMode);
            arguments = SubstituteArguments(arguments, args, toolMode);

            return(true);
        }
Exemple #5
0
            public Replacer(AnkhDiff context, AnkhDiffToolArgs args, DiffToolMode toolMode)
                : base(context)
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }
                else if (args == null)
                {
                    throw new ArgumentNullException("args");
                }

                _diff      = context;
                _toolArgs  = args;
                _diffArgs  = args as AnkhDiffArgs;
                _mergeArgs = args as AnkhMergeArgs;
                _patchArgs = args as AnkhPatchArgs;
                _toolMode  = toolMode;
            }
Exemple #6
0
        private void LoadRegistryTools(DiffToolMode diffToolMode, List <AnkhDiffTool> tools)
        {
            using (RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\\AnkhSVN\\AnkhSVN\\CurrentVersion\\Tools\\" + diffToolMode.ToString(), false))
            {
                if (rk == null)
                {
                    return;
                }

                foreach (string name in rk.GetSubKeyNames())
                {
                    using (RegistryKey sk = rk.OpenSubKey(name, false))
                    {
                        string title     = sk.GetValue("") as string ?? name;
                        string program   = sk.GetValue("Program") as string;
                        string arguments = sk.GetValue("Arguments") as string;

                        if (!string.IsNullOrEmpty(title) && !string.IsNullOrEmpty(program) && !string.IsNullOrEmpty(arguments))
                        {
                            bool found = false;
                            foreach (AnkhDiffTool dt in tools)
                            {
                                if (dt.Name == name)
                                {
                                    found = true;
                                    break;
                                }
                            }

                            if (!found)
                            {
                                tools.Add(new DiffTool(Context, name, title, program, arguments));
                            }
                        }
                    }
                }
            }
        }
        private void LoadRegistryTools(DiffToolMode diffToolMode, List<VisualGitDiffTool> tools)
        {
            using (RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\\VisualGit\\CurrentVersion\\Tools\\" + diffToolMode.ToString(), false))
            {
                if (rk == null)
                    return;

                foreach (string name in rk.GetSubKeyNames())
                {
                    using(RegistryKey sk = rk.OpenSubKey(name, false))
                    {
                        string title = sk.GetValue("") as string ?? name;
                        string program = sk.GetValue("Program") as string;
                        string arguments = sk.GetValue("Arguments") as string;

                        if (!string.IsNullOrEmpty(title) && !string.IsNullOrEmpty(program) && !string.IsNullOrEmpty(arguments))
                        {
                            bool found = false;
                            foreach (VisualGitDiffTool dt in tools)
                            {
                                if (dt.Name == name)
                                {
                                    found = true;
                                    break;
                                }
                            }

                            if (!found)
                                tools.Add(new DiffTool(Context, name, title, program, arguments));
                        }
                    }
                }
            }
        }
        string GetAppTemplate(string appName, DiffToolMode toolMode)
        {
            VisualGitDiffTool tool = GetAppItem(appName, toolMode);

            if (tool != null)
                return string.Format("\"{0}\" {1}", tool.Program, tool.Arguments);

            return null;
        }
        string GetAppPath(string appName, DiffToolMode toolMode)
        {
            VisualGitDiffTool tool = GetAppItem(appName, toolMode);

            if (tool != null)
                return tool.Program;

            return null;
        }
        VisualGitDiffTool GetAppItem(string appName, DiffToolMode toolMode)
        {
            IList<VisualGitDiffTool> tools;

            switch (toolMode)
            {
                case DiffToolMode.Diff:
                    tools = DiffToolTemplates;
                    break;
                case DiffToolMode.Merge:
                    tools = MergeToolTemplates;
                    break;
                case DiffToolMode.Patch:
                    tools = PatchToolTemplates;
                    break;
                default:
                    return null;
            }

            foreach (VisualGitDiffTool tool in tools)
            {
                if (string.Equals(tool.Name, appName, StringComparison.OrdinalIgnoreCase))
                    return tool;
            }

            return null;
        }
Exemple #11
0
        private string SubstituteArguments(string arguments, AnkhDiffToolArgs diffArgs, DiffToolMode toolMode)
        {
            if (diffArgs == null)
            {
                throw new ArgumentNullException("diffArgs");
            }

            if (_re == null)
            {
                const string ifBody   = "\\?(?<tick>['\"])(?<ifbody>([^'\"]|('')|(\"\"))*)\\k<tick>";
                const string elseBody = "(:(?<tick2>['\"])(?<elsebody>([^'\"]|('')|(\"\"))*)\\k<tick2>)?";
                const string isBody   = "=(?<tick3>['\"])(?<isbody>([^'\"]|('')|(\"\"))*)\\k<tick3>";

                _re = new Regex(@"(\%(?<pc>[a-zA-Z0-9_]+)(\%|\b))" +
                                "|(\\$\\((?<vs>[a-zA-Z0-9_-]+)(\\((?<arg>[a-zA-Z0-9_-]*)\\))?\\))" +
                                "|(\\$\\((?<if>[a-zA-Z0-9_-]+)" + ifBody + elseBody + "\\))" +
                                "|(\\$\\((?<is>[a-zA-Z0-9_-]+)" + isBody + "\\))");
            }

            return(_re.Replace(arguments, new Replacer(this, diffArgs, toolMode).Replace).TrimEnd());
        }
Exemple #12
0
            public Replacer(VisualGitDiff context, VisualGitDiffToolArgs args, DiffToolMode toolMode)
            {
                if (context == null)
                    throw new ArgumentNullException("context");
                else if (args == null)
                    throw new ArgumentNullException("args");

                _context = context;
                _toolArgs = args;
                _diffArgs = args as VisualGitDiffArgs;
                _mergeArgs = args as VisualGitMergeArgs;
                _patchArgs = args as VisualGitPatchArgs;
                _toolMode = toolMode;
            }
Exemple #13
0
        private string SubstituteArguments(string arguments, VisualGitDiffToolArgs diffArgs, DiffToolMode toolMode)
        {
            if (diffArgs == null)
                throw new ArgumentNullException("diffArgs");

            if (_re == null)
            {
                const string ifBody = "\\?(?<tick>['\"])(?<ifbody>([^'\"]|('')|(\"\"))*)\\k<tick>";
                const string elseBody = "(:(?<tick2>['\"])(?<elsebody>([^'\"]|('')|(\"\"))*)\\k<tick2>)?";

                _re = new Regex(@"(\%(?<pc>[a-zA-Z0-9_]+)(\%|\b))|(\$\((?<vs>[a-zA-Z0-9_-]*)(\((?<arg>[a-zA-Z0-9_-]*)\))?\))" +
                "|(\\$\\((?<if>[a-zA-Z0-9_-]+)" + ifBody + elseBody + "\\))");
            }

            return _re.Replace(arguments, new Replacer(this, diffArgs, toolMode).Replace).TrimEnd();
        }
Exemple #14
0
        private bool Substitute(string reference, VisualGitDiffToolArgs args, DiffToolMode toolMode, out string program, out string arguments)
        {
            if (string.IsNullOrEmpty(reference))
                throw new ArgumentNullException("reference");
            else if (args == null)
                throw new ArgumentNullException("args");

            // Ok: We received a string with a program and arguments and windows
            // wants a program and arguments separated. Let's find the program before substituting

            reference = reference.TrimStart();

            program = null;
            arguments = null;

            string app;
            if (!string.IsNullOrEmpty(app = VisualGitDiffTool.GetToolNameFromTemplate(reference)))
            {
                // We have a predefined template. Just use it
                VisualGitDiffTool tool = GetAppItem(app, toolMode);

                if (tool == null)
                    return false;
                else if (!tool.IsAvailable)
                    return false;

                program = SubstituteArguments(tool.Program, args, toolMode);
                arguments = SubstituteArguments(tool.Arguments, args, toolMode);

                return !String.IsNullOrEmpty(program) && File.Exists(program);
            }
            else if (!TrySplitPath(reference, out program, out arguments))
                return false;

            program = SubstituteArguments(program, args, toolMode);
            arguments = SubstituteArguments(arguments, args, toolMode);

            return true;
        }