示例#1
0
		public override void SetUp()
		{
			base.SetUp();
			// index with both small (< 2^31) and big offsets
			idx = PackIndex.Open(JGitTestUtil.GetTestResourceFile("pack-huge.idx"));
			reverseIdx = new PackReverseIndex(idx);
		}
示例#2
0
        public void ObjectList()
        {
            var knownOffsets   = new long[] { 370, 349, 304, 12, 175, 414 };
            var knownCrcs      = new long[] { 1376555649, 3015185563, 2667925865, 914969567, 2706901546, 39477847 };
            var knownObjectIds = new[] { "1AFC38724D2B89264C7B3826D40B0655A95CFAB4", "557DB03DE997C86A4A028E1EBD3A1CEB225BE238", "67DC4302383B2715F4E0B8C41840EB05B1873697", "A48B402F61EB8ED445DACAA3AF80A2E9796DCB3B", "E41517D564000311F3D7A54F1390EE82F5F1A55B", "E965047AD7C57865823C7D992B1D046EA66EDF78" };

            var indexFile = new FileInfo("Resources" + Path.DirectorySeparatorChar + "sample.git" + Path.DirectorySeparatorChar + "objects"
                                         + Path.DirectorySeparatorChar + "pack"
                                         + Path.DirectorySeparatorChar + "pack-845b2ba3349cc201321e752b01c5ada8102a9a08.idx");

            var index = PackIndex.Open(indexFile);

            Assert.AreEqual(6, index.ObjectCount);
            Assert.IsTrue(index.HasCRC32Support);

            var i = 0;

            foreach (var item in index)
            {
                Assert.AreEqual(knownObjectIds[i], item.ToString().ToUpper(), "ObjectListId#" + i);
                Assert.AreEqual(knownOffsets[i], item.Offset, "ObjectListOffset#" + i);
                Assert.AreEqual(knownCrcs[i], index.FindCRC32(item.idBuffer), "ObjectListCRC#" + i);
                i++;
            }
        }
示例#3
0
        public void testWriteIndex()
        {
            _writer.setIndexVersion(2);
            WriteVerifyPack4(false);

            // Validate that IndexPack came up with the right CRC32 value.
            PackIndex idx1 = PackIndex.Open(_indexFile);

            Assert.IsTrue(idx1 is PackIndexV2);
            Assert.AreEqual(0x4743F1E4L, idx1.FindCRC32(ObjectId.FromString("82c6b885ff600be425b4ea96dee75dca255b69e7")));

            // Validate that an index written by PackWriter is the same.
            FileInfo idx2File = new FileInfo(_indexFile.FullName + ".2");

            using (var @is = new FileStream(idx2File.FullName, System.IO.FileMode.CreateNew))
            {
                _writer.writeIndex(@is);
            }

            PackIndex idx2 = PackIndex.Open(idx2File);

#pragma warning disable 0612
            Assert.IsInstanceOfType(typeof(PackIndexV2), idx2); // [henon] IsInstanceOfType is obsolete
#pragma warning restore 0612
            Assert.AreEqual(idx1.ObjectCount, idx2.ObjectCount);
            Assert.AreEqual(idx1.Offset64Count, idx2.Offset64Count);

            for (int i = 0; i < idx1.ObjectCount; i++)
            {
                ObjectId id = idx1.GetObjectId(i);
                Assert.AreEqual(id, idx2.GetObjectId(i));
                Assert.AreEqual(idx1.FindOffset(id), idx2.FindOffset(id));
                Assert.AreEqual(idx1.FindCRC32(id), idx2.FindCRC32(id));
            }
        }
        ///	<summary>
        /// Set up tested class instance, test constructor by the way.
        /// </summary>
        public override void setUp()
        {
            base.setUp();

            // index with both small (< 2^31) and big offsets
            var fi = new FileInfo("Resources/pack-huge.idx");
            Assert.IsTrue(fi.Exists, "Does the index exist");
            _idx = PackIndex.Open(fi);
            _reverseIdx = new PackReverseIndex(_idx);
        }
