summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phan/bin/phan
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/tests/phan/bin/phan')
-rwxr-xr-xwww/wiki/tests/phan/bin/phan90
1 files changed, 90 insertions, 0 deletions
diff --git a/www/wiki/tests/phan/bin/phan b/www/wiki/tests/phan/bin/phan
new file mode 100755
index 00000000..ad06823a
--- /dev/null
+++ b/www/wiki/tests/phan/bin/phan
@@ -0,0 +1,90 @@
+#!/bin/bash
+
+# mediawiki-vagrant installs dont have realpath by default
+if ! which realpath > /dev/null; then
+ realpath() {
+ php -r "echo realpath('$*');"
+ }
+fi
+
+if hash php7.0 2>/dev/null; then
+ export PHP="php7.0"
+else
+ export PHP="php"
+fi
+
+# Note that this isn't loaded in via composer because then composer can
+# only be run with php7.0
+if [ ! -f "$PHAN" ]; then
+ # If no PHAN is specified then try to get location from PATH
+ export PHAN="$(which phan)"
+ if [ ! -f "$PHAN" ]; then
+ echo "The environment variable PHAN must point to the 'phan' file"
+ echo "in a checkout of https://github.com/etsy/phan.git"
+ echo "Or phan must be included in your PATH"
+ exit 1
+ fi
+else
+ export PHAN="$PHP $PHAN"
+fi
+
+if [ -z "$MW_INSTALL_PATH" ]; then
+ # Figure out where mediawiki is based on the location of this script
+ pushd "$(dirname "$0")" > /dev/null
+ export MW_INSTALL_PATH="$(git rev-parse --show-toplevel)"
+ popd >/dev/null
+fi
+
+# If the first argument doesn't start with a -, then it's a path
+# to another project (extension, skin, etc.) to analyze
+if [[ -n "$1" && "$1" != "-"* ]]; then
+ cd $1
+ shift
+else
+ cd "$(dirname "$0")"
+fi
+
+# Root directory of project
+export ROOT="$(git rev-parse --show-toplevel)"
+
+# Go to the root of this git repo
+cd "$ROOT"
+
+export CONFIG_FILE="$ROOT/tests/phan/config.php"
+if [ ! -f "$CONFIG_FILE" ]; then
+ echo "Could not find a phan config file to apply in"
+ echo "$CONFIG_FILE"
+ exit 1
+fi
+
+# Phan's issues directory
+export ISSUES="${ROOT}/tests/phan/issues"
+mkdir -p "$ISSUES"
+
+# Get the current hash of HEAD
+export REV="$(git rev-parse HEAD)"
+
+# Destination for issues found
+export RUN="${ISSUES}/issues-${REV}"
+
+
+# Run the analysis, emitting output to the
+# issues file.
+$PHAN \
+ --project-root-directory "$ROOT" \
+ --config-file "$CONFIG_FILE" \
+ --output "php://stdout" \
+ "${@}" \
+ | php "$MW_INSTALL_PATH/tests/phan/bin/postprocess-phan.php" "${@}" \
+ > $RUN
+
+EXIT_CODE="$?"
+
+# Re-link the latest file
+rm -f "${ISSUES}/latest"
+ln -s "${RUN}" "${ISSUES}/latest"
+
+# Output any issues that were found
+cat "${RUN}"
+
+exit $EXIT_CODE