From: Tracey Emery Subject: Re: make'got checkout' display what was checked out To: gameoftrees@openbsd.org Date: Tue, 14 Sep 2021 07:42:15 -0600 On Tue, Sep 14, 2021 at 12:30:37PM +0200, Stefan Sperling wrote: > Make 'got checkout' display the checked out reference and commit ID > for informative purposes. > > This makes it more obvious which branch was chosen by default. > And following traces of shell scripts which run 'got checkout' should > also become easier with this. > > New output looks like this (paths omitted, thanks to the new -q option > added by Tracey): > > $ got co -q /git/got.git/ test-wt > Checked out refs/heads/main: 26960ff7b4461002e1b3b1c5c0ffd0e492bc71ba > Now shut up and hack > $ > > ok? > Yes, I like that very much. > As a next step, I think making 'got update' consistent with the above > would be good, by having it display the current branch name in addition > to the commit hash. Agreed. > > diff 74f5be75024abbc5165ebae56899d1705af31d14 cd6928e6f7942963e5ddcf6520da8efdacde7fe0 > blob - e0fa2127a56f4fd45394cbea92d0f7cbe3ce866f > blob + 5b9314a3697912717163cbf631321921615245a0 > --- got/got.c > +++ got/got.c > @@ -2823,13 +2823,14 @@ cmd_checkout(int argc, char *argv[]) > { > const struct got_error *error = NULL; > struct got_repository *repo = NULL; > - struct got_reference *head_ref = NULL; > + struct got_reference *head_ref = NULL, *ref = NULL; > struct got_worktree *worktree = NULL; > char *repo_path = NULL; > char *worktree_path = NULL; > const char *path_prefix = ""; > - const char *branch_name = GOT_REF_HEAD; > + const char *branch_name = GOT_REF_HEAD, *refname = NULL; > char *commit_id_str = NULL; > + struct got_object_id *commit_id = NULL; > char *cwd = NULL; > int ch, same_path_prefix, allow_nonempty = 0, verbosity = 0; > struct got_pathlist_head paths; > @@ -2966,7 +2967,6 @@ cmd_checkout(int argc, char *argv[]) > } > > if (commit_id_str) { > - struct got_object_id *commit_id; > struct got_reflist_head refs; > TAILQ_INIT(&refs); > error = got_ref_list(&refs, repo, NULL, got_ref_cmp_by_name, > @@ -2998,9 +2998,23 @@ cmd_checkout(int argc, char *argv[]) > } > error = got_worktree_set_base_commit_id(worktree, repo, > commit_id); > - free(commit_id); > if (error) > goto done; > + /* Expand potentially abbreviated commit ID string. */ > + free(commit_id_str); > + error = got_object_id_str(&commit_id_str, commit_id); > + if (error) > + goto done; > + } else { > + commit_id = got_object_id_dup( > + got_worktree_get_base_commit_id(worktree)); > + if (commit_id == NULL) { > + error = got_error_from_errno("got_object_id_dup"); > + goto done; > + } > + error = got_object_id_str(&commit_id_str, commit_id); > + if (error) > + goto done; > } > > error = got_pathlist_append(&paths, "", NULL); > @@ -3014,12 +3028,25 @@ cmd_checkout(int argc, char *argv[]) > if (error != NULL) > goto done; > > + if (got_ref_is_symbolic(head_ref)) { > + error = got_ref_resolve_symbolic(&ref, repo, head_ref); > + if (error) > + goto done; > + refname = got_ref_get_name(ref); > + } else > + refname = got_ref_get_name(head_ref); > + printf("Checked out %s: %s\n", refname, commit_id_str); > printf("Now shut up and hack\n"); > if (cpa.had_base_commit_ref_error) > show_worktree_base_ref_warning(); > done: > + if (head_ref) > + got_ref_close(head_ref); > + if (ref) > + got_ref_close(ref); > got_pathlist_free(&paths); > free(commit_id_str); > + free(commit_id); > free(repo_path); > free(worktree_path); > free(cwd); > blob - b6c5784556b7f6d287d651006dc0ccee50de3901 > blob + f9066950a272a65b3095aa0b65af01fccd329c41 > --- regress/cmdline/checkout.sh > +++ regress/cmdline/checkout.sh > @@ -18,11 +18,14 @@ > > test_checkout_basic() { > local testroot=`test_init checkout_basic` > + local commit_id=`git_show_head $testroot/repo` > > echo "A $testroot/wt/alpha" > $testroot/stdout.expected > echo "A $testroot/wt/beta" >> $testroot/stdout.expected > echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout $testroot/repo $testroot/wt > $testroot/stdout > @@ -57,11 +60,14 @@ test_checkout_basic() { > > test_checkout_dir_exists() { > local testroot=`test_init checkout_dir_exists` > + local commit_id=`git_show_head $testroot/repo` > > echo "A $testroot/wt/alpha" > $testroot/stdout.expected > echo "A $testroot/wt/beta" >> $testroot/stdout.expected > echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > mkdir $testroot/wt > @@ -98,11 +104,14 @@ test_checkout_dir_exists() { > > test_checkout_dir_not_empty() { > local testroot=`test_init checkout_dir_not_empty` > + local commit_id=`git_show_head $testroot/repo` > > echo "A $testroot/wt/alpha" > $testroot/stdout.expected > echo "A $testroot/wt/beta" >> $testroot/stdout.expected > echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > mkdir $testroot/wt > @@ -144,8 +153,11 @@ test_checkout_sets_xbit() { > chmod +x $testroot/repo/xfile > (cd $testroot/repo && git add .) > git_commit $testroot/repo -m "adding executable file" > + local commit_id=`git_show_head $testroot/repo` > > echo "A $testroot/wt/xfile" > $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout $testroot/repo $testroot/wt > $testroot/stdout > @@ -218,6 +230,7 @@ test_checkout_commit_from_wrong_branch() { > > test_checkout_tag() { > local testroot=`test_init checkout_tag` > + local commit_id=`git_show_head $testroot/repo` > local tag="1.0.0" > > (cd $testroot/repo && git tag -a -m "test" $tag) > @@ -226,6 +239,8 @@ test_checkout_tag() { > echo "A $testroot/wt/beta" >> $testroot/stdout.expected > echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout -c $tag $testroot/repo $testroot/wt > $testroot/stdout > @@ -265,12 +280,15 @@ test_checkout_ignores_submodules() { > > (cd $testroot/repo && git submodule -q add ../repo2) > (cd $testroot/repo && git commit -q -m 'adding submodule') > + local commit_id=`git_show_head $testroot/repo` > > echo "A $testroot/wt/.gitmodules" > $testroot/stdout.expected > echo "A $testroot/wt/alpha" >> $testroot/stdout.expected > echo "A $testroot/wt/beta" >> $testroot/stdout.expected > echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout $testroot/repo $testroot/wt > $testroot/stdout > @@ -305,6 +323,7 @@ test_checkout_ignores_submodules() { > > test_checkout_read_only() { > local testroot=`test_init checkout_read_only` > + local commit_id=`git_show_head $testroot/repo` > > # Make the repostiory read-only > chmod -R a-w $testroot/repo > @@ -313,6 +332,8 @@ test_checkout_read_only() { > echo "A $testroot/wt/beta" >> $testroot/stdout.expected > echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout $testroot/repo $testroot/wt \ > @@ -366,6 +387,7 @@ test_checkout_read_only() { > > test_checkout_into_nonempty_dir() { > local testroot=`test_init checkout_into_nonempty_dir` > + local commit_id=`git_show_head $testroot/repo` > > mkdir -p $testroot/wt > make_test_tree $testroot/wt > @@ -402,6 +424,8 @@ test_checkout_into_nonempty_dir() { > echo "? $testroot/wt/beta" >> $testroot/stdout.expected > echo "? $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "? $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout -E $testroot/repo $testroot/wt > $testroot/stdout > @@ -423,6 +447,8 @@ test_checkout_into_nonempty_dir() { > echo "E $testroot/wt/beta" >> $testroot/stdout.expected > echo "E $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "E $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout -E $testroot/repo $testroot/wt > $testroot/stdout > @@ -461,6 +487,8 @@ test_checkout_into_nonempty_dir() { > echo "E $testroot/wt/beta" >> $testroot/stdout.expected > echo "E $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "E $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout -E $testroot/repo $testroot/wt > $testroot/stdout > @@ -516,6 +544,7 @@ test_checkout_symlink() { > (cd $testroot/repo && ln -s .got/foo dotgotfoo.link) > (cd $testroot/repo && git add .) > git_commit $testroot/repo -m "add symlinks" > + local commit_id=`git_show_head $testroot/repo` > > got checkout $testroot/repo $testroot/wt > $testroot/stdout > ret="$?" > @@ -536,6 +565,8 @@ test_checkout_symlink() { > echo "A $testroot/wt/nonexistent.link" >> $testroot/stdout.expected > echo "A $testroot/wt/passwd.link" >> $testroot/stdout.expected > echo "A $testroot/wt/passwd2.link" >> $testroot/stdout.expected > + echo "Checked out refs/heads/master: $commit_id" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > cmp -s $testroot/stdout.expected $testroot/stdout > blob - 487d5e7d9c6ed6c9c2532b3a7fc2dd808e7f3284 > blob + f90827299e298d8d6dcedf838627c59d16f80333 > --- regress/cmdline/import.sh > +++ regress/cmdline/import.sh > @@ -104,6 +104,8 @@ test_import_basic() { > echo "A $testroot/wt/beta" >> $testroot/stdout.expected > echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected > echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected > + echo "Checked out refs/heads/main: $head_commit" \ > + >> $testroot/stdout.expected > echo "Now shut up and hack" >> $testroot/stdout.expected > > got checkout $testroot/repo $testroot/wt > $testroot/stdout -- Tracey Emery