Example #1
0
        public PackObject GetObjectWithOffset(GitPackReader reader)
        {
            Debug.WriteLine("Fetching object with offset: {0}".FormatWith(reader.Position));

              // Read first byte, it contains the type and 4 bits of object length
              byte buffer = reader.ReadByte();
              ObjectType type = (ObjectType)((buffer >> 4) & 7);
              long size = buffer & 0xf;

              // Read byte while 8th bit is 1.
              int bitCount = 4;
              while ((buffer & 0x80) != 0) // >> 7 == 1);
              {
            buffer = reader.ReadByte();

            size |= ((long)buffer & 0x7f) << bitCount;
            bitCount += 7;
              }

              if (type == ObjectType.RefDelta)
              {
            return new REFDelta(size, type, reader);
              }
              else if (type == ObjectType.OFSDelta)
              {
            return new OFSDelta(size, type, reader);
              }
              else
              {
            using (MemoryStream inflated = reader.UncompressToLength(size))
            {
              return new Undeltified(size, type, inflated.ToArray());
            }
              }
        }
Example #2
0
        public PackObject GetObjectWithOffset(long offset)
        {
            using (GitPackReader reader = new GitPackReader(File.OpenRead(Path)))
            {
                // Set stream position to offset
                reader.Position = offset;

                // Read first byte, it contains the type and 4 bits of object length
                byte       buffer = reader.ReadByte();
                ObjectType type   = (ObjectType)((buffer >> 4) & 7);
                long       size   = buffer & 0xf;

                // Read byte while 8th bit is 1.
                int bitCount = 4;
                do
                {
                    buffer = reader.ReadByte();

                    size     |= ((long)buffer & 0x7f) << bitCount;
                    bitCount += 7;
                } while (buffer >> 7 == 1);



                if (type == ObjectType.RefDelta)
                {
                    return(new REFDelta(size, type, reader));
                }
                else if (type == ObjectType.OFSDelta)
                {
                    return(new OFSDelta(size, type, reader));
                }
                else
                {
                    using (MemoryStream inflated = reader.UncompressToLength(size))
                    {
                        return(new Undeltified(size, type, inflated.ToArray()));
                    }
                }
            }
        }
Example #3
0
        public PackObject GetObjectWithOffset(long offset)
        {
            using (GitPackReader reader = new GitPackReader(File.OpenRead(Path)))
              {
            // Set stream position to offset
            reader.Position = offset;

            // Read first byte, it contains the type and 4 bits of object length
            byte buffer = reader.ReadByte();
            ObjectType type = (ObjectType)((buffer >> 4) & 7);
            long size = buffer & 0xf;

            // Read byte while 8th bit is 1.
            int bitCount = 4;
            do
            {
              buffer = reader.ReadByte();

              size |= ((long)buffer & 0x7f) << bitCount;
              bitCount += 7;

            } while (buffer >> 7 == 1);

            if (type == ObjectType.RefDelta)
            {
              return new REFDelta(size, type, reader);
            }
            else if (type == ObjectType.OFSDelta)
            {
              return new OFSDelta(size, type, reader);
            }
            else
            {
              using (MemoryStream inflated = reader.UncompressToLength(size))
              {
            return new Undeltified(size, type, inflated.ToArray());
              }
            }
              }
        }