66source " $( dirname " $0 " ) /_common.sh"
77
88SANDBOX=false
9+ FORCE=false
910for arg in " $@ " ; do
1011 case " $arg " in
1112 --sandbox) SANDBOX=true ;;
13+ --force) FORCE=true ;;
1214 --help|-h)
1315 echo " $MSG_CMD_UPDATE_USAGE "
1416 echo " "
1517 echo " $MSG_CMD_UPDATE_DESC "
1618 echo " "
1719 echo " $MSG_CMD_UPDATE_OPTIONS "
1820 echo " $MSG_CMD_UPDATE_SANDBOX_OPT "
21+ echo " $MSG_CMD_UPDATE_FORCE_OPT "
1922 echo " "
2023 echo " $MSG_CMD_UPDATE_TIP "
2124 exit 0
4649
4750echo " $MSG_CMD_UPDATE_UPDATING "
4851
49- echo " $MSG_CMD_UPDATE_STOPPING "
50- orb -m " $OPENCLAW_VM_NAME " bash -lc " openclaw gateway stop"
51- GATEWAY_STOPPED=true
52- trap ' if [ "$GATEWAY_STOPPED" = true ]; then
53- echo "$MSG_CMD_UPDATE_RECOVER"
54- orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway start" 2>/dev/null || true
55- fi' EXIT
56-
52+ # Fetch tags before stopping gateway to check if update is needed
5753echo " $MSG_CMD_UPDATE_PULLING "
5854orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && git fetch --tags --force"
5955LATEST_TAG=$( orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && git tag -l 'v*' | grep -v -e '-beta' -e '-rc' -e '-alpha' | sort -V | tail -1" )
@@ -62,6 +58,26 @@ if [ -z "$LATEST_TAG" ]; then
6258 exit 1
6359fi
6460echo " -> $LATEST_TAG "
61+
62+ # Check if already on the latest tag
63+ CURRENT_HEAD=$( orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && git rev-parse HEAD 2>/dev/null" )
64+ TAG_COMMIT=$( orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && git rev-parse '$LATEST_TAG ^{commit}' 2>/dev/null" )
65+ if [ " $CURRENT_HEAD " = " $TAG_COMMIT " ] && [ " $FORCE " = false ] && [ " $SANDBOX " = false ]; then
66+ echo -e " $MSG_CMD_UPDATE_ALREADY_CURRENT "
67+ # Still refresh Mac commands in case openclaw-orbstack repo changed
68+ OPENCLAW_LANG=" $_OPENCLAW_LANG " OPENCLAW_VM_NAME=" $OPENCLAW_VM_NAME " \
69+ bash " $OPENCLAW_REPO_DIR /scripts/refresh-mac-commands.sh" 2> /dev/null || true
70+ exit 0
71+ fi
72+
73+ echo " $MSG_CMD_UPDATE_STOPPING "
74+ orb -m " $OPENCLAW_VM_NAME " bash -lc " openclaw gateway stop"
75+ GATEWAY_STOPPED=true
76+ trap ' if [ "$GATEWAY_STOPPED" = true ]; then
77+ echo "$MSG_CMD_UPDATE_RECOVER"
78+ orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway start" 2>/dev/null || true
79+ fi' EXIT
80+
6581orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && git checkout -- . 2>/dev/null; git checkout '$LATEST_TAG '"
6682
6783# Ensure pnpm is available (npm/corepack may vanish after apt upgrade)
0 commit comments