blob: 37af54e36e7078eabe0a72275b4b09cccb4b738f [file] [log] [blame]
#!/bin/bash
set -eu -o pipefail
git init;
git init sub
(cd sub
: >empty
git add empty
git commit -m init-for-submodule
)
git init parent
(cd parent
function baseline() {
local args=""
local specs=""
for arg in "$@"; do
if [[ $arg == *"+"* ]]; then
echo "BUG: Argument '$arg' contains a space - we use that for separating pathspecs right now" >&2
exit 1
fi
args="$args -c submodule.active=$arg"
specs="${specs}+${arg}"
done
{
echo "$specs"
git $args submodule
echo -n ';'
} >> baseline.git
}
cat <<EOF >.gitattributes
bb bb-file
bb/ bb-dir
/bb/ bb-dir-from-top
EOF
for p in a bb dir/b dir/bb dir/nested/c cc; do
git submodule add ../sub $p
git config --unset submodule.$p.active
done
git commit -m "init"
git submodule > paths
baseline ':'
baseline ':!'
baseline 'a'
baseline ':(attr:bb-file)'
# :(attr:bb-dir) - ["bb", "dir/bb"] == []
baseline ':(attr:bb-dir)' git-inconsistency # bb/ matches recursively, git doesn't get it
# :(attr:bb-dir-from-top) - ["bb"] == []
baseline ':(attr:bb-dir-from-top)' git-inconsistency # probably git doesn't really care about correctness here
baseline ':(icase)A'
baseline ':(icase,exclude)A'
baseline ':(icase,exclude)*/B*'
baseline ':(icase,exclude)*/B?'
baseline 'di'
baseline 'di?'
baseline 'di?/'
baseline 'dir*'
baseline 'dir/*'
baseline ':(glob)dir*'
baseline ':(glob,icase,exclude)dir*'
baseline ':(glob)dir/*'
baseline 'dir'
baseline 'dir/'
baseline ':(literal)dir'
baseline ':(literal)dir/'
baseline 'dir/nested'
baseline 'dir/nested/'
baseline ':(exclude)dir/'
baseline ':(icase)DIR'
baseline ':(icase)DIR/'
baseline ':!a'
baseline ':' ':!bb'
baseline ':!bb'
baseline 'a/'
baseline 'bb'
baseline 'dir/b'
baseline 'dir/b/'
# ["dir/b"] == []
baseline '*/b/' git-inconsistency
baseline '*b'
baseline '*b*'
baseline '*b?'
baseline '*/b'
baseline '*/b?'
baseline '*/b*'
baseline '*c'
baseline '*/c'
baseline ':(glob)**/c'
baseline ':(glob)**/c?'
baseline ':(glob)**/c*'
)