(hashes []plumbing.Hash, hashToIndex map[plumbing.Hash]uint32, idx Index)
| 144 | } |
| 145 | |
| 146 | func (e *Encoder) encodeCommitData(hashes []plumbing.Hash, hashToIndex map[plumbing.Hash]uint32, idx Index) (extraEdges []uint32, err error) { |
| 147 | for _, hash := range hashes { |
| 148 | origIndex, _ := idx.GetIndexByHash(hash) |
| 149 | commitData, _ := idx.GetCommitDataByIndex(origIndex) |
| 150 | if _, err = e.Write(commitData.TreeHash[:]); err != nil { |
| 151 | return |
| 152 | } |
| 153 | |
| 154 | var parent1, parent2 uint32 |
| 155 | if len(commitData.ParentHashes) == 0 { |
| 156 | parent1 = parentNone |
| 157 | parent2 = parentNone |
| 158 | } else if len(commitData.ParentHashes) == 1 { |
| 159 | parent1 = hashToIndex[commitData.ParentHashes[0]] |
| 160 | parent2 = parentNone |
| 161 | } else if len(commitData.ParentHashes) == 2 { |
| 162 | parent1 = hashToIndex[commitData.ParentHashes[0]] |
| 163 | parent2 = hashToIndex[commitData.ParentHashes[1]] |
| 164 | } else if len(commitData.ParentHashes) > 2 { |
| 165 | parent1 = hashToIndex[commitData.ParentHashes[0]] |
| 166 | parent2 = uint32(len(extraEdges)) | parentOctopusUsed |
| 167 | for _, parentHash := range commitData.ParentHashes[1:] { |
| 168 | extraEdges = append(extraEdges, hashToIndex[parentHash]) |
| 169 | } |
| 170 | extraEdges[len(extraEdges)-1] |= parentLast |
| 171 | } |
| 172 | |
| 173 | if err = binary.WriteUint32(e, parent1); err == nil { |
| 174 | err = binary.WriteUint32(e, parent2) |
| 175 | } |
| 176 | if err != nil { |
| 177 | return |
| 178 | } |
| 179 | |
| 180 | unixTime := uint64(commitData.When.Unix()) |
| 181 | unixTime |= uint64(commitData.Generation) << 34 |
| 182 | if err = binary.WriteUint64(e, unixTime); err != nil { |
| 183 | return |
| 184 | } |
| 185 | } |
| 186 | return |
| 187 | } |
| 188 | |
| 189 | func (e *Encoder) encodeExtraEdges(extraEdges []uint32) (err error) { |
| 190 | for _, parent := range extraEdges { |
no test coverage detected