Fix #5615 - gitlive - force all roojs projects to autobranch
authorAlan Knowles <alan@roojs.com>
Wed, 19 Dec 2018 04:49:40 +0000 (12:49 +0800)
committerAlan Knowles <alan@roojs.com>
Wed, 19 Dec 2018 04:49:40 +0000 (12:49 +0800)
Clones.bjs
Clones.vala
GitMonitor.vala
GitRepo.vala
Spawn.vala
StatusIcon.vala

index a2107e4..78d1cb2 100644 (file)
@@ -14,7 +14,7 @@
    },
    "boolean deletable" : true,
    "default_width" : 1024,
-   "| void show" : "()    {\n\n    \n    this.el.set_deletable(true);\n    this.el.set_gravity(Gdk.Gravity.NORTH);\n    this.el.move((Gdk.Screen.width() / 2 ) -400 ,0);\n    \n    this.el.set_default_size(\n\t\t\tint.min(1024,Gdk.Screen.width()),\n\t\t\tint.max(500,Gdk.Screen.height() - 300)\n\t);\n     \n    this.el.show_all();\n    _this.reposStore.load();\n    this.el.set_keep_above(true);\n    this.el.run();\n    // load clones..\n//     this.get('/reposStore').load();\n    \n    //this.get('/ok_button').el.set_sensitive(false);\n    \n    // block until we return.\n//    var run_ret = this.el.run();\n//    if (run_ret < 1 ) {\n//        return  \"DONE\";\n//    }\n//    print(\"RUN RETURN : \" + run_ret);\n//    return \"DONE\";\n    //print(JSON.stringify(this.get('bug').getValue()));\n   // return this.get('bug').getValue();\n    //this.success = c.success;\n}\n",
+   "| void show" : "()    {\n\n    GLib.debug(\"show clones?\");\n    this.el.set_deletable(true);\n    this.el.set_gravity(Gdk.Gravity.NORTH);\n    this.el.move((Gdk.Screen.width() / 2 ) -400 ,0);\n    \n    this.el.set_default_size(\n\t\t\tint.min(1024,Gdk.Screen.width()),\n\t\t\tint.max(500,Gdk.Screen.height() - 300)\n\t);\n     \n    this.el.show_all();\n    _this.reposStore.load();\n    this.el.set_keep_above(true);\n        GLib.debug(\"show clones = run?\");\n    this.el.run();\n    // load clones..\n//     this.get('/reposStore').load();\n    \n    //this.get('/ok_button').el.set_sensitive(false);\n    \n    // block until we return.\n//    var run_ret = this.el.run();\n//    if (run_ret < 1 ) {\n//        return  \"DONE\";\n//    }\n//    print(\"RUN RETURN : \" + run_ret);\n//    return \"DONE\";\n    //print(JSON.stringify(this.get('bug').getValue()));\n   // return this.get('bug').getValue();\n    //this.success = c.success;\n}\n",
    "title" : "Manage Clones",
    "xtype" : "Dialog",
    "default_height" : 500,
