#!/bin/sh -e # Convert Pyshop working directory to GoCheese friendly one. # Script expects to be run in packages repository (a/, b/, ...) # with pyshop.db database file. It will create packages/ directory # with all Pyshop-downloaded/uploaded files, SHA256 checksums, # private package marks. Also it will call GoCheese's /simple/ API # for forcing metainformation update (necessary for storing SHA256 # checksums missing in Pyshop). pkgname() { perl -ne "s/[-_.]+/-/g ; print lc" } ######################################################################## # Copy all already existing files ######################################################################## ctr=0 echo " SELECT package.name, release_file.filename FROM release_file JOIN release ON release.id = release_file.release_id JOIN package ON release.package_id = package.id ORDER BY package.name " | sqlite3 --separator " " pyshop.db | while read pkginfo ; do ctr=$(( $ctr + 1 )) [ $(( $ctr % 100 )) -ne 0 ] || echo $ctr $pkginfo pkg=$(echo "$pkginfo" | cut -f1 | pkgname) filename=$(echo "$pkginfo" | cut -f2) [ -n "$pkg" ] [ -n "$filename" ] src=$(echo $pkg | cut -c1)/$filename dst=packages/$pkg/$filename [ -r $src ] || continue [ -r $dst ] && continue || : mkdir -p packages/$pkg ln $src $dst done ######################################################################## # Mark all private packages ######################################################################## for pkg in $(echo "SELECT name FROM package WHERE local = true" | sqlite3 pyshop.db); do cd packages/$(echo $pkg | pkgname) for f in * ; do sha256 < $f | xxd -r -p > $f.sha256 ; done touch .internal cd ../.. done ######################################################################## # Force all metainformation update from upstream ######################################################################## cd packages for pkg in * ; do # Assume gocheese -gpgupdate /gpgupdate/ curl http://localhost:8080/gpgupdate/$pkg/ > /dev/null done ######################################################################## # Assure ckecksums are good ######################################################################## gocheese -fsck