public virtual void TestCacheOpen() { RepositoryCache.FileKey loc = RepositoryCache.FileKey.Exact(db.Directory, db.FileSystem ); Repository d2 = RepositoryCache.Open(loc); NUnit.Framework.Assert.AreNotSame(db, d2); NUnit.Framework.Assert.AreSame(d2, RepositoryCache.Open(RepositoryCache.FileKey.Exact (loc.GetFile(), db.FileSystem))); d2.Close(); d2.Close(); }
public virtual void TestCacheRegisterOpen() { FilePath dir = db.Directory; RepositoryCache.Register(db); NUnit.Framework.Assert.AreSame(db, RepositoryCache.Open(RepositoryCache.FileKey.Exact (dir, db.FileSystem))); NUnit.Framework.Assert.AreEqual(".git", dir.GetName()); FilePath parent = dir.GetParentFile(); NUnit.Framework.Assert.AreSame(db, RepositoryCache.Open(RepositoryCache.FileKey.Lenient (parent, db.FileSystem))); }
/// <exception cref="System.IO.IOException"></exception> private Repository OpenRepository(RepositoryCache.Key location, bool mustExist) { Reference<Repository> @ref = cacheMap.Get(location); Repository db = @ref != null ? @ref.Get() : null; if (db == null) { lock (LockFor(location)) { @ref = cacheMap.Get(location); db = @ref != null ? @ref.Get() : null; if (db == null) { db = location.Open(mustExist); @ref = new SoftReference<Repository>(db); cacheMap.Put(location, @ref); } } } db.IncrementOpen(); return db; }