Skip to content
clone_forks_from_json.sh 1.13 KiB
Newer Older
#!/usr/bin/env bash
# Reads JSON output from collect_forks.py (either as a file or in stdin)
# and clone all target forks into provided directory at the target commit.

# usage ./clone_forks_from_json.sh OUT_DIR forks.json
#       ./collect_forks.py --token token.asc URL | ./clone_forks_from_json.sh OUT_DIR

# Help message
function usage () {
   cat <<EOF
Usage:
    ./$(basename $0) [outdir] [in_file.json]
    ./collect_forks.py --token token.asc URL | ./$(basename $0) [outdir]

Reads json output from collect_forks.py and clone all target forks into provided directory
at the target commit. Repositories are cloned into outdir/namespace.

Arguments:
    outdir: Directory where all forks will be cloned [default: .]
    in_file.json: JSON output of collect_forks.py containing fork metadata [default: stdin]
EOF
   exit 0
}

# Parsing CL arguments
OUT_DIR=${1:-.}
JSON=${2:-/dev/stdin}
if [[ $# -gt 2 ]] || [[ $1 == '-h' ]] || [[ $1 == '--help' ]]; then
    usage
fi

mkdir -p "${OUT_DIR}"

jq ".[] | \"git clone \(.url) $OUT_DIR/\(.group) && cd ${OUT_DIR}/\(.group) && git checkout \(.commit)\"" \
    < "${JSON}" \
    | xargs -L 1 -I {} sh -c "{}"