summaryrefslogtreecommitdiff
path: root/bin/gitify
diff options
context:
space:
mode:
Diffstat (limited to 'bin/gitify')
-rwxr-xr-xbin/gitify80
1 files changed, 80 insertions, 0 deletions
diff --git a/bin/gitify b/bin/gitify
new file mode 100755
index 0000000..55ddff8
--- /dev/null
+++ b/bin/gitify
@@ -0,0 +1,80 @@
+#!/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
+ shopt -s nullglob
+ shopt -s globstar
+
+ top=$PWD
+ mkdir -p "$1"
+ cd "$1"
+ git init
+ echo 'ref: refs/heads/PROGRAMS/CVTUTF' > .git/HEAD
+ git commit --allow-empty -m 'initial commit'
+
+ for snapshot in "$top"/dat/pools/snaps/*; do
+ snapname="${snapshot##*/}"
+ time="${snapname%%-*}"
+ dirpart="${snapname#*-}"
+ dirpart="${dirpart//_/\/}"
+
+ branch=$dirpart
+ git checkout PROGRAMS/CVTUTF
+ git checkout -b "$branch" || true
+ git checkout "$branch"
+
+ rm -f -- * .metadata.txt
+ cp -- "$snapshot"/* .
+
+ if [[ "$time" != *99 ]]; then
+ listingdir=("$top/dat/content-dir/$time/"**"/Public/$dirpart")
+ if [[ ${#listingdir[@]} != 1 ]]; then
+ >&2 printf 'Cannot find wayback listing for %s' "$snapname"
+ false
+ fi
+ if ! [[ -f readme.txt ]] && ! empty "$listingdir/readme.txt"; then
+ cp "$listingdir/readme.txt" .
+ fi
+ cp "$listingdir/metadata.txt" .metadata.txt
+ fi
+
+ if [[ -n "$(git status -s .)" ]]; then
+ if [[ "$time" = *99 ]]; then
+ msg="Synthesized listing: ${time} ${dirpart}"
+ time="${time%99}00"
+ else
+ waurl="http://web.archive.org/web/$(murl2url "${listingdir##*/content-dir/}/")"
+ msg="$waurl"
+ fi
+ 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 "$msg"
+ fi
+ done
+}
+
+main "$@"