A noteworthy change is the replacement of the `dp.startswith(os.path.join(".", "subdir"))` pattern. pathlib doesn't offer something with similar semantics besides `match` and `full_match`, so there's now a helper function that replicates the behavior.
Other notable changes include the addition of type annotations to ensure code correctness, using == to check file names instead of `endswith` for clarity (`endswith` is still used to check extensions), manual walking and copying being refactored in googletest, json, memory, nanopb, protobuf, and sleipnir to use `walk_cwd_and_copy_if`, and matching functions being shortened to the point where they can just be inlined into the lambda.
Co-authored-by: Tyler Veness <calcmogul@gmail.com>
Co-authored-by: David Vo <auscompgeek@users.noreply.github.com>
Upstream utils
Layout
Each thirdparty library has a Python script for updating it. They generally:
- Check out a thirdparty Git repository to a specific commit or tag
- Apply patch files to the thirdparty repo to fix things specific to our build
- Copy a subset of the thirdparty files into our repo
- Comment out any header includes that were invalidated, if needed
upstream_utils.py contains utilities common to these update scripts.
Patches are generated in the thirdparty repo with git's format-patch command so
they can be applied as individual commits and easily rebased onto newer
versions. Each library has its own patch directory (e.g., lib_patches).
Updating thirdparty library version
The example below will update a hypothetical library called lib to the tag
2.0.
Start in the upstream_utils folder. Make sure a clone of the upstream repo exists.
./<lib>.py clone
Rebase the clone of the upstream repo.
./<lib>.py rebase 2.0
Update the upstream_utils patch files and the tag in the script.
./<lib>.py format-patch
Copy the updated upstream files into the thirdparty files within allwpilib.
./<lib>.py copy-src
Adding patch to thirdparty library
The example below will add a new patch file to a hypothetical library called
lib (Replace <lib> with llvm, fmt, eigen, ... in the following steps).
Start in the upstream_utils folder. Make sure a clone of the upstream repo exists.
./<lib>.py clone
Update the clone of the upstream repo.
./<lib>.py reset
Navigate to the repo. If you can't find it, the directory of the clone is printed at the start of the clone command.
cd /tmp/<lib>
Make a commit with the desired changes.
git add ...
git commit -m "..."
Navigate back to upstream_utils.
cd allwpilib/upstream_utils
Update the upstream_utils patch files.
./<lib>.py format-patch
Rerun <lib>.py to reimport the thirdparty files.
./<lib>.py copy-src