public static void Push (GitRepository repo) { var dlg = new PushDialog (repo); try { if (MessageService.RunCustomDialog (dlg) != (int) Gtk.ResponseType.Ok) return; string remote = dlg.SelectedRemote; string branch = dlg.SelectedRemoteBranch ?? repo.GetCurrentBranch (); ProgressMonitor monitor = VersionControlService.GetProgressMonitor (GettextCatalog.GetString ("Pushing changes..."), VersionControlOperationType.Push); ThreadPool.QueueUserWorkItem (delegate { try { repo.Push (monitor, remote, branch); } catch (Exception ex) { monitor.ReportError (ex.Message, ex); } finally { monitor.Dispose (); } }); } finally { dlg.Destroy (); dlg.Dispose (); } }
public GitConfigurationDialog (GitRepository repo) { this.Build (); this.repo = repo; this.HasSeparator = false; // Branches list storeBranches = new ListStore (typeof(Branch), typeof(string), typeof(string), typeof(string)); listBranches.Model = storeBranches; listBranches.HeadersVisible = true; listBranches.AppendColumn (GettextCatalog.GetString ("Branch"), new CellRendererText (), "markup", 1); listBranches.AppendColumn (GettextCatalog.GetString ("Tracking"), new CellRendererText (), "text", 2); listBranches.Selection.Changed += delegate { TreeIter it; if (!listBranches.Selection.GetSelected (out it)) return; string currentBranch = repo.GetCurrentBranch (); var b = (Branch) storeBranches.GetValue (it, 0); buttonRemoveBranch.Sensitive = b.Name != currentBranch; }; // Sources tree storeRemotes = new TreeStore (typeof(RemoteSource), typeof(string), typeof(string), typeof(string), typeof(string)); treeRemotes.Model = storeRemotes; treeRemotes.HeadersVisible = true; treeRemotes.AppendColumn ("Remote Source / Branch", new CellRendererText (), "markup", 1); treeRemotes.AppendColumn ("Url", new CellRendererText (), "text", 2); // Tags list storeTags = new ListStore (typeof(string)); listTags.Model = storeTags; listTags.HeadersVisible = true; listTags.AppendColumn (GettextCatalog.GetString ("Tag"), new CellRendererText (), "text", 0); // Fill data FillBranches (); FillRemotes (); FillTags (); }
async Task AddXwtFromGithubAsync (Solution solution, string newProjectName, bool createSubmodule, ProgressMonitor monitor) { try { var gitUrl = "https://github.com/" + (string.IsNullOrEmpty (Parameters ["XwtGithubRepository"]) ? Parameters ["XwtGithubRepository"] : "mono/xwt") + ".git"; var gitBranch = Parameters ["XwtGithubBranch"]; if (gitBranch == String.Empty) gitBranch = "master"; var gitRepo = VersionControlService.GetRepository (solution) as GitRepository; var xwt_proj = solution.FindProjectByName ("Xwt") as DotNetProject; if (xwt_proj != null && xwt_proj.ItemId.ToUpper () != "{92494904-35FA-4DC9-BDE9-3A3E87AC49D3}") { xwt_proj = null; foreach (var item in solution.GetAllProjectsWithFlavor<DotNetProjectExtension>()) { if (item.ItemId.ToUpper () == "{92494904-35FA-4DC9-BDE9-3A3E87AC49D3}") { xwt_proj = item as DotNetProject; break; } } } var xwt_path = xwt_proj == null ? solution.BaseDirectory.Combine ("Xwt") : xwt_proj.BaseDirectory.ParentDirectory; monitor.BeginTask ("Configuring Xwt References...", 3); if (xwt_proj == null && !Directory.Exists (xwt_path)) { monitor.BeginTask ("Cloning Xwt into " + xwt_path + "...", 1); if (createSubmodule && gitRepo != null) { monitor.BeginTask ("Initializing Xwt submodule in " + xwt_path + "...", 1); var repo = new FileRepository (gitRepo.RootPath.Combine (".git")); var git = new Git (repo); try { using (var gm = new GitMonitor (monitor)) { var add_submodule = git.SubmoduleAdd (); add_submodule.SetPath ("Xwt"); add_submodule.SetURI (gitUrl); add_submodule.SetProgressMonitor (gm); add_submodule.Call (); var submodule = new GitRepository (VersionControlService.GetVersionControlSystems ().First (id => id.Name == "Git"), gitRepo.RootPath.Combine ("Xwt"), gitUrl); var submoduleRemote = submodule.GetCurrentRemote (); submodule.Fetch (monitor, submoduleRemote); if (submodule.GetCurrentBranch () != gitBranch) { submodule.CreateBranch (gitBranch, submoduleRemote + "/" + gitBranch, "refs/remotes/" + submoduleRemote + "/" + gitBranch); submodule.SwitchToBranch (monitor, gitBranch); } } } catch { Directory.Delete (xwt_path, true); throw; } monitor.EndTask (); } else { var repo = new GitRepository (); repo.Url = gitUrl; repo.Checkout (xwt_path, true, monitor); var remote = repo.GetCurrentRemote (); repo.Fetch (monitor, remote); if (repo.GetCurrentBranch () != gitBranch) { repo.CreateBranch (gitBranch, remote + "/" + gitBranch, "refs/remotes/" + remote + "/" + gitBranch); repo.SwitchToBranch (monitor, gitBranch); } } monitor.EndTask (); } SolutionFolder xwt_folder; if (xwt_proj != null) xwt_folder = xwt_proj.ParentFolder; else { xwt_folder = new SolutionFolder (); xwt_folder.Name = "Xwt"; } solution.RootFolder.Items.Add (xwt_folder); monitor.Step (1); monitor.BeginTask ("Adding Xwt Projects to Solution...", 7); if (xwt_proj == null && File.Exists (xwt_path.Combine ("Xwt", "Xwt.csproj"))) { xwt_proj = await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt", "Xwt.csproj") ) as DotNetProject; } if (xwt_proj == null) throw new InvalidOperationException ("Xwt project not found"); monitor.Step (1); var xwt_gtk_proj = solution.FindProjectByName ("Xwt.Gtk") ?? await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt.Gtk", "Xwt.Gtk.csproj") ) as DotNetProject; monitor.Step (1); var xwt_gtk_win_proj = solution.FindProjectByName ("Xwt.Gtk.Windows") ?? await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt.Gtk.Windows", "Xwt.Gtk.Windows.csproj") ) as DotNetProject; monitor.Step (1); var xwt_gtk_mac_proj = solution.FindProjectByName ("Xwt.Gtk.Mac") ?? await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt.Gtk.Mac", "Xwt.Gtk.Mac.csproj") ) as DotNetProject; monitor.Step (1); var xwt_gtk3_proj = solution.FindProjectByName ("Xwt.Gtk3") ?? await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt.Gtk", "Xwt.Gtk3.csproj") ) as DotNetProject; monitor.Step (1); var xwt_wpf_proj = solution.FindProjectByName ("Xwt.WPF") ?? await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt.WPF", "Xwt.WPF.csproj") ) as DotNetProject; monitor.Step (1); var xwt_mac_proj = solution.FindProjectByName ("Xwt.Mac") ?? await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt.Mac", "Xwt.Mac.csproj") ) as DotNetProject; monitor.Step (1); var xwt_xammac_proj = solution.FindProjectByName ("Xwt.XamMac") ?? await IdeApp.ProjectOperations.AddSolutionItem ( xwt_folder, xwt_path.Combine ("Xwt.XamMac", "Xwt.XamMac.csproj") ) as DotNetProject; monitor.EndTask (); monitor.Step (1); monitor.BeginTask ("Adding Xwt References...", solution.Items.Count); foreach (var item in solution.Items) { var project = item as DotNetProject; if (project != null) { if (project.Name == newProjectName || project.Name.StartsWith (newProjectName + ".", StringComparison.Ordinal)) project.References.Add (ProjectReference.CreateProjectReference (xwt_proj)); if (project.Name == newProjectName + ".Desktop") { if (Platform.IsWindows) { project.References.Add (ProjectReference.CreateProjectReference (xwt_wpf_proj)); project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_proj)); project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_win_proj)); } else if (Platform.IsLinux) { project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_proj)); project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk3_proj)); } else if (Platform.IsMac) { project.References.Add (ProjectReference.CreateProjectReference (xwt_xammac_proj)); project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_proj)); project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_mac_proj)); } } if (project.Name == newProjectName + ".Gtk2") { project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_proj)); if (Platform.IsWindows) { project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_win_proj)); } else if (Platform.IsMac) { project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk_mac_proj)); } } if (project.Name == newProjectName + ".Wpf") { project.References.Add (ProjectReference.CreateProjectReference (xwt_wpf_proj)); } if (project.Name == newProjectName + ".Gtk3") { project.References.Add (ProjectReference.CreateProjectReference (xwt_gtk3_proj)); } if (project.Name == newProjectName + ".Mac") { project.References.Add (ProjectReference.CreateProjectReference (xwt_mac_proj)); } if (project.Name == newProjectName + ".XamMac") { project.References.Add (ProjectReference.CreateProjectReference (xwt_xammac_proj)); } } monitor.Step (1); } monitor.EndTask (); monitor.EndTask (); monitor.ReportSuccess ("Xwt Repository initialized successfully"); await IdeApp.Workspace.SaveAsync (monitor); } catch (Exception e) { string msg = GettextCatalog.GetString ("Adding Xwt reference failed: "); monitor.ReportError (msg, e); MessageService.ShowError (msg, e); } finally { monitor.Dispose (); } }
public GitConfigurationDialog (GitRepository repo) { this.Build (); this.repo = repo; this.HasSeparator = false; this.UseNativeContextMenus (); // Branches list storeBranches = new ListStore (typeof(Branch), typeof(string), typeof(string), typeof(string)); listBranches.Model = storeBranches; listBranches.HeadersVisible = true; SemanticModelAttribute modelAttr = new SemanticModelAttribute ("storeBranches__Branch", "storeBranches__DisplayName", "storeBranches__Tracking", "storeBranches__Name"); TypeDescriptor.AddAttributes (storeBranches, modelAttr); listBranches.AppendColumn (GettextCatalog.GetString ("Branch"), new CellRendererText (), "markup", 1); listBranches.AppendColumn (GettextCatalog.GetString ("Tracking"), new CellRendererText (), "text", 2); listBranches.Selection.Changed += delegate { TreeIter it; bool anythingSelected = buttonRemoveBranch.Sensitive = buttonEditBranch.Sensitive = buttonSetDefaultBranch.Sensitive = listBranches.Selection.GetSelected (out it); if (!anythingSelected) return; string currentBranch = repo.GetCurrentBranch (); var b = (Branch) storeBranches.GetValue (it, 0); buttonRemoveBranch.Sensitive = b.FriendlyName != currentBranch; }; buttonRemoveBranch.Sensitive = buttonEditBranch.Sensitive = buttonSetDefaultBranch.Sensitive = false; // Sources tree storeRemotes = new TreeStore (typeof(Remote), typeof(string), typeof(string), typeof(string), typeof(string)); treeRemotes.Model = storeRemotes; treeRemotes.HeadersVisible = true; SemanticModelAttribute remotesModelAttr = new SemanticModelAttribute ("storeRemotes__Remote", "storeRemotes__Name", "storeRemotes__Url", "storeRemotes__BranchName", "storeRemotes__FullName"); TypeDescriptor.AddAttributes (storeRemotes, remotesModelAttr); treeRemotes.AppendColumn ("Remote Source / Branch", new CellRendererText (), "markup", 1); treeRemotes.AppendColumn ("Url", new CellRendererText (), "text", 2); treeRemotes.Selection.Changed += delegate { TreeIter it; bool anythingSelected = treeRemotes.Selection.GetSelected (out it); buttonTrackRemote.Sensitive = false; buttonFetch.Sensitive = buttonEditRemote.Sensitive = buttonRemoveRemote.Sensitive = anythingSelected; if (!anythingSelected) return; string branchName = (string) storeRemotes.GetValue (it, 3); if (branchName != null) buttonTrackRemote.Sensitive = true; }; buttonTrackRemote.Sensitive = buttonFetch.Sensitive = buttonEditRemote.Sensitive = buttonRemoveRemote.Sensitive = false; // Tags list storeTags = new ListStore (typeof(string)); listTags.Model = storeTags; listTags.HeadersVisible = true; listTags.AppendColumn (GettextCatalog.GetString ("Tag"), new CellRendererText (), "text", 0); listTags.Selection.Changed += delegate { TreeIter it; buttonRemoveTag.Sensitive = buttonPushTag.Sensitive = listTags.Selection.GetSelected (out it); }; buttonRemoveTag.Sensitive = buttonPushTag.Sensitive = false; // Fill data FillBranches (); FillRemotes (); FillTags (); }