github.com/tools/godep@v0.0.0-20180126220526-ce0bfadeb516/diff.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"log"
     7  
     8  	"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  	OnlyInGOPATH: true,
    21  }
    22  
    23  func runDiff(cmd *Command, args []string) {
    24  	gold, err := loadDefaultGodepsFile()
    25  	if err != nil {
    26  		log.Fatalln(err)
    27  	}
    28  
    29  	pkgs := []string{"."}
    30  	dot, err := LoadPackages(pkgs...)
    31  	if err != nil {
    32  		log.Fatalln(err)
    33  	}
    34  
    35  	gnew := &Godeps{
    36  		ImportPath: dot[0].ImportPath,
    37  		GoVersion:  gold.GoVersion,
    38  	}
    39  
    40  	err = gnew.fill(dot, dot[0].ImportPath)
    41  	if err != nil {
    42  		log.Fatalln(err)
    43  	}
    44  
    45  	diff, err := diffStr(&gold, gnew)
    46  	if err != nil {
    47  		log.Fatalln(err)
    48  	}
    49  	fmt.Println(diff)
    50  }
    51  
    52  // diffStr returns a unified diff string of two Godeps.
    53  func diffStr(a, b *Godeps) (string, error) {
    54  	var ab, bb bytes.Buffer
    55  
    56  	_, err := a.writeTo(&ab)
    57  	if err != nil {
    58  		log.Fatalln(err)
    59  	}
    60  
    61  	_, err = b.writeTo(&bb)
    62  	if err != nil {
    63  		log.Fatalln(err)
    64  	}
    65  
    66  	diff := difflib.UnifiedDiff{
    67  		A:        difflib.SplitLines(ab.String()),
    68  		B:        difflib.SplitLines(bb.String()),
    69  		FromFile: b.file(),
    70  		ToFile:   "$GOPATH",
    71  		Context:  10,
    72  	}
    73  	return difflib.GetUnifiedDiffString(diff)
    74  }