Repository navigation
tether 0.1.0b6
Pre-release
Pre-release
Added
tether init --dataset-id IDuses that id instead of a fresh one; anything
but 8 lowercase hex characters is refused.tether restore KEY... --at REFstarts the bookmark's branch as a copy of
a native branch, tag or state id.REFitself is never moved.tether new --adopttakes the bookmark's existing store branches as they
are, uncommitted writes included, instead of resetting them. A saved plan
binds to each branch still existing and being the newest generation, not
to its head.tether recoverlists tether's refs in each store by dataset id and prints
the steps that take back a dataset whose repository was lost.tether repair KEY...(Repo.repair(keys)) rebuilds only those objects'
pins and branches, selected from every key history has had with
--all-history. A saved plan records its selection under its digest.
Changed
- A saved plan (
--plan FILE) records the tether version that made it, and
--from-planapplies it only under that version. Plans saved by any other
version, including every earlier release, are refused: re-run the plan. tether recoverprints each step as a command followed by a#note, and
--jsongives each as{"command": str or null, "note": str}instead of
one string mixing the two.
Fixed
tether new --sharedcan join a bookmark whose branch is being written,
such as a preview environment's database. The plan binds to the branch
still building on the bookmark's pin, not to its head, which moved on.tether new BOOKMARK(ornew REV) to a revision that registers an
object the current checkout lacks no longer fails with "this new plan
predates the ref_absent/ref_head ... precondition(s)". Its checks now look
in the stores the target revision names, which differ when an object was
moved.- Applying a saved
newplan refuses to adopt a branch that has a newer
generation (.2) or is gone. 0.1.0b5's plans bound an adopt to its head
only, which a newer generation leaves as it was. restore --atandadd --atrefuse an empty or blankREF. An unset
variable (--at "$UNSET") used to reset the branch from the upstream head.
--at 0(andat=0from Python) is a version like any other, such as a
Delta table's first.- A
fileorneonobject registered withat = 0is refused like any
otherat, instead of reading the current head. tether opsshows arestore --at 0asrestored KEY from 0, notfrom None.tether recoverlists per-workspace branches from before bookmarks, which
may hold uncommitted writes, with arestore --atstep for each. It
suggests no dataset id when run on some keys only, and putstether repair
first when a manifest's pin is missing from its store. It also matches
escaped bookmark names (feature/x) to the VCS's bookmarks.tether recover KEY...no longer suggests atether commit, which pins
every object under the current id and could lock in the wrong one; its
last step istether recoverwithout keys.tether recover's commands quote every key, ref, bookmark and message for
the shell, and its advice for a legacy branch that objects share (two Neon
databases on one branch) names them in onetether restore, which
restorerequires.tether recover KEY...suggeststether repair -- KEY...for only the
selected objects whose pins are missing, instead of a repair of every
object that reached the stores the run left out.tether recover's legacy-branch steps run from the trunk: each moves to a
bookmarkrecover-<workspace>off the trunk first, sincerestore --at
refuses the trunk, and commits what it restored.tether recover's commands end their options with--, so a key such as
--helpor-x, or a git branch name starting with-, is not read as
an option.tether recoverjoins an existingrecover-<workspace>bookmark only when
it is an earlier recovery's (nothing but its commits, and the objects
registered); an unrelated bookmark of that name is left alone and the steps
userecover-<workspace>-2.- git: a branch whose name starts with
-(git update-refmakes one) is
read as a name by every git call tether makes, sotether new -- -feat
switches to it instead of failing to resolve it.