[140569] users/ryandesign/scripts/housekeeping-xcode

ryandesign at macports.org ryandesign at macports.org
Wed Sep 23 11:33:22 PDT 2015


Revision: 140569
          https://trac.macports.org/changeset/140569
Author:   ryandesign at macports.org
Date:     2015-09-23 11:33:22 -0700 (Wed, 23 Sep 2015)
Log Message:
-----------
housekeeping-xcode: new script to delete unneeded Xcode caches

Added Paths:
-----------
    users/ryandesign/scripts/housekeeping-xcode

Added: users/ryandesign/scripts/housekeeping-xcode
===================================================================
--- users/ryandesign/scripts/housekeeping-xcode	                        (rev 0)
+++ users/ryandesign/scripts/housekeeping-xcode	2015-09-23 18:33:22 UTC (rev 140569)
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+# Removes cache data for versions of Xcode that are no longer installed.
+
+if [ $(id -u) -ne 0 ]; then
+    echo "$(basename "$0") must be run as root" 1>&2
+    exit 1
+fi
+
+UI_PREFIX="---> "
+
+PLISTBUDDY="/usr/libexec/PlistBuddy"
+if [ ! -x "$PLISTBUDDY" ]; then
+  # PlistBuddy is not installed on older systems.
+  # Find newest executable PlistBuddy in installer receipts.
+  for PLISTBUDDY in $(stat -f '%Sm%N' -t '%Y%m%d%H%M%S' /Library/Receipts/*.pkg/Contents/Resources/PlistBuddy | sort -r | sed 's/^..............//'); do
+    if [ -x "$PLISTBUDDY" ]; then
+      break
+    fi
+  done
+  if [ ! -x "$PLISTBUDDY" ]; then
+    echo "Could not find PlistBuddy" 1>&2
+    exit 1
+  fi
+fi
+
+MDFIND="/usr/bin/mdfind"
+if [ ! -x "$MDFIND" ]; then
+  echo "Could not find mdfind" 1>&2
+  exit 1
+fi
+
+
+XCODE_PATHS_INSTALLED=($($MDFIND kMDItemCFBundleIdentifier=com.apple.dt.Xcode))
+XCODE_VERSIONS_INSTALLED=()
+
+for ((I=0; I<${#XCODE_PATHS_INSTALLED[@]}; ++I)); do
+  XCODE_VERSIONS_INSTALLED[$I]="$($PLISTBUDDY -c 'Print CFBundleShortVersionString' -c 'Print ProductBuildVersion' "${XCODE_PATHS_INSTALLED[$I]}/Contents/version.plist" | paste -d - - -)"
+done
+
+XCODE_VERSIONS_WITH_CACHES=($(ls -1d /private/var/folders/*/*/C/com.apple.DeveloperTools/* | sed 's,^.*/,,' | sort -u))
+
+DELETED_K=0
+KEPT_K=0
+for ((C=0; C<${#XCODE_VERSIONS_WITH_CACHES[@]}; ++C)); do
+  SIZE_K="$(du -cks /private/var/folders/*/*/C/com.apple.DeveloperTools/"${XCODE_VERSIONS_WITH_CACHES[$C]}" | tail -n 1 | awk '{print $1}')"
+  SIZE_H="$(echo "scale=1;$SIZE_K/1024" | bc)M"
+  INSTALLED=0
+  for ((I=0; I<${#XCODE_PATHS_INSTALLED[@]}; ++I)); do
+    if [ "${XCODE_VERSIONS_WITH_CACHES[$C]}" == "${XCODE_VERSIONS_INSTALLED[$I]}" ]; then
+      INSTALLED=1
+      echo "$UI_PREFIX Keeping $SIZE_H of caches for Xcode ${XCODE_VERSIONS_INSTALLED[$I]} which is installed at ${XCODE_PATHS_INSTALLED[$I]}"
+      KEPT_K=$(($KEPT_K + $SIZE_K))
+      break
+    fi
+  done
+  if [ $INSTALLED -eq 0 ]; then
+    echo "$UI_PREFIX Deleting $SIZE_H of caches for Xcode ${XCODE_VERSIONS_WITH_CACHES[$C]} which is no longer installed"
+    DELETED_K=$(($DELETED_K + $SIZE_K))
+    rm -rf /private/var/folders/*/*/C/com.apple.DeveloperTools/"${XCODE_VERSIONS_WITH_CACHES[$C]}"
+  fi
+done
+
+if [[ $DELETED_K -gt 0 || $KEPT_K -gt 0 ]]; then
+  echo
+fi
+if [ $DELETED_K -gt 0 ]; then
+  DELETED_H="$(echo "scale=1;$DELETED_K/1024" | bc)M"
+  echo "$UI_PREFIX Deleted a total of $DELETED_H of Xcode caches"
+fi
+if [ $KEPT_K -gt 0 ]; then
+  KEPT_H="$(echo "scale=1;$KEPT_K/1024" | bc)M"
+  echo "$UI_PREFIX Kept a total of $KEPT_H of Xcode caches"
+fi


Property changes on: users/ryandesign/scripts/housekeeping-xcode
___________________________________________________________________
Added: svn:executable
   + *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/macports-changes/attachments/20150923/90983cb4/attachment.html>


More information about the macports-changes mailing list