예제 #1
0
        public virtual void TestDelta_SmallObjectChain()
        {
            ObjectInserter.Formatter fmt = new ObjectInserter.Formatter();
            byte[] data0 = new byte[512];
            Arrays.Fill(data0, unchecked ((byte)unchecked ((int)(0xf3))));
            ObjectId id0 = fmt.IdFor(Constants.OBJ_BLOB, data0);

            TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(64 * 1024);
            PackHeader(pack, 4);
            ObjectHeader(pack, Constants.OBJ_BLOB, data0.Length);
            Deflate(pack, data0);
            byte[]   data1  = Clone(unchecked ((int)(0x01)), data0);
            byte[]   delta1 = Delta(data0, data1);
            ObjectId id1    = fmt.IdFor(Constants.OBJ_BLOB, data1);

            ObjectHeader(pack, Constants.OBJ_REF_DELTA, delta1.Length);
            id0.CopyRawTo(pack);
            Deflate(pack, delta1);
            byte[]   data2  = Clone(unchecked ((int)(0x02)), data1);
            byte[]   delta2 = Delta(data1, data2);
            ObjectId id2    = fmt.IdFor(Constants.OBJ_BLOB, data2);

            ObjectHeader(pack, Constants.OBJ_REF_DELTA, delta2.Length);
            id1.CopyRawTo(pack);
            Deflate(pack, delta2);
            byte[]   data3  = Clone(unchecked ((int)(0x03)), data2);
            byte[]   delta3 = Delta(data2, data3);
            ObjectId id3    = fmt.IdFor(Constants.OBJ_BLOB, data3);

            ObjectHeader(pack, Constants.OBJ_REF_DELTA, delta3.Length);
            id2.CopyRawTo(pack);
            Deflate(pack, delta3);
            Digest(pack);
            PackParser ip = Index(pack.ToByteArray());

            ip.SetAllowThin(true);
            ip.Parse(NullProgressMonitor.INSTANCE);
            NUnit.Framework.Assert.IsTrue(wc.Has(id3), "has blob");
            ObjectLoader ol = wc.Open(id3);

            NUnit.Framework.Assert.IsNotNull(ol, "created loader");
            NUnit.Framework.Assert.AreEqual(Constants.OBJ_BLOB, ol.GetType());
            NUnit.Framework.Assert.AreEqual(data3.Length, ol.GetSize());
            NUnit.Framework.Assert.IsFalse(ol.IsLarge(), "is large");
            NUnit.Framework.Assert.IsNotNull(ol.GetCachedBytes());
            CollectionAssert.AreEquivalent(data3, ol.GetCachedBytes());
            ObjectStream @in = ol.OpenStream();

            NUnit.Framework.Assert.IsNotNull(@in, "have stream");
            NUnit.Framework.Assert.AreEqual(Constants.OBJ_BLOB, @in.GetType());
            NUnit.Framework.Assert.AreEqual(data3.Length, @in.GetSize());
            byte[] act = new byte[data3.Length];
            IOUtil.ReadFully(@in, act, 0, data3.Length);
            NUnit.Framework.Assert.IsTrue(Arrays.Equals(act, data3), "same content");
            NUnit.Framework.Assert.AreEqual(-1, @in.Read(), "stream at EOF");
            @in.Close();
        }
예제 #2
0
        public virtual void Test025_computeSha1NoStore()
        {
            byte[] data = Sharpen.Runtime.GetBytesForString("test025 some data, more than 16 bytes to get good coverage"
                                                            , "ISO-8859-1");
            ObjectId id = new ObjectInserter.Formatter().IdFor(Constants.OBJ_BLOB, data);

            NUnit.Framework.Assert.AreEqual("4f561df5ecf0dfbd53a0dc0f37262fef075d9dde", id.Name
                                            );
        }
예제 #3
0
        /// <summary>Parse an annotated tag from its canonical format.</summary>
        /// <remarks>
        /// Parse an annotated tag from its canonical format.
        /// This method inserts the tag directly into the caller supplied revision
        /// pool, making it appear as though the tag exists in the repository, even
        /// if it doesn't. The repository under the pool is not affected.
        /// </remarks>
        /// <param name="rw">
        /// the revision pool to allocate the tag within. The tag's object
        /// pointer will be obtained from this pool.
        /// </param>
        /// <param name="raw">the canonical formatted tag to be parsed.</param>
        /// <returns>
        /// the parsed tag, in an isolated revision pool that is not
        /// available to the caller.
        /// </returns>
        /// <exception cref="NGit.Errors.CorruptObjectException">the tag contains a malformed header that cannot be handled.
        ///     </exception>
        public static NGit.Revwalk.RevTag Parse(RevWalk rw, byte[] raw)
        {
            ObjectInserter.Formatter fmt = new ObjectInserter.Formatter();
            bool retain = rw.IsRetainBody();

            rw.SetRetainBody(true);
            NGit.Revwalk.RevTag r = rw.LookupTag(fmt.IdFor(Constants.OBJ_TAG, raw));
            r.ParseCanonical(rw, raw);
            rw.SetRetainBody(retain);
            return(r);
        }
