Fossil SCM

Better explanation of why Fossil is faster than Git in "Log" section of gitusers doc, so it isn't dismissed as puffery.

wyoung 2020-11-02 04:17 trunk
Commit b2c032ea3ad24e5ff95c56c22d8c4bfbedc940f9adce50107a109043c01bce16
1 file changed +13 -4
+13 -4
--- www/gitusers.md
+++ www/gitusers.md
@@ -278,17 +278,23 @@
278278
279279
280280
## <a id="log"></a> Fossil’s Timeline Is The “Log”
281281
282282
Git users often need to use the `git log` command to dig linearly through
283
-commit histories due to its [weak data model][wdm].
283
+commit histories due to its [weak data model][wdm], giving [O(n)
284
+performance][ocomp].
284285
285286
Fossil parses a huge amount of information out of commits that allow it
286287
to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw]
287
-using indexed SQL lookups,
288
-which generally have the info you would have to manually extract from
289
-`git log`, produced much more quickly than Git can.
288
+using indexed SQL lookups, which generally have the info you would have
289
+to manually extract from `git log`, produced much more quickly than Git
290
+can, all else being equal: [SQLite’s B-tree data structures][btree]
291
+generally run in O(log n) time, faster than O(n) for equal *n* when the
292
+constants are equal. Yet the constants are *not* equal because Fossil
293
+reads read from a single disk file rather than visit potentially many
294
+files in sequence as Git must, so the OS’s buffer cache can result in
295
+[still better performance][35pct].
290296
291297
Unlike Git’s log, Fossil’s timeline shows info across branches by
292298
default, a feature for maintaining better situational awareness. The
293299
`fossil timeline` command has no way to show a single branch’s commits,
294300
but you can restrict your view like this using the web UI equivalent by
@@ -313,12 +319,15 @@
313319
314320
This shows what changed in each version, though Fossil’s view is more a
315321
summary than a list of raw changes. To dig deeper into single commits,
316322
you can use Fossil’s [`info` command][infoc] or its [`/info` view][infow].
317323
324
+[35pct]: https://www.sqlite.org/fasterthanfs.html
325
+[btree]: https://sqlite.org/btreemodule.html
318326
[infoc]: /help?cmd=info
319327
[infow]: /help?cmd=/info
328
+[ocomp]: https://www.bigocheatsheet.com/
320329
[tlc]: /help?cmd=timeline
321330
[tlw]: /help?cmd=/timeline
322331
[wdm]: ./fossil-v-git.wiki#durable
323332
324333
325334
--- www/gitusers.md
+++ www/gitusers.md
@@ -278,17 +278,23 @@
278
279
280 ## <a id="log"></a> Fossil’s Timeline Is The “Log”
281
282 Git users often need to use the `git log` command to dig linearly through
283 commit histories due to its [weak data model][wdm].
 
284
285 Fossil parses a huge amount of information out of commits that allow it
286 to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw]
287 using indexed SQL lookups,
288 which generally have the info you would have to manually extract from
289 `git log`, produced much more quickly than Git can.
 
 
 
 
 
290
291 Unlike Git’s log, Fossil’s timeline shows info across branches by
292 default, a feature for maintaining better situational awareness. The
293 `fossil timeline` command has no way to show a single branch’s commits,
294 but you can restrict your view like this using the web UI equivalent by
@@ -313,12 +319,15 @@
313
314 This shows what changed in each version, though Fossil’s view is more a
315 summary than a list of raw changes. To dig deeper into single commits,
316 you can use Fossil’s [`info` command][infoc] or its [`/info` view][infow].
317
 
 
318 [infoc]: /help?cmd=info
319 [infow]: /help?cmd=/info
 
320 [tlc]: /help?cmd=timeline
321 [tlw]: /help?cmd=/timeline
322 [wdm]: ./fossil-v-git.wiki#durable
323
324
325
--- www/gitusers.md
+++ www/gitusers.md
@@ -278,17 +278,23 @@
278
279
280 ## <a id="log"></a> Fossil’s Timeline Is The “Log”
281
282 Git users often need to use the `git log` command to dig linearly through
283 commit histories due to its [weak data model][wdm], giving [O(n)
284 performance][ocomp].
285
286 Fossil parses a huge amount of information out of commits that allow it
287 to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw]
288 using indexed SQL lookups, which generally have the info you would have
289 to manually extract from `git log`, produced much more quickly than Git
290 can, all else being equal: [SQLite’s B-tree data structures][btree]
291 generally run in O(log n) time, faster than O(n) for equal *n* when the
292 constants are equal. Yet the constants are *not* equal because Fossil
293 reads read from a single disk file rather than visit potentially many
294 files in sequence as Git must, so the OS’s buffer cache can result in
295 [still better performance][35pct].
296
297 Unlike Git’s log, Fossil’s timeline shows info across branches by
298 default, a feature for maintaining better situational awareness. The
299 `fossil timeline` command has no way to show a single branch’s commits,
300 but you can restrict your view like this using the web UI equivalent by
@@ -313,12 +319,15 @@
319
320 This shows what changed in each version, though Fossil’s view is more a
321 summary than a list of raw changes. To dig deeper into single commits,
322 you can use Fossil’s [`info` command][infoc] or its [`/info` view][infow].
323
324 [35pct]: https://www.sqlite.org/fasterthanfs.html
325 [btree]: https://sqlite.org/btreemodule.html
326 [infoc]: /help?cmd=info
327 [infow]: /help?cmd=/info
328 [ocomp]: https://www.bigocheatsheet.com/
329 [tlc]: /help?cmd=timeline
330 [tlw]: /help?cmd=/timeline
331 [wdm]: ./fossil-v-git.wiki#durable
332
333
334

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button