package main import ( "bytes" "fmt" "log" "github.com/pmezard/go-difflib/difflib" ) var cmdDiff = &Command{ Name: "diff", Short: "shows the diff between current and previously saved set of dependencies", Long: ` Shows the difference, in a unified diff format, between the current set of dependencies and those generated on a previous 'go save' execution. `, Run: runDiff, OnlyInGOPATH: true, } func runDiff(cmd *Command, args []string) { gold, err := loadDefaultGodepsFile() if err != nil { log.Fatalln(err) } pkgs := []string{"."} dot, err := LoadPackages(pkgs...) if err != nil { log.Fatalln(err) } gnew := &Godeps{ ImportPath: dot[0].ImportPath, GoVersion: gold.GoVersion, } err = gnew.fill(dot, dot[0].ImportPath) if err != nil { log.Fatalln(err) } diff, err := diffStr(&gold, gnew) if err != nil { log.Fatalln(err) } fmt.Println(diff) } // diffStr returns a unified diff string of two Godeps. func diffStr(a, b *Godeps) (string, error) { var ab, bb bytes.Buffer _, err := a.writeTo(&ab) if err != nil { log.Fatalln(err) } _, err = b.writeTo(&bb) if err != nil { log.Fatalln(err) } diff := difflib.UnifiedDiff{ A: difflib.SplitLines(ab.String()), B: difflib.SplitLines(bb.String()), FromFile: b.file(), ToFile: "$GOPATH", Context: 10, } return difflib.GetUnifiedDiffString(diff) }