FinderGit 0.32.0
Everything you can do to a tag, where you can reach it — and one action that does both sides at once.
The actions stay where you can see them
The tag header and the selection bar are now pinned to the top of the panel while the list scrolls.
That sounds like tidying and it was not. On a repository with hundreds of tags you build a selection near the bottom of the list, which is exactly where the bar carrying Fetch, Push and the deletions had scrolled off the top. You could select ten tags and have no way to see what you could do with them, short of scrolling back up and losing your place.
Right-click
Both halves of a row have a context menu, and they are different menus, because a tag and a release are different objects with an optional link between them.
On a tag: fetch it, push it, delete it — each offered only where it can do something — plus copy its name, and copy the commit it points at.
On a release: open it in your browser, copy its link, copy the tag it was cut from.
Right-click a tag that is part of a selection and the menu is about the selection, each item saying how many tags it will act on. That number is what the action applies to, not how many rows are lit up: Push over five tags of which two are already on origin acts on three, and says three.
Delete a tag everywhere, in one action
Getting rid of a tag for good used to be two actions with two confirmations. It is now one, and it runs the remote first — deliberately, because that is what decides how much a half-failure costs.
If the remote deletion fails — a protected tag, a permission denied — your local tag has not been touched. Nothing is lost, the run stops there for that tag, and retrying costs nothing. The other order would destroy the last reference naming that commit and only then discover it could not reach origin.
When a run does stop half way, the result says which side it stopped on, because the recovery differs: a tag still on origin needs the whole thing again, one already gone from origin only needs deleting here.
The confirmation says both consequences before you commit to them, including the one people do not expect and that this app measured rather than assumed: on GitHub, deleting a tag does not delete the release cut from it. It becomes a draft, disappears from the public releases page, and pushing the tag back does not bring it back.
One Delete menu
The three deletions now live behind a single Delete menu rather than as buttons in a row. Three destructive controls side by side are crowded and too easy to hit; these should cost a deliberate second gesture. Each item still carries the number of tags it applies to, and an item that applies to none is not drawn at all.
Fixes
- A count that never agreed with its sentence. Selecting a single tag read "1 tag selezionati" in Italian, and the equivalent in French, German and Spanish. The phrase inflects itself in English and not in the translations, so every count got the plural form. Fixed here, with a test that resolves each language and compares the rendering at one against the rendering at five.
Under the hood
The pinned chrome is a pinned section header rather than a nested scroll view: the Release tab renders into a scroll view that belongs to the detail panel and is shared by all nine tabs, so a second one would leave the list with an indefinite height and two scrollers on one wheel. The header's background is opaque rather than translucent, because rows pass under it.
scripts/uiprobe/ is new: a small program that puts a container in a real window and photographs it at the top and scrolled into, which is how the pinning above was settled before it was written into the app rather than after.
Verify this download
Compare the checksum of the file you downloaded:
shasum -a 256 FinderGit-0.32.0.dmg
It must print exactly:
e7d4d5392c4508db7ec748faa3009f728bd4d989348961a46fcb27e5e97b5cb1
The DMG is also signed with an Apple Developer ID and notarized by Apple, which you can confirm without installing it:
spctl -a -vv -t open --context context:primary-signature FinderGit-0.32.0.dmg
That reports source=Notarized Developer ID for a genuine build.