]> Cypherpunks.ru repositories - gocheese.git/blob - pyshop2packages.sh
Split pretty huge gocheese.go
[gocheese.git] / pyshop2packages.sh
1 #!/bin/sh -e
2 # Convert Pyshop working directory to GoCheese friendly one.
3 # Script expects to be run in packages repository (a/, b/, ...)
4 # with pyshop.db database file. It will create packages/ directory
5 # with all Pyshop-downloaded/uploaded files, SHA256 checksums,
6 # private package marks. Also it will call GoCheese's /simple/ API
7 # for forcing metainformation update (necessary for storing SHA256
8 # checksums missing in Pyshop).
9
10 pkgname() {
11     perl -ne "s/[-_.]+/-/g ; print lc"
12 }
13
14 ########################################################################
15 # Copy all already existing files
16 ########################################################################
17 ctr=0
18 echo "
19 SELECT package.name, release_file.filename
20 FROM release_file
21 JOIN release ON release.id = release_file.release_id
22 JOIN package ON release.package_id = package.id
23 ORDER BY package.name
24 " | sqlite3 --separator "       " pyshop.db | while read pkginfo ; do
25     ctr=$(( $ctr + 1 ))
26     [ $(( $ctr % 100 )) -ne 0 ] || echo $ctr $pkginfo
27     pkg=$(echo "$pkginfo" | cut -f1 | pkgname)
28     filename=$(echo "$pkginfo" | cut -f2)
29     [ -n "$pkg" ]
30     [ -n "$filename" ]
31     src=$(echo $pkg | cut -c1)/$filename
32     dst=packages/$pkg/$filename
33     [ -r $src ] || continue
34     [ -r $dst ] && continue || :
35     mkdir -p packages/$pkg
36     ln $src $dst
37 done
38
39 ########################################################################
40 # Mark all private packages
41 ########################################################################
42 for pkg in $(echo "SELECT name FROM package WHERE local = true" | sqlite3 pyshop.db); do
43     cd packages/$(echo $pkg | pkgname)
44     for f in * ; do sha256 < $f | xxd -r -p > $f.sha256 ; done
45     touch .internal
46     cd ../..
47 done
48
49 ########################################################################
50 # Force all metainformation update from upstream
51 ########################################################################
52 cd packages
53 for pkg in * ; do
54     # Assume gocheese -gpgupdate /gpgupdate/
55     curl http://localhost:8080/gpgupdate/$pkg/ > /dev/null
56 done
57
58 ########################################################################
59 # Assure ckecksums are good
60 ########################################################################
61 gocheese -fsck