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