commit 4e0a20a47c3ad389097e7c1bbcc68dbb10c70528 from: Tracey Emery date: Mon Mar 23 16:51:40 2020 UTC make got tree work on current branch and add tests for this use case ok stsp commit - 1831ac029c57d391f90a06e6aaf7f30e6b855ff7 commit + 4e0a20a47c3ad389097e7c1bbcc68dbb10c70528 blob - ae5dabe3cd729accbfdefa1e3cd3bfe9a87bf226 blob + 88e00352743c1793902d7950c2ab3bdd10f581be --- got/got.c +++ got/got.c @@ -3950,7 +3950,7 @@ cmd_tree(int argc, char *argv[]) const struct got_error *error; struct got_repository *repo = NULL; struct got_worktree *worktree = NULL; - const char *path; + const char *path, *refname = NULL; char *cwd = NULL, *repo_path = NULL, *in_repo_path = NULL; struct got_object_id *commit_id = NULL; char *commit_id_str = NULL; @@ -4057,7 +4057,11 @@ cmd_tree(int argc, char *argv[]) if (commit_id_str == NULL) { struct got_reference *head_ref; - error = got_ref_open(&head_ref, repo, GOT_REF_HEAD, 0); + if (worktree) + refname = got_worktree_get_head_ref_name(worktree); + else + refname = GOT_REF_HEAD; + error = got_ref_open(&head_ref, repo, refname, 0); if (error != NULL) goto done; error = got_ref_resolve(&commit_id, repo, head_ref); blob - 4a9108ff21dbf1c87218b3f99d4c875f8bbabb57 blob + 0f29c0ec552874fbfbdf266c710410d5726598aa --- regress/cmdline/Makefile +++ regress/cmdline/Makefile @@ -1,6 +1,6 @@ REGRESS_TARGETS=checkout update status log add rm diff blame branch tag \ ref commit revert cherrypick backout rebase import histedit \ - integrate stage unstage cat clone fetch + integrate stage unstage cat clone fetch tree NOOBJ=Yes checkout: @@ -75,4 +75,7 @@ clone: fetch: ./fetch.sh +tree: + ./tree.sh + .include blob - /dev/null blob + 9fded8df42c57f1baeffa1c59d60a4ba8651ebc5 (mode 644) --- /dev/null +++ regress/cmdline/tree.sh @@ -0,0 +1,81 @@ +#!/bin/sh +# +# Copyright (c) 2020 Tracey Emery +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +. ./common.sh + +function test_tree_basic { + local testroot=`test_init tree_basic` + + got checkout $testroot/repo $testroot/wt > /dev/null + + echo "new file" > $testroot/wt/foo + + (cd $testroot/wt && got add foo > /dev/null) + (cd $testroot/wt && got commit -m "add foo" foo >/dev/null) + + echo 'alpha' > $testroot/stdout.expected + echo 'beta' >> $testroot/stdout.expected + echo 'epsilon/' >> $testroot/stdout.expected + echo 'foo' >> $testroot/stdout.expected + echo 'gamma/' >> $testroot/stdout.expected + + (cd $testroot/wt && got tree > $testroot/stdout) + + cmp -s $testroot/stdout.expected $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + fi + + test_done "$testroot" "$ret" +} + +function test_tree_branch { + local testroot=`test_init tree_branch` + + got checkout $testroot/repo $testroot/wt > /dev/null + ret="$?" + if [ "$ret" != "0" ]; then + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/wt && got br foo > $testroot/stdout) + + echo "new file" > $testroot/wt/foo + + (cd $testroot/wt && got add foo > /dev/null) + (cd $testroot/wt && got commit -m "add foo" foo >/dev/null) + + echo 'alpha' > $testroot/stdout.expected + echo 'beta' >> $testroot/stdout.expected + echo 'epsilon/' >> $testroot/stdout.expected + echo 'foo' >> $testroot/stdout.expected + echo 'gamma/' >> $testroot/stdout.expected + + (cd $testroot/wt && got tree > $testroot/stdout) + + cmp -s $testroot/stdout.expected $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + fi + + test_done "$testroot" "$ret" +} + +run_test test_tree_basic +run_test test_tree_branch