@@ -0,0 +1,1039 @@
+#!/usr/bin/python%0A%22%22%22%0AThis script touches all files known to the database, creating a skeletal%0Amirror for local development.%0A%22%22%22%0A%0Aimport sys, os%0Aimport store%0A%0Adef get_paths(cursor, prefix=None):%0A    store.safe_execute(cursor, %22SELECT python_version, name, filename FROM release_files%22)%0A%0A    for type, name, filename in cursor.fetchall():%0A        yield os.path.join(prefix, type, name%5B0%5D, name, filename)%0A%0Aif __name__ == '__main__':%0A    import config%0A    try:%0A        config = config.Config(sys.argv%5B1%5D)%0A    except IndexError:%0A        print %22Usage: touch_all_files.py config.ini%22%0A        raise SystemExit%0A%0A    datastore = store.Store(config)%0A    datastore.open()%0A    cursor = datastore.get_cursor()%0A    prefix = config.database_files_dir%0A%0A    for path in get_paths(cursor, prefix):%0A        dir = os.path.dirname(path)%0A        if not os.path.exists(dir):%0A            print %22Creating directory %25s%22 %25 dir%0A            os.makedirs(dir)%0A        if not os.path.exists(path):%0A            print %22Creating file %25s%22 %25 path%0A            open(path, %22a%22)%0A

Add script to synthesize all uploaded files. Patch by Dan Callahan.