Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

79 lignes
1.7 KiB

  1. // Copyright 2013 The Go Authors. All rights reserved.
  2. //
  3. // Use of this source code is governed by a BSD-style
  4. // license that can be found in the LICENSE file or at
  5. // https://developers.google.com/open-source/licenses/bsd.
  6. package main
  7. import (
  8. "fmt"
  9. "log"
  10. "os"
  11. "sort"
  12. "github.com/golang/gddo/database"
  13. )
  14. var statsCommand = &command{
  15. name: "stats",
  16. run: stats,
  17. usage: "stats",
  18. }
  19. type itemSize struct {
  20. path string
  21. size int
  22. }
  23. type bySizeDesc []itemSize
  24. func (p bySizeDesc) Len() int { return len(p) }
  25. func (p bySizeDesc) Less(i, j int) bool { return p[i].size > p[j].size }
  26. func (p bySizeDesc) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
  27. func stats(c *command) {
  28. if len(c.flag.Args()) != 0 {
  29. c.printUsage()
  30. os.Exit(1)
  31. }
  32. db, err := database.New()
  33. if err != nil {
  34. log.Fatal(err)
  35. }
  36. var packageSizes []itemSize
  37. var truncatedPackages []string
  38. projectSizes := make(map[string]int)
  39. err = db.Do(func(pi *database.PackageInfo) error {
  40. packageSizes = append(packageSizes, itemSize{pi.PDoc.ImportPath, pi.Size})
  41. projectSizes[pi.PDoc.ProjectRoot] += pi.Size
  42. if pi.PDoc.Truncated {
  43. truncatedPackages = append(truncatedPackages, pi.PDoc.ImportPath)
  44. }
  45. return nil
  46. })
  47. var sizes []itemSize
  48. for path, size := range projectSizes {
  49. sizes = append(sizes, itemSize{path, size})
  50. }
  51. sort.Sort(bySizeDesc(sizes))
  52. fmt.Println("PROJECT SIZES")
  53. for _, size := range sizes {
  54. fmt.Printf("%6d %s\n", size.size, size.path)
  55. }
  56. sort.Sort(bySizeDesc(packageSizes))
  57. fmt.Println("PACKAGE SIZES")
  58. for _, size := range packageSizes {
  59. fmt.Printf("%6d %s\n", size.size, size.path)
  60. }
  61. sort.Sort(sort.StringSlice(truncatedPackages))
  62. fmt.Println("TRUNCATED PACKAGES")
  63. for _, p := range truncatedPackages {
  64. fmt.Printf("%s\n", p)
  65. }
  66. }