{"push_id":1027271354,"size":17,"distinct_size":16,"ref":"refs/heads/work","head":"4c174e8f712cfbd2f714636c786ccffce2da80c9","before":"8c77f5accc6c64f368178a97c8396e5ad42e7cad","commits":[{"sha":"c118ad8400827f35f2839051c4bc77221c840ad0","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Exit with non-zero status if we didn't write setup.ini due to a pre-existing package-set error","distinct":false,"url":"https://api.github.com/repos/jon-turney/calm/commits/c118ad8400827f35f2839051c4bc77221c840ad0"},{"sha":"e786e24fffd9c2e7232ca27462cceabdb2050b97","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Remove shell script, do everything in python\n\nHave I mentioned lately how much I hate shell scripts...","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/e786e24fffd9c2e7232ca27462cceabdb2050b97"},{"sha":"14f2315294ae69a5980b00c59973128f3e982280","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Use SortedDict to avoid sorting package names many times\n\nAt the moment, we sort the list of package names many times, mainly becuase\nthe output is easier to interpret if packages are processed in alphabetical\norder.  Avoid this by maintaining the package set in sorted order.\n\npip3 install sortedcontainers","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/14f2315294ae69a5980b00c59973128f3e982280"},{"sha":"88d77de4b98fb73dc803eee4fddd9a1ee61d6102","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Adjustments to make mksetupini a little more generally useful\n\n* Ignore dotfiles in the release area\n* Don't check package names are on the package list unless --pkglist is used\n* Disable checking that required packages exist with --okmissing=required-package","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/88d77de4b98fb73dc803eee4fddd9a1ee61d6102"},{"sha":"f5d8552741e3d0efbb09e705667370c76cd648c2","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Send log output to stdout\n\nThe only output we write is log output, so this output is perfectly normal\nand doesn't need to go to stderr.\n\nIf we are invoked from cron with 'calm 2>&1 >/dev/null', any stderr output\nwhich ends up mailed by cron will be a real error (i.e. we died from an\nexception).","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/f5d8552741e3d0efbb09e705667370c76cd648c2"},{"sha":"cf6aa236e62ea012dab371239a64ad4ad3a973f4","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Sort requires: before showing differences\n\nThis is a cosmetic improvement to reporting","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/cf6aa236e62ea012dab371239a64ad4ad3a973f4"},{"sha":"a8c5c575e6d67a47100ac6759b0265fff8320599","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Sort paths, don't repeat full path for every file moved\n\nThis is a cosmetic improvement to reporting","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/a8c5c575e6d67a47100ac6759b0265fff8320599"},{"sha":"487b757efeeda3b2fb7e02d304b756cd077773e1","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Add to TODO","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/487b757efeeda3b2fb7e02d304b756cd077773e1"},{"sha":"9e9d274e2c78821fe2557849dd9f10ba57a2f6dd","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Alphabetize requires when adding cygwin\n\nStill doesn't guarantee no differences in requires:, as cygport only sorts\nautomatically calculated requires, not the explicit ones.","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/9e9d274e2c78821fe2557849dd9f10ba57a2f6dd"},{"sha":"2173e8e71debfd7a9786054e742f88ba7cb12da2","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Simplify a filtering of filenames expressed in a rather complex way","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/2173e8e71debfd7a9786054e742f88ba7cb12da2"},{"sha":"4816ad7a3cda29bdbdacc15fd7df57f94a78366c","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Tolerate requests to delete files which don't exist","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/4816ad7a3cda29bdbdacc15fd7df57f94a78366c"},{"sha":"0eedee8ae016e0519897dfb3c4960898bbacf89f","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Remove deletion cookies after files are vaulted\n\nIn uploads.scan(), rename 'ready' to 'remove'\nAdd 'remove_success' (again) to hold the list of deletion cookies\nRemove those files after the vaulting has occured\n\nXXX: tests","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/0eedee8ae016e0519897dfb3c4960898bbacf89f"},{"sha":"4fd9a2eadf198099488388b361da483b50f28d99","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Test of deletion cookie reading","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/4fd9a2eadf198099488388b361da483b50f28d99"},{"sha":"5dc3b41270d98bf1fd0d1e54ae52927fd9ac7447","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Fix testdata so validate_packages() can succeed\n\n- add a mock openssh package\n- make all libtext packages fail parsing with ldesc embedded quote\n- remove proj-debuginfo, since all other proj packages fail parsing\n- add rpm-doc-4.1-2-src mock package\n- remove unmocked requires of naim packge\n\nAssert that validate_package succeeds","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/5dc3b41270d98bf1fd0d1e54ae52927fd9ac7447"},{"sha":"29f48cf2ecfd3f6c057aadfb8d45af92f96d6d4c","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Add logging to a file","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/29f48cf2ecfd3f6c057aadfb8d45af92f96d6d4c"},{"sha":"d44f661635bb65f7f15ac5627104c7cda58e278f","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Record if sendmail didn't send a mail to some addressees","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/d44f661635bb65f7f15ac5627104c7cda58e278f"},{"sha":"4c174e8f712cfbd2f714636c786ccffce2da80c9","author":{"email":"45846cba2ea093796a8b1c25d70d679d8107179f@dronecode.org.uk","name":"Jon Turney"},"message":"Test directory trees are as expected after moving uploads/vaultings\n\nAdd a test which verifies that directory trees are as expected after moving\nfiles from uploads to rel_area and from rel_area to vault\n\nXXX: why is 'invalid' in rel_area?","distinct":true,"url":"https://api.github.com/repos/jon-turney/calm/commits/4c174e8f712cfbd2f714636c786ccffce2da80c9"}]}