|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2013 The Go Authors. All rights reserved.
- //
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file or at
- // https://developers.google.com/open-source/licenses/bsd.
-
- package main
-
- import (
- "fmt"
- "log"
- "os"
- "sort"
-
- "github.com/golang/gddo/database"
- )
-
- var statsCommand = &command{
- name: "stats",
- run: stats,
- usage: "stats",
- }
-
- type itemSize struct {
- path string
- size int
- }
-
- type bySizeDesc []itemSize
-
- func (p bySizeDesc) Len() int { return len(p) }
- func (p bySizeDesc) Less(i, j int) bool { return p[i].size > p[j].size }
- func (p bySizeDesc) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
-
- func stats(c *command) {
- if len(c.flag.Args()) != 0 {
- c.printUsage()
- os.Exit(1)
- }
- db, err := database.New()
- if err != nil {
- log.Fatal(err)
- }
-
- var packageSizes []itemSize
- var truncatedPackages []string
- projectSizes := make(map[string]int)
- err = db.Do(func(pi *database.PackageInfo) error {
- packageSizes = append(packageSizes, itemSize{pi.PDoc.ImportPath, pi.Size})
- projectSizes[pi.PDoc.ProjectRoot] += pi.Size
- if pi.PDoc.Truncated {
- truncatedPackages = append(truncatedPackages, pi.PDoc.ImportPath)
- }
- return nil
- })
-
- var sizes []itemSize
- for path, size := range projectSizes {
- sizes = append(sizes, itemSize{path, size})
- }
- sort.Sort(bySizeDesc(sizes))
- fmt.Println("PROJECT SIZES")
- for _, size := range sizes {
- fmt.Printf("%6d %s\n", size.size, size.path)
- }
-
- sort.Sort(bySizeDesc(packageSizes))
- fmt.Println("PACKAGE SIZES")
- for _, size := range packageSizes {
- fmt.Printf("%6d %s\n", size.size, size.path)
- }
-
- sort.Sort(sort.StringSlice(truncatedPackages))
- fmt.Println("TRUNCATED PACKAGES")
- for _, p := range truncatedPackages {
- fmt.Printf("%s\n", p)
- }
- }
|