#!/bin/sh
# Assemble the one directory cargo reads crates from: every crate the archive
# installed under /usr/share/cargo/registry, except those that vendor/ carries
# its own copy of (same name and version), plus vendor/ itself. The archive's
# copy loses because Debian's manifests can drop features upstream still needs.
set -eu

vendor=$(cd "$1" && pwd)
out=$2
registry=${CARGO_SYSTEM_REGISTRY:-/usr/share/cargo/registry}

rm -rf "$out"
mkdir -p "$out"

# Vendored directory names, space separated, so the loop below forks nothing.
vnames=
for v in "$vendor"/*; do
    vnames="$vnames ${v##*/}"
done

for dir in "$registry"/*; do
    name=${dir##*/}
    skip=
    for vname in $vnames; do
        case $name in
            "$vname" | "$vname"-* | "$vname"+*) skip=1; break ;;
        esac
    done
    [ -n "$skip" ] || ln -s "$dir" "$out/$name"
done

for vname in $vnames; do
    ln -s "$vendor/$vname" "$out/$vname"
done
