gopkg.in/zumata/godep.v14@v14.0.0-20151008182512-99082d62f381/diff.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "fmt" 6 "log" 7 8 "github.com/tools/godep/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib" 9 ) 10 11 var cmdDiff = &Command{ 12 Usage: "diff", 13 Short: "shows the diff between current and previously saved set of dependencies", 14 Long: ` 15 Shows the difference, in a unified diff format, between the 16 current set of dependencies and those generated on a 17 previous 'go save' execution. 18 `, 19 Run: runDiff, 20 } 21 22 func runDiff(cmd *Command, args []string) { 23 gold, err := loadDefaultGodepsFile() 24 if err != nil { 25 log.Fatalln(err) 26 } 27 28 pkgs := []string{"."} 29 dot, err := LoadPackages(pkgs...) 30 if err != nil { 31 log.Fatalln(err) 32 } 33 34 ver, err := goVersion() 35 if err != nil { 36 log.Fatalln(err) 37 } 38 39 gnew := &Godeps{ 40 ImportPath: dot[0].ImportPath, 41 GoVersion: ver, 42 } 43 44 err = gnew.fill(dot, dot[0].ImportPath) 45 if err != nil { 46 log.Fatalln(err) 47 } 48 49 diff, err := diffStr(&gold, gnew) 50 if err != nil { 51 log.Fatalln(err) 52 } 53 fmt.Println(diff) 54 } 55 56 // diffStr returns a unified diff string of two Godeps. 57 func diffStr(a, b *Godeps) (string, error) { 58 var ab, bb bytes.Buffer 59 60 _, err := a.writeTo(&ab) 61 if err != nil { 62 log.Fatalln(err) 63 } 64 65 _, err = b.writeTo(&bb) 66 if err != nil { 67 log.Fatalln(err) 68 } 69 70 diff := difflib.UnifiedDiff{ 71 A: difflib.SplitLines(ab.String()), 72 B: difflib.SplitLines(bb.String()), 73 FromFile: b.file(), 74 ToFile: "$GOPATH", 75 Context: 10, 76 } 77 return difflib.GetUnifiedDiffString(diff) 78 }