Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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)));
        }
Ejemplo n.º 3
0
		/// <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;
		}