gtkhotkey-0.2.1-patched.tgz
[gitlive] / Merger.js
index 6979df4..ed605d4 100644 (file)
--- a/Merger.js
+++ b/Merger.js
@@ -50,12 +50,24 @@ Merger=new XObject({
     //   this.el.set_title("Merger - " + this.repo.repopath);
     
     
-    
+         Merger.loading = true; // stop change firing on combos.
          /// load up branches
+         
+         this.get('/historyTreeStore').el.clear();
+         this.get('/changedFilesStore').el.clear();
+         this.get('/patchview').clear();
+        
+         
+         
          this.get('/workingCombo').load(Merger.repo.branches);
          
          this.get('/releaseCombo').load(Merger.repo.branches);
     
+    
+    
+    
+         Merger.loading = false;
+    
         this.el.show_all();
         //this.get('/ok_button').el.set_sensitive(false);
         
@@ -81,6 +93,10 @@ Merger=new XObject({
                     xtype: Gtk.HBox,
                     pack : "pack_start,false,true",
                     items : [
+                        {
+                            xtype: Gtk.Label,
+                            label : "Working Branch"
+                        },
                         {
                             xtype: Gtk.ComboBox,
                             listeners : {
@@ -109,6 +125,9 @@ Merger=new XObject({
                                 var working = false;
                                 
                                 for(var i =0 ; i < tr.length; i++) {
+                                    if (!tr[i].name.length) {
+                                        continue;
+                                    }
                                     var ret = {  };
                                     this.model.el.append(ret);
                                     //print(JSON.stringify(ret,null,4));
@@ -176,6 +195,10 @@ Merger=new XObject({
                                 
                                 for(var i =0 ; i < tr.length; i++) {
                                     var ret = {  };
+                                    if (!tr[i].name.length) {
+                                        continue;
+                                    }
+                                    
                                     this.model.el.append(ret);
                                     //print(JSON.stringify(ret,null,4));
                                     if (tr[i].name == 'master') {
@@ -183,7 +206,8 @@ Merger=new XObject({
                                     }
                                     if (tr[i].name == 'release') {
                                         release = i;
-                                    }          
+                                    }
+                                     
                                     this.model.el.set_value(ret.iter, 0, '' + tr[i].name );
                                     this.model.el.set_value(ret.iter, 1, '' + tr[i].rev  );
                              
@@ -321,12 +345,16 @@ Merger=new XObject({
                                                     },
                                                     loadTree : function() {
                                                     
-                                                           this.working = false;
+                                                       this.working = false;
+                                                       if (Merger.loading) {
+                                                            return;
+                                                       }
+                                                       
                                                        
                                                        var wid = this.get('/workingCombo').el.get_active();
                                                        var rid = this.get('/releaseCombo').el.get_active();
                                                        if (wid < 0 || rid < 0 || rid == wid) {
-                                                        return;
+                                                            return;
                                                        }
                                                        
                                                        var w = Merger.repo.branches[wid];
@@ -336,8 +364,26 @@ Merger=new XObject({
                                                     
                                                         var rev = r.name + '..' + w.name;
                                                         this.release = r.name;
+                                                        this.working = w.name;
+                                                        
+                                                        // this takes some time, lets. try and dialog it..
+                                                    
+                                                        
+                                                        
+                                                        
+                                                        var msg = new Gtk.MessageDialog( {
+                                                            buttons : Gtk.ButtonsType.NONE,
+                                                            text: "Loading History"
+                                                            
+                                                        });
+                                                        
+                                                        msg.set_transient_for(Merger.el);
+                                                        msg.set_modal(true);
+                                                        msg.show_all();
                                                     
                                                         var hist = Merger.repo.dayTree('/', false, 'rev', rev);
+                                                        msg.hide();
+                                                        
                                                         this.load(hist);
                                                             
                                                            
@@ -346,6 +392,7 @@ Merger=new XObject({
                                                 {
                                                     xtype: Gtk.TreeViewColumn,
                                                     pack : "append_column",
+                                                    title : "Changes",
                                                     init : function() {
                                                         XObject.prototype.init.call(this);
                                                         this.el.add_attribute(this.items[0].el , 'markup', 0 );
@@ -374,20 +421,7 @@ Merger=new XObject({
                                             listeners : {
                                                 cursor_changed : function (self) {
                                                   // SEE SELECTION.CHANGED
-                                                    if (this.el.get_selection().count_selected_rows() < 1) {
-                                                        //nothing? - clea it?
-                                                        return;
-                                                    }
-                                                        var ret = {};         
-                                                    var model = this.get('/changedFilesStore');
-                                                
-                                                     var s = this.el.get_selection();
-                                                     var files = [];
-                                                    s.selected_foreach(function(model,p,iter) {
-                                                    
-                                                       files.push( model.get_value(iter, 0).value.get_string());
-                                                     
-                                                    });
+                                                    var files = this.files();
                                                     this.get('/patchview').showDiff(files); 
                                                     //var value = ''+ ret.model.get_value(ret.iter, 1).value.get_string();
                                                      //print("OUT?" + value);// id..
@@ -399,6 +433,24 @@ Merger=new XObject({
                                             },
                                             id : "changedFilesView",
                                             pack : "add",
+                                            files : function() {
+                                                 if (this.el.get_selection().count_selected_rows() < 1) {
+                                                    //nothing? - clea it?
+                                                    return [];
+                                                }
+                                            
+                                                var ret = {};         
+                                             
+                                            
+                                                 var s = this.el.get_selection();
+                                                 var files = [];
+                                                  s.selected_foreach(function(model,p,iter) {
+                                                
+                                                   files.push( model.get_value(iter, 0).value.get_string());
+                                                 
+                                                });
+                                                return files;
+                                            },
                                             init : function() {
                                                 XObject.prototype.init.call(this);
                                                     var description = new Pango.FontDescription.c_new();
@@ -524,11 +576,146 @@ Merger=new XObject({
                                     items : [
                                         {
                                             xtype: Gtk.Button,
+                                            listeners : {
+                                                clicked : function (self) {
+                                                    
+                                                     
+                                                     var model = this.get('/historyTreeStore');
+                                                    
+                                                    if (model.release === false) {
+                                                        return;
+                                                    }
+                                                    
+                                                 
+                                                    var files = this.get('/changedFilesView').files();
+                                                    
+                                                     if (!files.length) {
+                                                        return; // error.!
+                                                    }
+                                                    var diff = Merger.repo.diff(files, model.release, model.rev);
+                                                   
+                                                   
+                                                   print("history?");
+                                                   
+                                                    
+                                                    var history =  Merger.repo.history(files, 1, 'rev', model.rev);
+                                                    
+                                                    print("History" + JSON.stringify(history, null,4));
+                                                    
+                                                    Commit = imports.Commit.Commit;
+                                                
+                                                    Commit.el.set_modal(true);
+                                                    Commit.el.set_transient_for(Merger.el);
+                                                
+                                                    var ce = Commit.show({
+                                                        repo : Merger.repo,
+                                                        files : files,
+                                                        release : model.release,
+                                                        rev : model.rev,
+                                                        author : history[0].changeby,
+                                                        changed : history[0].changed_raw
+                                                        
+                                                    
+                                                    });
+                                                    if (ce === false ) {
+                                                        return;
+                                                    }
+                                                    
+                                                    
+                                                    var diff = Merger.repo.diff(files, model.release, model.rev);
+                                                    
+                                                    
+                                                    print(JSON.stringify(ce,null,4));
+                                                    //.... commit!!!
+                                                    
+                                                    imports.GitMonitor.GitMonitor.pause();
+                                                    
+                                                    
+                                                    
+                                                    var msg = new Gtk.MessageDialog( {
+                                                        buttons : Gtk.ButtonsType.NONE,
+                                                        text: "Committing Changes"
+                                                    });
+                                                    
+                                                    msg.set_transient_for(Merger.el);
+                                                    msg.set_modal(true);
+                                                    msg.show_all();
+                                                
+                                                     
+                                                    
+                                                    try { 
+                                                        
+                                                        Merger.repo.checkout(model.release);
+                                                        
+                                                        print("Call apply patch");
+                                                        
+                                                        Merger.repo.applyPatch(diff);
+                                                        
+                                                        var author = Merger.repo.parseAuthor(ce.author);
+                                                        
+                                                        print("Add new files.");
+                                                        // add all the files..
+                                                        Merger.repo.add(files);
+                                                        
+                                                        print("Commit changes.");
+                                                        Merger.repo.commit({
+                                                            name    : author.name,
+                                                            email   : author.email,
+                                                            author  : ce.author,
+                                                            changed : ce.changed,
+                                                            reason  : ce.message,
+                                                            files : files
+                                                            
+                                                        });
+                                                        
+                                                      
+                                                    } catch (e) {
+                                                     //message..
+                                                        msg.hide();
+                                                         
+                                                        var emsg = new Gtk.MessageDialog({
+                                                                message_type: Gtk.MessageType.ERROR, 
+                                                                buttons : Gtk.ButtonsType.OK, 
+                                                                text: e.message
+                                                        });
+                                                        emsg.set_transient_for(Merger.el);
+                                                        emsg.set_modal(true);
+                                                        emsg.run();
+                                                        emsg.destroy();
+                                                        Merger.repo.stash(); // revert change.. - so we can go back...
+                                                    }
+                                                    msg.show_all();
+                                                    msg.set_markup("Changing to previous branch");
+                                                    Merger.repo.checkout(model.working);
+                                                    
+                                                    
+                                                    // if gitlive was previously running warn the user that it is now paused..
+                                                    /*
+                                                    var cmsg = new Gtk.MessageDialog({
+                                                            message_type: Gtk.MessageType.ERROR, 
+                                                            buttons : Gtk.ButtonsType.OK, 
+                                                            text: "Git Live is now paused "
+                                                    });
+                                                    cmsg.run();
+                                                    cmsg.destroy();
+                                                    */
+                                                    var _t = this;
+                                                    GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, function() {
+                                                         imports.GitMonitor.GitMonitor.resume();
+                                                         msg.hide();
+                                                         msg.destroy();
+                                                          _t.get('/historyTreeStore').loadTree();
+                                                          _t.get('/changedFilesStore').el.clear();
+                                                          _t.get('/patchview').showDiff(files); 
+                                                         return false; //only once.
+                                                    });
+                                                     
+                                                    
+                                                
+                                                
+                                                }
+                                            },
                                             label : "Commit diff (no merge)"
-                                        },
-                                        {
-                                            xtype: Gtk.Button,
-                                            label : "Commit diff (merge after)"
                                         }
                                     ]
                                 },
@@ -544,10 +731,25 @@ Merger=new XObject({
                                             xtype: WebKit.WebView,
                                             id : "patchview",
                                             pack : "add",
-                                            showDiff : function(files) {
+                                            clear : function() {
+                                                
+                                                
+                                                
+                                                 
+                                               // remove..
+                                                var s  = "document.body.textContent='';"
+                                                    
+                                                this.el.execute_script(s);
+                                                    
+                                                    
                                                 
                                                 
                                                 
+                                            },
+                                            showDiff : function(files) {
+                                                this.clear();
+                                                
+                                                
                                                  var model = this.get('/historyTreeStore');
                                                 
                                                 if (model.release === false) {
@@ -557,7 +759,7 @@ Merger=new XObject({
                                                 var diff = Merger.repo.diff(files, model.release, model.rev);
                                                 
                                                // remove..
-                                                var s  = "document.body.textContent='';var pre  = document.createElement('pre'); document.body.appendChild(pre);";
+                                                var s  = "var pre  = document.createElement('pre'); document.body.appendChild(pre);";
                                                 s += "pre.textContent =  " +
                                                          JSON.stringify(Merger.repo.lastCmd + "\n") + '+  ' + 
                                                        JSON.stringify(diff) + ";";
@@ -579,15 +781,10 @@ Merger=new XObject({
                 }
             ]
         },
-        {
-            xtype: Gtk.Button,
-            label : "Cancel",
-            pack : "add_action_widget,0"
-        },
         {
             xtype: Gtk.Button,
             id : "ok_button",
-            label : "OK",
+            label : "Close",
             pack : "add_action_widget,1"
         }
     ]