Fix #5633 - preview diffs before merge
authorAlan Knowles <alan@roojs.com>
Fri, 28 Dec 2018 07:25:52 +0000 (15:25 +0800)
committerAlan Knowles <alan@roojs.com>
Fri, 28 Dec 2018 07:25:52 +0000 (15:25 +0800)
GitRepo.vala
RepoStatusPopover.bjs
RepoStatusPopover.vala

index 6954437..08b3824 100644 (file)
@@ -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";            
+               }
+        
+     
+     }
     
     
     
index 08c53b5..13510bf 100644 (file)
@@ -35,8 +35,8 @@
        "items" : [
         {
          "Gtk.ToolbarStyle toolbar_style" : "Gtk.ToolbarStyle.BOTH_HORIZ",
-         "xtype" : "Toolbar",
          "* pack" : "add",
+         "xtype" : "Toolbar",
          "$ xns" : "Gtk",
          "items" : [
           {
        "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"
         },
          "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"
        "items" : [
         {
          "Gtk.ToolbarStyle toolbar_style" : "Gtk.ToolbarStyle.BOTH_HORIZ",
-         "* pack" : "add",
          "xtype" : "Toolbar",
+         "* pack" : "add",
          "$ xns" : "Gtk",
          "items" : [
           {
index d48f618..e5db19f 100644 (file)
@@ -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