X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=GitRepo.vala;h=034d535cf852d482fff3024648d854f165b3dedb;hb=1245856c12bd5161158d057fc603ae5f4b0dfcee;hp=2bfa2a1af0a53b2ac1714948cbe5138663dc39c7;hpb=aa918439d9cb7113787b05154fa6d00154cbb8a8;p=gitlive diff --git a/GitRepo.vala b/GitRepo.vala index 2bfa2a1a..034d535c 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -32,7 +32,7 @@ public class GitRepo : Object } return _GitRepo; } - + /** * index of.. matching gitpath.. */ @@ -247,46 +247,44 @@ public class GitRepo : Object } GitMonitor.gitmonitor.start(); } - - - + public bool doMerge(string action, string ticket_id, string commit_message) { // in theory we should check to see if other repo's have got the same branch and merge all them at the same time. // also need to decide which branch we will merge into? - var ret = ""; - if (action == "CLOSE" || action == "LEAVE") { - - - try { - var oldbranch = this.currentBranch.name; - this.setActiveTicket(null, "master"); - string [] cmd = { "merge", "--squash", oldbranch }; - this.git( cmd ); - cmd = { "commit", "--m", commit_message }; - this.git( cmd ); - this.loadBranches(); // updates lastrev.. - - var notification = new Notify.Notification( - "Merged branch %s to master".printf(oldbranch), - "", - "dialog-information" - - ); - - notification.set_timeout(5); - notification.show(); - - // close ticket.. - return true; - - } catch (Error e) { + var ret = ""; + if (action == "CLOSE" || action == "LEAVE") { + + try { + var oldbranch = this.currentBranch.name; + this.setActiveTicket(null, "master"); + string [] cmd = { "merge", "--squash", oldbranch }; + this.git( cmd ); + cmd = { "commit", "-a" , "-m", commit_message }; + this.git( cmd ); + this.push(); + this.loadBranches(); // updates lastrev.. + + var notification = new Notify.Notification( + "Merged branch %s to master".printf(oldbranch), + "", + "dialog-information" + + ); - GitMonitor.gitmonitor.pauseError(e.message); - return false; - } - // error~?? -- show the error dialog... + notification.set_timeout(5); + notification.show(); + + // close ticket.. + return true; + + } catch (Error e) { + + GitMonitor.gitmonitor.pauseError(e.message); + return false; + } + // error~?? -- show the error dialog... return false; } if (action == "MASTER") { @@ -336,7 +334,7 @@ public class GitRepo : Object } - public bool setActiveTicket(RooTicket ticket, string branchname) + public bool setActiveTicket(RooTicket ticket, string branchname) { if (!this.createBranchNamed(branchname)) { return false; @@ -347,15 +345,66 @@ public class GitRepo : Object } public bool createBranchNamed(string branchname) - { - - try { + { + + var stash = false; if (this.branches.has_key(branchname)) { - string[] cmd = { "checkout", branchname }; - this.git(cmd); + // 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); + cmd = { "commit", "-a" , "-m", commit_message }; + this.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(); + } else { - string[] cmd = { "checkout", "-b" , branchname }; - this.git(cmd); + try { + + string[] cmd = { "checkout", "-b" , branchname }; + this.git(cmd); + + this.push(); + } catch(Error ee) { + GitMonitor.gitmonitor.pauseError(ee.message); + return false; + } + } var notification = new Notify.Notification( "Changed to branch %s".printf(branchname), @@ -367,12 +416,7 @@ public class GitRepo : Object notification.set_timeout(5); notification.show(); - - } catch(Error e) { - GitMonitor.gitmonitor.pauseError(e.message); - return false; - - } + this.loadBranches(); // update branch list... GitMonitor.gitmonitor.runQueue(); // commit any outstanding... return true; @@ -538,7 +582,7 @@ public class GitRepo : Object public string push () throws Error, SpawnError { // should - return this.git({ "push", "origin", "HEAD" }); + return this.git({ "push", "--all" }); }