+/**
+The monitor suffers from various issues - basically event flows while it's running...
+
+normall operations
+
+- monitors for file changes
+ -- adds to QUEUE when occurs.
+
+- queue runs in background.
+ - if it's got stuff in it..
+ - COMMIT (normally)
+ - now?? - if on master - try and branch
+ == do user selection, until we have branched
+ == then start monitoring again..
+
+*/
+
+
public class GitMonitor : Monitor
}
+ public void restoreQueue( Gee.ArrayList<GitMonitorQueue> queue)
+ {
+ //used to restore teh queue after switch branches?/ - breaks our privte queue idea..
+ this.queue = queue;
+ }
+
/*
public new void resume () {
this.paused = false;
foreach(var q in this.queue) {
if (!q.shouldIgnore() && !q.repo.is_wip_branch()) {
- NewBranch.singleton().show(q.repo);
+ var oldq = this.queue;
+ this.queue = new Gee.ArrayList<GitMonitorQueue>();
+ NewBranch.singleton().show(q.repo, oldq);
+
return;
}
this.queue.add(cmd);
- if (!cmd.shouldIgnore() && !cmd.repo.is_wip_branch()) {
- NewBranch.singleton().show(cmd.repo);
- }
-
+
}
public override void onDeleted(MonitorNamePathDir src)
this.queue.add(cmd);
- if (!cmd.shouldIgnore() && !cmd.repo.is_wip_branch()) {
- NewBranch.singleton().show(cmd.repo);
- }
+
}
cmd.message = "Attribute changed " + cmd.vname;
this.queue.add(cmd);
- if (!cmd.shouldIgnore() && !cmd.repo.is_wip_branch()) {
- NewBranch.singleton().show(cmd.repo);
- }
+
}
public override void onMoved(MonitorNamePathDir src,MonitorNamePathDir dest)
this.queue.add(cmd);
-
- if (!cmd.shouldIgnore() && !cmd.repo.is_wip_branch()) {
- NewBranch.singleton().show(cmd.repo);
- }
+
// this is where it get's complicated...
// as we might be moving across repo's...
{
"listeners" : {
"delete_event" : "(self, event) => {\n this.el.hide();\n this.running = false;\n return true; \n //test \n}\n ",
- "response" : " (self, response_id) => { \n \n\tGLib.debug(\"got %d\", (int) response_id);\n\tif (response_id == 0) {\n\t _this.el.hide();\t\n\t this.running = false; \n\t\tGitMonitor.gitmonitor.start();\t \n\t \treturn;\n\t}\n\t \n\t// have they selected a ticket..\n\t// make that the current active ticket?\n\t// we really need to store locally what ticket is being worked on..\n\t// in theory we could be working on multiple project and not merging..\n\t// -- each repo would have their active ticket (only one per repo)\n\t// -- so we could just store that in there\n\t// -- initial load can check the contents of the ticket files on first scan.\n\tvar ticket_id = _this.ticketsel.selectedTicketId();\n\t\n\tvar success = true;\n if (this.repo != null) {\n \tvar bn = _this.name.el.get_text();\n \tif (ticket_id != \"\" ) {\n\t\t\tsuccess = this.repo.setActiveTicket( RooTicket.singleton().getById(ticket_id), bn);\n\t\t} else {\n\t\t\tsuccess = this.repo.createBranchNamed(bn);\n\t\t}\n }\n\tGitMonitor.gitmonitor.start();\n this.running = false; \n\n\t \n\t \n\t \n\n\t \n}",
+ "response" : " (self, response_id) => { \n \n\tGLib.debug(\"got %d\", (int) response_id);\n\tif (response_id == 0) {\n\t _this.el.hide();\t\n\t this.running = false; \n\t\tGitMonitor.gitmonitor.start();\t \n\t \treturn;\n\t}\n\t \n\t// have they selected a ticket..\n\t// make that the current active ticket?\n\t// we really need to store locally what ticket is being worked on..\n\t// in theory we could be working on multiple project and not merging..\n\t// -- each repo would have their active ticket (only one per repo)\n\t// -- so we could just store that in there\n\t// -- initial load can check the contents of the ticket files on first scan.\n\tvar ticket_id = _this.ticketsel.selectedTicketId();\n\t\n\tvar success = true;\n if (this.repo != null) {\n \tvar bn = _this.name.el.get_text();\n \tif (ticket_id != \"\" ) {\n\t\t\tsuccess = this.repo.setActiveTicket( RooTicket.singleton().getById(ticket_id), bn);\n\t\t} else {\n\t\t\tsuccess = this.repo.createBranchNamed(bn);\n\t\t}\n }\n \n GitMonitor.gitmonitor.restoreQueue( this.queue );\n GitMonitor.gitmonitor.runQueue(); \n\tGitMonitor.gitmonitor.start();\n this.running = false; \n\n\t \n\t \n\t \n\n\t \n}",
"show" : "(self) => {\n \n\n //test\n}"
},
"default_width" : 500,
"title" : "Create a working branch ",
"xtype" : "Dialog",
"# GitRepo? repo" : "null",
- "| void show" : "( GitRepo repo ) \n{\n // this.el.set_gravity(Gdk.Gravity.NORTH);\n if (this.running) {\n \treturn;\n\t}\n\tthis.running = true;\n\tGitMonitor.gitmonitor.stop();\n\t\n this.repo = repo;\n \n\tthis.el.move((Gdk.Screen.width() / 2)- 250 ,0);\n \tGLib.debug(\"Loading tickets\"); \n\n\n this.el.show_all();\n \t_this.dbmodel.loadTickets();\n\n}",
+ "| void show" : "( GitRepo repo, Gee.ArrayList<GitMonitorQueue> queue ) \n{\n // this.el.set_gravity(Gdk.Gravity.NORTH);\n if (this.running) { // should not happen!!\n \tGLib.error(\"new branch show called, when already being displayed?\");\n\t}\n\tthis.queue = queue;\n\t\n\tthis.running = true;\n\tGitMonitor.gitmonitor.stop();\n\t\n this.repo = repo;\n \n\tthis.el.move((Gdk.Screen.width() / 2)- 250 ,0);\n \tGLib.debug(\"Loading tickets\"); \n\n\n this.el.show_all();\n \t_this.dbmodel.loadTickets();\n\n}",
"default_height" : 200,
"$ xns" : "Gtk",
"# bool running" : false,
+ "# Gee.ArrayList<GitMonitorQueue> queue" : "null",
"bool modal" : true,
"items" : [
{
"items" : [
{
"bool homogeneous" : false,
- "* pack" : "pack_start,false,false,0",
"xtype" : "Table",
+ "* pack" : "pack_start,false,false,0",
"uint column_spacing" : 2,
"n_columns" : 2,
"$ xns" : "Gtk",
"items" : [
{
"id" : "dbcellrenderer",
- "xtype" : "CellRendererText",
"* pack" : "pack_start,true",
+ "xtype" : "CellRendererText",
"$ xns" : "Gtk"
},
{
"id" : "dbmodel",
- "xtype" : "ListStore",
"* pack" : "set_model",
+ "xtype" : "ListStore",
"| void loadTickets" : " () {\n\n RooTicket.singleton().loadTickets();\n \n _this.ticketsel.loading = true;\n\n this.el.clear(); \n Gtk.TreeIter iter;\n var el = this.el;\n \n el.append(out iter);\n\n \n el.set_value(iter, 0, \"\");\n el.set_value(iter, 1, \"-- select a ticket --\");\n \n _this.ticketsel.el.set_active_iter(iter);\n var tickets = RooTicket.singleton().tickets;\n foreach(var ticket in tickets) {\n \n el.append(out iter);\n \n el.set_value(iter, 0, ticket.id);\n el.set_value(iter, 1, \"#%s [%s] %s\".printf( ticket.id, ticket.project_id_name , ticket.summary));\n \n //if (data.get(i) == cur) {\n // _this.build_module.el.set_active_iter(iter);\n // }\n \n }\n \n _this.ticketsel.loading = false;\n //this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING); \n \n}\n",
"$ columns" : "typeof(string),typeof(string)",
"n_columns" : 2,
},
{
"label" : "Do not create Branch",
- "xtype" : "Button",
"* pack" : "add_action_widget,0",
+ "xtype" : "Button",
"Gtk.ReliefStyle relief" : "Gtk.ReliefStyle.NONE",
"$ xns" : "Gtk"
},
{
"label" : "Create Branch",
- "xtype" : "Button",
"* pack" : "add_action_widget,1",
+ "xtype" : "Button",
"$ xns" : "Gtk"
}
]
// my vars (def)
public GitRepo? repo;
public bool running;
+ public Gee.ArrayList<GitMonitorQueue> queue;
// ctor
public NewBranch()
// my vars (dec)
this.repo = null;
this.running = false;
+ this.queue = null;
// set gobject values
this.el.title = "Create a working branch ";
success = this.repo.createBranchNamed(bn);
}
}
+
+ GitMonitor.gitmonitor.restoreQueue( this.queue );
+ GitMonitor.gitmonitor.runQueue();
GitMonitor.gitmonitor.start();
this.running = false;
}
// user defined functions
- public void show ( GitRepo repo )
+ public void show ( GitRepo repo, Gee.ArrayList<GitMonitorQueue> queue )
{
// this.el.set_gravity(Gdk.Gravity.NORTH);
- if (this.running) {
- return;
+ if (this.running) { // should not happen!!
+ GLib.error("new branch show called, when already being displayed?");
}
+ this.queue = queue;
+
this.running = true;
GitMonitor.gitmonitor.stop();