Skip to content

Commit

Permalink
added cached functionality to dolt diff command
Browse files Browse the repository at this point in the history
  • Loading branch information
VyasSathya committed Dec 14, 2020
1 parent c8f985b commit 60944f7
Showing 1 changed file with 24 additions and 9 deletions.
33 changes: 24 additions & 9 deletions go/cmd/dolt/commands/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ const (
whereParam = "where"
limitParam = "limit"
SQLFlag = "sql"
CachedFlag = "cached"
)

type DiffSink interface {
Expand Down Expand Up @@ -143,6 +144,7 @@ func (cmd DiffCmd) createArgParser() *argparser.ArgParser {
ap.SupportsString(whereParam, "", "column", "filters columns based on values in the diff. See {{.EmphasisLeft}}dolt diff --help{{.EmphasisRight}} for details.")
ap.SupportsInt(limitParam, "", "record_count", "limits to the first N diffs.")
ap.SupportsString(QueryFlag, "q", "query", "diffs the results of a query at two commits")
ap.SupportsFlag(CachedFlag, "c", "Show only the unstaged data changes.")
return ap
}

Expand Down Expand Up @@ -197,6 +199,8 @@ func parseDiffArgs(ctx context.Context, dEnv *env.DoltEnv, apr *argparser.ArgPar
return nil, nil, nil, fmt.Errorf("arg %s cannot be combined with arg %s", QueryFlag, SummaryFlag)
case apr.Contains(SQLFlag):
return nil, nil, nil, fmt.Errorf("arg %s cannot be combined with arg %s", QueryFlag, SQLFlag)
case apr.Contains(CachedFlag):
return nil, nil, nil, fmt.Errorf("arg %s cannot be combined with arg %s", QueryFlag, CachedFlag)
}
dArgs.query = q
}
Expand Down Expand Up @@ -230,7 +234,7 @@ func parseDiffArgs(ctx context.Context, dEnv *env.DoltEnv, apr *argparser.ArgPar
dArgs.limit, _ = apr.GetInt(limitParam)
dArgs.where = apr.GetValueOrDefault(whereParam, "")

from, to, leftover, err := getDiffRoots(ctx, dEnv, apr.Args())
from, to, leftover, err := getDiffRoots(ctx, dEnv, apr.Args(), apr.Contains(CachedFlag))

if err != nil {
return nil, nil, nil, err
Expand Down Expand Up @@ -281,41 +285,52 @@ func parseDiffArgs(ctx context.Context, dEnv *env.DoltEnv, apr *argparser.ArgPar
return from, to, dArgs, nil
}

func getDiffRoots(ctx context.Context, dEnv *env.DoltEnv, args []string) (from, to *doltdb.RootValue, leftover []string, err error) {
headRoot, err := dEnv.StagedRoot(ctx)
func getDiffRoots(ctx context.Context, dEnv *env.DoltEnv, args []string, isCached bool) (from, to *doltdb.RootValue, leftover []string, err error) {
stagedRoot, err := dEnv.StagedRoot(ctx)
workingRoot, err := dEnv.WorkingRootWithDocs(ctx)
headRoot, err := dEnv.HeadRoot(ctx)
if err != nil {
return nil, nil, nil, err
}

// default unstaged roots
fromRoot := stagedRoot
toRoot := workingRoot

// staged roots
if isCached {
fromRoot = headRoot
toRoot = stagedRoot
}

if len(args) == 0 {
// `dolt diff`
from = headRoot
to = workingRoot
from = fromRoot
to = toRoot
return from, to, nil, nil
}

from, ok := maybeResolve(ctx, dEnv, args[0])

if !ok {
// `dolt diff ...tables`
from = headRoot
to = workingRoot
from = fromRoot
to = toRoot
leftover = args
return from, to, leftover, nil
}

if len(args) == 1 {
// `dolt diff from_commit`
to = workingRoot
to = toRoot
return from, to, nil, nil
}

to, ok = maybeResolve(ctx, dEnv, args[1])

if !ok {
// `dolt diff from_commit ...tables`
to = workingRoot
to = toRoot
leftover = args[1:]
return from, to, leftover, nil
}
Expand Down

0 comments on commit 60944f7

Please sign in to comment.