type Pod … // CollectPods visits the files contained within the directories in // the list 'dirs', collects any coverage-related files, partitions // them into pods, and returns a list of the pods to the caller, along // with an error if something went wrong during directory/file // reading. // // CollectPods skips over any file that is not related to coverage // (e.g. avoids looking at things that are not meta-data files or // counter-data files). CollectPods also skips over 'orphaned' counter // data files (e.g. counter data files for which we can't find the // corresponding meta-data file). If "warn" is true, CollectPods will // issue warnings to stderr when it encounters non-fatal problems (for // orphans or a directory with no meta-data files). func CollectPods(dirs []string, warn bool) ([]Pod, error) { … } // CollectPodsFromFiles functions the same as "CollectPods" but // operates on an explicit list of files instead of a directory. func CollectPodsFromFiles(files []string, warn bool) []Pod { … } type fileWithAnnotations … type protoPod … // collectPodsImpl examines the specified list of files and picks out // subsets that correspond to coverage pods. The first stage in this // process is collecting a set { M1, M2, ... MN } where each M_k is a // distinct coverage meta-data file. We then create a single pod for // each meta-data file M_k, then find all of the counter data files // that refer to that meta-data file (recall that the counter data // file name incorporates the meta-data hash), and add the counter // data file to the appropriate pod. // // This process is complicated by the fact that we need to keep track // of directory indices for counter data files. Here is an example to // motivate: // // directory 1: // // M1 covmeta.9bbf1777f47b3fcacb05c38b035512d6 // C1 covcounters.9bbf1777f47b3fcacb05c38b035512d6.1677673.1662138360208416486 // C2 covcounters.9bbf1777f47b3fcacb05c38b035512d6.1677637.1662138359974441782 // // directory 2: // // M2 covmeta.9bbf1777f47b3fcacb05c38b035512d6 // C3 covcounters.9bbf1777f47b3fcacb05c38b035512d6.1677445.1662138360208416480 // C4 covcounters.9bbf1777f47b3fcacb05c38b035512d6.1677677.1662138359974441781 // M3 covmeta.a723844208cea2ae80c63482c78b2245 // C5 covcounters.a723844208cea2ae80c63482c78b2245.3677445.1662138360208416480 // C6 covcounters.a723844208cea2ae80c63482c78b2245.1877677.1662138359974441781 // // In these two directories we have three meta-data files, but only // two are distinct, meaning that we'll wind up with two pods. The // first pod (with meta-file M1) will have four counter data files // (C1, C2, C3, C4) and the second pod will have two counter data files // (C5, C6). func collectPodsImpl(files []string, dirIndices []int, warn bool) []Pod { … } func warning(s string, a ...interface{ … }