Page MenuHomeSoftware Heritage

Route for fetching Git-encoded objects
ClosedPublic

Authored by Ericson2314 on Feb 16 2022, 5:50 PM.

Details

Summary

Adds an API route for fetching objects as Git objects

This route is needed for the implementation of the SWH Archive-IPFS
bridge. Specifically, we need a way to, given a SWHID, fetch the exact
data that was used to hash an object.

Diff Detail

Repository
rDWAPPS Web applications
Branch
arcpatch-D7192
Lint
No Linters Available
Unit
No Unit Test Coverage
Build Status
Buildable 28918
Build 45199: Phabricator diff pipeline on jenkinsJenkins console · Jenkins
Build 45198: arc lint + arc unit

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

Build is green

Patch application report for D7192 (id=27870)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit db6856571264cdc14ced37ad895643b1d8435ec5
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html
    
    Differential Revision: https://forge.softwareheritage.org/D7192

See https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1755/ for more details.

It works! Clean up commit history and stop filtering the tests

Build is green

Patch application report for D7192 (id=27871)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit 71c3e064a272a6f1e5a4a1f0668930e26684216f
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 241f90ba38c26924aef64b62e2d318a51d4df274
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend `swh.web.tests.data` with new functions
    
    - `random_sha1_bytes`
    
    - `random_object_type`
    
    - `random_swhid`
    
    The first two are used to make the third, but useful in their own right.
    The third will be used in the following commit.

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

See https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1756/ for more details.

Looks good to me, thanks.

swh/web/api/views/raw.py
41

This ref won't work because it's not the name of an existing function. Use this instead:

see ``*_git_object`` functions in :mod:`swh.model.git_objects`
49–51

don't invalid SWHIDs raise a 404 too?

swh/web/tests/api/views/test_raw.py
17–25

Could you make this test run for all SWHID types?

Build has FAILED

Patch application report for D7192 (id=27890)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit e87641d4ab986ef89c646cbc00756aea0f9bd3da
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 40b0fa4dfa7b571b3374a344273d7b9db83a0042
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
      - `random_object_type`
      - `random_swhid`
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a fixture

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1758/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1758/console

Ericson2314 added inline comments.
swh/web/api/views/raw.py
49–51

I have no idea :). This was inherited from the snapshot handler the patch as originally based on. I am just hoping the thrown exceptions do that! :)

swh/web/tests/api/views/test_raw.py
17–25

I have made a fixture that does this.

Ericson2314 marked an inline comment as done.

Remove unused imports

Build has FAILED

Patch application report for D7192 (id=27891)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit 291e668fb9bb863936ec2e8d85e12ab6a86f25f9
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 40b0fa4dfa7b571b3374a344273d7b9db83a0042
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
      - `random_object_type`
      - `random_swhid`
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a fixture

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1759/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1759/console

It would seem I did a no-op revise before

Build is green

Patch application report for D7192 (id=27894)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit b70379b50ba8ed6a76dc62dd45c6194f1398f142
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 725942c027d8010e587a7e15908002c88fcc225e
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
      - `random_object_type`
      - `random_swhid`
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a fixture

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

See https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1760/ for more details.

swh/web/api/views/raw.py
49–51

I don't see anything in the code that would raise a 400; so it's either a 404 (if Django rejects based on the regexp) or a 500.

