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