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