lib/Tools/components
changeset 73183 ebf7babc05ce
parent 73172 fc828f64da5b
child 73308 f73c691bd679
--- a/lib/Tools/components	Thu Jan 21 18:18:19 2021 +0100
+++ b/lib/Tools/components	Sun Jan 24 19:34:37 2021 +0100
@@ -19,11 +19,15 @@
   echo "    -R URL       component repository (default \$ISABELLE_COMPONENT_REPOSITORY)"
   echo "    -a           resolve all missing components"
   echo "    -l           list status"
+  echo "    -u DIR       update \$ISABELLE_HOME_USER/components: add directory"
+  echo "    -x DIR       update \$ISABELLE_HOME_USER/components: remove directory"
   echo
-  echo "  Resolve Isabelle components via download and installation."
-  echo "  COMPONENTS are identified via base name."
+  echo "  Resolve Isabelle components via download and installation: given COMPONENTS"
+  echo "  are identified via base name. Further operations manage etc/settings and"
+  echo "  etc/components in \$ISABELLE_HOME_USER."
   echo
   echo "  ISABELLE_COMPONENT_REPOSITORY=\"$ISABELLE_COMPONENT_REPOSITORY\""
+  echo "  ISABELLE_HOME_USER=\"$ISABELLE_HOME_USER\""
   echo
   exit 1
 }
@@ -43,8 +47,9 @@
 COMPONENT_REPOSITORY="$ISABELLE_COMPONENT_REPOSITORY"
 ALL_MISSING=""
 LIST_ONLY=""
+declare -a UPDATE_COMPONENTS=()
 
-while getopts "IR:al" OPT
+while getopts "IR:alu:x:" OPT
 do
   case "$OPT" in
     I)
@@ -59,6 +64,12 @@
     l)
       LIST_ONLY="true"
       ;;
+    u)
+      UPDATE_COMPONENTS["${#UPDATE_COMPONENTS[@]}"]="+$OPTARG"
+      ;;
+    x)
+      UPDATE_COMPONENTS["${#UPDATE_COMPONENTS[@]}"]="-$OPTARG"
+      ;;
     \?)
       usage
       ;;
@@ -70,7 +81,7 @@
 
 # args
 
-[ "$#" -eq 0 -a -z "$INIT_SETTINGS" -a -z "$ALL_MISSING" -a -z "$LIST_ONLY" ] && usage
+[ "$#" -eq 0 -a -z "$INIT_SETTINGS" -a -z "$ALL_MISSING" -a -z "$LIST_ONLY" -a "${#UPDATE_COMPONENTS[@]}" -eq 0 ] && usage
 
 if [ -z "$ALL_MISSING" ]; then
   splitarray ":" "$@"
@@ -112,6 +123,9 @@
   echo
   echo "Missing components:"
   for NAME in "${MISSING_COMPONENTS[@]}"; do echo "  $NAME"; done
+elif [ "${#UPDATE_COMPONENTS[@]}" -ne 0 ]; then
+  isabelle_admin_build jars || exit $?
+  exec isabelle java isabelle.Components "${UPDATE_COMPONENTS[@]}"
 else
   for NAME in "${SELECTED_COMPONENTS[@]}"
   do