Fossil Forum
Post: Milestone: libfossil is now "100% native" (edit: 99%)
A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.
Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.
My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.
The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.
-
e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. ↩
A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.
Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.
My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.
The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.
Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!
-
e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. ↩
A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.
Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.
My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.
The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.
Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!
Edit: screenshot or it didn't happen:
[stephan@nuc:~/f/libfossil]$ f-ci -m "Replace fcli_sync()'s shelling-out-to-fossil impl with fsl_sync_client(). By default fcli will include sync metrics for a while, while this code is still new, but that can be suppressed with --sync-metrics or -sm. When that flag is eventually turned off by default, the same flag will enable it. This means that f-sanity, f-ci, f-update, and whatever else are now 100% library code :)."
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read: 2
igot 1
pragma 1
Cards written: 3
pragma 2
pull 1
Bytes written: 215
Bytes read uncompressed: 297
fsl_xfer timers (ms):
Purpose Wall CPU User System
fsl_sc::submit() 173.397 10.520 8.565 1.955
fsl_sc::read() 0.014 0.015 0.012 0.003
processing 0.534 0.535 0.521 0.014
--------------------------------------------------------------------------------
= 173.945 11.070 9.098 1.972
QUEUED: include/fossil-scm/cli.h
QUEUED: src/cli.c
QUEUED: src/xfer.c
New version: fe5739c207a54273cd8ca6c74a4cfcf9a91d65d99f2672b9b045d75cce8d22e6 (17518)
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read: 108
gimme 106
igot 1
pragma 1
Cards written: 8
file 4
pragma 2
pull 1
push 1
Bytes written: 221,478
Bytes read uncompressed: 5,304
fsl_xfer timers (ms):
Purpose Wall CPU User System
fsl_sc::submit() 377.727 4.831 3.846 0.985
fsl_sc::read() 0.186 0.160 0.155 0.005
processing 1.881 1.882 1.842 0.040
--------------------------------------------------------------------------------
= 379.794 6.873 5.843 1.030
Forum bug: the preview of this message is truncated near the end of the above block. It's still there but the DOM element is neither expanding far enough nor offering scrollbars (but i can find no max-height set anywhere).
(blank line after code block to avoid what looks like a truncated message but is just a rendering quirk.)
-
e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. ↩
A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.
Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.
My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.
The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.
Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!
Edit: screenshot or it didn't happen:
[stephan@nuc:~/f/libfossil]$ f-ci -m "Replace fcli_sync()'s shelling-out-to-fossil impl with fsl_sync_client(). By default fcli will include sync metrics for a while, while this code is still new, but that can be suppressed with --sync-metrics or -sm. When that flag is eventually turned off by default, the same flag will enable it. This means that f-sanity, f-ci, f-update, and whatever else are now 100% library code :)."
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read: 2
igot 1
pragma 1
Cards written: 3
pragma 2
pull 1
Bytes written: 215
Bytes read uncompressed: 297
fsl_xfer timers (ms):
Purpose Wall CPU User System
fsl_sc::submit() 173.397 10.520 8.565 1.955
fsl_sc::read() 0.014 0.015 0.012 0.003
processing 0.534 0.535 0.521 0.014
--------------------------------------------------------------------------------
= 173.945 11.070 9.098 1.972
QUEUED: include/fossil-scm/cli.h
QUEUED: src/cli.c
QUEUED: src/xfer.c
New version: fe5739c207a54273cd8ca6c74a4cfcf9a91d65d99f2672b9b045d75cce8d22e6 (17518)
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read: 108
gimme 106
igot 1
pragma 1
Cards written: 8
file 4
pragma 2
pull 1
push 1
Bytes written: 221,478
Bytes read uncompressed: 5,304
fsl_xfer timers (ms):
Purpose Wall CPU User System
fsl_sc::submit() 377.727 4.831 3.846 0.985
fsl_sc::read() 0.186 0.160 0.155 0.005
processing 1.881 1.882 1.842 0.040
--------------------------------------------------------------------------------
= 379.794 6.873 5.843 1.030
Forum bug: the preview of this message is truncated near the end of the above block (edit: only in Firefox). The content is still there but the DOM element is neither expanding far enough nor offering scrollbars (but i can find no max-height set anywhere).
-
e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. ↩
A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.
Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.
My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc.2 They offer more proof that we are indeed living in The Future.
The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.
Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!
Edit: screenshot or it didn't happen:
[stephan@nuc:~/f/libfossil]$ f-ci -m "Replace fcli_sync()'s shelling-out-to-fossil impl with fsl_sync_client(). By default fcli will include sync metrics for a while, while this code is still new, but that can be suppressed with --sync-metrics or -sm. When that flag is eventually turned off by default, the same flag will enable it. This means that f-sanity, f-ci, f-update, and whatever else are now 100% library code :)."
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read: 2
igot 1
pragma 1
Cards written: 3
pragma 2
pull 1
Bytes written: 215
Bytes read uncompressed: 297
fsl_xfer timers (ms):
Purpose Wall CPU User System
fsl_sc::submit() 173.397 10.520 8.565 1.955
fsl_sc::read() 0.014 0.015 0.012 0.003
processing 0.534 0.535 0.521 0.014
--------------------------------------------------------------------------------
= 173.945 11.070 9.098 1.972
QUEUED: include/fossil-scm/cli.h
QUEUED: src/cli.c
QUEUED: src/xfer.c
New version: fe5739c207a54273cd8ca6c74a4cfcf9a91d65d99f2672b9b045d75cce8d22e6 (17518)
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read: 108
gimme 106
igot 1
pragma 1
Cards written: 8
file 4
pragma 2
pull 1
push 1
Bytes written: 221,478
Bytes read uncompressed: 5,304
fsl_xfer timers (ms):
Purpose Wall CPU User System
fsl_sc::submit() 377.727 4.831 3.846 0.985
fsl_sc::read() 0.186 0.160 0.155 0.005
processing 1.881 1.882 1.842 0.040
--------------------------------------------------------------------------------
= 379.794 6.873 5.843 1.030
Forum bug: the preview of this message is truncated near the end of the above block (edit: only in Firefox). The content is still there but the DOM element is neither expanding far enough nor offering scrollbars (but i can find no max-height set anywhere).
-
e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. ↩
-
As an example: a fascinating treatise on why fossil's F-cards have to support a trailing space ↩
Stephan you've been working on libfossil for 16 years or so. According to scc there are well over half a million lines of code in libfossil, so its safe to say you've personally written around half a million lines. Along the way you've done a lot of work on the Fossil artifact format (especially the documentation) and contributed a lot of code to fossil(1).
So along with other Dan (and other Dan's LLM clusters) I have been putting the icing on your half-million-line cake. And it tastes very nice too.
--
Dan Shearer
[email protected] / https://shearer.org
so its safe to say you've personally written around half a million lines
Not after we exclude sqlite3.[ch] and fnc!
[stephan@nuc:~/f/libfossil]$ scc src include bindings f-apps
───────────────────────────────────────────────────────────────────────────────
Language Files Lines Blanks Comments Code Complexity
───────────────────────────────────────────────────────────────────────────────
C 121 75,179 4,235 10,907 60,037 13,103
C Header 21 26,557 1,761 20,062 4,734 279
TCL 16 2,305 237 167 1,901 163
C++ 7 2,058 306 76 1,676 186
<snip...>
───────────────────────────────────────────────────────────────────────────────
Total 184 115,809 7,594 36,392 71,823 13,880
That's a number i can believe. Z 491b09d1fc066197ce1201a7d743d2c4
Ah, yes thanks for the correction.
Nevertheless. Your fair fingers did nearly 100% of that.
D :)
Great job all, and thank you very much Stephen for your work!