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