| #!/bin/sh | |
| # If "one-time-script" exists in $HTTPD_ROOT_PATH, run the script on the HTTP | |
| # response. If the response was modified as a result, delete "one-time-script" | |
| # so that subsequent HTTP responses are no longer modified. | |
| # | |
| # This can be used to simulate the effects of the repository changing in | |
| # between HTTP request-response pairs. | |
| test -f one-time-script || exec "$GIT_EXEC_PATH/git-http-backend" | |
| LC_ALL=C | |
| export LC_ALL | |
| out=out.$$ | |
| modified=out-modified.$$ | |
| "$GIT_EXEC_PATH/git-http-backend" >"$out" | |
| # Since Apache can execute this script for multiple requests | |
| # concurrently, we chain "rm one-time-script" with the logic | |
| # for generating a modified response. If the "rm" ran separately, | |
| # a concurrent request could pass the "test -f" above and | |
| # erroneously result in multiple modified responses or an empty | |
| # body depending on the race state. | |
| # | |
| # We discard stderr for ./one-time-script since it is possible | |
| # ./one-time-script has been removed already, which is expected | |
| # sometimes. In this case, the unmodified response will be returned. | |
| if ./one-time-script "$out" 2>/dev/null >"$modified" && | |
| ! cmp -s "$out" "$modified" && | |
| rm one-time-script 2>/dev/null | |
| then | |
| cat "$modified" | |
| else | |
| cat "$out" | |
| fi | |
| rm -f "$out" "$modified" |