commit dc5351b4fbeb55371ddf6f812d68c69bc0d478a7 from: Stefan Sperling date: Tue Jul 30 15:22:16 2019 UTC fix a bug in 'got branch' and add tests for this command commit - 52be27fcce9624a6bcdd4c32becf42c291e8b348 commit + dc5351b4fbeb55371ddf6f812d68c69bc0d478a7 blob - 2eae149a2cdf63ee47f1c8dfb1415ad4b7706ff8 blob + e2cf6617507de8f326679a36e7832faa921be073 --- got/got.c +++ got/got.c @@ -2861,6 +2861,8 @@ cmd_branch(int argc, char *argv[]) base_branch = worktree ? got_worktree_get_head_ref_name(worktree) : GOT_REF_HEAD; + if (strncmp(base_branch, "refs/heads/", 11) == 0) + base_branch += 11; } else base_branch = argv[1]; error = add_branch(repo, argv[0], base_branch); blob - 21fbf1fbeaa86fd116323404f9dff1dea6f14601 blob + e6db280d0aaf7bf2b5185205225b3568f9ca36e3 --- regress/cmdline/Makefile +++ regress/cmdline/Makefile @@ -1,4 +1,4 @@ -REGRESS_TARGETS=checkout update status log add rm diff blame commit \ +REGRESS_TARGETS=checkout update status log add rm diff blame branch commit \ cherrypick backout rebase import histedit NOOBJ=Yes @@ -26,6 +26,9 @@ diff: blame: ./blame.sh +branch: + ./branch.sh + commit: ./commit.sh blob - /dev/null blob + e624d53380913d538422ddc4c6503cb48bdf3b02 (mode 755) --- /dev/null +++ regress/cmdline/branch.sh @@ -0,0 +1,255 @@ +#!/bin/sh +# +# Copyright (c) 2019 Stefan Sperling +# +# 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_branch_create { + local testroot=`test_init branch_create` + + # Create a branch based on repository's HEAD reference + got branch -r $testroot/repo newbranch + ret="$?" + if [ "$ret" != "0" ]; then + echo "got branch command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + # Ensure that Git recognizes the branch Got has created + (cd $testroot/repo && git checkout -q newbranch) + ret="$?" + if [ "$ret" != "0" ]; then + echo "git checkout command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + echo "modified delta on branch" > $testroot/repo/gamma/delta + git_commit $testroot/repo -m "committing to delta on newbranch" + + got checkout -b newbranch $testroot/repo $testroot/wt >/dev/null + ret="$?" + if [ "$ret" != "0" ]; then + echo "got checkout command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + echo "modified delta on branch" > $testroot/content.expected + cat $testroot/wt/gamma/delta > $testroot/content + cmp -s $testroot/content.expected $testroot/content + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/content.expected $testroot/content + test_done "$testroot" "$ret" + return 1 + fi + + # Create a branch based on the work tree's branch + (cd $testroot/wt && got branch anotherbranch) + ret="$?" + if [ "$ret" != "0" ]; then + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/repo && git checkout -q anotherbranch) + ret="$?" + if [ "$ret" != "0" ]; then + echo "git checkout command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + # Create a branch based on another specific branch + (cd $testroot/wt && got branch yetanotherbranch master) + ret="$?" + if [ "$ret" != "0" ]; then + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/repo && git checkout -q yetanotherbranch) + ret="$?" + if [ "$ret" != "0" ]; then + echo "git checkout command failed unexpectedly" + fi + test_done "$testroot" "$ret" +} + +function test_branch_list { + local testroot=`test_init branch_list` + local commit_id=`git_show_head $testroot/repo` + + for b in branch1 branch2 branch3; do + got branch -r $testroot/repo $b + ret="$?" + if [ "$ret" != "0" ]; then + echo "got branch command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + done + + got branch -l -r $testroot/repo > $testroot/stdout + echo " branch1: $commit_id" > $testroot/stdout.expected + echo " branch2: $commit_id" >> $testroot/stdout.expected + echo " branch3: $commit_id" >> $testroot/stdout.expected + echo " master: $commit_id" >> $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + got checkout $testroot/repo $testroot/wt >/dev/null + ret="$?" + if [ "$ret" != "0" ]; then + echo "got checkout command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/wt && got branch -l > $testroot/stdout) + echo " branch1: $commit_id" > $testroot/stdout.expected + echo " branch2: $commit_id" >> $testroot/stdout.expected + echo " branch3: $commit_id" >> $testroot/stdout.expected + echo "* master: $commit_id" >> $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + echo "modified delta" > $testroot/repo/gamma/delta + git_commit $testroot/repo -m "committing to delta" + local commit_id2=`git_show_head $testroot/repo` + + (cd $testroot/wt && got branch -l > $testroot/stdout) + echo " branch1: $commit_id" > $testroot/stdout.expected + echo " branch2: $commit_id" >> $testroot/stdout.expected + echo " branch3: $commit_id" >> $testroot/stdout.expected + echo "~ master: $commit_id2" >> $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/wt && got update > /dev/null) + ret="$?" + if [ "$ret" != "0" ]; then + echo "got update command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/wt && got branch -l > $testroot/stdout) + echo " branch1: $commit_id" > $testroot/stdout.expected + echo " branch2: $commit_id" >> $testroot/stdout.expected + echo " branch3: $commit_id" >> $testroot/stdout.expected + echo "* master: $commit_id2" >> $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/wt && got update -b branch1 > /dev/null) + ret="$?" + if [ "$ret" != "0" ]; then + echo "got update command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + (cd $testroot/wt && got branch -l > $testroot/stdout) + echo "* branch1: $commit_id" > $testroot/stdout.expected + echo " branch2: $commit_id" >> $testroot/stdout.expected + echo " branch3: $commit_id" >> $testroot/stdout.expected + echo " master: $commit_id2" >> $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + fi + test_done "$testroot" "$ret" +} + +function test_branch_delete { + local testroot=`test_init branch_delete` + local commit_id=`git_show_head $testroot/repo` + + for b in branch1 branch2 branch3; do + got branch -r $testroot/repo $b + ret="$?" + if [ "$ret" != "0" ]; then + echo "got branch command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + done + + got branch -d branch2 -r $testroot/repo > $testroot/stdout + ret="$?" + if [ "$ret" != "0" ]; then + echo "got update command failed unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + got branch -l -r $testroot/repo > $testroot/stdout + echo " branch1: $commit_id" > $testroot/stdout.expected + echo " branch3: $commit_id" >> $testroot/stdout.expected + echo " master: $commit_id" >> $testroot/stdout.expected + cmp -s $testroot/stdout $testroot/stdout.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + + got branch -d bogus_branch_name -r $testroot/repo \ + > $testroot/stdout 2> $testroot/stderr + ret="$?" + if [ "$ret" == "0" ]; then + echo "got update succeeded unexpectedly" + test_done "$testroot" "$ret" + return 1 + fi + + echo "got: reference refs/heads/bogus_branch_name not found" \ + > $testroot/stderr.expected + cmp -s $testroot/stderr $testroot/stderr.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stderr.expected $testroot/stderr + fi + test_done "$testroot" "$ret" +} + + +run_test test_branch_create +run_test test_branch_list +run_test test_branch_delete