예제 #4
0
        public virtual void TestPackFormat_LargeObject()
        {
            int type = Constants.OBJ_BLOB;

            byte[]   data = GetRng().NextBytes(streamThreshold + 5);
            ObjectId id   = new ObjectInserter.Formatter().IdFor(type, data);

            Write(id, CompressPackFormat(type, data));
            ObjectLoader ol;

            {
                FileInputStream fs = new FileInputStream(Path(id));
                try
                {
                    ol = UnpackedObject.Open(fs, Path(id), id, wc);
                }
                finally
                {
                    fs.Close();
                }
            }
            NUnit.Framework.Assert.IsNotNull(ol, "created loader");
            NUnit.Framework.Assert.AreEqual(type, ol.GetType());
            NUnit.Framework.Assert.AreEqual(data.Length, ol.GetSize());
            NUnit.Framework.Assert.IsTrue(ol.IsLarge(), "is large");
            try
            {
                ol.GetCachedBytes();
                NUnit.Framework.Assert.Fail("Should have thrown LargeObjectException");
            }
            catch (LargeObjectException tooBig)
            {
                NUnit.Framework.Assert.AreEqual(MessageFormat.Format(JGitText.Get().largeObjectException
                                                                     , id.Name), tooBig.Message);
            }
            ObjectStream @in = ol.OpenStream();

            NUnit.Framework.Assert.IsNotNull(@in, "have stream");
            NUnit.Framework.Assert.AreEqual(type, @in.GetType());
            NUnit.Framework.Assert.AreEqual(data.Length, @in.GetSize());
            byte[] data2 = new byte[data.Length];
            IOUtil.ReadFully(@in, data2, 0, data.Length);
            NUnit.Framework.Assert.IsTrue(Arrays.Equals(data2, data), "same content");
            NUnit.Framework.Assert.AreEqual(-1, @in.Read(), "stream at EOF");
            @in.Close();
        }
        public virtual void TestParse_PublicParseMethod()
        {
            ObjectInserter.Formatter fmt = new ObjectInserter.Formatter();
            NGit.CommitBuilder       src = new NGit.CommitBuilder();
            src.TreeId    = fmt.IdFor(Constants.OBJ_TREE, new byte[] {  });
            src.Author    = author;
            src.Committer = committer;
            src.Message   = "Test commit\n\nThis is a test.\n";
            RevCommit p = RevCommit.Parse(src.Build());

            NUnit.Framework.Assert.AreEqual(src.TreeId, p.Tree);
            NUnit.Framework.Assert.AreEqual(0, p.ParentCount);
            NUnit.Framework.Assert.AreEqual(author, p.GetAuthorIdent());
            NUnit.Framework.Assert.AreEqual(committer, p.GetCommitterIdent());
            NUnit.Framework.Assert.AreEqual("Test commit", p.GetShortMessage());
            NUnit.Framework.Assert.AreEqual(src.Message, p.GetFullMessage());
        }
        public virtual void TestParse_PublicParseMethod()
        {
            ObjectInserter.Formatter fmt = new ObjectInserter.Formatter();
            TagBuilder src = new TagBuilder();

            src.SetObjectId(fmt.IdFor(Constants.OBJ_TREE, new byte[] {  }), Constants.OBJ_TREE
                            );
            src.SetTagger(committer);
            src.SetTag("a.test");
            src.SetMessage("Test tag\n\nThis is a test.\n");
            RevTag p = RevTag.Parse(src.Build());

            NUnit.Framework.Assert.AreEqual(src.GetObjectId(), p.GetObject());
            NUnit.Framework.Assert.AreEqual(committer, p.GetTaggerIdent());
            NUnit.Framework.Assert.AreEqual("a.test", p.GetTagName());
            NUnit.Framework.Assert.AreEqual("Test tag", p.GetShortMessage());
            NUnit.Framework.Assert.AreEqual(src.GetMessage(), p.GetFullMessage());
        }
예제 #7
0
        public virtual void TestStandardFormat_LargeObject_CorruptZLibStream()
        {
            int type = Constants.OBJ_BLOB;

            byte[]   data = GetRng().NextBytes(streamThreshold + 5);
            ObjectId id   = new ObjectInserter.Formatter().IdFor(type, data);

            byte[] gz = CompressStandardFormat(type, data);
            gz[gz.Length - 1] = 0;
            gz[gz.Length - 2] = 0;
            Write(id, gz);
            ObjectLoader ol;

            {
                FileInputStream fs = new FileInputStream(Path(id));
                try
                {
                    ol = UnpackedObject.Open(fs, Path(id), id, wc);
                }
                finally
                {
                    fs.Close();
                }
            }
            try
            {
                byte[]      tmp = new byte[data.Length];
                InputStream @in = ol.OpenStream();
                try
                {
                    IOUtil.ReadFully(@in, tmp, 0, tmp.Length);
                }
                finally
                {
                    @in.Close();
                }
                NUnit.Framework.Assert.Fail("Did not throw CorruptObjectException");
            }
            catch (CorruptObjectException coe)
            {
                NUnit.Framework.Assert.AreEqual(MessageFormat.Format(JGitText.Get().objectIsCorrupt
                                                                     , id.Name, JGitText.Get().corruptObjectBadStream), coe.Message);
            }
        }