EOF
}
print_formatted_diff() {
commit="$1"
previous_commit="$2"
printf ''
# git show -p --stat "$sha"
# FIXME: translate tree/
git show -p --full-index "$commit" | htmlesc | awk \
-v COMMIT="$commit" -v PREVIOUS_COMMIT="$previous_commit" '
BEGIN {
diff_init = 0
diffl = 0
}
/^(diff|index) / {
diff_init = 1
print $0
next
}
diff_init == 1 && /^--- a\// {
fname = substr($0, 7)
printf "--- a/%s\n",
PREVIOUS_COMMIT, fname, fname
next
}
diff_init == 1 && /^\+\+\+ b\// {
fname = substr($0, 7)
printf "--- b/%s\n",
COMMIT, fname, fname
next
}
{ diff_init = 0 }
/^-/ {
diffl++
printf "%s\n",
diffl, diffl, $0
next
}
/^\+/ {
diffl++
printf "%s\n",
diffl, diffl, $0
next
}
{ print $0 }
'
printf '
\n'
}
preamble_mk() {
cat </dev/null ||:)"
}
repo_write() {
path="$1"
repo_vars "$path"
mkdir -p \
"$OUTDIR"/"$FULLNAME"/commit \
"$OUTDIR"/"$FULLNAME"/tarball \
{
preamble_mk
repo_tarballs_mk
repo_commits_mk
repo_refs_mk
} | tee f | (unset GIT_DIR; make -f- -j`nproc`)
imgs "$OUTDIR"/"$FULLNAME"
}
VERBOSE=true
INDEX=false
OUTDIR=.
CLONE_URL=
MAX_JOBS=1
MAIN_BRANCH='main'
MAIN_BRANCH_SET=false
REPO=
DESCRIPTION=
CMD='ln'
EXEC=
while getopts 'b:o:u:j:isqx:' flag; do
case "$flag" in
(b)
MAIN_BRANCH="$OPTARG"
MAIN_BRANCH_SET=true
;;
(o)
OUTDIR="$OPTARG"
;;
(u)
CLONE_URL="$OPTARG"
;;
(j)
MAX_JOBS="$OPTARG"
;;
(i)
INDEX=true
;;
(q)
VERBOSE=false
;;
(s)
CMD='ln -s'
;;
(x)
EXEC="$OPTARG"
;;
(*)
usage >&2
exit 2
;;
esac
done
shift $((OPTIND - 1))
if [ -n "$EXEC" ]; then
"exec_$EXEC" "$@"
exit
fi
if false; then
if [ "$INDEX" = false ]; then
assert_arg "$CLONE_URL" '-u CLONE_URL'
elif [ -n "$CLONE_URL" ] || [ "$MAIN_BRANCH_SET" = true ]; then
{
printf '%s' "$MSG_INCOMPATIBLE_OPTIONS" # FIXME
printf -- '-i'
if [ -n "$CLONE_URL" ]; then
printf -- ' -u'
fi
if [ "$MAIN_BRANCH_SET" = true ]; then
printf -- ' -b'
fi
printf '\n\n'
usage
} >&2
exit 2
fi
fi
eval "$(assert-arg "${1:-}" "$MSG_MISSING_ARGS")" # FIXME
if false; then
if [ "$INDEX" = true ]; then
index_write "$@"
else
repo_write "$1"
fi
fi
index_write "$@"
for path in "$@"; do
repo_write "$path"
done