** Note: this process is deprecated. See this document for the latest workflow. **
This doc walks through the process of updating a dependency, using Unison's standard library, base
, as an example.
First, pull
the new version of the library into the lib
namespace of your project. It should not be pulled into the same namespace as your existing library version. Instead, give the new version a distinct name, like baseV2
or newBase
. We can change the name later.
Then apply the the patch from the new library version to the project. Assuming your UCM console is located at the top of your project, you can use the patch command like so:
.myProject> patch lib.newBase.patch
Patches map old term references to new references in a namespace; they're part of what helps Unison automatically propagate changes when functions get updated. Patch entries are created automatically when the library author runs update
.
Next you should check if there are todo
items in your project as a result of applying the patch. At the root of your project, run todo
:
.myProject> todo
Todo items can happen if a function in your project depends on a function in the library whose type signature has changed in the new version. If there are todo
items after applying the patch, the UCM should supply a suggested order to tackle them in. You'll want to edit the terms into a scratch file, resolve the conflicts and then update
the terms.
Once there are no todo
items it's safe to delete the old library version from the lib
namespace of the project. You may want to rename your new library version to base
again so that it's easier to refer to in the future.
.myProject> delete.namespace lib.base
.myProject> rename.namespace lib.newBase lib.base
It's done! Your project is now using the latest version of the dependency!