debugpy/build/git-subrepo/test/setup
Rich Chiodo f4ba976121
Subrepo command wasn't checked in correctly (#1737)
* Remove subrepo

* Fix subrepo
2024-11-18 09:50:34 -08:00

205 lines
4.4 KiB
Bash

#!/usr/bin/env bash
set -e
# Set the GIT_SUBREPO_ROOT for testing.
source $PWD/.rc
# Set this locally for Windows:
git config core.autocrlf input
export BASHLIB="`
find $PWD -type d |
grep -E '/(bin|lib)$' |
xargs -n1 printf "%s:"
`"
export PATH="$BASHLIB:$PATH"
source bash+ :std
source 'lib/git-subrepo'
# TODO: Move to test/tmp
export TMP="tmp"
rm -fr $TMP
#export GIT_EXEC_PATH="$PWD/lib:$(git --exec-path)"
export UPSTREAM="$TMP/upstream"
export OWNER="$TMP/owner"
export COLLAB="$TMP/collab"
mkdir -p "$UPSTREAM" "$OWNER" "$COLLAB"
cp -r test/repo/{foo,bar,init} "$UPSTREAM/"
###
# Test helper functions:
###
clone-foo-and-bar() {
(
# foo will act as the main repo
git clone $UPSTREAM/foo $OWNER/foo
(
cd $OWNER/foo
git config core.autocrlf input
git config user.name "FooUser"
git config user.email "foo@foo"
)
# bar will act as the subrepo
git clone $UPSTREAM/bar $OWNER/bar
(
cd $OWNER/bar
git config core.autocrlf input
git config user.name "BarUser"
git config user.email "bar@bar"
)
) &> /dev/null || die
}
subrepo-clone-bar-into-foo() {
(
cd $OWNER/foo
git subrepo clone ../../../$UPSTREAM/bar
) &> /dev/null || die
}
add-new-files() {
local file
for file in $*; do
echo "new file $file" > "$file"
git add "$file"
done
git commit --quiet -m "add new file: $file" &> /dev/null
}
remove-files() {
local file
for file in $*; do
git rm "$file"
done
git commit --quiet -m "Removed file: $file" &> /dev/null
}
modify-files() {
local file
for file in $*; do
echo 'a new line' >> "$file"
git add "$file"
done
git commit -m "modified file: $file"
}
modify-files-ex() {
local file
for file in $*; do
echo "$file" >> "$file"
git add "$file"
done
git commit -m "modified file: $file"
}
test-exists() {
for f in "$@"; do
if [[ $f =~ ^! ]]; then
f="${f#!}"
if [[ $f =~ /$ ]]; then
ok "`[ ! -d "$f" ]`" \
"Directory '$f' does not exist"
else
ok "`[ ! -f "$f" ]`" \
"File '$f' does not exist"
fi
else
if [[ $f =~ /$ ]]; then
ok "`[ -d "$f" ]`" \
"Directory '$f' exists"
else
ok "`[ -f "$f" ]`" \
"File '$f' exists"
fi
fi
done
}
test-exists-in-index() {
for f in $*; do
if [[ "$f" =~ ^! ]]; then
f="${f#!}"
if [[ "$f" =~ /$ ]]; then
ok "`[ ! $(git ls-tree --full-tree --name-only -r HEAD "$f") ]`" \
"Directory '$f' does not exist in index"
else
ok "`[ ! $(git ls-tree --full-tree --name-only -r HEAD "$f") ]`" \
"File '$f' does not exist in index"
fi
else
if [[ "$f" =~ /$ ]]; then
ok "`[ $(git ls-tree --full-tree --name-only -r HEAD "$f") ]`" \
"Directory '$f' exists in index"
else
ok "`[ $(git ls-tree --full-tree --name-only -r HEAD "$f") ]`" \
"File '$f' exists in index"
fi
fi
done
}
test-gitrepo-comment-block() {
is "$(grep -E '^;' $gitrepo)" "\
; DO NOT EDIT (unless you know what you are doing)
;
; This subdirectory is a git \"subrepo\", and this file is maintained by the
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
;" \
'Comment header block is correct'
}
test-gitrepo-field() {
is "`git config -f $gitrepo subrepo.$1`" \
"$2" \
".gitrepo $1 is correct"
}
test-commit-count() {
is "`cd $1; git rev-list --count $2`" \
"$3" \
"commit count is correct"
}
save-original-state() {
original_head_ref="$(cd $1; cat .git/HEAD)"
original_branch="${original_head_ref#ref: refs/heads/}"
original_head_commit="$(cd $1; git rev-parse HEAD)"
original_gitrepo="$(cd $1; cat $2/.gitrepo)"
}
assert-original-state() {
current_head_ref="$(cd $1; cat .git/HEAD)"
current_branch="${current_head_ref#ref: refs/heads/}"
current_head_commit="$(cd $1; git rev-parse HEAD)"
current_gitrepo="$(cd $1; cat $2/.gitrepo)"
is "$current_head_ref" \
"$original_head_ref" \
"Current HEAD is still $original_head_ref"
is "$current_branch" \
"$original_branch" \
"Current branch is still $original_branch"
is "$current_head_commit" \
"$original_head_commit" \
"Current HEAD commit is still $original_head_commit"
is "$current_gitrepo" \
"$original_gitrepo" \
"$2/.gitrepo has not changed"
}
catch() {
local error=; error="$("$@" 2>&1 || true)"
echo "$error"
}
teardown() {
rm -fr $TMP
}