Pass through the --force flag for branch deletes

This commit is contained in:
Neil Macneale IV
2023-12-21 17:58:03 -08:00
parent 8550237e2f
commit c3f3ea7ab0
2 changed files with 16 additions and 13 deletions

View File

@@ -137,7 +137,7 @@ func push(ctx context.Context, rsr env.RepoStateReader, tmpDir string, src, dest
switch opts.SrcRef.GetType() {
case ref.BranchRefType:
if opts.SrcRef == ref.EmptyBranchRef {
return deleteRemoteBranch(ctx, opts.DestRef, opts.RemoteRef, src, dest, *remote)
return deleteRemoteBranch(ctx, opts.DestRef, opts.RemoteRef, src, dest, *remote, opts.Mode.Force)
} else {
return PushToRemoteBranch(ctx, rsr, tmpDir, opts.Mode, opts.SrcRef, opts.DestRef, opts.RemoteRef, src, dest, *remote, progStarter, progStopper)
}
@@ -192,8 +192,8 @@ func PushTag(ctx context.Context, tempTableDir string, destRef ref.TagRef, srcDB
return destDB.SetHead(ctx, destRef, addr)
}
func deleteRemoteBranch(ctx context.Context, toDelete, remoteRef ref.DoltRef, localDB, remoteDB *doltdb.DoltDB, remote env.Remote) error {
err := DeleteRemoteBranch(ctx, toDelete.(ref.BranchRef), remoteRef.(ref.RemoteRef), localDB, remoteDB)
func deleteRemoteBranch(ctx context.Context, toDelete, remoteRef ref.DoltRef, localDB, remoteDB *doltdb.DoltDB, remote env.Remote, force bool) error {
err := DeleteRemoteBranch(ctx, toDelete.(ref.BranchRef), remoteRef.(ref.RemoteRef), localDB, remoteDB, force)
if err != nil {
return fmt.Errorf("%w; '%s' from remote '%s'; %s", ErrFailedToDeleteRemote, toDelete.String(), remote.Name, err)
@@ -262,19 +262,24 @@ func pushTagToRemote(ctx context.Context, tempTableDir string, srcRef, destRef r
// DeleteRemoteBranch validates targetRef is a branch on the remote database, and then deletes it, then deletes the
// remote tracking branch from the local database.
func DeleteRemoteBranch(ctx context.Context, targetRef ref.BranchRef, remoteRef ref.RemoteRef, localDB, remoteDB *doltdb.DoltDB) error {
func DeleteRemoteBranch(ctx context.Context, targetRef ref.BranchRef, remoteRef ref.RemoteRef, localDB, remoteDB *doltdb.DoltDB, force bool) error {
hasRef, err := remoteDB.HasRef(ctx, targetRef)
if err != nil {
return err
}
wsRef, err := ref.WorkingSetRefForHead(targetRef)
if err != nil {
return err
wsRefStr := ""
if !force {
wsRef, err := ref.WorkingSetRefForHead(targetRef)
if err != nil {
return err
}
wsRefStr = wsRef.String()
}
if hasRef {
err = remoteDB.DeleteBranchWithWorkspaceCheck(ctx, targetRef, nil, wsRef.String())
err = remoteDB.DeleteBranchWithWorkspaceCheck(ctx, targetRef, nil, wsRefStr)
}
if err != nil {

View File

@@ -577,9 +577,8 @@ GRANT CLONE_ADMIN ON *.* TO clone_admin_user@'localhost';
dolt sql -q 'insert into names (name) values ("abe"), ("betsy"), ("calvin");'
dolt add names
dolt commit -m 'initial names.'
dolt checkout -b new_branch HEAD
dolt sql -q 'insert into names (name) values ("zeek");' # dirty the workspace
dolt checkout main
dolt branch new_branch HEAD
dolt --use-db=remote/new_branch sql -q 'insert into names (name) values ("zeek");' # dirty the workspace
APIPORT=$(definePORT)
export DOLT_REMOTE_PASSWORD="rootpass"
@@ -594,8 +593,7 @@ GRANT CLONE_ADMIN ON *.* TO clone_admin_user@'localhost';
[[ "$status" -ne 0 ]] || false
[[ "$output" =~ "target has uncommitted changes. --force required to overwrite" ]] || false
run dolt push origin --force --user $SQL_USER :new_branch
[[ "$status" -eq 0 ]] || false
dolt push origin --force --user $SQL_USER :new_branch
# TODO - verify output. Currently we always print "new branch"
# To https://doltremoteapi.dolthub.com/dolthub/macneale-remote-test