X-Git-Url: http://git.roojs.org/?p=gitlive;a=blobdiff_plain;f=GitRepo.vala;h=9cb29f6733b7b8b780644b4bbf714f2f9a159267;hp=c5ed9ee4f6b0d567af42aafd2aac947c97471b96;hb=refs%2Fheads%2Fwip_alan_T5782_messing_around_with_libgit2glib;hpb=dc3931d68fbf441fb83df0c3cb5c6198cec52b68 diff --git a/GitRepo.vala b/GitRepo.vala index c5ed9ee4..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: @@ -989,7 +1020,7 @@ public class GitRepo : Object return true; }; - new Thread("thread-new-gitpull-" this.repo.name, run); + new Thread("thread-new-gitpull-" + this.name, run); yield; @@ -998,7 +1029,7 @@ public class GitRepo : Object public static void updateAllAsync(string after) { - var done = 0; + var doing = new Gee.HashMap();; @@ -1014,21 +1045,15 @@ public class GitRepo : Object repo.doUpdate.begin((obj, res) => { repo.doUpdate.end(res); doing.set(repo.name, false); - done++; - GLib.debug("total %d ?= done %d", update_all_total, done); - - if (update_all_total - done < 10) { - foreach(var b in doing.keys) { - if (doing.get(b)) { - GLib.debug("pending: %s", b); - } + + foreach(var b in doing.keys) { + if (doing.get(b)) { + GLib.debug("pending: %s", b); + return; } - - } - - if (update_all_total != done) { - return; } + + switch (after) { case "show_clones": Clones.singleton().show();