public Gee.HashMap<string,bool> 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<string,GitBranch> branches; // accessed in GitBranch..
public RooTicket? activeTicket;
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()
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();
}
continue;
}
commitrevs += commitrevs.length > 0 ? " " : "";
- commitrevs += repo.currentBranch.lastrev;
+ commitrevs += repo.getCurrentBranch().lastrev;
}
}
if (sucess && action == "CLOSE") {
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 );
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"
}
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(
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:
return true;
};
- new Thread<bool>("thread-new-gitpull", run);
+ new Thread<bool>("thread-new-gitpull-" + this.name, run);
yield;
public static void updateAllAsync(string after)
{
- var done = 0;
+
var doing = new Gee.HashMap<string,bool>();;
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();