|
47b1f6a…
|
danshearer
|
1 |
# List of Projects and Tasks |
|
47b1f6a…
|
danshearer
|
2 |
|
|
47b1f6a…
|
danshearer
|
3 |
This list was made for the Fossil project's application for [Google Summer of Code](https://summerofcode.withgoogle.com/) in 2021. That application was |
|
620c817…
|
danshearer
|
4 |
unsuccessful, but still this list is a starting point for anyone looking |
|
620c817…
|
danshearer
|
5 |
for a place to start. We welcome newcomers, and invite developers to follow the simple |
|
620c817…
|
danshearer
|
6 |
[procedures for contributing to Fossil](./contribute.wiki). The |
|
620c817…
|
danshearer
|
7 |
[hacker how-to](./hacker-howto.wiki) is recommended reading. |
|
47b1f6a…
|
danshearer
|
8 |
|
|
47b1f6a…
|
danshearer
|
9 |
There are two implementations of the Fossil data model: |
|
47b1f6a…
|
danshearer
|
10 |
|
|
47b1f6a…
|
danshearer
|
11 |
* [the classic Fossil project](https://fossil-scm.org) , which is where this file is maintained and |
|
47b1f6a…
|
danshearer
|
12 |
which is as of 2021 how everyone interacts with Fossil objects |
|
47b1f6a…
|
danshearer
|
13 |
* [libfossil](https://fossil.wanderinghorse.net/r/libfossil), which is an independent project to manipulate Fossil objects from a library, or using commandline tools which are thin wrappers to the library |
|
47b1f6a…
|
danshearer
|
14 |
|
|
47b1f6a…
|
danshearer
|
15 |
As of 2021 the two implementations have an identical implementation of the |
|
47b1f6a…
|
danshearer
|
16 |
Fossil data model, are 100% compatible in terms of data access since they use |
|
47b1f6a…
|
danshearer
|
17 |
the same SQL, and are 100% binary compatible in terms of on-disk storage. |
|
47b1f6a…
|
danshearer
|
18 |
|
|
47b1f6a…
|
danshearer
|
19 |
The projects listed here are grouped by functionality - User Interface, Integration, Email, |
|
47b1f6a…
|
danshearer
|
20 |
etc. If you are looking for something easy to start with, then depending where |
|
47b1f6a…
|
danshearer
|
21 |
your interests lie, there are some small libfossil tasks and small |
|
47b1f6a…
|
danshearer
|
22 |
features to work on in the UI. |
|
47b1f6a…
|
danshearer
|
23 |
|
|
47b1f6a…
|
danshearer
|
24 |
# UI, Look and Feel |
|
47b1f6a…
|
danshearer
|
25 |
|
|
47b1f6a…
|
danshearer
|
26 |
Tasks for those interested in graphic/web design: |
|
47b1f6a…
|
danshearer
|
27 |
|
|
a9427d9…
|
danshearer
|
28 |
* Add a quote button to the Forum, such as [discussed in this thread](https://fossil-scm.org/forum/forumpost/7ad03cd73d) |
|
56e59a3…
|
stephan
|
29 |
* Improve the documentation history-browsing page to enable selection of 2 arbitrary versions to diff, similar to the [Mediawiki history feature enabled on Wikipedia](https://en.wikipedia.org/w/index.php?title=Fossil_\(software\)&action=history) |
|
316b55a…
|
danshearer
|
30 |
* Allow diffing of Forum posts |
|
47b1f6a…
|
danshearer
|
31 |
* General touch-ups in the existing skins. This may, depending on how deep one |
|
47b1f6a…
|
danshearer
|
32 |
cares to dig, require digging into C code to find, and potentially modify, how |
|
47b1f6a…
|
danshearer
|
33 |
the HTML is generated. |
|
47b1f6a…
|
danshearer
|
34 |
* Creation of one or more new skins. This does not specifically require any C |
|
47b1f6a…
|
danshearer
|
35 |
know-how. |
|
47b1f6a…
|
danshearer
|
36 |
* Complete per-feature CSS facilities in [the Inskinerator](https://tangentsoft.com/inskinerator/dir) and add features to the Inskinerator |
|
47b1f6a…
|
danshearer
|
37 |
|
|
47b1f6a…
|
danshearer
|
38 |
# Projects Relating to Fossil Integration |
|
47b1f6a…
|
danshearer
|
39 |
|
|
316b55a…
|
danshearer
|
40 |
* Fossil hooks for pipelines with CI/CD such as static analysis, Buildbot, Gerrit, Travis and Jenkins are not well-documented and may need some further development. Make this work better, with configuration examples |
|
316b55a…
|
danshearer
|
41 |
* Create a [Pandoc](https://pandoc.org) filter that handles Fossil-style Markdown |
|
316b55a…
|
danshearer
|
42 |
* Create a [Pandoc filter that handles Pikchr](https://groups.google.com/g/pandoc-discuss/c/zZSspnHHsg0?pli=1) (Pikchr can be used with many kinds of layout, not just Markdown) |
|
316b55a…
|
danshearer
|
43 |
* Editor integration: [improve the Fossil VSCode plugin](https://marketplace.visualstudio.com/items?itemName=koog1000.fossil) or [create a Fossil plugin for Eclipse](https://marketplace.eclipse.org/taxonomy/term/26%2C31) |
|
47b1f6a…
|
danshearer
|
44 |
* Develop a test suite for the draft JSON API in libfossil. This JSON API is a way of integrating many kinds of systems with Fossil |
|
47b1f6a…
|
danshearer
|
45 |
* Re-implement the draft JSON API in libfossil to use the JSON capability in SQLite, now that SQLite has JSON. This is a large project and would start with feasibility analysis |
|
316b55a…
|
danshearer
|
46 |
|
|
316b55a…
|
danshearer
|
47 |
# Adding Inbound (Receiving) Email to Fossil |
|
316b55a…
|
danshearer
|
48 |
|
|
316b55a…
|
danshearer
|
49 |
This task involves designing a new feature and working with Fossil developers to |
|
316b55a…
|
danshearer
|
50 |
see how it can be feasible in practice. |
|
316b55a…
|
danshearer
|
51 |
|
|
316b55a…
|
danshearer
|
52 |
Fossil can [send email alerts](./alerts.md), but cannot receive email at all. |
|
316b55a…
|
danshearer
|
53 |
That is a good thing, because a complete [SMTP |
|
316b55a…
|
danshearer
|
54 |
MTA](https://en.wikipedia.org/wiki/MTA) is complicated and requires constant |
|
316b55a…
|
danshearer
|
55 |
maintenance, so Fossil should not try to be an MTA or ever listen to mail ports |
|
316b55a…
|
danshearer
|
56 |
on the Internet. |
|
316b55a…
|
danshearer
|
57 |
|
|
316b55a…
|
danshearer
|
58 |
There is one specific type of email reception that make sense for Fossil to |
|
316b55a…
|
danshearer
|
59 |
handle. When there is inbound mail related to a message that Fossil has |
|
316b55a…
|
danshearer
|
60 |
previously generated with a unique hash, Fossil already knows the context of |
|
316b55a…
|
danshearer
|
61 |
that message. An unknown sender cannot guess a valid hash although a malicious |
|
316b55a…
|
danshearer
|
62 |
sender could of course find a way to receive a valid hash and then use that to |
|
316b55a…
|
danshearer
|
63 |
gain access. The risk of automatic and non-specific spam is very low. |
|
316b55a…
|
danshearer
|
64 |
|
|
316b55a…
|
danshearer
|
65 |
A proposal to handle that would be to implement a Fossil command like this: |
|
316b55a…
|
danshearer
|
66 |
|
|
316b55a…
|
danshearer
|
67 |
``` |
|
316b55a…
|
danshearer
|
68 |
fossil email -R repo receive -t TYPE-OF-EMAIL -h HASH |
|
316b55a…
|
danshearer
|
69 |
``` |
|
316b55a…
|
danshearer
|
70 |
|
|
316b55a…
|
danshearer
|
71 |
Where the type of email would be one of a list something like this: |
|
316b55a…
|
danshearer
|
72 |
|
|
316b55a…
|
danshearer
|
73 |
* mail_bounce |
|
316b55a…
|
danshearer
|
74 |
* ticket_reply |
|
316b55a…
|
danshearer
|
75 |
* forum_reply |
|
316b55a…
|
danshearer
|
76 |
|
|
316b55a…
|
danshearer
|
77 |
This command is a non-network-aware [Mail Delivery |
|
316b55a…
|
danshearer
|
78 |
Agent](https://en.wikipedia.org/wiki/Mail_delivery_agent), and would be called |
|
316b55a…
|
danshearer
|
79 |
by an SMTP MTA such as Postfix, Courier or Exim. The MTA would need to be |
|
316b55a…
|
danshearer
|
80 |
configured to recognise that this is an email intended for Fossil, and what |
|
316b55a…
|
danshearer
|
81 |
type of email, and to extract its hash. People who configure MTAs are used to |
|
316b55a…
|
danshearer
|
82 |
doing this sort of thing, but no doubt Fossil would include a sample |
|
316b55a…
|
danshearer
|
83 |
[Postfix mail filter](http://www.postfix.org/FILTER_README.html#simple_filter) and |
|
316b55a…
|
danshearer
|
84 |
an equivalent driver for Exim. |
|
316b55a…
|
danshearer
|
85 |
|
|
316b55a…
|
danshearer
|
86 |
The Fossil command would reject anything that doesn't look like a bounce it is expecting. |
|
316b55a…
|
danshearer
|
87 |
|
|
316b55a…
|
danshearer
|
88 |
It is not certain that this design is the best one to address the inbound mail |
|
316b55a…
|
danshearer
|
89 |
problem. That is why the first part of this task is to find a workable design. |
|
316b55a…
|
danshearer
|
90 |
|
|
0f90d0d…
|
danshearer
|
91 |
# Work relating to the ticketing system in Fossil |
|
316b55a…
|
danshearer
|
92 |
|
|
316b55a…
|
danshearer
|
93 |
The Fossil SCM project uses tickets in a [somewhat unusual manner](https://fossil-scm.org/home/reportlist) |
|
316b55a…
|
danshearer
|
94 |
because the social programming |
|
0f90d0d…
|
danshearer
|
95 |
model has evolved to often use the Forum instead of ticketing. Other Fossil-using projects |
|
316b55a…
|
danshearer
|
96 |
use tickets in a more traditional report-a-bug manner. So this means that the |
|
0f90d0d…
|
danshearer
|
97 |
Fossil ticketing system user interface is underdeveloped. |
|
0f90d0d…
|
danshearer
|
98 |
|
|
0f90d0d…
|
danshearer
|
99 |
On the other hand, pretty much every software developer uses a ticketing system |
|
0f90d0d…
|
danshearer
|
100 |
at some point in their workflow, and Fossil is intended to be usable by most |
|
0f90d0d…
|
danshearer
|
101 |
developers. That means the ticketing system really needs to be further |
|
0f90d0d…
|
danshearer
|
102 |
developed. The underlying technology for the Fossil ticketing system is |
|
0f90d0d…
|
danshearer
|
103 |
guaranteed, so to improve it requires only user interface changes. |
|
316b55a…
|
danshearer
|
104 |
|
|
316b55a…
|
danshearer
|
105 |
Projects relating to the ticketing system include: |
|
316b55a…
|
danshearer
|
106 |
|
|
0f90d0d…
|
danshearer
|
107 |
* Improving the [Fossil cli for tickets](https://fossil-scm.org/forum/forumpost/d8e8a1cf92) which is confusing, as pointed out in that ticket. This is still classified as a "user interface" even though it isn't graphical. |
|
316b55a…
|
danshearer
|
108 |
* Alternatively, instead of improving Fossil's cli, implement a comprehensive ticket commandline with [libfossil's primitives](https://fossil.wanderinghorse.net/r/libfossil/wiki/home), look under the f-apps/ directory. |
|
0f90d0d…
|
danshearer
|
109 |
* Improving the Fossil web UI for ticketing, which is clunky to say the least. Fossil tries not be a heavy user of Javascript and Javascript libraries, but the wikiedit, chat and Forum code are all more advanced than ticketing, |
|
0f90d0d…
|
danshearer
|
110 |
and have UI features that would improve ticketing |
|
0f90d0d…
|
danshearer
|
111 |
* If there is an inbound email system as per the previous section "Adding Inbound (Receiving) Email to Fossil", then implement this system for ticketing |
|
932f88c…
|
danshearer
|
112 |
|
|
932f88c…
|
danshearer
|
113 |
# Tasks Requiring Fossil Data Model Knowledge |
|
932f88c…
|
danshearer
|
114 |
|
|
932f88c…
|
danshearer
|
115 |
The Fossil data model concepts are simple, but the implications are quite subtle and impressive. The data model |
|
932f88c…
|
danshearer
|
116 |
is designed to [endure for centuries](./fileformat.wiki), |
|
932f88c…
|
danshearer
|
117 |
be [easily accessible](./fossil-v-git.wiki#durable), and is [non-relational](./fossil-is-not-relational.md). |
|
932f88c…
|
danshearer
|
118 |
You will need to understand the data model to work on the following tasks: |
|
932f88c…
|
danshearer
|
119 |
|
|
8b453eb…
|
stephan
|
120 |
* Add the ability to tag non-checkin artifacts, something supported by |
|
8b453eb…
|
stephan
|
121 |
the data model but not the current CLI and UIs. This would open the |
|
8b453eb…
|
stephan
|
122 |
door to numerous new features, such as "sticky" forum posts and |
|
8b453eb…
|
stephan
|
123 |
per-file extended attributes. This could also relate to the RBAC |
|
8b453eb…
|
stephan
|
124 |
system. |
|
932f88c…
|
danshearer
|
125 |
* Implement "merge" and "stash" in libfossil |
|
932f88c…
|
danshearer
|
126 |
* Analyse the different kinds of [split/export/shallow clone](https://fossil-scm.org/forum/forumpost/1aa4f8ea8c6f96) use cases for Fossil including [complete bifurcation](https://fossil-scm.org/forum/forumpost/6434a06871). There are many proposals, relating to many different use cases, and a good analysis would help us to work out what should be implemented, and what should be implemented in Fossil and what is instead a libfossil wrapper |
|
932f88c…
|
danshearer
|
127 |
|
|
932f88c…
|
danshearer
|
128 |
# Fossil is cool |
|
932f88c…
|
danshearer
|
129 |
|
|
932f88c…
|
danshearer
|
130 |
There are many reasons why Fossil is just plain cool: |
|
932f88c…
|
danshearer
|
131 |
|
|
932f88c…
|
danshearer
|
132 |
* Fossil is symbiotically connected with [SQL and SQLite](5631123d66d96) |
|
932f88c…
|
danshearer
|
133 |
* Fossil is highly portable accross different operating systems |
|
932f88c…
|
danshearer
|
134 |
* Fossil is the [only credible alternative to Git](./fossil-v-git.wiki) |
|
932f88c…
|
danshearer
|
135 |
* Fossil is both ultra-long-term stable and has a high rate of development and new features |
|
932f88c…
|
danshearer
|
136 |
* Fossil has thought deeply about Comp Sci principles including [CAP Theorem](./cap-theorem.md) and [whether Fossil is a blockchain](./blockchain.md) |
|
932f88c…
|
danshearer
|
137 |
* Fossil has two independent implementations of the same data model: Fossil and libfossil |
|
932f88c…
|
danshearer
|
138 |
|
|
932f88c…
|
danshearer
|
139 |
and a lot, lot more, in the source, docs, forum and more. |
|
932f88c…
|
danshearer
|
140 |
|
|
932f88c…
|
danshearer
|
141 |
|
|
932f88c…
|
danshearer
|
142 |
|
|
932f88c…
|
danshearer
|
143 |
|
|
932f88c…
|
danshearer
|
144 |
``` pikchr center toggle |
|
932f88c…
|
danshearer
|
145 |
// Click to see the rendered diagram this describes, |
|
932f88c…
|
danshearer
|
146 |
// written in Fossil's built-in pikchr language, see https://pikchr.org |
|
932f88c…
|
danshearer
|
147 |
// |
|
932f88c…
|
danshearer
|
148 |
// based on pikchr script by Kees Nuyt, licensed |
|
932f88c…
|
danshearer
|
149 |
// https://creativecommons.org/licenses/by-nc-sa/4.0/ |
|
932f88c…
|
danshearer
|
150 |
|
|
932f88c…
|
danshearer
|
151 |
scale = 1.0 |
|
932f88c…
|
danshearer
|
152 |
eh = 0.5cm |
|
932f88c…
|
danshearer
|
153 |
ew = 0.2cm |
|
932f88c…
|
danshearer
|
154 |
ed = 2 * eh |
|
932f88c…
|
danshearer
|
155 |
er = 0.4cm |
|
932f88c…
|
danshearer
|
156 |
lws = 4.0cm |
|
932f88c…
|
danshearer
|
157 |
lwm = lws + er |
|
932f88c…
|
danshearer
|
158 |
lwl = lwm + er |
|
932f88c…
|
danshearer
|
159 |
|
|
932f88c…
|
danshearer
|
160 |
ellipse height eh width ew fill Bisque color CadetBlue |
|
932f88c…
|
danshearer
|
161 |
L1: line width lwl from last ellipse.n |
|
932f88c…
|
danshearer
|
162 |
line "click for" bold above width lwm from last ellipse.s |
|
932f88c…
|
danshearer
|
163 |
LV: line height eh down |
|
932f88c…
|
danshearer
|
164 |
|
|
932f88c…
|
danshearer
|
165 |
move right er down ed from last ellipse.n |
|
932f88c…
|
danshearer
|
166 |
ellipse height eh width ew fill Bisque color CadetBlue |
|
932f88c…
|
danshearer
|
167 |
L3: line "example of Fossil" bold width lws right from last ellipse.n to LV.end then down eh right ew |
|
932f88c…
|
danshearer
|
168 |
line width lwm right from last ellipse.s then to LV.start |
|
932f88c…
|
danshearer
|
169 |
|
|
932f88c…
|
danshearer
|
170 |
move right er down ed from last ellipse.n |
|
932f88c…
|
danshearer
|
171 |
ellipse height eh width ew fill Bisque color CadetBlue |
|
932f88c…
|
danshearer
|
172 |
line width lwl right from last ellipse.n then to L1.end |
|
932f88c…
|
danshearer
|
173 |
line "coolness" bold width lwl right from last ellipse.s then up eh |
|
932f88c…
|
danshearer
|
174 |
|
|
932f88c…
|
danshearer
|
175 |
``` |
|
932f88c…
|
danshearer
|
176 |
|
|
932f88c…
|
danshearer
|
177 |
|