示例#5
0
        ///	<summary>
        /// Set up tested class instance, test constructor by the way.
        /// </summary>
        public override void setUp()
        {
            base.setUp();

            // index with both small (< 2^31) and big offsets
            var fi = new FileInfo("Resources/pack-huge.idx");

            Assert.IsTrue(fi.Exists, "Does the index exist");
            _idx        = PackIndex.Open(fi);
            _reverseIdx = new PackReverseIndex(_idx);
        }
        /// <summary>
        /// Create reverse index from straight/forward pack index, by indexing all
        /// its entries.
        /// </summary>
        /// <param name="packIndex">
        /// Forward index - entries to (reverse) index.
        /// </param>
        public PackReverseIndex(PackIndex packIndex)
        {
            _index = packIndex;

            long cnt = _index.ObjectCount;
            long n64 = _index.Offset64Count;
            long n32 = cnt - n64;
            if (n32 > int.MaxValue || n64 > int.MaxValue || cnt > 0xffffffffL)
            {
                throw new ArgumentException("Huge indexes are not supported, yet");
            }

            _offsets32 = new int[(int)n32];
            _offsets64 = new long[(int)n64];
            _nth32 = new int[_offsets32.Length];
            _nth64 = new int[_offsets64.Length];

            int i32 = 0;
            int i64 = 0;

            foreach (PackIndex.MutableEntry me in _index)
            {
                long o = me.Offset;
                if (o < int.MaxValue)
                {
                    _offsets32[i32++] = (int)o;
                }
                else
                {
                    _offsets64[i64++] = o;
                }
            }

            Array.Sort(_offsets32);
            Array.Sort(_offsets64);

            int nth = 0;
            foreach (PackIndex.MutableEntry me in _index)
            {
                long o = me.Offset;
                if (o < int.MaxValue)
                {
                    _nth32[Array.BinarySearch(_offsets32, (int)o)] = nth++;
                }
                else
                {
                    _nth64[Array.BinarySearch(_offsets64, o)] = nth++;
                }
            }
        }
示例#7
0
		/// <summary>
		/// Create reverse index from straight/forward pack index, by indexing all
		/// its entries.
		/// </summary>
		/// <remarks>
		/// Create reverse index from straight/forward pack index, by indexing all
		/// its entries.
		/// </remarks>
		/// <param name="packIndex">forward index - entries to (reverse) index.</param>
		public PackReverseIndex(PackIndex packIndex)
		{
			index = packIndex;
			long cnt = index.GetObjectCount();
			long n64 = index.GetOffset64Count();
			long n32 = cnt - n64;
			if (n32 > int.MaxValue || n64 > int.MaxValue || cnt > unchecked((long)(0xffffffffL
				)))
			{
				throw new ArgumentException(JGitText.Get().hugeIndexesAreNotSupportedByJgitYet);
			}
			offsets32 = new int[(int)n32];
			offsets64 = new long[(int)n64];
			nth32 = new int[offsets32.Length];
			nth64 = new int[offsets64.Length];
			int i32 = 0;
			int i64 = 0;
			foreach (PackIndex.MutableEntry me in index)
			{
				long o = me.GetOffset();
				if (o < int.MaxValue)
				{
					offsets32[i32++] = (int)o;
				}
				else
				{
					offsets64[i64++] = o;
				}
			}
			Arrays.Sort(offsets32);
			Arrays.Sort(offsets64);
			int nth = 0;
			foreach (PackIndex.MutableEntry me_1 in index)
			{
				long o = me_1.GetOffset();
				if (o < int.MaxValue)
				{
					nth32[System.Array.BinarySearch(offsets32, (int)o)] = nth++;
				}
				else
				{
					nth64[System.Array.BinarySearch(offsets64, o)] = nth++;
				}
			}
		}
示例#8
0
 public override void setUp()
 {
     base.setUp();
     smallIdx = PackIndex.Open(GetFileForPack34Be9032());
     _denseIdx = PackIndex.Open(GetFileForPackdf2982F28());
 }
