#!/usr/bin/env bash empty() { [[ $(stat -c %s "$1") -eq 0 ]] } url2murl() { local x x=$1 x=${x//'^'/'^5E'} x=${x//':'/'^3A'} x=${x//'%'/'^25'} printf '%s' "$x" } murl2url() { local x x=$1 x=${x//'^25'/'%'} x=${x//'^3A'/':'} x=${x//'^5E'/'^'} printf '%s' "$x" } main() { set -euE -o pipefail top=$PWD mkdir -p "$1" cd "$1" git init echo 'ref: refs/heads/PROGRAMS/CVTUTF' > .git/HEAD git commit --allow-empty -m 'initial commit' while read -r time url; do suffix="${url##*/Public/}" dirpart="${suffix%/*}" filepart="${suffix##*/}" branch=$dirpart git checkout PROGRAMS/CVTUTF git checkout -b "$branch" || true git checkout "$branch" if [[ -n "$filepart" ]]; then file="$top/dat/content-file/$time/$(url2murl "$url")" cp "$file" . else dir="$top/dat/content-dir/$time/$(url2murl "$url")" comm -23 \ <(git ls-files) \ <(< "$dir/metadata.txt" awk '{print $1}') \ | xargs -r0 rm -f -- if ! empty "$dir/readme.txt"; then cp "$dir/readme.txt" . fi cp "$dir/metadata.txt" .metadata.txt fi if [[ -n "$(git status -s .)" ]]; then gitdate="$(sed -r 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3T\4:\5:\6/' <<<"$time")" git add . export GIT_AUTHOR_DATE=$gitdate export GIT_COMMITTER_DATE=$gitdate git commit -m "$time $url" fi done } main "$@"