swh/web/tests/data.py
78–86 ↗(On Diff #27894)

this is dead code now

Remove dead code, remove 400 from docs

Ericson2314 added inline comments.
swh/web/api/views/raw.py
49–51

What happens if CoreSWHID.from_string throws a ValidationError?

Still, regardless you are right that even if that is a 400, regex non-matches will be a 404.

One of the swh.web.view.vault one taking a SWHID mentions the 404, but the others don't so I will just drop it.

swh/web/tests/data.py
78–86 ↗(On Diff #27894)

Sure. I misinterpreted you before thinking it would be good ot have anyways. Will remove.

LGTM.

@anlambert Good for you too?

swh/web/api/views/raw.py
49–51

it raises a 500 because it won't be caught (afaik).

ack

Build was aborted

Patch application report for D7192 (id=27895)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit b5c42d617dafc6562a7e31f416fcfe3f8506e35d
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit e48569769b9468dcdd54ba5eb73045a642c5291f
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1761/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1761/console

I'll wait for now pending @anlambert review, but let me know if I should push again to to trigger a new build after the last one seems to have died spuriously (if I am not misunderstanding).

Push same stuff again to restart job

Figure we're about to be asleep in both our timezones, so might as well :).

Build was aborted

Patch application report for D7192 (id=27896)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit 51e99a5707e01f2d6b800a04ac2f85e858199dbd
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit e48569769b9468dcdd54ba5eb73045a642c5291f
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1762/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1762/console

Do you all know what is causing these CI failures?

Kick off CI again after I saw swh-model's wor

Do you all know what is causing these CI failures?

just Cypress tests timing out as usual

Do you all know what is causing these CI failures?

just Cypress tests timing out as usual

OK thanks, well, hopefully we can sort it out and get the second review French business hours next week :)

I've made drafts of a) the IPFS plugin using this new route b) snapshot encoding and decoding on the IPFS side, so once I can test those this we should be close to finished!

Thanks. Two things I forgot below:

swh/web/api/views/raw.py
1

should be 2022 instead

86–91

This usually does not matter, but some directories' git_object cannot be entirely rebuilt just from the list of entries for various reasons.

(and please add a test for it; there is an example here: https://forge.softwareheritage.org/source/swh-vault/browse/master/swh/vault/tests/test_cookers.py$1121-1141 )

swh/web/tests/api/views/test_raw.py
1

ditto

swh/web/tests/conftest.py
1 ↗(On Diff #27919)

and you should add 2022 here

Build was aborted

Patch application report for D7192 (id=27919)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit 51e99a5707e01f2d6b800a04ac2f85e858199dbd
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit e48569769b9468dcdd54ba5eb73045a642c5291f
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1763/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1763/console

Ericson2314 marked 3 inline comments as done.

Fix copyright dates

(Mark notes to fix copyright as done)

Include raw manifest in directory object

swh/web/api/views/raw.py
86–91

oh my bad, it should be [object_id] instead of [0] (the method returns a dict for some reason)

Build was aborted

Patch application report for D7192 (id=27920)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit fe12bd286e8ce563205d41a0d3b154a6e5d766c8
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 7277f4d8f46296003a779245448fb48fb89a4b2a
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1764/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1764/console

Build has FAILED

Patch application report for D7192 (id=27921)

Rebasing onto 25bf6ca843...

Current branch diff-target is up to date.
Changes applied before test
commit b2f55a240c44b40768de0cffa759ce40f019a0c7
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 7277f4d8f46296003a779245448fb48fb89a4b2a
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit b5f20ca9ddfcc2745a76a715e4c892c19c0d0942
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1765/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1765/console

swh/web/api/views/raw.py
86–91

I this makes me think directory reassembly is subtle enough that it deserves its own function. I therefore opened D7720 to make one analogous to the snapshot one.

We could still do an integration test for the web interface, but with this division of labor directory_get_all_entries and directory_git_object can also be tested in isolation.

D7722 landed and released, you can now use that new storage.algos.directory.directory_get() function.

Use new swh.storage.algos.directory.directory_get

Rebase on lastest master, where cypress CI issue is hopefully fixed!

Build has FAILED

Patch application report for D7192 (id=27953)

Rebasing onto 4a6bc69b2f...

Current branch diff-target is up to date.
Changes applied before test
commit 6de4c34b57751fa0284644dbae940051fce2a7bf
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 055741dd3b7d340833e862951f26407fbe3d2497
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit a4d06a29323a1d26061e23dfa126d983b2cdc955
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

Link to build: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1773/
See console output for more information: https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1773/console

Build is green

Patch application report for D7192 (id=27953)

Rebasing onto 4a6bc69b2f...

Current branch diff-target is up to date.
Changes applied before test
commit 6de4c34b57751fa0284644dbae940051fce2a7bf
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 055741dd3b7d340833e862951f26407fbe3d2497
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit a4d06a29323a1d26061e23dfa126d983b2cdc955
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

See https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1775/ for more details.

This revision is now accepted and ready to land.May 3 2022, 4:57 PM

Rebase as master changed since

@vlorentz is anyone else (@anlambert?) going to review, or should I push this once it passes again?

Build is green

Patch application report for D7192 (id=27962)

Rebasing onto d9fb8522ed...

Current branch diff-target is up to date.
Changes applied before test
commit 25a999821b3fe680f7a9c7138c058a102b807c3a
Author: Amélia Liao <me@amelia.how>
Date:   Mon Apr 25 19:56:26 2022 -0400

    Adds an API route for fetching objects as Git objects
    
    This route is needed for the implementation of the SWH Archive-IPFS
    bridge. Specifically, we need a way to, given a SWHID, fetch the exact
    data that was used to hash an object.
    
    The design follows the plan @vlorentz put forth in
    https://sympa.inria.fr/sympa/arc/swh-devel/2022-04/msg00042.html

commit 9cd95df4775c9ba0de0e0465654c6489b96f9c77
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:48:35 2022 -0400

    Extend test utits with new functions
    
    In `swh.web.tests.data`:
    
      - `random_sha1_bytes
    
    In `swh.web.tests.conftest`:
    
      - `unknown_core_swhid`, a pytest "fixture"

commit 43b197d8357ffbdcd21afe393bb4c2d9fcd94a16
Author: John Ericson <John.Ericson@Obsidian.Systems>
Date:   Wed Apr 27 18:46:37 2022 -0400

    Deduplicate `SWHID_RE`
    
    Put it in `swh.web.common.utils` and import from there.

See https://jenkins.softwareheritage.org/job/DWAPPS/job/tests-on-diff/1778/ for more details.

Eh, I'll just assume, given the timezone latency, that going down to one review was intentional. (With the directory algorithm factored out into swh-storage, this patch is now simpler and more "just do the obvious thing" too.)

(Post merge, the diff that shows up is just the first commit, but they all are on master.)

Ah. and I guess there needs to be another round of tagging and whatnot to trigger a website redeploy?