示例#9
0
 public override void setUp()
 {
     base.setUp();
     smallIdx = PackIndex.Open(getFileForPack34be9032());
     denseIdx = PackIndex.Open(getFileForPackdf2982f28());
 }
			/// <exception cref="System.IO.IOException"></exception>
			internal virtual void OpenIndex(ProgressMonitor pm)
			{
				if (this.index != null)
				{
					return;
				}
				if (this.tmpIdx == null)
				{
					this.tmpIdx = FilePath.CreateTempFile("jgit-walk-", ".idx");
				}
				else
				{
					if (this.tmpIdx.IsFile())
					{
						try
						{
							this.index = PackIndex.Open(this.tmpIdx);
							return;
						}
						catch (FileNotFoundException)
						{
						}
					}
				}
				// Fall through and get the file.
				WalkRemoteObjectDatabase.FileStream s;
				s = this.connection.Open("pack/" + this.idxName);
				pm.BeginTask("Get " + Sharpen.Runtime.Substring(this.idxName, 0, 12) + "..idx", s
					.length < 0 ? ProgressMonitor.UNKNOWN : (int)(s.length / 1024));
				try
				{
					FileOutputStream fos = new FileOutputStream(this.tmpIdx);
					try
					{
						byte[] buf = new byte[2048];
						int cnt;
						while (!pm.IsCancelled() && (cnt = [email protected](buf)) >= 0)
						{
							fos.Write(buf, 0, cnt);
							pm.Update(cnt / 1024);
						}
					}
					finally
					{
						fos.Close();
					}
				}
				catch (IOException err)
				{
					FileUtils.Delete(this.tmpIdx);
					throw;
				}
				finally
				{
					[email protected]();
				}
				pm.EndTask();
				if (pm.IsCancelled())
				{
					FileUtils.Delete(this.tmpIdx);
					return;
				}
				try
				{
					this.index = PackIndex.Open(this.tmpIdx);
				}
				catch (IOException e)
				{
					FileUtils.Delete(this.tmpIdx);
					throw;
				}
			}
示例#11
0
 public override void setUp()
 {
     base.setUp();
     smallIdx  = PackIndex.Open(GetFileForPack34Be9032());
     _denseIdx = PackIndex.Open(GetFileForPackdf2982F28());
 }
            public void OpenIndex(ProgressMonitor pm)
            {
                if (Index != null)
                {
                    return;
                }

                if (TmpIdx.IsFile())
                {
                    try
                    {
                        Index = PackIndex.Open(TmpIdx);
                        return;
                    }
                    catch (FileNotFoundException)
                    {
                        // Fall through and get the file.
                    }
                }

                using (Stream s = _connection.open("pack/" + _idxName))
                {
                    pm.BeginTask("Get " + _idxName.Slice(0, 12) + "..idx", !s.CanSeek ? ProgressMonitor.UNKNOWN : (int)(s.Length / 1024));

                    try
                    {
                        using (var fos = new FileStream(TmpIdx.FullName, System.IO.FileMode.CreateNew, FileAccess.Write))
                        {
                            var buf = new byte[2048];
                            int cnt;
                            while (!pm.IsCancelled && (cnt = s.Read(buf, 0, buf.Length)) > 0)
                            {
                                fos.Write(buf, 0, cnt);
                                pm.Update(cnt / 1024);
                            }
                        }
                    }
                    catch (IOException)
                    {
                        TmpIdx.DeleteFile();
                        throw;
                    }
                }

                pm.EndTask();

                if (pm.IsCancelled)
                {
                    TmpIdx.DeleteFile();
                    return;
                }

                try
                {
                    Index = PackIndex.Open(TmpIdx);
                }
                catch (IOException)
                {
                    TmpIdx.DeleteFile();
                    throw;
                }
            }
