first commit
This commit is contained in:
+71
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Purpose : coredesktop-dev try: run the working copy's code as if it were the
|
||||
# deployed CoreDesktop, in a throwaway home with its own session
|
||||
|
||||
try_usage() {
|
||||
cat << EOF
|
||||
Usage: coredesktop-dev try [--keep] [command...]
|
||||
|
||||
Runs command (or a shell) with a throwaway HOME where
|
||||
~/.local/share/coredesktop is the working copy, and update, configure, version
|
||||
etc. in ~/.local/bin are the working copy's. It gets its own XDG_RUNTIME_DIR
|
||||
and D-Bus session, and no display, so it can't touch your desktop session.
|
||||
|
||||
sudo, yay, pacman and systemctl still change this machine.
|
||||
|
||||
--keep Keep the throwaway folder afterwards, and print where it is
|
||||
|
||||
Example: coredesktop-dev try configure --list
|
||||
EOF
|
||||
}
|
||||
|
||||
TRY_COMMANDS=(update refresh sibling version configure audit)
|
||||
|
||||
cmd_try() {
|
||||
local keep=0
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h | --help) try_usage; return 0 ;;
|
||||
--keep) keep=1; shift ;;
|
||||
--) shift; break ;;
|
||||
*) break ;;
|
||||
esac
|
||||
done
|
||||
require_working_copy
|
||||
|
||||
local tmp home runtime cmd status
|
||||
tmp="$(mktemp -d "${TMPDIR:-/tmp}/coredesktop-dev-try.XXXXXX")" || return 1
|
||||
home="$tmp/home"
|
||||
runtime="$tmp/runtime"
|
||||
mkdir -p "$home/.local/share" "$home/.local/bin" "$home/.local/state" \
|
||||
"$home/.config" "$home/.cache"
|
||||
mkdir -m 700 "$runtime"
|
||||
|
||||
ln -s "$WORKING_COPY" "$home/.local/share/coredesktop"
|
||||
for cmd in "${TRY_COMMANDS[@]}"; do
|
||||
ln -s "$WORKING_COPY/$cmd" "$home/.local/bin/$cmd"
|
||||
done
|
||||
|
||||
echo "coredesktop-dev try: HOME is $home, with the working copy as CoreDesktop." >&2
|
||||
echo "Careful: sudo, yay, pacman and systemctl still change this machine." >&2
|
||||
|
||||
(( $# > 0 )) || set -- bash
|
||||
env -u DISPLAY -u WAYLAND_DISPLAY -u DBUS_SESSION_BUS_ADDRESS -u SSH_AUTH_SOCK \
|
||||
HOME="$home" \
|
||||
XDG_CONFIG_HOME="$home/.config" \
|
||||
XDG_DATA_HOME="$home/.local/share" \
|
||||
XDG_STATE_HOME="$home/.local/state" \
|
||||
XDG_CACHE_HOME="$home/.cache" \
|
||||
XDG_RUNTIME_DIR="$runtime" \
|
||||
PATH="$home/.local/bin:$PATH" \
|
||||
dbus-run-session -- "$@"
|
||||
status=$?
|
||||
|
||||
if (( keep )); then
|
||||
echo "Kept $tmp" >&2
|
||||
else
|
||||
rm -rf "$tmp"
|
||||
fi
|
||||
return $status
|
||||
}
|
||||
Reference in New Issue
Block a user