From 9a912327ca18c90347e106e936de1383555ae0b9 Mon Sep 17 00:00:00 2001 From: Alan Knowles Date: Fri, 28 Dec 2018 15:25:52 +0800 Subject: [PATCH] Fix #5633 - preview diffs before merge --- GitRepo.vala | 77 ++++++++++++++++++++++++++++++++++++------ RepoStatusPopover.bjs | 12 +++---- RepoStatusPopover.vala | 5 +++ 3 files changed, 78 insertions(+), 16 deletions(-) diff --git a/GitRepo.vala b/GitRepo.vala index 6954437c..08b38243 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -303,7 +303,16 @@ public class GitRepo : Object } - + public bool hasBranchCalled(string name) + { + foreach( var br in this.branches.values) { + if (br.name == name) { + return true; + } + + } + return false; + } public string branchesToString() { @@ -347,12 +356,14 @@ public class GitRepo : Object { // in theory we should check to see if other repo's have got the same branch and merge all them at the same time. // also need to decide which branch we will merge into? + var master = this.hasBranchCalled("roojs") ? "roojs" : "master"; + var ret = ""; if (action == "CLOSE" || action == "LEAVE") { try { var oldbranch = this.currentBranch.name; - this.setActiveTicket(null, "master"); + this.setActiveTicket(null, master); string [] cmd = { "merge", "--squash", oldbranch }; this.git( cmd ); cmd = { "commit", "-a" , "-m", commit_message }; @@ -361,7 +372,7 @@ public class GitRepo : Object this.loadBranches(); // updates lastrev.. var notification = new Notify.Notification( - "Merged branch %s to master".printf(oldbranch), + "Merged branch %s to %s".printf(oldbranch, master), "", "dialog-information" @@ -384,10 +395,10 @@ public class GitRepo : Object if (action == "MASTER") { // merge master into ours.. try { - string[] cmd = { "merge", "master" }; + string[] cmd = { "merge", master}; this.git( cmd ); var notification = new Notify.Notification( - "Merged code from master to %s".printf(this.currentBranch.name), + "Merged code from %s to %s".printf(master,this.currentBranch.name), "", "dialog-information" @@ -404,7 +415,7 @@ public class GitRepo : Object if (action == "EXIT") { try { var oldbranch = this.currentBranch.name; - this.setActiveTicket(null, "master"); + this.setActiveTicket(null, master); this.loadBranches(); var notification = new Notify.Notification( "Left branch %s".printf(oldbranch), @@ -481,8 +492,9 @@ public class GitRepo : Object } bool switchToExistingBranchNamed(string branchname) { + var master = this.hasBranchCalled("roojs") ? "roojs" : "master"; var stash = false; - // this is where it get's tricky... + // this is where it get's tricky... string files = ""; try { string[] cmd = { "ls-files" , "-m" }; // list the modified files.. @@ -502,15 +514,15 @@ public class GitRepo : Object return false; } try { - if (branchname != "master") { - string[] cmd = { "merge", "master" }; + if (branchname != master) { + string[] cmd = { "merge", master }; this.git(cmd); this.push(); } } catch(Error e) { - string[] cmd = { "checkout", "master" }; + string[] cmd = { "checkout", master }; this.git(cmd); GitMonitor.gitmonitor.pauseError( "Use\n\na) git checkout %s\nb) git mergetool\nc) git commit\nd) git push\n d) stash pop \ne) start gitlive again\n".printf( @@ -579,6 +591,51 @@ public class GitRepo : Object return true; } + + public static string previewMerges(string ticket_id) + { + var ret = ""; + foreach(var repo in GitRepo.singleton().cache.values) { + if (repo.activeTicket == null || repo.activeTicket.id != ticket_id) { + continue; + } + ret += repo.previewMerge() + "\n\n"; + + } + return ret; + + } + + + + public string previewMerge() + { + try { + var master = this.hasBranchCalled("roojs") ? "roojs" : "master"; + var lines = this.git({"log", master + "...", "--pretty=format:%H %P" }).split("\n");; + var head = this.git({"log", "-1", "--pretty=format:%H %P" }); + var start = head.split(" ")[0]; + var end = ""; + for (var i = 0; i < lines.length; i++) { + var cols = lines[i].split(" "); + if (cols.length > 2) { + end = cols[0]; + break; + } + } + if (end == "") { + var last = lines[lines.length-1]; + end = last.split(" ")[1]; + } + + return this.git({ "diff" , (end+".."+start), "--no-color" }); + } catch(Error ee) { + GitMonitor.gitmonitor.pauseError(ee.message); + return "Error getting diff"; + } + + + } diff --git a/RepoStatusPopover.bjs b/RepoStatusPopover.bjs index 08c53b54..13510bf9 100644 --- a/RepoStatusPopover.bjs +++ b/RepoStatusPopover.bjs @@ -35,8 +35,8 @@ "items" : [ { "Gtk.ToolbarStyle toolbar_style" : "Gtk.ToolbarStyle.BOTH_HORIZ", - "xtype" : "Toolbar", "* pack" : "add", + "xtype" : "Toolbar", "$ xns" : "Gtk", "items" : [ { @@ -99,15 +99,15 @@ "items" : [ { "id" : "label_status", - "* pack" : false, "xtype" : "Label", + "* pack" : false, "$ xns" : "Gtk", "utf8 label" : "Status" }, { "id" : "label_diff", - "xtype" : "Label", "* pack" : false, + "xtype" : "Label", "$ xns" : "Gtk", "utf8 label" : "Diff" }, @@ -143,13 +143,13 @@ "items" : [ { "int height_request" : 400, - "* pack" : "pack_start,true,true,0", "xtype" : "ScrolledWindow", + "* pack" : "pack_start,true,true,0", "$ xns" : "Gtk", "items" : [ { "id" : "diff_view", - "* init" : " \n var description = Pango.FontDescription.from_string(\"monospace\");\n description.set_size(9000);\n this.el.override_font(description);", + "* init" : " \n var description = Pango.FontDescription.from_string(\"monospace\");\n description.set_size(9000);\n this.el.override_font(description);\n var lm = Gtk.SourceLanguageManager.get_default();\n \n ((Gtk.SourceBuffer)(this.el.get_buffer())).set_language(\n lm.get_language(\"diff\")\n );\n ", "xtype" : "View", "* pack" : "add", "$ xns" : "GtkSource" @@ -171,8 +171,8 @@ "items" : [ { "Gtk.ToolbarStyle toolbar_style" : "Gtk.ToolbarStyle.BOTH_HORIZ", - "* pack" : "add", "xtype" : "Toolbar", + "* pack" : "add", "$ xns" : "Gtk", "items" : [ { diff --git a/RepoStatusPopover.vala b/RepoStatusPopover.vala index d48f6185..e5db19f1 100644 --- a/RepoStatusPopover.vala +++ b/RepoStatusPopover.vala @@ -573,6 +573,11 @@ public class RepoStatusPopover : Object var description = Pango.FontDescription.from_string("monospace"); description.set_size(9000); this.el.override_font(description); + var lm = Gtk.SourceLanguageManager.get_default(); + + ((Gtk.SourceBuffer)(this.el.get_buffer())).set_language( + lm.get_language("diff") + ); } // user defined functions -- 2.39.2