示例#13
0
 /// <exception cref="System.IO.IOException"></exception>
 internal virtual void OpenIndex(ProgressMonitor pm)
 {
     if (this.index != null)
     {
         return;
     }
     if (this.tmpIdx == null)
     {
         this.tmpIdx = FilePath.CreateTempFile("jgit-walk-", ".idx");
     }
     else
     {
         if (this.tmpIdx.IsFile())
         {
             try
             {
                 this.index = PackIndex.Open(this.tmpIdx);
                 return;
             }
             catch (FileNotFoundException)
             {
             }
         }
     }
     // Fall through and get the file.
     WalkRemoteObjectDatabase.FileStream s;
     s = this.connection.Open("pack/" + this.idxName);
     pm.BeginTask("Get " + Sharpen.Runtime.Substring(this.idxName, 0, 12) + "..idx", s
                  .length < 0 ? ProgressMonitor.UNKNOWN : (int)(s.length / 1024));
     try
     {
         FileOutputStream fos = new FileOutputStream(this.tmpIdx);
         try
         {
             byte[] buf = new byte[2048];
             int    cnt;
             while (!pm.IsCancelled() && (cnt = [email protected](buf)) >= 0)
             {
                 fos.Write(buf, 0, cnt);
                 pm.Update(cnt / 1024);
             }
         }
         finally
         {
             fos.Close();
         }
     }
     catch (IOException err)
     {
         FileUtils.Delete(this.tmpIdx);
         throw;
     }
     finally
     {
         [email protected]();
     }
     pm.EndTask();
     if (pm.IsCancelled())
     {
         FileUtils.Delete(this.tmpIdx);
         return;
     }
     try
     {
         this.index = PackIndex.Open(this.tmpIdx);
     }
     catch (IOException e)
     {
         FileUtils.Delete(this.tmpIdx);
         throw;
     }
 }
示例#14
0
            public void OpenIndex(ProgressMonitor pm)
            {
                if (Index != null)
                {
                    return;
                }

                try
                {
                    Index = PackIndex.Open(TmpIdx);
                    return;
                }
                catch (FileNotFoundException)
                {
                }

                Stream s = _connection.open("pack/" + _idxName);

                pm.BeginTask("Get " + _idxName.Slice(0, 12) + "..idx", s.Length < 0 ? -1 : (int)(s.Length / 1024));
                try
                {
                    var fos = new FileStream(TmpIdx.ToString(), System.IO.FileMode.Open, FileAccess.ReadWrite);
                    try
                    {
                        var buf = new byte[2048];
                        int cnt;
                        while (!pm.IsCancelled && (cnt = s.Read(buf, 0, buf.Length)) >= 0)
                        {
                            fos.Write(buf, 0, cnt);
                            pm.Update(cnt / 1024);
                        }
                    }
                    finally
                    {
                        fos.Close();
                    }
                }
                catch (IOException)
                {
                    TmpIdx.Delete();
                    throw;
                }
                finally
                {
                    s.Close();
                }
                pm.EndTask();

                if (pm.IsCancelled)
                {
                    TmpIdx.Delete();
                    return;
                }

                try
                {
                    Index = PackIndex.Open(TmpIdx);
                }
                catch (IOException)
                {
                    TmpIdx.Delete();
                    throw;
                }
            }
示例#15
0
            public void OpenIndex(ProgressMonitor pm)
            {
                if (Index != null) return;

                if (TmpIdx.IsFile())
                {
                    try
                    {
                        Index = PackIndex.Open(TmpIdx);
                        return;
                    }
                    catch (FileNotFoundException)
                    {
                        // Fall through and get the file.
                    }
                }

                using (Stream s = _connection.open("pack/" + _idxName))
                {
                    pm.BeginTask("Get " + _idxName.Slice(0, 12) + "..idx", !s.CanSeek ? ProgressMonitor.UNKNOWN : (int)(s.Length / 1024));

                    try
                    {
                        using (var fos = new FileStream(TmpIdx.FullName, System.IO.FileMode.CreateNew, FileAccess.Write))
                        {
                            var buf = new byte[2048];
                            int cnt;
                            while (!pm.IsCancelled && (cnt = s.Read(buf, 0, buf.Length)) > 0)
                            {
                                fos.Write(buf, 0, cnt);
                                pm.Update(cnt / 1024);
                            }
                        }
                    }
                    catch (IOException)
                    {
                        TmpIdx.DeleteFile();
                        throw;
                    }
                }

                pm.EndTask();

                if (pm.IsCancelled)
                {
                    TmpIdx.DeleteFile();
                    return;
                }

                try
                {
                    Index = PackIndex.Open(TmpIdx);
                }
                catch (IOException)
                {
                    TmpIdx.DeleteFile();
                    throw;
                }
            }