type metaMerge … type pkstate … type podstate … type pkfunc … type pcombinestate … func newMetaMerge() *metaMerge { … } func (mm *metaMerge) visitMetaDataFile(mdf string, mfr *decodemeta.CoverageMetaFileReader) { … } func (mm *metaMerge) beginCounterDataFile(cdr *decodecounter.CounterDataReader) { … } func copyMetaDataFile(inpath, outpath string) { … } func (mm *metaMerge) beginPod() { … } // metaEndPod handles actions needed when we're done visiting all of // the things in a pod -- counter files and meta-data file. There are // three cases of interest here: // // Case 1: in an unconditional merge (we're not selecting a specific set of // packages using "-pkg", and the "-pcombine" option is not in use), // we can simply copy over the meta-data file from input to output. // // Case 2: if this is a select merge (-pkg is in effect), then at // this point we write out a new smaller meta-data file that includes // only the packages of interest. At this point we also emit a merged // counter data file as well. // // Case 3: if "-pcombine" is in effect, we don't write anything at // this point (all writes will happen at the end of the run). func (mm *metaMerge) endPod(pcombine bool) { … } // emitMeta encodes and writes out a new coverage meta-data file as // part of a merge operation, specifically a merge with the // "-pcombine" flag. func (mm *metaMerge) emitMeta(outdir string, pcombine bool) [16]byte { … } func (mm *metaMerge) emitCounters(outdir string, metaHash [16]byte) { … } // VisitFuncs is used while writing the counter data files; it // implements the 'VisitFuncs' method required by the interface // internal/coverage/encodecounter/CounterVisitor. func (mm *metaMerge) VisitFuncs(f encodecounter.CounterVisitorFn) error { … } func (mm *metaMerge) visitPackage(pd *decodemeta.CoverageMetaDataDecoder, pkgIdx uint32, pcombine bool) { … } func (mm *metaMerge) visitFuncCounterData(data decodecounter.FuncPayload) { … } func (mm *metaMerge) visitFunc(pkgIdx uint32, fnIdx uint32, fd *coverage.FuncDesc, verb string, pcombine bool) { … }