From: Josh Rickmar Subject: Re: Switch branches during rebase even if there are no commits to rebase To: gameoftrees@openbsd.org Date: Wed, 3 Nov 2021 17:19:41 -0400 On Wed, Nov 03, 2021 at 10:07:26PM +0100, Stefan Sperling wrote: > On Wed, Nov 03, 2021 at 04:36:16PM -0400, Josh Rickmar wrote: > > The modifications necessary to test_rebase_ancestry_check should cover > > this, right? > > Yes, that should be good enough. > > A few comments inline: doh. certainly intended to actually use that declared variable. moved the id_str declaration and assignment closer to usage too. diff refs/heads/main refs/heads/noop-rebase blob - 488cd9f35722bed936af6e7d9e2c6aa77ea2a3d8 blob + 7c817edb02fa861df31ee4804f30af110be3c191 --- got/got.c +++ got/got.c @@ -9147,12 +9147,43 @@ cmd_rebase(int argc, char *argv[]) goto done; error = NULL; } else { - static char msg[128]; - snprintf(msg, sizeof(msg), - "%s is already based on %s", + struct got_pathlist_head paths; + printf("%s is already based on %s\n", got_ref_get_name(branch), got_worktree_get_head_ref_name(worktree)); - error = got_error_msg(GOT_ERR_SAME_BRANCH, msg); + error = switch_head_ref(branch, branch_head_commit_id, + worktree, repo); + if (error) + goto done; + error = got_worktree_set_base_commit_id(worktree, repo, + branch_head_commit_id); + if (error) + goto done; + TAILQ_INIT(&paths); + error = got_pathlist_append(&paths, "", NULL); + if (error) { + got_pathlist_free(&paths); + goto done; + } + error = got_worktree_checkout_files(worktree, + &paths, repo, update_progress, &upa, + check_cancelled, NULL); + got_pathlist_free(&paths); + if (error) + goto done; + if (upa.did_something) { + char *id_str; + error = got_object_id_str(&id_str, + branch_head_commit_id); + if (error) + goto done; + printf("Updated to %s: %s\n", + got_worktree_get_head_ref_name(worktree), + id_str); + free(id_str); + } else + printf("Already up-to-date\n"); + print_update_progress_stats(&upa); goto done; } error = got_worktree_rebase_prepare(&new_base_branch, blob - b17666eaf0ae899543adfa66236bdfd3eb49e92d blob + c629d068ddf4ae78f0a2184ea064823c4c1926de --- regress/cmdline/rebase.sh +++ regress/cmdline/rebase.sh @@ -243,11 +243,18 @@ test_rebase_ancestry_check() { (cd $testroot/repo && git checkout -q -b newbranch) echo "modified delta on branch" > $testroot/repo/gamma/delta git_commit $testroot/repo -m "committing to delta on newbranch" + local newbranch_id=`git_show_head $testroot/repo` (cd $testroot/wt && got rebase newbranch > $testroot/stdout \ 2> $testroot/stderr) - echo -n > $testroot/stdout.expected + echo "refs/heads/newbranch is already based on refs/heads/master" \ + > $testroot/stdout.expected + echo "Switching work tree from refs/heads/master to refs/heads/newbranch" \ + >> $testroot/stdout.expected + echo "U gamma/delta" >> $testroot/stdout.expected + echo "Updated to refs/heads/newbranch: ${newbranch_id}" \ + >> $testroot/stdout.expected cmp -s $testroot/stdout.expected $testroot/stdout ret="$?" if [ "$ret" != "0" ]; then @@ -256,8 +263,7 @@ test_rebase_ancestry_check() { return 1 fi - echo "got: refs/heads/newbranch is already based on refs/heads/master" \ - > $testroot/stderr.expected + echo -n > $testroot/stderr.expected cmp -s $testroot/stderr.expected $testroot/stderr ret="$?" if [ "$ret" != "0" ]; then