WindowLog.js
[gitlive] / Merger.js
index 876a243..ed605d4 100644 (file)
--- a/Merger.js
+++ b/Merger.js
@@ -364,6 +364,7 @@ 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..
                                                     
@@ -439,7 +440,7 @@ Merger=new XObject({
                                                 }
                                             
                                                 var ret = {};         
-                                                var model = this.get('/changedFilesStore');
+                                             
                                             
                                                  var s = this.el.get_selection();
                                                  var files = [];
@@ -585,33 +586,131 @@ Merger=new XObject({
                                                         return;
                                                     }
                                                     
-                                                
-                                                    
-                                                    var diff = Merger.repo.diff(files, model.release, model.rev);
-                                                    
+                                                 
                                                     var files = this.get('/changedFilesView').files();
                                                     
-                                                    if (!file.length) {
+                                                     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);
                                                     
-                                                    var log =  Merger.repo.history(files, 1, 'rev', model.rev + '..' + model.release);
-                                                    
-                                                    print(JSON.stringify(log));
+                                                    print("History" + JSON.stringify(history, null,4));
                                                     
                                                     Commit = imports.Commit.Commit;
-                                                    Commit.repo = Merger.repo;
+                                                
                                                     Commit.el.set_modal(true);
                                                     Commit.el.set_transient_for(Merger.el);
                                                 
-                                                    Commit.show({
+                                                    var ce = Commit.show({
+                                                        repo : Merger.repo,
                                                         files : files,
                                                         release : model.release,
-                                                        rev : model.rev
+                                                        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.
+                                                    });
+                                                     
+                                                    
                                                 
                                                 
                                                 }