OpenHome.Git.Repository.WriteObject C# (CSharp) Method

WriteObject() private method

private WriteObject ( byte aContent, EObjectType aType ) : string
aContent byte
aType EObjectType
return string
        internal string WriteObject(byte[] aContent, EObjectType aType)
        {
            byte zero = 0;
            byte space = (byte)' ';
            byte[] type = Object.TypeBytes(aType);
            byte[] length = ASCIIEncoding.ASCII.GetBytes(aContent.Length.ToString());
            byte[] obj = new byte[type.Length + length.Length + aContent.Length + 2];

            Array.Copy(type, 0, obj, 0, type.Length);
            obj[type.Length] = space;
            Array.Copy(length, 0, obj, type.Length + 1, length.Length);
            obj[type.Length + length.Length + 1] = zero;
            Array.Copy(aContent, 0, obj, type.Length + length.Length + 2, aContent.Length);

            string id = Hash.String(iHash.Compute(obj));

            DirectoryInfo folder = iFolderObjects.CreateSubdirectory(id.Substring(0, 2));

            String path = Path.Combine(folder.FullName, id.Substring(2));

            if (File.Exists(path))
            {
                return (id);
            }

            var file = new FileStream(path, FileMode.CreateNew, FileAccess.Write);

            DeflaterOutputStream deflater = new DeflaterOutputStream(file);

            using (var writer = new BinaryWriter(deflater))
            {
                writer.Write(obj);
                deflater.Finish();
            }

            return (id);
        }

Usage Example

コード例 #1
0
ファイル: Blob.cs プロジェクト: openhome/ohGit
 internal static IBlob Write(Repository aRepository, byte[] aContents)
 {
     string id = aRepository.WriteObject(aContents, EObjectType.Blob);
     return (new Blob(aRepository, id, aContents));
 }
All Usage Examples Of OpenHome.Git.Repository::WriteObject