*
*
*/
+static GitRepo _GitRepo;
+
public class GitRepo : Object
{
-
+
public Array<GitMonitorQueue> cmds;
public string name;
public Gee.HashMap<string,bool> ignore_files;
public GitBranch currentBranch;
+
+ public static GitRepo singleton()
+ {
+ if (_GitRepo == null) {
+ _GitRepo = new GitRepo.single();
+ _GitRepo.cache = new Gee.HashMap<string,GitRepo>();
+ }
+ return _GitRepo;
+ }
+
/**
* index of.. matching gitpath..
*/
public static int indexOf( Array<GitRepo> repos, string gitpath) {
// make a fake object to compare against..
- var test_repo = new GitRepo(gitpath);
+ var test_repo = GitRepo.get(gitpath);
for(var i =0; i < repos.length; i++) {
if (repos.index(i).gitdir == test_repo.gitdir) {
}
+ public Gee.HashMap<string,GitRepo> cache;
+
+
public static Array<GitRepo> list()
{
-
+
//if (GitRepo.list_cache != null) {
// unowned Array<GitRepo> ret = GitRepo.list_cache;
// return ret;
//}
-
+ var cache = GitRepo.singleton().cache;
var list_cache = new Array<GitRepo>();
var dir = Environment.get_home_dir() + "/gitlive";
continue;
}
- list_cache.append_val(new GitRepo( sp )) ;
-
+ var rep = GitRepo.get( sp );
+ list_cache.append_val(rep);
}
-}
-
-
-
+ }
+
+ public static GitRepo get(string path)
+ {
+ var cache = GitRepo.singleton().cache;
+ if (cache.has_key(path)) {
+ return cache.get(path);
+ }
+ return new GitRepo(path);
+ }
+
+ private GitRepo.single() {
+ // used to create the signleton
+ }
/**
* constructor:
*
*
*/
- public GitRepo(string path) {
+ private GitRepo(string path) {
// cal parent?
this.name = File.new_for_path(path).get_basename();
this.ignore_files = new Gee.HashMap<string,bool>();
this.gitdir = path; // naked...
}
this.cmds = new Array<GitMonitorQueue> ();
- //Repo.superclass.constructor.call(this,cfg);
+ var cache = GitRepo.singleton().cache;
+ //Repo.superclass.constructor.call(this,cfg);
+ if ( !cache.has_key(path) ) {
+ cache.set( path, this);
+ }
}
return ret;
}
+ RooTicket? ticket = null;
- public void setActiveTicket(RooTicket ticket)
+ public void setActiveTicket(RooTicket ticket, string branchname)
{
-
-
+ this.createBranchNamed(branchname);
+ FileUtils.set_contents(this.gitdir + "/.gitlive-active-ticket" , ticket.id);
+ this.activeTicket = ticket;
}
public void createBranchNamed(string branchname)
{
string[] cmd = { "checkout", "-b" , branchname };
this.git(cmd);
-
+ this.loadBranches(); // update branch list...
}