<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/src/bin/ngit/sub_commands/sync.rs, branch v2.2.3</title>
<subtitle>Personal mirror of DanConwayDev/ngit-cli on git.upleb.uk
</subtitle>
<id>https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/atom?h=v2.2.3</id>
<link rel='self' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/atom?h=v2.2.3'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/'/>
<updated>2026-02-27T17:19:20+00:00</updated>
<entry>
<title>fix: skip ^{} peeled-tag refs in sync to prevent invalid refspec crash</title>
<updated>2026-02-27T17:19:20+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-02-27T17:17:12+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=e7d7f933cd7eac19434f09096a311adeb5e60747'/>
<id>urn:sha1:e7d7f933cd7eac19434f09096a311adeb5e60747</id>
<content type='text'>
Regression introduced in 28ad5440: ngit sync crashed with
'invalid refspec refs/remotes/origin/v1.4.4^{}:refs/tags/v1.4.4^{}'
on repos with annotated tags. Fixed by guarding all three iteration
sites in sync.rs and identify_remote_sync_issues in list.rs; also
corrected the always-false logic bug in invalid_nostr_state_ref.
</content>
</entry>
<entry>
<title>feat: ngit sync --force republishes state event even with no ref changes</title>
<updated>2026-02-27T15:53:11+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-02-27T15:51:01+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=71cd982e5ca3e6f60fdf33fd41d0db3eabdbf39f'/>
<id>urn:sha1:71cd982e5ca3e6f60fdf33fd41d0db3eabdbf39f</id>
<content type='text'>
allows users to repair repos whose state event is missing ^{} peeled refs
for annotated tags (or any other corruption) without needing to push a new
ref. the new event is signed with a fresh timestamp and broadcast to all
repo relays and the user's write relays.
</content>
</entry>
<entry>
<title>feat: publish state event to stale grasp relays before sync push</title>
<updated>2026-02-26T15:26:18+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-02-26T13:31:44+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=0d6ed93e4d143bb066205543af13f0ec6ddbdd58'/>
<id>urn:sha1:0d6ed93e4d143bb066205543af13f0ec6ddbdd58</id>
<content type='text'>
FetchReport now captures the full state event seen on each relay during
the nostr fetch (state_per_relay: HashMap&lt;RelayUrl, Option&lt;Event&gt;&gt;).
ngit sync uses this to identify grasp server relays with a missing or
outdated state event and publishes the current state event to them
before attempting git pushes, preventing rejections. An existing login
is loaded silently (no prompt, no profile fetch) to provide a signer
for NIP-42 auth if requested.
</content>
</entry>
<entry>
<title>fix: correct refspec source in ngit sync to strip refs/heads/ prefix</title>
<updated>2026-02-26T15:26:15+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-02-26T11:35:00+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=237ab4ebcdc5bf58f98958db5375d56baf8046a0'/>
<id>urn:sha1:237ab4ebcdc5bf58f98958db5375d56baf8046a0</id>
<content type='text'>
When syncing, the nostr state stores refs with full names like
refs/heads/master and refs/tags/v1.0.0. Git tracking refs strip the
refs/heads/ prefix, so the tracking ref lives at refs/remotes/origin/master
not refs/remotes/origin/refs/heads/master.

The sync code was interpolating the full nostr_ref_name into the source
side of the refspec, producing the invalid double-prefixed path. Strip
refs/heads/ or refs/tags/ before constructing the tracking ref segment,
consistent with how git_remote_nostr/push.rs already handles this.
</content>
</entry>
<entry>
<title>feat: forward unrecognised push options to git servers</title>
<updated>2026-02-26T15:26:14+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-02-25T16:46:02+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=5c305e922e19e4ac65c6a1473be67145a1c73f2b'/>
<id>urn:sha1:5c305e922e19e4ac65c6a1473be67145a1c73f2b</id>
<content type='text'>
Any -o option passed to `git push` that is not handled by ngit
(title, description) is forwarded verbatim to the git server via
git2::PushOptions::remote_push_options. This allows options such as
`-o secret-scanning.skip` to pass through transparently.

`ngit send` gains a matching -o / --push-option flag for the same
purpose.
</content>
</entry>
<entry>
<title>feat(list): make list async and include sync report inline</title>
<updated>2025-11-13T22:08:56+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-11-13T17:18:35+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=82c7a95f6e9aa266d2f0d2035a0ce4f1715b62ad'/>
<id>urn:sha1:82c7a95f6e9aa266d2f0d2035a0ce4f1715b62ad</id>
<content type='text'>
copy relay fetching approach to async and reporting
</content>
</entry>
<entry>
<title>refactor: simplify get_short_git_server_name</title>
<updated>2025-11-13T14:55:50+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-11-11T12:30:00+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=ebab8d2aa487d1814e802c5a51b19d4bb1592e01'/>
<id>urn:sha1:ebab8d2aa487d1814e802c5a51b19d4bb1592e01</id>
<content type='text'>
so it doesnt use the git_repo
</content>
</entry>
<entry>
<title>fix: cli output line deletion during fetch</title>
<updated>2025-11-13T14:40:09+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-11-11T07:21:08+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=52370f542dad87ab029a5d701cc46658d5aef91b'/>
<id>urn:sha1:52370f542dad87ab029a5d701cc46658d5aef91b</id>
<content type='text'>
also reduce the clutter in the cli output for grasp servers.
</content>
</entry>
<entry>
<title>fix: grasp server detection</title>
<updated>2025-10-20T13:36:24+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-10-20T11:50:37+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=54bbcc3c16b88a01a29bb0f9bd76e9174993e16e'/>
<id>urn:sha1:54bbcc3c16b88a01a29bb0f9bd76e9174993e16e</id>
<content type='text'>
to ensure we dont try and fallback to ssh
</content>
</entry>
<entry>
<title>fix(sync): dont fetch tags available locally</title>
<updated>2025-09-12T08:01:01+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-09-12T08:01:01+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-cli-mirror/commit/?id=5fd28d490b2b5627f2bdb8e1318c70de4469eb13'/>
<id>urn:sha1:5fd28d490b2b5627f2bdb8e1318c70de4469eb13</id>
<content type='text'>
as it was only checking if tip is a commit thats present but a tip
could be an annotated tag
</content>
</entry>
</feed>
