Skip to content

Commit

Permalink
Tidying up
Browse files Browse the repository at this point in the history
  • Loading branch information
fulghum committed Jul 21, 2023
1 parent e5a20ca commit 83c3f3f
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 12 deletions.
27 changes: 21 additions & 6 deletions go/libraries/doltcore/doltdb/workingset.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ type MergeState struct {
commitSpecStr string
preMergeWorking *RootValue
unmergableTables []string
IsCherryPick bool
// isCherryPick is set to true when the in-progress merge is a cherry-pick. This is needed so that
// commit knows to NOT create a commit with multiple parents when creating a commit for a cherry-pick.
isCherryPick bool
}

// todo(andy): this might make more sense in pkg merge
Expand Down Expand Up @@ -76,6 +78,12 @@ func (m MergeState) CommitSpecStr() string {
return m.commitSpecStr
}

// IsCherryPick returns true if the current merge state is for a cherry-pick operation. Cherry-picks use the same
// code as merge, but need slightly different behavior (e.g. only recording one commit parent, instead of two).
func (m MergeState) IsCherryPick() bool {
return m.isCherryPick
}

func (m MergeState) PreMergeWorkingRoot() *RootValue {
return m.preMergeWorking
}
Expand Down Expand Up @@ -194,15 +202,17 @@ func (ws WorkingSet) StartMerge(commit *Commit, commitSpecStr string) *WorkingSe
return &ws
}

// TODO: godocs!
// StartCherryPick creates and returns a new working set based off of the current |ws| with the specified |commit|
// and |commitSpecStr| referring to the commit being cherry-picked. The returned WorkingSet records that a cherry-pick
// operation is in progress (i.e. conflicts being resolved). Note that this function does not update the current
// session – the returned WorkingSet must still be set using DoltSession.SetWorkingSet().
func (ws WorkingSet) StartCherryPick(commit *Commit, commitSpecStr string) *WorkingSet {
ws.mergeState = &MergeState{
commit: commit,
commitSpecStr: commitSpecStr,
preMergeWorking: ws.workingRoot,
IsCherryPick: true,
isCherryPick: true,
}

return &ws
}

Expand Down Expand Up @@ -312,12 +322,17 @@ func newWorkingSet(ctx context.Context, name string, vrw types.ValueReadWriter,
return nil, err
}

isCherryPick, err := dsws.MergeState.IsCherryPick(ctx, vrw)
if err != nil {
return nil, err
}

mergeState = &MergeState{
commit: commit,
commitSpecStr: commitSpec,
preMergeWorking: preMergeWorkingRoot,
unmergableTables: unmergableTables,
IsCherryPick: dsws.MergeState.IsCherryPick,
isCherryPick: isCherryPick,
}
}

Expand Down Expand Up @@ -392,7 +407,7 @@ func (ws *WorkingSet) writeValues(ctx context.Context, db *DoltDB) (
return types.Ref{}, types.Ref{}, nil, err
}

mergeState, err = datas.NewMergeState(ctx, db.vrw, preMergeWorking, dCommit, ws.mergeState.commitSpecStr, ws.mergeState.unmergableTables, ws.mergeState.IsCherryPick)
mergeState, err = datas.NewMergeState(ctx, db.vrw, preMergeWorking, dCommit, ws.mergeState.commitSpecStr, ws.mergeState.unmergableTables, ws.mergeState.isCherryPick)
if err != nil {
return types.Ref{}, types.Ref{}, nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion go/libraries/doltcore/sqle/dsess/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -657,7 +657,7 @@ func (d *DoltSession) newPendingCommit(ctx *sql.Context, branchState *branchStat
}

var mergeParentCommits []*doltdb.Commit
if branchState.WorkingSet().MergeActive() && branchState.WorkingSet().MergeState().IsCherryPick == false {
if branchState.WorkingSet().MergeActive() && branchState.WorkingSet().MergeState().IsCherryPick() == false {
mergeParentCommits = []*doltdb.Commit{branchState.WorkingSet().MergeState().Commit()}
} else if props.Amend {
numParentsHeadForAmend := headCommit.NumParents()
Expand Down
11 changes: 9 additions & 2 deletions go/store/datas/dataset.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ type MergeState struct {
fromCommitAddr *hash.Hash
fromCommitSpec string
unmergableTables []string
IsCherryPick bool
isCherryPick bool

nomsMergeStateRef *types.Ref
nomsMergeState *types.Struct
Expand Down Expand Up @@ -257,6 +257,13 @@ func (ms *MergeState) FromCommitSpec(ctx context.Context, vr types.ValueReader)
return string(commitSpecStr.(types.String)), nil
}

func (ms *MergeState) IsCherryPick(_ context.Context, vr types.ValueReader) (bool, error) {
if vr.Format().UsesFlatbuffers() {
return ms.isCherryPick, nil
}
return false, nil
}

func (ms *MergeState) UnmergableTables(ctx context.Context, vr types.ValueReader) ([]string, error) {
if vr.Format().UsesFlatbuffers() {
return ms.unmergableTables, nil
Expand Down Expand Up @@ -382,7 +389,7 @@ func (h serialWorkingSetHead) HeadWorkingSet() (*WorkingSetHead, error) {
for i := range ret.MergeState.unmergableTables {
ret.MergeState.unmergableTables[i] = string(mergeState.UnmergableTables(i))
}
ret.MergeState.IsCherryPick = mergeState.IsCherryPick()
ret.MergeState.isCherryPick = mergeState.IsCherryPick()
}
return &ret, nil
}
Expand Down
6 changes: 3 additions & 3 deletions go/store/datas/workingset.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ func workingset_flatbuffer(working hash.Hash, staged *hash.Hash, mergeState *Mer
serial.MergeStateAddFromCommitAddr(builder, fromaddroff)
serial.MergeStateAddFromCommitSpecStr(builder, fromspecoff)
serial.MergeStateAddUnmergableTables(builder, unmergableoff)
serial.MergeStateAddIsCherryPick(builder, mergeState.IsCherryPick)
serial.MergeStateAddIsCherryPick(builder, mergeState.isCherryPick)
mergeStateOff = serial.MergeStateEnd(builder)
}

Expand Down Expand Up @@ -211,7 +211,7 @@ func NewMergeState(
fromCommitAddr: new(hash.Hash),
fromCommitSpec: commitSpecStr,
unmergableTables: unmergableTables,
IsCherryPick: isCherryPick,
isCherryPick: isCherryPick,
}
*ms.preMergeWorkingAddr = preMergeWorking.TargetHash()
*ms.fromCommitAddr = commit.Addr()
Expand All @@ -226,7 +226,7 @@ func NewMergeState(
return nil, err
}
return &MergeState{
IsCherryPick: isCherryPick,
isCherryPick: isCherryPick,
nomsMergeStateRef: &ref,
nomsMergeState: &v,
}, nil
Expand Down

0 comments on commit 83c3f3f

Please sign in to comment.