@@ -30,8 +30,8 @@
      "items" : [
       {
        "bool homogeneous" : true,
-       "xtype" : "Box",
        "* pack" : "pack_start,false,false,0",
+       "xtype" : "Box",
        "$ xns" : "Gtk",
        "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
        "items" : [
@@ -49,8 +49,8 @@
       },
       {
        "* init" : "  {\n  \n   this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);\n}\n",
-       "bool expand" : true,
        "bool hexpand" : true,
+       "bool expand" : true,
        "xtype" : "ScrolledWindow",
        "* pack" : "pack_end,true,true,0",
        "Gtk.ShadowType shadow_type" : "Gtk.ShadowType.IN",
@@ -62,8 +62,8 @@
           "cursor_changed" : "()  => {\n  // SEE SELECTION.CHANGED\n  /*\n  \n  return;\n  \n    if (this.el.get_selection().count_selected_rows() < 1) {\n        //nothing? - clea it?\n        return;\n    }\n        var ret = {};         \n    var model = this.get('/changedFilesStore');\n\n     var s = this.el.get_selection();\n     var files = [];\n    s.selected_foreach(function(model,p,iter) {\n    \n       files.push( model.get_value(iter, 0).value.get_string());\n     \n    });\n    this.get('/patchview').showDiff(files); \n    //var value = ''+ ret.model.get_value(ret.iter, 1).value.get_string();\n     //print(\"OUT?\" + value);// id..\n    // load the list in the right grid..\n     \n    return true;\n*/\n}"
          },
          "id" : "reposView",
-         "* init" : " \n{\n    var selection = this.el.get_selection();\n    selection.set_mode( Gtk.SelectionMode.SINGLE);\n\n\n    var description = new Pango.FontDescription();\n    description.set_size(10000);\n    this.el.override_font(description);\n \n}\n",
          "bool activate_on_single_click" : true,
+         "* init" : " \n{\n    var selection = this.el.get_selection();\n    selection.set_mode( Gtk.SelectionMode.SINGLE);\n\n\n    var description = new Pango.FontDescription();\n    description.set_size(10000);\n    this.el.override_font(description);\n \n}\n",
          "xtype" : "TreeView",
          "* pack" : "add",
          "int search_column" : 0,
@@ -94,8 +94,8 @@
               "toggled" : "  (self, path)  => {\n  \n  \tGtk.TreeIter iter;\n  \t_this.reposStore.el.get_iter_from_string(out iter, path);\n  \t\n  \tGLib.Value val;\n  \tGLib.Value rval;\n  \t_this.reposStore.el.get_value(iter, 4, out val);\n  \t_this.reposStore.el.get_value(iter, 6, out rval);\n  \t\n  \tvar repopath = (string)rval;\n  \tvar bval = (bool)val;\n  \t_this.reposStore.el.set_value(iter, 4, !bval);\n  \tGLib.debug(\"got repopath? %s\", repopath);\n  \t\n  \tvar repo = GitRepo.get(repopath);\n  \trepo.set_autocommit(!bval);\n  \t\n  \t\n  \t\n  \n}"
              },
              "id" : "cr_autocommit",
-             "xtype" : "CellRendererToggle",
              "* pack" : "pack_start,false",
+             "xtype" : "CellRendererToggle",
              "$ xns" : "Gtk",
              "$ mode" : "Gtk.CellRendererMode.ACTIVATABLE"
             }
               "toggled" : "  (self, path)  => {\n  \n  \tGtk.TreeIter iter;\n  \t_this.reposStore.el.get_iter_from_string(out iter, path);\n  \t\n  \tGLib.Value val;\n  \tGLib.Value rval;\n  \t_this.reposStore.el.get_value(iter, 5, out val);\n  \t_this.reposStore.el.get_value(iter, 6, out rval);\n  \t\n  \tvar repopath = (string)rval;\n  \tvar bval = (bool)val;\n  \t_this.reposStore.el.set_value(iter, 5, !bval);\n  \tvar repo = GitRepo.get(repopath);\n  \trepo.set_autopush(!bval);\n  \t\n  \t\n  \t\n  \n}"
              },
              "id" : "cr_autopush",
-             "xtype" : "CellRendererToggle",
              "* pack" : "pack_start,false",
+             "xtype" : "CellRendererToggle",
              "$ xns" : "Gtk",
              "$ mode" : "Gtk.CellRendererMode.ACTIVATABLE"
             }
               "toggled" : "  (self, path)  => {\n  \n  \tGtk.TreeIter iter;\n  \t_this.reposStore.el.get_iter_from_string(out iter, path);\n  \t\n  \tGLib.Value val;\n  \tGLib.Value rval;\n  \t_this.reposStore.el.get_value(iter, 8, out val);\n  \t_this.reposStore.el.get_value(iter, 6, out rval);\n  \t\n  \tvar repopath = (string)rval;\n  \tvar bval = (bool)val;\n  \t_this.reposStore.el.set_value(iter, 8, !bval);\n  \tvar repo = GitRepo.get(repopath);\n  \trepo.set_auto_branch(!bval);\n  \t\n  \t\n  \t\n  \n}"
              },
              "id" : "cr_autobranch",
-             "* pack" : "pack_start,false",
              "xtype" : "CellRendererToggle",
