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); }
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); }
string GetAppPath(string appName, DiffToolMode toolMode) { AnkhDiffTool tool = GetAppItem(appName, toolMode); if (tool != null) { return(tool.Program); } return(null); }
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); }
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; }
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; }
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()); }
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; }
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(); }
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; }