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