1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
-
+
-
+
+
-
+
-
+
-
+
-
+
-
-
-
-
+
+
-
+
|
<strong>Achtung: RSI has effectively removed this project's maintainer from the programming world, and this project is no longer maintained. Since the SHA3-related additions in Fossil, this library is no longer compatible with fossil (and getting it to work with fossil requires an as-yet-unknown amount of effort). Nonetheless, this library provides (IMO) a solid starting point (or at least a reference point) for anyone interested in starting a port-fossil-to-a-library effort.</strong>
# Update Feb. 2021:
# Update Feb. 2021:
After a 6-year forced hiatus due to chronic RSI, libfossil is again making some headway. In early Feb. 2021 its hashing support was brought up to date with regard to fossil's hardened SHA1 and SHA3-256 hashes. That was the major technical hurdle preventing further progress, so now they way is clear (or clearer) for bringing the library into the 2020's.
A chat room and forum have been established for this effort but they are limited to developers. Please [get in touch][home-sgb] if you are a participant and need info about either. This project is *currently* only opened to active participants of the [Fossil SCM][home-fossil] project, as it requires a relatively good understanding of fossil and activity in that project acts as "proof of capability" for participating here. That said, it does not require the same code release waiver which that project requires. If/when the project reaches a client-usable state, it will be opened up for wider participation.
Some momentum has been recently gained in the idea of reviving this project, the first major step of which requires updating its hash handling to deal with SHA3 hashes. Without that, any remaining steps are irrelevant. That may or may not happen but... "some momentum has been gained," which is significant in and of itself. A chat room and forum have been established for this effort but they are limited to developers. Please [get in touch][home-sgb] if you are a participant and need info about either. This project is *currently* only opened to active participants of the [Fossil SCM][home-fossil] project, as it requires a relatively good understanding of fossil and activity in that project acts as "proof of capability" for participating here. That said, it does not require the same code release waiver which that project requires.
[home-sgb]: https://wanderinghorse.net/home/stephan/
[home-fossil]: https://fossil-scm.org
# libfossil: Fossil SCM Library API
See also: [](download), [](building), [](f-tools),
See also: [](TODOs), [](download), [](building), [](f-tools),
[](DbFunctions), [](SQLSnippets), [](HackersGuide),
[doxygen docs][doxygen-docs] (refreshed from current sources relatively frequently), ["s2" script bindings](https://docs.google.com/document/d/13gRSl6-bj3LV-OKgE-BsqvqF33UFYW3oa3A2OJC5QSY/view).
This source code repository houses an in-development library API for the [Fossil SCM][home-fossil]. The primary goal is to port existing behaviour into a library form (the v1 app is extremely monolithic in nature). This effort, officially called "libfossil", intends to introduce no breaking changes, and the intention is to provide an alternative interface into fossil repositories, as opposed to a replacement for the core fossil application.
This source code repository houses an in-development library API for the [Fossil SCM][home-fossil]. The primary goal is to port existing behaviour into a library form (the v1 app is extremely monolithic in nature). This effort, officially called "libfossil", intends to introduce no breaking changes, and the intention is to provide an alternative interface into fossil repositories, as opposed to a replacement for the core fossil application. It does not aim to provide 100% feature-parity with the main app - see [](TODOs) for details about features which are considered out of scope (or otherwise unlikely).
This code currently doesn't do much which would interest non-Fossil hackers. It might be of interest to those wanting to follow or participate in the design of libfossil.
**License:** same as Fossil: the "2-Clause BSD" a.k.a. "FreeBSD License".
## Status, TODOs, and Whatnot
All of this code is an <em>experiment</em>, and it does not represent a commitment by anyone that any of this code will some day end up living under the umbrella of the larger Fossil SCM project. If all goes well, that's the eventual goal, though. It is alpha quality. What's there works but is subject to change and there is still a great deal of the higher-level SCM bits left to port in and refactor to make them usable via library-style interfaces. Anyone looking for a project roadmap/timeline is asked respectfully to look elsewhere - there is no timebox on nor schedule for this project/experiment. That said: the [](f-tools) demonstrate what functionality is working.
All of this code is an <em>experiment</em>, and it does not represent a commitment by anyone. It is alpha quality. What's there works but is subject to change and there is still a great deal of the higher-level SCM bits left to port in and refactor to make them usable via library-style interfaces. Anyone looking for a project roadmap/timeline is asked respectfully to look elsewhere - there is no timebox on nor schedule for this project/experiment. That said: the [](f-tools) demonstrate what functionality is working.
The code changes can be followed via [the timeline](/timeline).
The current public (and documented) API can be found in [the header files](/dir?name=include/fossil-scm), and occasionally that gets [exported to doxygen][doxygen-docs].
TODOs, design discussions, etc... you might want to get a coffee/tee/beer before starting through [the list](https://docs.google.com/document/d/12g0s5A2TPX7-y47Nsw235rvsjcuh49TnHfMDB4ASvlo/view).
# "Rules" for Code Contributors
* <s>All code contributors must have a license waiver on file with DRH, as the hope is to eventually release this code as the next generation of Fossil. Non-code contributions are happily accepted from anyone.</s> (No longer needed!)
* When working on bits which themselves write to the repository, e.g. creating checkins, please be exceedingly careful not to corrupt the db :-D.
* Please try to conform to the overall coding style (as laid out by Fossil v1). We're not picky about whether or not spaces belong before/after an `if`, but the general overall style should be uniform.
* When working on bits which themselves write to the repository, e.g. creating checkins, please be *exceedingly careful* not to corrupt the db :-D. The library has several layers of defense against the injection of problematic control artifacts, but still... be careful.
* Please try to conform to the rough overall coding style (as initially laid out by Fossil v1). We're not picky about whether or not spaces belong before/after an `if`, but the general overall style should be *more or less* uniform.
* Please build with the highest possible warning level and enable fatal warnings (in GCC and similar compilers: `-Wall -Werror`).
* Don't bother using branches unless you really want to - the trunk has no stability guarantees and is very much in flux, so feel free to work there instead of a branch if you like.
* The trunk currently has no stability guarantees and is very much in flux, so feel free to work there instead of a branch if you like.
There is nothing holy or sacred about this repo, so feel free to hack at will. Most of the library's sanity tests are packaged in <tt>[f-sanity.c](/finfo?name=f-apps/f-sanity.c)</tt>. See <tt>[fossil-cli.h](/finfo?name=include/fossil-scm/fossil-cli.h)</tt> for a mini-framework to bootstrap new apps and [f-tools].
<h2>News</h2>
Notable changes (newest at the top)...
|