Turtle
631510f54e
feat(install): adopt an existing checkout into the managed layout
...
Running scripts/install.sh from a checkout linked `dsh` straight at that
checkout, producing an install that `dsh-upgrade` cannot upgrade (there is
no `current` to repoint), that dangles if the checkout moves, and whose
launcher resolves to an arbitrary working branch.
In-repo mode still never clones and never touches the working tree, but it
now offers to adopt the checkout, and adoption is the default. The container
owns staging worktrees and `current`; the repository is discovered via
`git rev-parse --git-common-dir` rather than owned, so a clone anywhere on
disk converges on the same upgradable layout as a curl install and both
share one worktree/exclude/lock/link sequence.
Declining, or DSH_ADOPT=0, keeps the previous link-in-place behavior with a
warning naming what it costs, preserving the path that makes this script
testable against local source.
All path comparisons run on physical paths: macOS resolves /var through a
symlink to /private/var, and comparing a resolved path against an unresolved
one misclassified an existing managed install as a foreign clone.
Verified manually (no install.spec.ts, per request) with a harness driving
the real script under a stubbed pnpm across 33 assertions, plus both
interactive outcomes under tmux.
2026-07-31 20:22:40 +08:00
..
2026-07-29 22:38:20 +08:00
2026-07-29 22:38:20 +08:00
2026-07-29 22:38:20 +08:00
2026-07-23 00:10:53 +08:00
2026-07-22 23:07:14 +08:00
2026-07-23 00:10:53 +08:00
2026-07-28 23:13:28 +08:00
2026-07-28 23:13:28 +08:00
2026-07-28 23:13:28 +08:00
2026-07-28 23:13:28 +08:00
2026-07-28 23:13:28 +08:00
2026-07-28 23:13:28 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 02:52:48 +08:00
2026-07-26 02:52:48 +08:00
2026-07-26 02:52:48 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-27 09:39:54 +08:00
2026-07-27 09:39:54 +08:00
2026-07-27 09:39:54 +08:00
2026-07-24 15:10:55 +08:00
2026-07-22 23:07:14 +08:00
2026-07-24 15:10:55 +08:00
2026-07-26 15:06:51 +08:00
2026-07-26 15:06:51 +08:00
2026-07-26 15:06:51 +08:00
2026-07-24 13:57:16 +08:00
2026-07-23 00:10:53 +08:00
2026-07-24 13:57:16 +08:00
2026-07-28 00:00:51 +08:00
2026-07-28 00:00:51 +08:00
2026-07-28 00:00:51 +08:00
2026-07-30 21:49:33 +08:00
2026-07-30 21:49:33 +08:00
2026-07-30 21:49:33 +08:00
2026-07-29 14:32:11 +08:00
2026-07-29 14:32:11 +08:00
2026-07-29 14:32:11 +08:00
2026-07-24 13:57:16 +08:00
2026-07-22 23:07:14 +08:00
2026-07-24 13:57:16 +08:00
2026-07-24 13:57:16 +08:00
2026-07-23 00:10:53 +08:00
2026-07-24 13:57:16 +08:00
2026-07-26 02:33:29 +08:00
2026-07-26 02:33:29 +08:00
2026-07-26 02:33:29 +08:00
2026-07-30 19:57:17 +08:00
2026-07-30 19:57:17 +08:00
2026-07-30 19:57:17 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 23:06:00 +08:00
2026-07-26 15:06:51 +08:00
2026-07-26 15:06:51 +08:00
2026-07-26 15:06:51 +08:00
2026-07-23 03:25:11 +08:00
2026-07-23 03:25:11 +08:00
2026-07-23 03:25:11 +08:00
2026-07-30 17:10:45 +08:00
2026-07-30 17:10:45 +08:00
2026-07-30 17:10:45 +08:00
2026-07-28 15:26:00 +08:00
2026-07-28 15:26:00 +08:00
2026-07-28 15:26:00 +08:00
2026-07-30 19:02:10 +08:00
2026-07-30 19:02:10 +08:00
2026-07-30 19:02:10 +08:00
2026-07-29 22:38:20 +08:00
2026-07-29 22:38:20 +08:00
2026-07-29 22:38:20 +08:00
2026-07-31 11:18:49 +08:00
2026-07-31 11:18:49 +08:00
2026-07-31 11:18:49 +08:00
2026-07-23 03:59:35 +08:00
2026-07-23 03:59:35 +08:00
2026-07-23 03:59:35 +08:00
2026-07-27 18:53:30 +08:00
2026-07-27 18:53:30 +08:00
2026-07-27 18:53:30 +08:00
2026-07-27 13:17:12 +08:00
2026-07-27 13:17:12 +08:00
2026-07-27 13:17:12 +08:00
2026-07-23 23:12:56 +08:00
2026-07-23 23:12:56 +08:00
2026-07-23 23:12:56 +08:00
2026-07-27 00:34:41 +08:00
2026-07-27 00:34:41 +08:00
2026-07-27 00:34:41 +08:00
2026-07-28 10:28:49 -07:00
2026-07-28 10:28:49 -07:00
2026-07-28 10:28:49 -07:00
2026-07-30 11:16:37 +08:00
2026-07-30 11:16:37 +08:00
2026-07-30 11:16:37 +08:00
2026-07-26 15:54:36 +08:00
2026-07-26 15:54:36 +08:00
2026-07-26 15:54:36 +08:00
2026-07-27 23:38:49 +08:00
2026-07-27 23:38:49 +08:00
2026-07-27 23:38:49 +08:00
2026-07-26 21:59:03 +08:00
2026-07-26 21:59:03 +08:00
2026-07-26 21:59:03 +08:00
2026-07-27 18:39:20 +08:00
2026-07-27 18:39:20 +08:00
2026-07-27 18:39:20 +08:00
2026-07-28 14:58:06 +08:00
2026-07-28 14:58:06 +08:00
2026-07-28 14:58:06 +08:00
2026-07-27 23:27:07 +08:00
2026-07-27 23:27:07 +08:00
2026-07-27 23:27:07 +08:00
2026-07-28 01:02:43 +08:00
2026-07-28 01:02:43 +08:00
2026-07-28 01:02:43 +08:00
2026-07-27 18:43:00 +08:00
2026-07-27 18:43:00 +08:00
2026-07-27 18:43:00 +08:00
2026-07-29 13:38:55 +08:00
2026-07-29 13:38:55 +08:00
2026-07-29 13:38:55 +08:00
2026-07-29 23:45:06 +08:00
2026-07-29 23:45:06 +08:00
2026-07-29 23:45:06 +08:00
2026-07-30 21:47:13 +08:00
2026-07-30 21:47:13 +08:00
2026-07-30 21:47:13 +08:00
2026-07-30 10:28:16 -07:00
2026-07-30 10:28:16 -07:00
2026-07-30 10:28:16 -07:00
2026-07-30 19:02:10 +08:00
2026-07-30 19:02:10 +08:00
2026-07-30 19:02:10 +08:00
2026-07-31 02:55:37 +08:00
2026-07-31 02:55:37 +08:00
2026-07-31 02:55:37 +08:00
2026-07-31 20:22:40 +08:00
2026-07-31 20:22:40 +08:00
2026-07-31 20:22:40 +08:00