X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=GitRepo.vala;h=9cb29f6733b7b8b780644b4bbf714f2f9a159267;hb=7df3b2bb9e1fa811992604764cb3484b7aa1cbb9;hp=21cf4de4f52001c238ef28ea8c67f4a3eb91a0f8;hpb=21a3be91747a2248b34a7f3f51f36683be859f15;p=gitlive diff --git a/GitRepo.vala b/GitRepo.vala index 21cf4de4..9cb29f67 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -26,7 +26,17 @@ public class GitRepo : Object public Gee.HashMap ignore_files; - public GitBranch currentBranch; + public GitBranch _currentBranch; + public GitBranch getCurrentBranch() { + if (this._currentBranch == null) { + this.loadBranches(); + } + if (this._currentBranch == null) { + GLib.error("could not work out current branch?"); + } + return this._currentBranch; + } + public Gee.HashMap branches; // accessed in GitBranch.. public RooTicket? activeTicket; @@ -222,7 +232,7 @@ public class GitRepo : Object public bool is_master_branch() { // special branches that do not allow autopushing now... - return this.currentBranch.name == "master" || this.currentBranch.name == "roojs"; + return this.getCurrentBranch().name == "master" || this.getCurrentBranch().name == "roojs"; } public void init_config() @@ -325,13 +335,13 @@ public class GitRepo : Object this.git_status = r; this.has_local_changes = r.length > 0; - var rs = this.git({ "status" , "-sb" }); - + //var rs = this.git({ "status" , "-sb" }); + var cb = this.getCurrentBranch(); - this.ahead_or_behind = rs.contains("[ahead") ? "A" : (rs.contains("[behind") ? "B" : ""); + this.ahead_or_behind = cb.ahead > 0 ? "A" : (cb.behind > 0 ? "B" : ""); - this.git_diff = this.git({ "diff" , "HEAD", "--no-color" }); + this.git_diff = this.diffWorking(); } @@ -382,7 +392,7 @@ public class GitRepo : Object continue; } commitrevs += commitrevs.length > 0 ? " " : ""; - commitrevs += repo.currentBranch.lastrev; + commitrevs += repo.getCurrentBranch().lastrev; } } if (sucess && action == "CLOSE") { @@ -402,7 +412,7 @@ public class GitRepo : Object if (action == "CLOSE" || action == "LEAVE") { try { - var oldbranch = this.currentBranch.name; + var oldbranch = this.getCurrentBranch().name; this.setActiveTicket(null, master); string [] cmd = { "merge", "--squash", oldbranch }; this.git( cmd ); @@ -438,7 +448,7 @@ public class GitRepo : Object string[] cmd = { "merge", master}; this.git( cmd ); var notification = new Notify.Notification( - "Merged code from %s to %s".printf(master,this.currentBranch.name), + "Merged code from %s to %s".printf(master,this.getCurrentBranch().name), "", "dialog-information" @@ -454,7 +464,7 @@ public class GitRepo : Object } if (action == "EXIT") { try { - var oldbranch = this.currentBranch.name; + var oldbranch = this.getCurrentBranch().name; this.setActiveTicket(null, master); this.loadBranches(); var notification = new Notify.Notification( @@ -673,11 +683,32 @@ public class GitRepo : Object GitMonitor.gitmonitor.pauseError(ee.message); return "Error getting diff"; } - - + } + public string diffWorking() + { + var cb = this.getCurrentBranch(); + GLib.debug("Calling diff working"); + var diff = new Ggit.Diff.tree_to_workdir(this.repo, cb.getTree(), new Ggit.DiffOptions()); + var ret = ""; + diff.print(Ggit.DiffFormatType.PATCH, (delta, hunk, line) => { + switch(line.get_origin()) { + case Ggit.DiffLineType.ADDITION: ret+="+"; break; + case Ggit.DiffLineType.DELETION: ret+="-";break; + case Ggit.DiffLineType.CONTEXT: ret+=" ";break; + case Ggit.DiffLineType.HUNK_HDR: break; + case Ggit.DiffLineType.FILE_HDR: break; + default: ret+=" ";break; + } + ret += " " + line.get_text() ; + return 0; + }); + //GLib.debug("returning %s", ret); + return ret; + } + /** * add: