private void writeTo(Stream os) { MessageDigest foot = Constants.newMessageDigest(); DigestOutputStream dos = new DigestOutputStream(os, foot); // Write the header. // byte[] tmp = new byte[128]; Array.Copy(SIG_DIRC, 0, tmp, 0, SIG_DIRC.Length); NB.encodeInt32(tmp, 4, /* version */2); NB.encodeInt32(tmp, 8, entryCnt); dos.Write(tmp, 0, 12); // Write the individual file entries. // if (lastModified == DateTime.MinValue) { // Write a new index, as no entries require smudging. // for (int i = 0; i < entryCnt; i++) sortedEntries[i].write(dos); } else { int smudge_s = (int)(lastModified.ToGitInternalTime()); int smudge_ns = (int)(lastModified.Millisecond * 1000000); // [henon] <--- this could be done with much more precision in C# since DateTime has 100 nanosec ticks for (int i = 0; i < entryCnt; i++) { DirCacheEntry e = sortedEntries[i]; if (e.mightBeRacilyClean(smudge_s, smudge_ns)) e.smudgeRacilyClean(); e.write(dos); } } if (tree != null) { TemporaryBuffer bb = new TemporaryBuffer(); tree.write(tmp, bb); bb.close(); NB.encodeInt32(tmp, 0, EXT_TREE); NB.encodeInt32(tmp, 4, (int)bb.Length); dos.Write(tmp, 0, 8); bb.writeTo(dos, null); } var hash = foot.Digest(); os.Write(hash, 0, hash.Length); os.Close(); }
private void WriteTo(Stream os) { MessageDigest foot = Constants.newMessageDigest(); var dos = new DigestOutputStream(os, foot); // Write the header. // var tmp = new byte[128]; Array.Copy(SigDirc, 0, tmp, 0, SigDirc.Length); NB.encodeInt32(tmp, 4, /* version */2); NB.encodeInt32(tmp, 8, _entryCnt); dos.Write(tmp, 0, 12); // Write the individual file entries. // if (_lastModified == DateTime.MinValue) { // Write a new index, as no entries require smudging. // for (int i = 0; i < _entryCnt; i++) { _sortedEntries[i].write(dos); } } else { var smudge_s = _lastModified.ToUnixTime(); var smudge_ns = _lastModified.Millisecond * 1000000; // [henon] <--- this could be done with much more precision in C# since DateTime has 100 nanosec ticks for (int i = 0; i < _entryCnt; i++) { DirCacheEntry e = _sortedEntries[i]; if (e.mightBeRacilyClean(smudge_s, smudge_ns)) e.smudgeRacilyClean(); e.write(dos); } } if (_cacheTree != null) { var bb = new TemporaryBuffer(); _cacheTree.write(tmp, bb); bb.close(); NB.encodeInt32(tmp, 0, ExtTree); NB.encodeInt32(tmp, 4, (int)bb.Length); dos.Write(tmp, 0, 8); bb.writeTo(dos, null); } var hash = foot.Digest(); os.Write(hash, 0, hash.Length); os.Close(); }