gopkg.in/tools/godep.v38@v38.0.0-20151216225452-4154dbb67855/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  }