Example #1
0
 public HgCommit(HgNodeID firstParentNodeID, HgNodeID secondParentNodeID, HgAuthor committedBy, DateTimeOffset committedAt, HgBranch branch, string comment, 
     params HgCommitFileEntry[] files) : 
     base(firstParentNodeID, secondParentNodeID)
 {
     CommittedBy = committedBy;
     CommittedAt = committedAt;
     Branch = branch;
     Comment = comment;
     Files = new ReadOnlyCollection<HgCommitFileEntry>(new List<HgCommitFileEntry>(files));
 }
 public HgChangeset(HgRevlogEntryMetadata metadata, HgNodeID manifestNodeID, HgAuthor committedBy, DateTimeOffset committedAt, HgBranch branch, 
     HgNodeID sourceNodeID, IEnumerable<string> files, string comment)
 {
     Metadata = metadata;
     ManifestNodeID = manifestNodeID;
     CommittedBy = committedBy;
     CommittedAt = committedAt;
     Branch = branch;
     SourceNodeID = sourceNodeID;
     Files = new ReadOnlyCollection<string>(new List<string>(files));
     Comment = comment;
 }
        private HgChangeset ReadChangesetInternal(HgRevlogEntryData revlogEntryData)
        {
            var filesStart = revlogEntryData.Data.IndexOfNth((byte)'\n', 3);
            var filesEnd = revlogEntryData.Data.IndexOf((byte)'\n', (byte)'\n');

            var headerString = hgEncoder.DecodeAsUtf8(revlogEntryData.Data, 0, filesStart);
            
            var filesString = 
                filesStart == filesEnd ? 
                    "" :
                    hgEncoder.DecodeAsLocal(
                        revlogEntryData.Data, 
                        filesStart + 1, // The \n 
                        filesEnd - filesStart - 1);
            
            var commentString = hgEncoder.DecodeAsUtf8(
                revlogEntryData.Data, 
                filesEnd + 2, // These \n\n bytes 
                revlogEntryData.Data.Length - filesEnd - 2);

            var header = headerString.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

            var manifestNodeID = new HgNodeID(header[0]);
            var committedBy = HgAuthor.Parse(header[1]);

            var timeParts = header[2].Split(' ');
            var time = int.Parse(timeParts[0]);
            var timeZone = int.Parse(timeParts[1]);

            var branchData = header[2].SubstringAfterNth(" ", 1).Or("branch:default");

            var b = branchData.Split('\0').Select(s => new { key = s.Split(':')[0], value = s.Split(':')[1] }).ToDictionary(s => s.key, s => s.value).DefaultableWith(v => "");
            var branchName = new HgBranch(b["branch"].Or("default"), b["close"] == "1");
            var sourceNodeID = new HgNodeID(b["source"].Or(HgNodeID.Null.Long));
            
            var dateTime = DateTime.SpecifyKind(new DateTime(1970, 1, 1).AddSeconds(time).AddSeconds(-1 * timeZone), DateTimeKind.Local);
            var committedAt = new DateTimeOffset(dateTime);

            var files = filesString.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            
            var metadata = GetRevlogEntryMetadata(revlogEntryData.Entry);

            return new HgChangeset(metadata, manifestNodeID, committedBy, committedAt, branchName, sourceNodeID, files, commentString);
        }
 public HgBranchmap(HgBranch branch, IEnumerable<HgNodeID> nodeIDs)
 {
     Branch = branch;
     NodeIDs = new ReadOnlyCollection<HgNodeID>(new List<HgNodeID>(nodeIDs));
 }