commit - 52be27fcce9624a6bcdd4c32becf42c291e8b348
commit + dc5351b4fbeb55371ddf6f812d68c69bc0d478a7
blob - 2eae149a2cdf63ee47f1c8dfb1415ad4b7706ff8
blob + e2cf6617507de8f326679a36e7832faa921be073
--- got/got.c
+++ got/got.c
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
-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
blame:
./blame.sh
+branch:
+ ./branch.sh
+
commit:
./commit.sh
blob - /dev/null
blob + e624d53380913d538422ddc4c6503cb48bdf3b02 (mode 755)
--- /dev/null
+++ regress/cmdline/branch.sh
+#!/bin/sh
+#
+# Copyright (c) 2019 Stefan Sperling <stsp@openbsd.org>
+#
+# 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