+             "* pack" : "pack_start,false",
              "$ xns" : "Gtk",
              "$ mode" : "Gtk.CellRendererMode.ACTIVATABLE"
             }
           },
           {
            "id" : "tv_repo",
-           "Gtk.SortType sort_order" : "Gtk.SortType.ASCENDING",
            "* init" : "\n    this.el.add_attribute(_this.cr_repo.el , \"markup\", 0 );\n",
+           "Gtk.SortType sort_order" : "Gtk.SortType.ASCENDING",
            "title" : "Repo",
            "* pack" : "append_column",
            "xtype" : "TreeViewColumn",
            "items" : [
             {
              "id" : "cr_repo",
-             "xtype" : "CellRendererText",
              "* pack" : "pack_start,false",
+             "xtype" : "CellRendererText",
              "$ xns" : "Gtk"
             }
            ]
            "items" : [
             {
              "id" : "cr_active_ticket",
-             "* pack" : "pack_start,false",
              "xtype" : "CellRendererText",
+             "* pack" : "pack_start,false",
              "$ xns" : "Gtk"
             }
            ]
            "items" : [
             {
              "id" : "cr_current_branch",
-             "xtype" : "CellRendererText",
              "* pack" : "pack_start,false",
+             "xtype" : "CellRendererText",
              "$ xns" : "Gtk"
             }
            ]
            "items" : [
             {
              "id" : "cr_last_updated",
-             "xtype" : "CellRendererText",
              "* pack" : "pack_start,false",
+             "xtype" : "CellRendererText",
              "$ xns" : "Gtk"
             }
            ]
            "items" : [
             {
              "id" : "cr_all_branches",
-             "xtype" : "CellRendererText",
              "* pack" : "pack_start,false",
+             "xtype" : "CellRendererText",
              "$ xns" : "Gtk"
             }
            ]
index 8b0da79..65976e9 100644 (file)
@@ -68,7 +68,7 @@ public class Clones : Object
     // user defined functions
     public void show ()    {
     
-        
+        GLib.debug("show clones?");
         this.el.set_deletable(true);
         this.el.set_gravity(Gdk.Gravity.NORTH);
         this.el.move((Gdk.Screen.width() / 2 ) -400 ,0);
@@ -81,6 +81,7 @@ public class Clones : Object
         this.el.show_all();
         _this.reposStore.load();
         this.el.set_keep_above(true);
+            GLib.debug("show clones = run?");
         this.el.run();
         // load clones..
     //     this.get('/reposStore').load();
index 7e42154..1b11558 100644 (file)
@@ -56,7 +56,9 @@ public class GitMonitor : Monitor
                        }
                        var first = this.queue.get(0);
                        var delay = true;
-                       if (!first.repo.is_wip_branch() && first.repo.is_auto_branch()) {
+                       
+                       // eg. on master.... and is_auto branch
+                       if (first.repo.is_master_branch() && first.repo.is_auto_branch()) {
                                delay = false;
                        }
                        
@@ -256,7 +258,7 @@ public class GitMonitor : Monitor
                }
                
                foreach(var q in this.queue) {
-                       if (!q.shouldIgnore() && !q.repo.is_wip_branch() && q.repo.is_auto_branch()) {
+                       if (!q.shouldIgnore() && q.repo.is_master_branch() && q.repo.is_auto_branch()) {
                                var oldq = this.queue;
                                this.queue =  new Gee.ArrayList<GitMonitorQueue>(); 
                                NewBranch.singleton().show(q.repo, oldq);
@@ -305,7 +307,7 @@ public class GitMonitor : Monitor
                        var gitpath = cmd.gitpath; 
                        
                        var repo = GitRepo.get( gitpath );
-                       if ( !repo.is_wip_branch() && repo.is_auto_branch()) {
+                       if ( repo.is_master_branch() && repo.is_auto_branch()) {
                                leave_queued.add(cmd);
                                continue;
                        }
index 91feb4c..6954437 100644 (file)
@@ -19,6 +19,7 @@ public class GitRepo : Object
     public string git_working_dir;
     public bool debug = false;
     public bool has_local_changes = false;
+    public string host = "";
     public string git_status;    
     public string git_diff;        
     public string ahead_or_behind = "";
@@ -28,6 +29,7 @@ public class GitRepo : Object
     public Gee.HashMap<string,GitBranch> branches; // accessed in GitBranch..
        public RooTicket? activeTicket;
     public  Gee.HashMap<string,GitRepo> cache;
+    public  Gee.HashMap<string,string> config_cache;
     
     
     
@@ -154,7 +156,8 @@ public class GitRepo : Object
      *
      */
      
-    private GitRepo(string path) {
+    private GitRepo(string path) 
+    {
         // cal parent?
         this.name =   File.new_for_path(path).get_basename();
         this.ignore_files = new Gee.HashMap<string,bool>();
@@ -171,93 +174,110 @@ public class GitRepo : Object
                if ( !cache.has_key(path) ) {
                        cache.set( path, this);
        }
+       
+       var r = this.git({ "remote" , "get-url" , "--push" , "origin"});
+       var uri = new Soup.URI(r);      
+       this.host = uri.get_host();
+               this.init_config();
+       
        this.loadBranches();
        this.loadActiveTicket();
        this.loadStatus();
     } 
     
-    public bool is_wip_branch()
+    public bool is_master_branch()
     {
-       return this.currentBranch.name.has_prefix("wip_");
+       // special branches that do not allow autopushing now...
+       return this.currentBranch.name == "master" || this.currentBranch.name == "roojs";
                
     }
-    
-    public bool is_managed()
+    public void init_config()
     {
-       // is it a roojs origin?
-       var r = this.git({ "remote" , "get-url" , "--push" , "origin"});
-       var uri = new Soup.URI(r);
-       if (uri.get_host() != "git.roojs.com") { // we can only push to this url. -- unless we have forced it to be managed.
-               return FileUtils.test(this.gitdir + "/.gitlive-managed" , FileTest.EXISTS);
+       this.config_cache = new Gee.HashMap<string,string>();
+       // managed = 
+       if (this.get_config("managed") == "") {
+               this.set_config("managed", this.host == "git.roojs.com" ? "1" : "0");
+               }
+       if (this.get_config("autocommit") == "") {
+               this.set_config("autocommit", this.host == "git.roojs.com" ? "1" : "0");
+               }
+       if (this.get_config("autopush") == "") {
+               this.set_config("autopush", this.host == "git.roojs.com" ? "1" : "0");
+               }
+               
+    }
+    
+    
+    
+    public string get_config(string key) {
+    
+       if (this.config_cache.has_key(key)) {
+               //GLib.debug("get_config %s = '%s'", key, this.config_cache.get(key));
+               return this.config_cache.get(key);
+               }
+       try {
+               var ret =   this.git({ "config" , "gitlive." + key }).strip();
+               this.config_cache.set(key, ret);
+               //GLib.debug("get_config %s = '%s'", key, ret);
+               return ret;
+       } catch (Error e) {
+               this.config_cache.set(key, "");
+               //GLib.debug("get_config (fail) %s = '%s'", key, "");
+               return ""; // happens when there is nothing set...
        }
-       // otherwise see if unmanaged is set to disable it..
-       return !FileUtils.test(this.gitdir + "/.gitlive-unmanaged" , FileTest.EXISTS);  
 
+       }
+    public void set_config(string key, string value) {
+       this.git({ "config" , "gitlive." + key, value });
+       this.config_cache.set(key,value);
+       }
+    
+    public bool is_managed()
+    {
+       return this.get_config("managed") == "1";
     }
     
     
     public bool is_autocommit ()
-    {
-       return !FileUtils.test(this.gitdir + "/.gitlive-disable-autocommit" , FileTest.EXISTS);
+    {          
+       return this.get_config("autocommit") == "1";            
     }
+    
     public void set_autocommit(bool val)
     {
-
-               var cur = this.is_autocommit();
-               GLib.debug("SET auto commit : %s <= %s", val ? "ON" : "OFF",  cur  ? "ON" : "OFF");
-               if (cur == val) {
-                       return; // no change..
-               }
-               if (!val) {
-                       FileUtils.set_contents(this.gitdir + "/.gitlive-disable-autocommit" , "x");
-               } else {
-                       // it exists...
-                       FileUtils.remove(this.gitdir + "/.gitlive-disable-autocommit" ); 
-               }
+               this.set_config("autocommit", val ? "1" : "0");
     
     }
     
     public bool is_auto_branch ()
     {
-       return FileUtils.test(this.gitdir + "/.gitlive-enable-auto-branch" , FileTest.EXISTS);
+       if (this.name == "gitlog") {
+               return false;
+               }
+               // check remote...
+       if (this.is_managed()) {
+               return true;
+               }
+       return false;
+       
     }
     
     public void set_auto_branch(bool val)
     {
-
-               var cur = this.is_auto_branch();
-               GLib.debug("SET auto branch : %s <= %s", val ? "ON" : "OFF",  cur  ? "ON" : "OFF");
-               
-               if (cur == val) {
-                       return; // no change..
-               }
-               if (val) {
-                       FileUtils.set_contents(this.gitdir + "/.gitlive-enable-auto-branch" , "x");
-               } else {
-                       // it exists...
-                       FileUtils.remove(this.gitdir + "/.gitlive-enable-auto-branch" ); 
+               if (this.name == "gitlog") {
+               return;
                }
+               this.set_config("managed", val ? "1" : "0");
     
     }
     public bool is_autopush ()
     {
-       return !FileUtils.test(this.gitdir + "/.gitlive-disable-autopush" , FileTest.EXISTS);
+       return this.get_config("autopush") == "1";
     }
     public void set_autopush(bool val)
     {
-
-               var cur = this.is_autopush();
-               GLib.debug("SET auto push : %s <= %s", val ? "ON" : "OFF",  cur  ? "ON" : "OFF");
-               if (cur == val) {
-                       return; // no change..
-               }
-               if (!val) {
-                       FileUtils.set_contents(this.gitdir + "/.gitlive-disable-autopush" , "");
-               } else {
-                       // it exists...
-                       FileUtils.remove(this.gitdir + "/.gitlive-disable-autopush" ); 
-               }
-    
+               this.set_config("autopush", val ? "1" : "0");
     }
     
     
@@ -410,11 +430,8 @@ public class GitRepo : Object
     public void loadActiveTicket()
     {
        this.activeTicket = null;
-       if (!FileUtils.test(this.gitdir + "/.gitlive-active-ticket" , FileTest.EXISTS)) {
-               return;
-       }
-       string ticket_id;
-       FileUtils.get_contents(this.gitdir + "/.gitlive-active-ticket" , out ticket_id);  
+               var ticket_id = this.get_config("ticket");
+       
        if (ticket_id.length < 1) {
                return;
                }
@@ -427,14 +444,11 @@ public class GitRepo : Object
     
     public bool setActiveTicket(RooTicket? ticket, string branchname)
     {
+       this.set_config("ticket", "");
        if (!this.createBranchNamed(branchname)) {
                return false;
                }
-               if (ticket != null) {
-               FileUtils.set_contents(this.gitdir + "/.gitlive-active-ticket" , ticket.id);
-       } else {
-               FileUtils.remove(this.gitdir + "/.gitlive-active-ticket" );
-       }
+               this.set_config("ticket", ticket == null ? "": ticket.id);
        this.activeTicket = ticket;
        return true;
     }
@@ -778,6 +792,8 @@ public class GitRepo : Object
        // may throw error...
         var sp = new Spawn(cfg);
       
+            //GLib.debug( "GOT result: %d" , sp.result);
+      
        // diff output is a bit big..
                if (args_in[0] != "diff") {
                GLib.debug( "GOT: %s" , sp.output);
@@ -871,7 +887,7 @@ public class GitRepo : Object
                        }
            repo.update_async(updateAllCallback); 
         } 
-
+               GLib.debug("calls total = %d", (int) update_all_total);
     }
     public static void  updateAllCallback(GitRepo repo, int err, string res)
     {
@@ -879,14 +895,19 @@ public class GitRepo : Object
        repo.loadStatus();
        
        update_all_total--;
+               GLib.debug("calls remaining = %d", (int)update_all_total);      
        if (update_all_total > 0 ) {
+
                return;
                }
+               GLib.debug("call after load = %s", update_all_after);    
+               
                switch (update_all_after) {
                        case "show_clones":
                                Clones.singleton().show();
                                break;
                        default:
+                               GLib.debug("Unkown call after load = %s", update_all_after);            
                                break;
                }
                return;
index 1ff51e8..3ee3afe 100644 (file)
@@ -173,7 +173,7 @@ public class Spawn : Object
      /**
      * @property result {Number} execution result.
      */
-    int result= 0;
+    public int result= 0;
     /**
      * @property pid {Number} pid of child process (of false if it's not running)
      */
index d2154e0..f429e1a 100644 (file)
@@ -196,7 +196,7 @@ public class StatusIconA : StatusIcon {
                }
                foreach(var r in GitRepo.singleton().cache.values ) {
                        GLib.debug("checking %s for branch = %s", r.name, r.currentBranch.name);
-                       if (!r.is_wip_branch()) {
+                       if (r.is_master_branch()) {
                                continue;
                                }
                        GLib.debug("checking  for activeTicket");