"delete_event" : "(self, event) => {\n this.el.hide();\n return true; \n //test \n}\n ",
"response" : "(self, response_id) => { \n \n this.el.hide();\n \n}"
},
- "default_width" : 800,
- "| void show" : "() {\n\n \n this.el.set_deletable(false);\n this.el.set_gravity(Gdk.Gravity.NORTH);\n this.el.move((Gdk.Screen.width() / 2 ) -400 ,0);\n this.el.show_all();\n _this.reposStore.load();\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",
- "$ deletable" : true,
+ "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.width() - 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",
"title" : "Manage Clones",
"xtype" : "Dialog",
"default_height" : 500,
- "$ modal" : true,
"$ xns" : "Gtk",
+ "boolean modal" : true,
"border_width" : 3,
"items" : [
{
"Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL",
"items" : [
{
+ "bool homogeneous" : true,
"* pack" : "pack_start,false,false,0",
"xtype" : "Box",
"$ xns" : "Gtk",
"listeners" : {
"clicked" : "() => {\n\n/* var rv = this.get('/reposView');\n var rs = this.get('/reposStore');\n if (rv.el.get_selection().count_selected_rows() != 1) {\n //nothing?\n // error condition.\n return;\n }\n var Remotes = imports.Remotes.Remotes;\n \n \n var ret = {}; \n var s = rv.el.get_selection();\n var path = '';\n s.selected_foreach(function(model,p,iter) {\n \n path = model.get_value(iter, 6).value.get_string();\n \n }); \n\n var repo = false;\n rs.repos.forEach(function(r) {\n if (r.repopath == path) {\n repo = r;\n \n }\n \n });\n Remotes.repo = repo;\n Remotes.el.set_transient_for(Clones.el);\n Clones.el.set_title(\"Manage Clones - \" + repo.repopath);\n Remotes.show();\n Clones.el.set_title(\"Manage Clones\");\n\n */ \n \n \n\n \n \n \n}"
},
- "label" : "Remotes / Clones",
+ "label" : "Add Repository",
"* pack" : "add",
"xtype" : "Button",
"$ xns" : "Gtk"
"label" : "Branches",
"* pack" : "add",
"xtype" : "Button",
- "$ xns" : "Gtk"
+ "$ xns" : "Gtk",
+ "bool visible" : false
},
{
"listeners" : {
- "clicked" : "() => {\n/*\n var rv = this.get('/reposView');\n var rs = this.get('/reposStore');\n if (rv.el.get_selection().count_selected_rows() != 1) {\n //nothing?\n // error condition.\n return;\n }\n var Merger = imports.Merger.Merger;\n \n \n var ret = {}; \n var s = rv.el.get_selection();\n var path = '';\n s.selected_foreach(function(model,p,iter) {\n \n path = model.get_value(iter, 6).value.get_string();\n \n }); \n\n var repo = false;\n rs.repos.forEach(function(r) {\n if (r.repopath == path) {\n repo = r;\n \n }\n \n });\n Merger.repo = repo;\n Merger.el.set_transient_for(Clones.el);\n Clones.el.set_title(\"Manage Clones - \" + repo.repopath);\n Merger.show();\n Clones.el.set_title(\"Manage Clones\");\n\n \n \n\n \n \n\n */ \n \n \n}"
+ "clicked" : "() => {\n\n\tvar rv = _this.reposView;\n\tvar rs = _this.reposStore;\n\tvar s =rv.el.get_selection();\n\tif (s.count_selected_rows() != 1) {\n\t\treturn;\n\t}\n\tGtk.TreeIter iter;\n\tGtk.TreeModel tm;\n\ts.get_selected(out tm, out iter);\n\tGLib.Value val;\n tm.get_value(iter, 6, out val);\n var git_working_dir = (string)val;\n \n var repo = GitRepo.singleton().get(git_working_dir);\n \n // if you hit merge.... in master..\n // ignore..\n if (repo.currentBranch.name == \"master\") {\n \treturn;\n\t}\n\tMergeBranch.singleton().show(repo.activeTicket, repo);\n\t_this.reposStore.load();\n\t\n \n \n}\n\n"
},
"label" : "Merge",
"* pack" : "add",
"label" : "Switch Branch",
"* pack" : "add",
"xtype" : "Button",
- "$ xns" : "Gtk"
+ "$ xns" : "Gtk",
+ "bool visible" : false
},
{
"listeners" : {
"items" : [
{
"listeners" : {
+ "row_activated" : "(path, col) => {\n\tGLib.debug(\"row activated: %s\", col.title);\n\tif (col.title != \"Current Branch\") {\n\t\treturn;\n\t}\n\t\n\t//\n\t\n\tGtk.TreeIter iter;\n\t_this.reposStore.el.get_iter(out iter, path);\n\tGLib.Value val;\n _this.reposStore.el.get_value(iter, 6, out val);\n var git_working_dir = (string)val;\n \n var repo = GitRepo.singleton().get(git_working_dir);\n \n Gdk.Rectangle rect;\n _this.reposView.el.get_cell_area(path, col, out rect);\n RepoStatusPopover.singleton().show(this.el, rect, repo);\n \n \n \n}",
"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,
"xtype" : "TreeView",
"* pack" : "add",
+ "int search_column" : 0,
"$ xns" : "Gtk",
+ "Gtk.TreeViewGridLines enable_grid_lines" : "Gtk.TreeViewGridLines.HORIZONTAL",
"items" : [
{
"int n_columns" : 10,
"$ pathToRepo" : "function(path) {\n\n var tr= this.repos;\n\n \n for(var i =0 ; i < tr.length; i++) {\n if (tr[i].repopath == path) {\n return tr[i];\n }\n } \n return false; \n}\n",
"xtype" : "ListStore",
"* pack" : "set_model",
- "| void load" : "()\n{\n //this.insert(citer,iter,0);\n print(\"getting list\");\n var tr = GitRepo.list();\n \n this.el.clear();\n \n // fixme .. sort by last updated ...\n \n \n for(var i =0 ; i < tr.length; i++) {\n\t var repo = tr.index(i);\n\t repo.loadBranches();\n\t \n\t Gtk.TreeIter iter;\n\t this.el.append(out iter);\n \n \n //print(JSON.stringify(ret,null,4));\n //tr[i].getBranches();\n //tr[i].getStatus();\n //var hi;\n //try {\n //tr[i].debug=1;\n // hi = tr[i].history('/', 1, 'branch', tr[i].currentBranch.name );\n// print(JSON.stringify(hi,null,4));\n // } catch(e) { print(e);}\n \n this.el.set_value(iter, 0, repo.name );\n this.el.set_value( iter, 1, repo.currentBranch.name );\n this.el.set_value( iter, 2, repo.branchesToString() );\n// this.el.set_value(ret.iter, 2, '' + repo.branches.map(\n// function(e) { return e.name; \n// }).join(', ') \n // );\n// this.el.set_value(iter, 3, '' + (!hi ? '??' : hi[0].changed_raw)); \n this.el.set_value(iter, 4, repo.is_autocommit() ); \n this.el.set_value(iter, 5, repo.is_autopush() ); \n this.el.set_value(iter, 6, repo.git_working_dir ); \n // highlight color.\n var cb = repo.currentBranch;\n //print(JSON.stringify(cb,null,4));\n var col = \"#ffffff\";\n /*\n if (cb.lastrev != cb.remoterev) {\n col = '#ff0000';\n }\n if (tr[i].hasLocalChanges) {\n col = '#0000ff';\n }\n if ((cb.lastrev != cb.remoterev) && (tr[i].hasLocalChanges)) {\n col = '#ff00ff';\n }\n */\n this.el.set_value(iter, 7, col ); \n var ticket = repo.activeTicket;\n \n this.el.set_value(iter, 8, repo.is_auto_branch() ); \n this.el.set_value(iter, 9, ticket == null ? \"\" : ticket.id ); \n \n \n } \n this.el.set_sort_column_id (0, Gtk.SortType.ASCENDING);\n} ",
+ "| void load" : "()\n{\n //this.insert(citer,iter,0);\n print(\"getting list\");\n var tr = GitRepo.list();\n \n this.el.clear();\n \n // fixme .. sort by last updated ...\n \n \n for(var i =0 ; i < tr.length; i++) {\n\t var repo = tr.index(i);\n\t // this is done before we display stuff...\n\t //repo.loadBranches();\n\t //repo.loadStatus();\n\t \n\t Gtk.TreeIter iter;\n\t this.el.append(out iter);\n \n //print(JSON.stringify(ret,null,4));\n //tr[i].getBranches();\n //tr[i].getStatus();\n //var hi;\n //try {\n //tr[i].debug=1;\n // hi = tr[i].history('/', 1, 'branch', tr[i].currentBranch.name );\n// print(JSON.stringify(hi,null,4));\n // } catch(e) { print(e);}\n \n this.el.set_value(iter, 0, repo.name );\n this.el.set_value( iter, 1, repo.currentBranch.name );\n this.el.set_value( iter, 2, repo.branchesToString() );\n// this.el.set_value(ret.iter, 2, '' + repo.branches.map(\n// function(e) { return e.name; \n// }).join(', ') \n // );\n// this.el.set_value(iter, 3, '' + (!hi ? '??' : hi[0].changed_raw)); \n this.el.set_value(iter, 4, repo.is_autocommit() ); \n this.el.set_value(iter, 5, repo.is_autopush() ); \n this.el.set_value(iter, 6, repo.git_working_dir ); \n // highlight color.\n var cb = repo.currentBranch;\n //print(JSON.stringify(cb,null,4));\n var col = \"#ffffff\";\n \n if (cb.lastrev != cb.remoterev) {\n col = \"#f2dede\";\n this.el.set_value( iter, 1, repo.currentBranch.name +\"\\nRemote != Local\" );\n }\n if (repo.has_local_changes) {\n col = \"#d9edf7\";\n this.el.set_value( iter, 1, repo.currentBranch.name +\"\\nHas uncommitted changes\" );\n }\n if ((cb.lastrev != cb.remoterev) && (repo.has_local_changes)) {\n col = \"#fcf8e3\";\n this.el.set_value( iter, 1, repo.currentBranch.name +\"\\nRemote != Local\\nHas uncommitted changes\" ); \n }\n \n this.el.set_value(iter, 7, col ); \n var ticket = repo.activeTicket;\n \n this.el.set_value(iter, 8, repo.is_auto_branch() ); \n this.el.set_value(iter, 9, ticket == null ? \"\" : ticket.id ); \n \n \n } \n this.el.set_sort_column_id (0, Gtk.SortType.ASCENDING);\n} ",
"$ xns" : "Gtk"
},
{
]
}
]
- },
- {
- "label" : "Close",
- "id" : "ok_button",
- "bool expand" : false,
- "* pack" : "add_action_widget,1 ",
- "xtype" : "Button",
- "$ xns" : "Gtk"
}
]
}
public Xcls_cr_last_updated cr_last_updated;
public Xcls_tv_all_branches tv_all_branches;
public Xcls_cr_all_branches cr_all_branches;
- public Xcls_ok_button ok_button;
// my vars (def)
this.el.title = "Manage Clones";
this.el.border_width = 3;
this.el.default_height = 500;
- this.el.default_width = 800;
+ this.el.default_width = 1024;
this.el.deletable = true;
this.el.modal = true;
var child_0 = new Xcls_Box2( _this );
child_0.ref();
this.el.get_content_area().add ( child_0.el );
- var child_1 = new Xcls_ok_button( _this );
- child_1.ref();
- this.el.add_action_widget ( child_1.el , 1 );
//listeners
this.el.delete_event.connect( (self, event) => {
public void show () {
- this.el.set_deletable(false);
+ this.el.set_deletable(true);
this.el.set_gravity(Gdk.Gravity.NORTH);
this.el.move((Gdk.Screen.width() / 2 ) -400 ,0);
+
+ this.el.set_default_size(
+ int.min(1024,Gdk.Screen.width()),
+ int.max(500,Gdk.Screen.width() - 300)
+ );
+
this.el.show_all();
_this.reposStore.load();
+ this.el.set_keep_above(true);
+ this.el.run();
// load clones..
// this.get('/reposStore').load();
// my vars (dec)
// set gobject values
+ this.el.homogeneous = true;
var child_0 = new Xcls_Button4( _this );
child_0.ref();
this.el.add ( child_0.el );
// my vars (dec)
// set gobject values
- this.el.label = "Remotes / Clones";
+ this.el.label = "Add Repository";
//listeners
this.el.clicked.connect( () => {
// set gobject values
this.el.label = "Branches";
+ this.el.visible = false;
//listeners
this.el.clicked.connect( () => {
//listeners
this.el.clicked.connect( () => {
- /*
- var rv = this.get('/reposView');
- var rs = this.get('/reposStore');
- if (rv.el.get_selection().count_selected_rows() != 1) {
- //nothing?
- // error condition.
- return;
- }
- var Merger = imports.Merger.Merger;
-
-
- var ret = {};
- var s = rv.el.get_selection();
- var path = '';
- s.selected_foreach(function(model,p,iter) {
-
- path = model.get_value(iter, 6).value.get_string();
-
- });
-
- var repo = false;
- rs.repos.forEach(function(r) {
- if (r.repopath == path) {
- repo = r;
-
- }
-
- });
- Merger.repo = repo;
- Merger.el.set_transient_for(Clones.el);
- Clones.el.set_title("Manage Clones - " + repo.repopath);
- Merger.show();
- Clones.el.set_title("Manage Clones");
-
-
-
-
+ var rv = _this.reposView;
+ var rs = _this.reposStore;
+ var s =rv.el.get_selection();
+ if (s.count_selected_rows() != 1) {
+ return;
+ }
+ Gtk.TreeIter iter;
+ Gtk.TreeModel tm;
+ s.get_selected(out tm, out iter);
+ GLib.Value val;
+ tm.get_value(iter, 6, out val);
+ var git_working_dir = (string)val;
-
- */
+ var repo = GitRepo.singleton().get(git_working_dir);
+ // if you hit merge.... in master..
+ // ignore..
+ if (repo.currentBranch.name == "master") {
+ return;
+ }
+ MergeBranch.singleton().show(repo.activeTicket, repo);
+ _this.reposStore.load();
+
+
});
}
// set gobject values
this.el.label = "Switch Branch";
+ this.el.visible = false;
//listeners
this.el.clicked.connect( () => {
// my vars (dec)
// set gobject values
+ this.el.search_column = 0;
+ this.el.activate_on_single_click = true;
+ this.el.enable_grid_lines = Gtk.TreeViewGridLines.HORIZONTAL;
var child_0 = new Xcls_reposStore( _this );
child_0.ref();
this.el.set_model ( child_0.el );
}
//listeners
+ this.el.row_activated.connect( (path, col) => {
+ GLib.debug("row activated: %s", col.title);
+ if (col.title != "Current Branch") {
+ return;
+ }
+
+ //
+
+ Gtk.TreeIter iter;
+ _this.reposStore.el.get_iter(out iter, path);
+ GLib.Value val;
+ _this.reposStore.el.get_value(iter, 6, out val);
+ var git_working_dir = (string)val;
+
+ var repo = GitRepo.singleton().get(git_working_dir);
+
+ Gdk.Rectangle rect;
+ _this.reposView.el.get_cell_area(path, col, out rect);
+ RepoStatusPopover.singleton().show(this.el, rect, repo);
+
+
+
+ });
this.el.cursor_changed.connect( () => {
// SEE SELECTION.CHANGED
/*
for(var i =0 ; i < tr.length; i++) {
var repo = tr.index(i);
- repo.loadBranches();
+ // this is done before we display stuff...
+ //repo.loadBranches();
+ //repo.loadStatus();
Gtk.TreeIter iter;
this.el.append(out iter);
-
//print(JSON.stringify(ret,null,4));
//tr[i].getBranches();
//tr[i].getStatus();
var cb = repo.currentBranch;
//print(JSON.stringify(cb,null,4));
var col = "#ffffff";
- /*
+
if (cb.lastrev != cb.remoterev) {
- col = '#ff0000';
+ col = "#f2dede";
+ this.el.set_value( iter, 1, repo.currentBranch.name +"\nRemote != Local" );
}
- if (tr[i].hasLocalChanges) {
- col = '#0000ff';
+ if (repo.has_local_changes) {
+ col = "#d9edf7";
+ this.el.set_value( iter, 1, repo.currentBranch.name +"\nHas uncommitted changes" );
}
- if ((cb.lastrev != cb.remoterev) && (tr[i].hasLocalChanges)) {
- col = '#ff00ff';
+ if ((cb.lastrev != cb.remoterev) && (repo.has_local_changes)) {
+ col = "#fcf8e3";
+ this.el.set_value( iter, 1, repo.currentBranch.name +"\nRemote != Local\nHas uncommitted changes" );
}
- */
+
this.el.set_value(iter, 7, col );
var ticket = repo.activeTicket;
- public class Xcls_ok_button : Object
- {
- public Gtk.Button el;
- private Clones _this;
-
-
- // my vars (def)
-
- // ctor
- public Xcls_ok_button(Clones _owner )
- {
- _this = _owner;
- _this.ok_button = this;
- this.el = new Gtk.Button();
-
- // my vars (dec)
-
- // set gobject values
- this.el.expand = false;
- this.el.label = "Close";
- }
-
- // user defined functions
- }
-
}
public bool active = false;
public string lastrev = "";
public string name = "";
+ public bool is_remote;
public string remote = "";
public string remoterev = "";
+ public string toString()
+ {
+ return
+ "active: " + (active ? "true" : "false") + "\n" +
+ "is_remote: " + (is_remote ? "true" : "false") + "\n" +
+ "lastrev: " + lastrev + "\n" +
+ "name: " + name + "\n" +
+ "remote: " + remote + "\n" +
+ "remoterev: " + remoterev + "\n";
+ }
+
+
public GitBranch(GitRepo repo)
{
this.repo = repo;
}
+ public static void loadBranches(GitRepo repo)
+ {
+ repo.branches = new Gee.HashMap<string,GitBranch>();
+
+ var branches = new Gee.HashMap<string,GitBranch>();
+ var local = new Gee.HashMap<string,GitBranch>();
+ var remotes = new Gee.HashMap<string,GitBranch>();
+
+ // repo.git( { "fetch", "-a" } ); == done async before...
+
+ string[] cmd = { "branch", "--no-color", "--verbose", "--no-abbrev" , "-a" };
+ var res = repo.git( cmd );
+ var lines = res.split("\n");
+ for (var i = 0; i < lines.length ; i++) {
+ var br = new GitBranch(repo);
+ if (!br.parseBranchListItem(lines[i])) {
+ continue;
+ }
+ GLib.debug("add branch %s", br.realName());
+ if (!br.is_remote) {
+ local.set(br.name, br);
+ } else {
+ remotes.set(br.remote, br);
+ }
+
+ branches.set(br.realName(), br);
+ if (br.active) {
+ repo.currentBranch = br;
+ }
+ }
+
+ var bl = repo.git({
+ "for-each-ref",
+ "--format", "%(refname:short):remotes/%(upstream:short)",
+ "refs/heads"
+ }).split("\n");
+
+ foreach(var line in bl) {
+ if (line.length < 1) continue;
+
+ var ar = line.split(":remotes/");
+ var lname= ar[0];
+ var rname = "remotes/" + ar[1];
+
+ //print(rname);
+ // we should always have a local version of it.
+ if (branches.has_key(lname)) {
+ branches.get(lname).remote = rname;
+ }
+
+ if (!branches.has_key(rname)) {
+ continue;
+ }
+ branches.get(lname).remoterev = branches.get(rname).lastrev;
+ // flag it for not adding..
+
+ branches.get(rname).name = lname;
+ }
+ foreach(var br in local.values) {
+ GLib.debug("BRANCH:\n%s\n" , br.toString());
+ }
+
+ /*
+ this bit of the code tries to turn a local branch into a track of a remote one.
+ -- that's probably not a good idea.
+ var r_replace = new Regex("^remotes/");
+ var o_replace = new Regex("^origin/");
+ foreach(var r in remotes.values) {
+ if (r.name.length >0) {
+ return;
+ }
+ var name = r_replace.replace(r.name, r.name.length,0, "");
+ name = o_replace.replace(name, name.length,0, "");
+ name = name.replace("/", ".");
+
+ }
+ */
+ repo.branches = local;
+
+
+
+ }
+
+
public bool parseBranchListItem(string str)
{
if (str.length < 1) {
if (parts[1] == "->") { // it's an alias.. eg. remotes/origin/HEAD -> origin/master..
return false;
}
-
+ this.is_remote = false;
this.lastrev = parts[1];
if (parts[0].has_prefix("remotes/")) {
+ this.is_remote = true;
this.remote = parts[0];
} else {
this.name = parts[0];
}
public string realName()
{
- return this.name == "" ? this.remote : this.name;
+ return this.is_remote ? this.remote : this.name;
}
public void create()
if (this.queue.size < 1 || this.queueRunning) {
return true;
}
+ var first = this.queue.get(0);
+ var delay = true;
+ if (!first.repo.is_wip_branch() && first.repo.is_auto_branch()) {
+ delay = false;
+ }
+
var last = -1 * this.lastAdd.difference(new DateTime.now(new TimeZone.local()));
// stdout.printf("LAST RUN: %s (expect %s) \n" ,
// last.to_string(), (5 * TimeSpan.SECOND).to_string() );
- if (last < 5 * TimeSpan.SECOND) { // wait 5 seconds before running. ????
+ if (delay && last < 5 * TimeSpan.SECOND) { // wait 5 seconds before running. ????
return true;
}
//_this.lastAdd = new Date();
public string gitdir;
public string git_working_dir;
public bool debug = false;
+ public bool has_local_changes = false;
+ public string git_status;
+ public string git_diff;
public Gee.HashMap<string,bool> ignore_files;
public GitBranch currentBranch;
-
+ public Gee.HashMap<string,GitBranch> branches; // accessed in GitBranch..
public RooTicket? activeTicket;
-
+ public Gee.HashMap<string,GitRepo> cache;
+
+
+
public static GitRepo singleton()
{
if (_GitRepo == null) {
}
- public Gee.HashMap<string,GitRepo> cache;
+
}
this.loadBranches();
this.loadActiveTicket();
+ this.loadStatus();
}
public bool is_wip_branch()
}
-
- Gee.HashMap<string,GitBranch> branches;
+ public void loadStatus()
+ {
+ var r = this.git({ "status" , "--porcelain" });
+ this.git_status = r;
+ this.has_local_changes = r.length > 0;
+ this.git_diff = this.git({ "diff" , "HEAD", "--no-color" });
+ }
+
public void loadBranches()
{
- this.branches = new Gee.HashMap<string,GitBranch>();
-
- string[] cmd = { "branch", "--no-color", "--verbose", "--no-abbrev" , "-a" };
- var res = this.git( cmd );
- var lines = res.split("\n");
- for (var i = 0; i < lines.length ; i++) {
- var br = new GitBranch(this);
- if (!br.parseBranchListItem(lines[i])) {
- continue;
- }
- GLib.debug("add branch %s", br.realName());
-
- branches.set(br.realName(), br);
- if (br.active) {
- this.currentBranch = br;
- }
- }
-
+ GitBranch.loadBranches(this);
}
if (br.name == "") {
continue;
}
- ret += ret.length > 0 ? "," : "";
+ ret += ret.length > 0 ? "\n" : "";
ret += br.name;
}
public bool createBranchNamed(string branchname)
{
- var stash = false;
+
if (this.branches.has_key(branchname)) {
- // this is where it get's tricky...
- try {
- string[] cmd = { "ls-files" , "-m" }; // list the modified files..
- var ret = this.git(cmd);
- stash = ret.length> 1 ;
-
-
- cmd = { "stash" };
- if (stash) { this.git(cmd); }
-
- cmd = { "checkout", branchname };
- this.git(cmd);
- } catch(Error e) {
- GitMonitor.gitmonitor.pauseError(e.message);
- return false;
- }
- try {
- if (branchname != "master") {
- string[] cmd = { "merge", "master" };
- this.git(cmd);
- this.push();
- //cmd = { "commit", "-a" , "-m", "merge master changes" };
- //git chethis.git( cmd );
- }
-
- } catch(Error e) {
- 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(
- branchname)
- + e.message
- );
- return false;
-
- }
- try {
- string[] cmd = { "stash", "pop" };
- if (stash) { this.git(cmd); }
- } catch(Error ee) {
- GitMonitor.gitmonitor.pauseError(ee.message);
- return false;
- }
- this.push();
+ this.switchToExistingBranchNamed(branchname);
} else {
- try {
-
- string[] cmd = { "checkout", "-b" , branchname };
- this.git(cmd);
-
- cmd = { "push", "-u" , "origin" ,"HEAD" };
- this.git(cmd);
-
- } catch(Error ee) {
- GitMonitor.gitmonitor.pauseError(ee.message);
- return false;
- }
+ this.createNewBranchNamed(branchname);
}
var notification = new Notify.Notification(
//GitMonitor.gitmonitor.runQueue(); // no point - we have hidden the queue..
return true;
}
+ bool switchToExistingBranchNamed(string branchname)
+ {
+ var stash = false;
+ // this is where it get's tricky...
+ string files = "";
+ try {
+ string[] cmd = { "ls-files" , "-m" }; // list the modified files..
+ files = this.git(cmd);
+ stash = files.length> 1 ;
+
+
+ cmd = { "stash" };
+ if (stash) { this.git(cmd); }
+
+ this.pull();
+
+ cmd = { "checkout", branchname };
+ this.git(cmd);
+ } catch(Error e) {
+ GitMonitor.gitmonitor.pauseError(e.message);
+ return false;
+ }
+ try {
+ if (branchname != "master") {
+ string[] cmd = { "merge", "master" };
+ this.git(cmd);
+ this.push();
+
+ }
+
+ } catch(Error e) {
+ 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(
+ branchname)
+ + e.message
+ );
+ return false;
+
+ }
+ try {
+ string[] cmd = { "stash", "pop" };
+ if (stash) {
+ this.git(cmd);
+ var fl = files.split("\n");
+ cmd = { "commit", "-m" , "Changed " + string.joinv("",fl) };
+ foreach(var f in fl) {
+ if (f.length < 1) continue;
+ cmd += f;
+ }
+ this.git(cmd);
+ }
+
+
+
+ } catch(Error ee) {
+ GitMonitor.gitmonitor.pauseError(ee.message);
+ return false;
+ }
+ this.push();
+ return true;
+
+ }
+
+
+
+ bool createNewBranchNamed(string branchname)
+ {
+ var stash = false;
+ try {
+ string[] cmd = { "ls-files" , "-m" }; // list the modified files..
+ var files = this.git(cmd);
+ stash = files.length> 1 ;
+
+ cmd = { "checkout", "-b" , branchname };
+ this.git(cmd);
+
+ cmd = { "push", "-u" , "origin" ,"HEAD" };
+ this.git(cmd);
+ if (stash) {
+
+ var fl = files.split("\n");
+ cmd = { "commit", "-m" , "Changed " + string.joinv("",fl) };
+ foreach(var f in fl) {
+ if (f.length < 1) continue;
+ cmd += f;
+ }
+ this.git(cmd);
+ this.push();
+ }
+
+
+ } catch(Error ee) {
+ GitMonitor.gitmonitor.pauseError(ee.message);
+ return false;
+ }
+ return true;
+
+ }
+
/**
public void pull_async(GitAsyncCallback cb)
{
- string[] cmd = { "pull" , "--no-edit" };
+ string[] cmd = { "pull" , "--no-edit" };
this.git_async( cmd , cb);
var cfg = new SpawnConfig(this.git_working_dir , args , env);
-
+ //cfg.debug = true;
// may throw error...
var sp = new Spawn(cfg);
}
+
+
+
+
+ public void update_async(GitAsyncCallback cb)
+ {
+ string[] cmd = { "fetch" , "--all" };
+ this.git_async( cmd , cb);
+
+ }
+
+
+ static uint update_all_total = 0;
+ static string update_all_after = "";
+
+ public static void updateAll(string after)
+ {
+ update_all_after = after;
+ var tr = GitRepo.singleton().cache;
+
+
+ update_all_total = tr.size;
+ foreach(var repo in tr.values) {
+ repo.update_async(updateAllCallback);
+ }
+
+ }
+ public static void updateAllCallback(GitRepo repo, int err, string res)
+ {
+ repo.loadBranches();
+ repo.loadStatus();
+
+ update_all_total--;
+ if (update_all_total > 0 ) {
+ return;
+ }
+ switch (update_all_after) {
+ case "show_clones":
+ Clones.singleton().show();
+ break;
+ default:
+ break;
+ }
+ return;
+ }
+
+
+
}
--pkg libwnck-3.0 \
--pkg gee-0.8 \
--pkg libcanberra \
- --pkg libsoup-2.4 \
- --pkg json-glib-1.0
+ --pkg libsoup-2.4 \
+ --pkg json-glib-1.0 \
+ --pkg gtksourceview-3.0
Gitlive_SOURCES = \
Gitlive.vala \
WindowLog.vala \
Clones.vala \
NewBranch.vala \
- MergeBranch.vala
+ MergeBranch.vala \
+ RepoStatusPopover.vala
{
"listeners" : {
"delete_event" : "(self, event) => {\n this.el.hide();\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 \tGitMonitor.gitmonitor.start();\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 if (this.repo != null) {\n \tvar bn = _this.name.el.get_text();\n \tif (ticket_id != \"\" ) {\n\t\t\tthis.repo.setActiveTicket( RooTicket.singleton().getById(ticket_id), bn);\n\t\t} else {\n\t\t\tthis.repo.createBranchNamed(bn);\n\t\t}\n }\n\t*/\n\t\n\tGitRepo.doMerges(\n\t\t_this.actionsel.selectedAction(), \n\t\t_this.ticketsel.selectedTicketId(),\n\t\t_this.name.el.get_text()\n\t);\n\t\n\tthis.running = false; \n\n\t \n\t_this.el.hide();\t\n \tGitMonitor.gitmonitor.start();\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 \tGitMonitor.gitmonitor.start();\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 if (this.repo != null) {\n \tvar bn = _this.name.el.get_text();\n \tif (ticket_id != \"\" ) {\n\t\t\tthis.repo.setActiveTicket( RooTicket.singleton().getById(ticket_id), bn);\n\t\t} else {\n\t\t\tthis.repo.createBranchNamed(bn);\n\t\t}\n }\n\t*/\n\t\n\tif (this.repo != null) {\n\t\trepo.doMerge(\n\t\t\t_this.actionsel.selectedAction(), \n\t\t\t_this.ticketsel.selectedTicketId(),\n\t\t\t_this.name.el.get_text()\n\t\t);\n\t\n\t} else {\n\t\tGitRepo.doMerges(\n\t\t\t_this.actionsel.selectedAction(), \n\t\t\t_this.ticketsel.selectedTicketId(),\n\t\t\t_this.name.el.get_text()\n\t\t);\n\t}\n\tthis.running = false; \n\n\t \n\t_this.el.hide();\t\n \tGitMonitor.gitmonitor.start();\n\n\t \n}",
"show" : "(self) => {\n \n\n //test\n}"
},
"default_width" : 500,
"$ deletable" : true,
+ "# GitRepo repo" : "",
"title" : "Merge Branch",
"xtype" : "Dialog",
- "| void show" : "( RooTicket ticket ) \n{\n // this.el.set_gravity(Gdk.Gravity.NORTH);\n if (this.running) {\n \treturn;\n\t}\n\tGitMonitor.gitmonitor.stop();\n\t\n this.ticket = ticket;\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 \t_this.actionmodel.loadActions();\n\n\n}",
+ "| void show" : "( RooTicket ticket, GitRepo? repo ) \n{\n // this.el.set_gravity(Gdk.Gravity.NORTH);\n if (this.running) {\n \treturn;\n\t}\n\tGitMonitor.gitmonitor.stop();\n\t\n this.ticket = ticket;\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 \t_this.actionmodel.loadActions();\n\n\n}",
"default_height" : 200,
"# RooTicket? ticket" : "null",
"$ xns" : "Gtk",
"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" : "actioncellrenderer",
- "* pack" : "pack_start,true",
"xtype" : "CellRendererText",
+ "* pack" : "pack_start,true",
"$ xns" : "Gtk"
},
{
"id" : "actionmodel",
- "* pack" : "set_model",
"xtype" : "ListStore",
+ "* pack" : "set_model",
"$ columns" : "typeof(string),typeof(string)",
"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 el.set_value(iter, 0, \"\");\n el.set_value(iter, 1, \"-- select a ticket --\");\n \n _this.ticketsel.el.set_active_iter(iter);\n \n if (_this.ticket != null && _this.ticket.id == \"-1\") {\n\t\tel.append(out iter);\n\t\tel.set_value(iter, 0, \"-1\");\n\t\tel.set_value(iter, 1, \"Temporary Branch - No ticket specified/relivant\");\n _this.ticketsel.el.set_active_iter(iter);\t\n }\n \n \n \n \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\t\tif (_this.ticket != null && _this.ticket.id == ticket.id) {\n\t\t _this.ticketsel.el.set_active_iter(iter);\n\t }\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" : "Cancel",
- "xtype" : "Button",
"* pack" : "add_action_widget,0",
+ "xtype" : "Button",
"Gtk.ReliefStyle relief" : "Gtk.ReliefStyle.NONE",
"$ xns" : "Gtk"
},
{
"label" : "Do Merge",
- "xtype" : "Button",
"* pack" : "add_action_widget,1",
+ "xtype" : "Button",
"$ xns" : "Gtk"
}
]
public Xcls_name name;
// my vars (def)
+ public GitRepo repo;
public RooTicket? ticket;
public bool running;
}
*/
- GitRepo.doMerges(
- _this.actionsel.selectedAction(),
- _this.ticketsel.selectedTicketId(),
- _this.name.el.get_text()
- );
+ if (this.repo != null) {
+ repo.doMerge(
+ _this.actionsel.selectedAction(),
+ _this.ticketsel.selectedTicketId(),
+ _this.name.el.get_text()
+ );
+ } else {
+ GitRepo.doMerges(
+ _this.actionsel.selectedAction(),
+ _this.ticketsel.selectedTicketId(),
+ _this.name.el.get_text()
+ );
+ }
this.running = false;
}
// user defined functions
- public void show ( RooTicket ticket )
+ public void show ( RooTicket ticket, GitRepo? repo )
{
// this.el.set_gravity(Gdk.Gravity.NORTH);
if (this.running) {
GitMonitor.gitmonitor.stop();
this.ticket = ticket;
+ this.repo = repo;
this.el.move((Gdk.Screen.width() / 2)- 250 ,0);
GLib.debug("Loading tickets");
{
"listeners" : {
"delete_event" : "(self, event) => {\n this.el.hide();\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 \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 if (this.repo != null) {\n \tvar bn = _this.name.el.get_text();\n \tif (ticket_id != \"\" ) {\n\t\t\tthis.repo.setActiveTicket( RooTicket.singleton().getById(ticket_id), bn);\n\t\t} else {\n\t\t\tthis.repo.setActiveTicket( RooTicket.singleton().getById(\"-1\"), bn);\n\t\t}\n }\n\n this.running = false; \n\n\tthis.el.hide();\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 \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 if (this.repo != null) {\n \tvar bn = _this.name.el.get_text();\n\n\t\tvar res = this.repo.setActiveTicket(\t\t\t\n\t\t\t RooTicket.singleton().getById(ticket_id != \"\" ? ticket_id : \"-1\"), bn\n\t\t );\n\t\t if (res) {\n\t\t \t// start the monitoring..\n\t\t \t GitMonitor.gitmonitor.start();\n\t\t \t \n\t\t }\n }\n \n\n this.running = false; \n\n\tthis.el.hide();\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, 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}",
+ "| 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 this.el.set_keep_above(true);\n \t_this.dbmodel.loadTickets();\n \tthis.el.run();\n\n}",
"default_height" : 200,
"$ xns" : "Gtk",
"# bool running" : false,
"items" : [
{
"bool homogeneous" : false,
- "xtype" : "Table",
"* pack" : "pack_start,false,false,0",
+ "xtype" : "Table",
"uint column_spacing" : 2,
"n_columns" : 2,
"$ xns" : "Gtk",
"items" : [
{
"id" : "dbcellrenderer",
- "* pack" : "pack_start,true",
"xtype" : "CellRendererText",
+ "* pack" : "pack_start,true",
"$ xns" : "Gtk"
},
{
"id" : "dbmodel",
- "* pack" : "set_model",
"xtype" : "ListStore",
+ "* pack" : "set_model",
"| 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",
- "* pack" : "add_action_widget,0",
"xtype" : "Button",
+ "* pack" : "add_action_widget,0",
"Gtk.ReliefStyle relief" : "Gtk.ReliefStyle.NONE",
"$ xns" : "Gtk"
},
{
"label" : "Create Branch",
- "* pack" : "add_action_widget,1",
"xtype" : "Button",
+ "* pack" : "add_action_widget,1",
"$ xns" : "Gtk"
}
]
if (this.repo != null) {
var bn = _this.name.el.get_text();
- if (ticket_id != "" ) {
- this.repo.setActiveTicket( RooTicket.singleton().getById(ticket_id), bn);
- } else {
- this.repo.setActiveTicket( RooTicket.singleton().getById("-1"), bn);
- }
+
+ var res = this.repo.setActiveTicket(
+ RooTicket.singleton().getById(ticket_id != "" ? ticket_id : "-1"), bn
+ );
+ if (res) {
+ // start the monitoring..
+ GitMonitor.gitmonitor.start();
+
+ }
}
+
this.running = false;
this.el.show_all();
+ this.el.set_keep_above(true);
_this.dbmodel.loadTickets();
+ this.el.run();
}
public class Xcls_VBox2 : Object
if (this.cfg.debug) {
- stdout.printf("cd %s; %s\n" , this.cfg.cwd , string.joinv(" ", this.cfg.args));
+ GLib.debug("cd %s; %s\n" , this.cfg.cwd , string.joinv(" ", this.cfg.args));
}
+ // stdout:
+ if (!this.cfg.async) {
+ string ls_stdout;
+ string ls_stderr;
+ int ls_status;
+
+ Process.spawn_sync (
+ this.cfg.cwd,
+ this.cfg.args,
+ this.cfg.env,
+ SpawnFlags.SEARCH_PATH,
+ null,
+ out ls_stdout,
+ out ls_stderr,
+ out ls_status
+ );
+ this.output = ls_stdout;
+ this.stderr = ls_stderr;
+ this.result = ls_status;
+ if (this.cfg.exceptions && this.result != 0) {
+ var errstr = string.joinv(" ", this.cfg.args) + "\n";
+ errstr += this.output;
+ errstr += this.output.length > 0 ? "\n" : "";
+ errstr += this.stderr;
+ //print("Throwing execute error:%s\n", errstr);
+ throw new SpawnError.EXECUTE_ERROR(errstr);
+ //this.toString = function() { return this.stderr; };
+ ///throw new Exception this; // we throw self...
+ }
+ return;
+
+ }
+
+
+
+
Process.spawn_async_with_pipes (
this.cfg.cwd,
this.cfg.args,
out standard_output,
out standard_error);
- // stdout:
+
//print(JSON.stringify(gret));
if (this.cfg.debug) {
- stdout.printf("PID: %d\n" ,this.pid);
+ GLib.debug("PID: %d\n" ,this.pid);
}
this.ref(); // additional ref - cleared on tidyup...
if (this.pid > -1) {
// child can exit before we get this far..
if (this.cfg.input != null) {
- if (this.cfg.debug) print("Trying to call listeners");
+ if (this.cfg.debug) GLib.debug("Trying to call listeners");
try {
this.write(this.cfg.input());
// this probably needs to be a bit smarter...
if (this.pid > -1) {
//print("starting main loop");
- //if (this.cfg.debug) {
- //
- // }
+ if (this.cfg.debug) {
+ GLib.debug("starting main loop");
+ }
this.ctx = new MainLoop ();
this.ctx.run(); // wait fore exit?
-
+ if (this.cfg.debug) {
+ GLib.debug(" main loop done");
+ }
//print("main_loop done!");
} else {
this.tidyup(); // tidyup get's called in main loop.
private void tidyup()
{
+ if (this.cfg.debug) {
+ GLib.debug("tidyup");
+ }
+
//print("Tidyup\n");
if (this.pid > -1) {
Process.close_pid(this.pid); // hopefully kills it..
this.label = ("Merge [%s] #%s %s".printf(r.name, t.id , t.summary));
this.activate.connect(() => {
- MergeBranch.singleton().show(this.ticket);
+ MergeBranch.singleton().show(this.ticket, null);
// show merge dialog..
});
this.accel_group = null;
this.activate.connect( () => {
- Clones.singleton().show();
+ GitRepo.updateAll("show_clones");
+
+ // Clones.singleton().show();
});
}
"..//gitlive/NewBranch.vala",
"..//gitlive/GitMonitorQueue.vala",
"..//gitlive/RooTicket.vala",
- "..//gitlive/MergeBranch.vala"
+ "..//gitlive/MergeBranch.vala",
+ "..//gitlive/RepoStatusPopover.vala"
],
"packages" : [
]
"gdk-3.0",
"gtk+-3.0",
"json-glib-1.0",
- "libsoup-2.4"
+ "libsoup-2.4",
+ "gtksourceview-3.0"
]
}
]
\ No newline at end of file
glib-2.0 >= 2.24.1
gobject-2.0 >= 2.24.1
gtk+-3.0 >= 3.11.3
+ gtksourceview-3.0
libnotify
libwnck-3.0
libcanberra