gopkg.in/tools/godep.v51@v51.0.0-20160121191931-64044a295f54/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 Name: "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 gnew := &Godeps{ 35 ImportPath: dot[0].ImportPath, 36 GoVersion: gold.GoVersion, 37 } 38 39 err = gnew.fill(dot, dot[0].ImportPath) 40 if err != nil { 41 log.Fatalln(err) 42 } 43 44 diff, err := diffStr(&gold, gnew) 45 if err != nil { 46 log.Fatalln(err) 47 } 48 fmt.Println(diff) 49 } 50 51 // diffStr returns a unified diff string of two Godeps. 52 func diffStr(a, b *Godeps) (string, error) { 53 var ab, bb bytes.Buffer 54 55 _, err := a.writeTo(&ab) 56 if err != nil { 57 log.Fatalln(err) 58 } 59 60 _, err = b.writeTo(&bb) 61 if err != nil { 62 log.Fatalln(err) 63 } 64 65 diff := difflib.UnifiedDiff{ 66 A: difflib.SplitLines(ab.String()), 67 B: difflib.SplitLines(bb.String()), 68 FromFile: b.file(), 69 ToFile: "$GOPATH", 70 Context: 10, 71 } 72 return difflib.GetUnifiedDiffString(diff) 73 }