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); }
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++; } }
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); }
/// <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++; } } }
/// <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++; } } }
public override void setUp() { base.setUp(); smallIdx = PackIndex.Open(GetFileForPack34Be9032()); _denseIdx = PackIndex.Open(GetFileForPackdf2982F28()); }
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; } }
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; } }
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; } }
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; } }