X-Git-Url: http://git.roojs.org/?p=gitlive;a=blobdiff_plain;f=GitRepo.vala;h=ec10a014251de51ad6245dceb1b9b621b406da0b;hp=b1bb25f9f527471d2f4aea56c712103a5ce8bc69;hb=2a6a46caf4f1d149a8e72cb0fb0c90f9923a27bb;hpb=27286f9959213043f98fae7d27bca610b62b93c2 diff --git a/GitRepo.vala b/GitRepo.vala index b1bb25f9..ec10a014 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -32,7 +32,7 @@ public class GitRepo : Object } return _GitRepo; } - + /** * index of.. matching gitpath.. */ @@ -167,6 +167,7 @@ public class GitRepo : Object cache.set( path, this); } this.loadBranches(); + this.loadActiveTicket(); } public bool is_wip_branch() @@ -179,6 +180,11 @@ public class GitRepo : Object { return !FileUtils.test(this.gitdir + "/.gitlive-disable-autocommit" , FileTest.EXISTS); } + + public bool is_auto_branch () + { + return FileUtils.test(this.gitdir + "/.gitlive-enable-auto-branch" , FileTest.EXISTS); + } public bool is_autopush () { return !FileUtils.test(this.gitdir + "/.gitlive-disable-autopush" , FileTest.EXISTS); @@ -247,9 +253,7 @@ public class GitRepo : Object } GitMonitor.gitmonitor.start(); } - - - + public bool doMerge(string action, string ticket_id, string commit_message) { @@ -258,17 +262,17 @@ public class GitRepo : Object 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 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( + var notification = new Notify.Notification( "Merged branch %s to master".printf(oldbranch), "", "dialog-information" @@ -334,46 +338,103 @@ public class GitRepo : Object } return false; } + + 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); + if (ticket_id.length < 1) { + return; + } + this.activeTicket = RooTicket.singleton().getById(ticket_id.strip()); + + + } + - public bool setActiveTicket(RooTicket ticket, string branchname) + public bool setActiveTicket(RooTicket? ticket, string branchname) { if (!this.createBranchNamed(branchname)) { return false; } - FileUtils.set_contents(this.gitdir + "/.gitlive-active-ticket" , ticket.id); + if (ticket != null) { + FileUtils.set_contents(this.gitdir + "/.gitlive-active-ticket" , ticket.id); + } else { + FileUtils.remove(this.gitdir + "/.gitlive-active-ticket" ); + } this.activeTicket = ticket; return true; } public bool createBranchNamed(string branchname) - { - - try { + { + + var stash = false; if (this.branches.has_key(branchname)) { // this is where it get's tricky... - - string[] cmd = { "ls-files" , "-m" }; // list the modified files.. - var ret = this.git(cmd); - var stash = ret.length> 1 ; - - - cmd = { "stash" }; - if (stash) { this.git(cmd); } - - cmd = { "checkout", branchname }; - this.git(cmd); - - cmd = { "merge", "master" }; - this.git(cmd); - - cmd = { "stash", "pop" }; - if (stash) { this.git(cmd); } - + 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(); } else { - string[] cmd = { "checkout", "-b" , branchname }; - this.git(cmd); + try { + + string[] cmd = { "checkout", "-b" , branchname }; + this.git(cmd); + this.push(); + cmd = { "branch", "--set-upstream-to=origin/"+branchname , branchname }; + this.git(cmd); + + } catch(Error ee) { + GitMonitor.gitmonitor.pauseError(ee.message); + return false; + } + } var notification = new Notify.Notification( "Changed to branch %s".printf(branchname), @@ -385,14 +446,9 @@ 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... + //GitMonitor.gitmonitor.runQueue(); // no point - we have hidden the queue.. return true; } @@ -556,7 +612,7 @@ public class GitRepo : Object public string push () throws Error, SpawnError { // should - return this.git({ "push", "origin", "HEAD" }); + return this.git({ "push" }); }