gopkg.in/tools/godep.v39@v39.0.0-20151216234527-2721f686f09e/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 If -d is given, debug output is enabled (you probably don't want this). 20 `, 21 Run: runDiff, 22 } 23 24 func runDiff(cmd *Command, args []string) { 25 gold, err := loadDefaultGodepsFile() 26 if err != nil { 27 log.Fatalln(err) 28 } 29 30 pkgs := []string{"."} 31 dot, err := LoadPackages(pkgs...) 32 if err != nil { 33 log.Fatalln(err) 34 } 35 36 gnew := &Godeps{ 37 ImportPath: dot[0].ImportPath, 38 GoVersion: gold.GoVersion, 39 } 40 41 err = gnew.fill(dot, dot[0].ImportPath) 42 if err != nil { 43 log.Fatalln(err) 44 } 45 46 diff, err := diffStr(&gold, gnew) 47 if err != nil { 48 log.Fatalln(err) 49 } 50 fmt.Println(diff) 51 } 52 53 // diffStr returns a unified diff string of two Godeps. 54 func diffStr(a, b *Godeps) (string, error) { 55 var ab, bb bytes.Buffer 56 57 _, err := a.writeTo(&ab) 58 if err != nil { 59 log.Fatalln(err) 60 } 61 62 _, err = b.writeTo(&bb) 63 if err != nil { 64 log.Fatalln(err) 65 } 66 67 diff := difflib.UnifiedDiff{ 68 A: difflib.SplitLines(ab.String()), 69 B: difflib.SplitLines(bb.String()), 70 FromFile: b.file(), 71 ToFile: "$GOPATH", 72 Context: 10, 73 } 74 return difflib.GetUnifiedDiffString(diff) 75 }