X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=GitRepo.vala;h=99b026776bb800019e03cfac81a3dff607b214d2;hb=8d5b5ff019670d4b09db242aadfd24355a9d8ea6;hp=a7c7860656b32f1f3cb8ad18cd94c296f9f6e179;hpb=5e13c9ab940bebc133ea4596e6b24bdf39c36714;p=gitlive diff --git a/GitRepo.vala b/GitRepo.vala index a7c78606..99b02677 100644 --- a/GitRepo.vala +++ b/GitRepo.vala @@ -7,9 +7,11 @@ * * */ +static GitRepo _GitRepo; + public class GitRepo : Object { - + public Array cmds; public string name; @@ -20,12 +22,22 @@ public class GitRepo : Object public Gee.HashMap ignore_files; public GitBranch currentBranch; + + public static GitRepo singleton() + { + if (_GitRepo == null) { + _GitRepo = new GitRepo.single(); + _GitRepo.cache = new Gee.HashMap(); + } + return _GitRepo; + } + /** * index of.. matching gitpath.. */ public static int indexOf( Array 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) { @@ -36,15 +48,18 @@ public class GitRepo : Object } + public Gee.HashMap cache; + + public static Array list() { - + //if (GitRepo.list_cache != null) { // unowned Array ret = GitRepo.list_cache; // return ret; //} - + var cache = GitRepo.singleton().cache; var list_cache = new Array(); var dir = Environment.get_home_dir() + "/gitlive"; @@ -102,8 +117,8 @@ public class GitRepo : Object continue; } - list_cache.append_val(new GitRepo( sp )) ; - + var rep = GitRepo.get( sp ); + list_cache.append_val(rep); } @@ -111,10 +126,20 @@ public class GitRepo : Object -} - - - + } + + 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: * @@ -123,7 +148,7 @@ public class GitRepo : Object * */ - 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(); @@ -134,8 +159,12 @@ public class GitRepo : Object this.gitdir = path; // naked... } this.cmds = new Array (); - //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); + } } @@ -185,16 +214,20 @@ public class GitRepo : Object 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... }