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;
return true;
};
- new Thread<bool>("thread-new-gitrepo", run);
+ new Thread<bool>("thread-new-gitrepo-" + path, run);
yield;
return ret;
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()
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(
public async void doUpdate()
{
- SourceFunc callback = GitRepo.get.callback;
+ SourceFunc callback = this.doUpdate.callback;
GitRepo ret = null;
ThreadFunc<bool> run = () => {
this.loadBranches();
//GLib.debug("connecting '%s'", r.get_url());
- string[] far = {}
+ string[] far = {};
foreach(var br in this.branches.values) {
if (br.remote == "" || br.remoterev == br.lastrev) {
continue;
far += ("+refs/heads/" + br.name + ":refs/remotes/" + br.remote);
}
if (far.length > 0) {
+ GLib.debug("PUlling %s", this.name);
var r = this.repo.lookup_remote("origin");
- r.connect(Ggit.Direction.FETCH, new GitCallbacks, null, null);
+ r.connect(Ggit.Direction.FETCH, new GitCallbacks(this), null, null);
var options = new Ggit.FetchOptions();
- //options.set_remote_callbacks(this.callbacks);
+ options.set_remote_callbacks( new GitCallbacks(this));
r.download(far, options);
}
- repo.loadStatus();
-
+ this.loadStatus();
+
Idle.add((owned) callback);
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>();;
var tr = GitRepo.singleton().cache;
-
+
var update_all_total = tr.size;
foreach(var repo in tr.values) {
+ if (!repo.is_managed()) {
+ update_all_total--;
+ continue;
+ }
+ doing.set(repo.name, true);
repo.doUpdate.begin((obj, res) => {
- GitRepo.updateRepo.end(res);
- done++;
- if (update_all_total != done) {
- return;
+ repo.doUpdate.end(res);
+ doing.set(repo.name, false);
+
+ foreach(var b in doing.keys) {
+ if (doing.get(b)) {
+ GLib.debug("pending: %s", b);
+ return;
+ }
}
+
+
switch (after) {
case "show_clones":
Clones.singleton().show();
GLib.debug("Unkown call after load = %s", update_all_after);
break;
}
- }
+ });
}