when hitting Ctrl+C in a 'docker run bob …', the main script itself actually can't be terminated by Ctrl+C, because it's PID 1
in that case, rather than just shutting down silently (by terminating itself using a SIGINT), we will see the subprocess exit (because Ctrl+C is sent to the whole process group)
When this happens, the return code of the process will be negative, to indicate that it didn't exit with that code, but instead got terminated by a signal of that (absolute) number
This brings Python 3 compatibility
With this change, all output from the formula ends up on stdout, without any buffering, meaning e.g. progress bars (from curl for instance) also finally show up in real time, without line buffering like before
This makes it easier to differentiate between the archives for
dependencies and that of the final build output by bob when sifting
through `/tmp/`. The archive type is now also apparent when reading
the console output.
Before:
```
Building formula foo in /tmp/bobrmyuSG:
...
Archiving.
/tmp/tmp4JUwdj
Deploying.
...
```
After (when combined with #28):
```
Building formula foo in /tmp/bob-rmyuSG:
...
Archiving.
Created: /tmp/bob-build-tmp4JUwdj.tar.gz
Deploying.
...
```
This means that the main bucket also benefits from the access denied
`anon=True` fall-back previously only used for the upstream bucket.
This helps with the case where AWS credentials are found, but are
for an account unrelated to either bucket.
Since the main bucket can now fall back to anonymous mode, a check
has been added to the deploy command to improve the UX.
Fixes:
https://github.com/kennethreitz/bob-builder/issues/26#issuecomment-301058112
An UPSTREAM_S3_BUCKET should usually allow "Everyone" for listing bucket contents.
If the S3 credentials for the normal bucket do not explicitly have access, a 403 will occur.
In that case, we re-try fetching the upstream bucket with anonymous authentication.
Intentionally uses os.path.exists without checking if it's a dir so that if it's a file or link an error is raised and the user sees that they're doing something really wrong somehow, somewhere