mirror of
https://github.com/gitbutlerapp/gitbutler.git
synced 2024-12-20 08:01:46 +03:00
97 lines
2.1 KiB
Bash
97 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -eu -o pipefail
|
|
CLI=${1:?The first argument is the GitButler CLI}
|
|
|
|
git init remote
|
|
(cd remote
|
|
echo first > file
|
|
git add . && git commit -m "init"
|
|
)
|
|
|
|
function init-virtual() {
|
|
$CLI project add --switch-to-workspace "$(git rev-parse --symbolic-full-name @{u})"
|
|
$CLI branch create virtual
|
|
}
|
|
|
|
function pack-refs() {
|
|
git pack-refs --prune --all
|
|
git config core.precomposeUnicode false
|
|
}
|
|
|
|
function unpack-packed-refs() {
|
|
local git_dir=$(git rev-parse --git-dir)
|
|
local packed_refs_file="$git_dir/packed-refs"
|
|
|
|
if [[ ! -f "$packed_refs_file" ]]; then
|
|
echo "No packed-refs file found."
|
|
return 1
|
|
fi
|
|
|
|
while IFS= read -r line; do
|
|
# Skip comments and peel lines
|
|
[[ "$line" =~ ^# ]] && continue
|
|
[[ "$line" =~ ^\^ ]] && continue
|
|
|
|
# Split line into hash and ref
|
|
hash=$(echo "$line" | awk '{print $1}')
|
|
ref=$(echo "$line" | awk '{print $2}')
|
|
|
|
# Skip invalid lines
|
|
[[ -z "$hash" || -z "$ref" ]] && continue
|
|
|
|
# Create directory for the ref if it does not exist
|
|
ref_dir=$(dirname "$git_dir/$ref")
|
|
mkdir -p "$ref_dir"
|
|
|
|
# Write the hash to the ref file
|
|
echo "$hash" > "$git_dir/$ref"
|
|
done < "$packed_refs_file"
|
|
|
|
rm $packed_refs_file
|
|
|
|
git config core.precomposeUnicode false
|
|
}
|
|
|
|
|
|
export GITBUTLER_CLI_DATA_DIR=../user/gitbutler/app-data
|
|
branch_count=300
|
|
git clone remote many-local
|
|
(cd many-local
|
|
init-virtual
|
|
|
|
for name in $(seq $branch_count); do
|
|
git branch "$name"
|
|
done
|
|
unpack-packed-refs
|
|
)
|
|
|
|
git clone remote many-local-packed
|
|
(cd many-local-packed
|
|
init-virtual
|
|
|
|
for name in $(seq $branch_count); do
|
|
git branch "$name"
|
|
done
|
|
pack-refs
|
|
)
|
|
|
|
git clone many-local many-local-tracked
|
|
(cd many-local-tracked
|
|
init-virtual
|
|
|
|
for name in $(seq $branch_count); do
|
|
git branch --track "$name"
|
|
done
|
|
unpack-packed-refs
|
|
)
|
|
|
|
git clone many-local-packed many-local-tracked-packed
|
|
(cd many-local-tracked-packed
|
|
init-virtual
|
|
|
|
for name in $(seq $branch_count); do
|
|
git branch --track "$name"
|
|
done
|
|
pack-refs
|
|
)
|