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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
# td
[pt][pt1] | [fr][fr1] | [eo][eo1] | [es][es1]
[pt1]: https://euandreh.xyz/td/pt/
[fr1]: https://euandreh.xyz/td/fr/
[eo1]: https://euandreh.xyz/td/eo/
[es1]: https://euandreh.xyz/td/es/
Minimalistic bug tracker CLI.
Create and maintain a `TODOs.md` file for bug tracking.
It is a tool for distributed, offline issue tracking, reified as a simple text
file in the repository.
## Usage
```shell
# inside a Git repository
# create the basic configuration
$ echo 'TD_USE_BUILTIN_HOOKS=git' > .tdrc
# create a sample task
$ td -cm 'Implement feature A'
File "TODOs.md" doesn't exist yet, creating a brand new one.
[main 9d854ac] TODOs.md: Add #td-1c1e8f92-ed60-1a5b-89d9-cb2b140e498b
1 file changed, 4 insertions(+)
create mode 100644 TODOs.md
#td-1c1e8f92-ed60-1a5b-89d9-cb2b140e498b added to TODOs.md.
# register a bug, and edit its content with $VISUAL
$ td -t bug -m 'Fix B'
Type "bug" doesn't exist yet, creating new section with it.
[main 0f79796] TODOs.md: Add #td-1794611e-bfd7-9de5-3e71-cd0dcb3a1d77
1 file changed, 10 insertions(+)
#td-1794611e-bfd7-9de5-3e71-cd0dcb3a1d77 added to TODOs.md.
# add new task, with its initial state as DOING
$ td -cm 'Work on C' -s DOING
[main 1be9c00] TODOs.md: Add #td-1bbc2775-49b4-6112-5a9b-8f7fa466997c
1 file changed, 3 insertions(+)
#td-1bbc2775-49b4-6112-5a9b-8f7fa466997c added to TODOs.md.
# create custom task type, and use it to # register a new task
$ cat <<'EOF' >> .tdrc
export TD_TYPES='
task:Tasks
issue:Issues
idea:Ideas
'
EOF
$ td -cm 'Fix D' -t issue
Type "issue" doesn't exist yet, creating new section with it.
[main 7b888e3] TODOs.md: Add #td-231e1472-d32f-69d0-6c62-b924b70a5b7f
1 file changed, 6 insertions(+)
#td-231e1472-d32f-69d0-6c62-b924b70a5b7f added to TODOs.md.
```
---
The final `TODOs.md` file is:
```commonmark
# Tasks
## DOING Work on C {#td-1bbc2775-49b4-6112-5a9b-8f7fa466997c}
- DOING in 2022-01-16
## TODO Implement feature A {#td-1c1e8f92-ed60-1a5b-89d9-cb2b140e498b}
- TODO in 2022-01-16
# Bugs
## TODO Fix B {#td-1794611e-bfd7-9de5-3e71-cd0dcb3a1d77}
- TODO in 2022-01-16
---
B must be fixed.
# Issues
## TODO Fix D {#td-231e1472-d32f-69d0-6c62-b924b70a5b7f}
- TODO in 2022-01-16
```
## Installation
```shell
$ make
$ make check
# make install
```
You can pass `PREFIX` or `DESTDIR` to `make` if you'd like:
```shell
$ make PREFIX=$HOME/.local
$ make check
$ make install PREFIX=$HOME/.local
```
There are no dependencies or requirements, only standard tools such as
POSIX sed, POSIX make, etc.
## Documentation
### Manuals
The documentation is available via installed manpages or online.
Start with
[`td.tutorial.7`] ([pt][pt4], [fr][fr4], [eo][eo4], [es][es4]), and see the rest
afterwards:
- [`td.1`] ([pt][pt2], [fr][fr2], [eo][eo2], [es][es2]): CLI usage
reference;
- [`tdrc.5`] ([pt][pt3], [fr][fr3], [eo][eo3], [es][es3]): `.tdrc` file
format reference;
- [`td.tutorial.7`] ([pt][pt4], [fr][fr4], [eo][eo4], [es][es4]): getting
started and tutorial for starting to use td;
- [`td.recipes.7`] ([pt][pt5], [fr][fr5], [eo][eo5], [es][es5]): common HOWTOs
and usage recipes;
- [`td.why.7`] ([pt][pt6], [fr][fr6], [eo][eo6], [es][es6]): motivation and
explanation of why create this tool.
[`td.1`]: https://euandreh.xyz/td/en/td.1.html
[pt2]: https://euandreh.xyz/td/pt/td.1.html
[fr2]: https://euandreh.xyz/td/fr/td.1.html
[eo2]: https://euandreh.xyz/td/eo/td.1.html
[es2]: https://euandreh.xyz/td/es/td.1.html
[`tdrc.5`]: https://euandreh.xyz/td/en/tdrc.5.html
[pt3]: https://euandreh.xyz/td/pt/tdrc.5.html
[fr3]: https://euandreh.xyz/td/fr/tdrc.5.html
[eo3]: https://euandreh.xyz/td/eo/tdrc.5.html
[es3]: https://euandreh.xyz/td/es/tdrc.5.html
[`td.tutorial.7`]: https://euandreh.xyz/td/en/td.tutorial.7.html
[pt4]: https://euandreh.xyz/td/pt/td.tutorial.7.html
[fr4]: https://euandreh.xyz/td/fr/td.tutorial.7.html
[eo4]: https://euandreh.xyz/td/eo/td.tutorial.7.html
[es4]: https://euandreh.xyz/td/es/td.tutorial.7.html
[`td.recipes.7`]: https://euandreh.xyz/td/en/td.recipes.7.html
[pt5]: https://euandreh.xyz/td/pt/td.recipes.7.html
[fr5]: https://euandreh.xyz/td/fr/td.recipes.7.html
[eo5]: https://euandreh.xyz/td/eo/td.recipes.7.html
[es5]: https://euandreh.xyz/td/es/td.recipes.7.html
[`td.why.7`]: https://euandreh.xyz/td/en/td.why.7.html
[pt6]: https://euandreh.xyz/td/pt/td.why.7.html
[fr6]: https://euandreh.xyz/td/fr/td.why.7.html
[eo6]: https://euandreh.xyz/td/eo/td.why.7.html
[es6]: https://euandreh.xyz/td/es/td.why.7.html
### Directory structure
The directory structure of the repository is:
- `aux/`: personal scripts and helpers I've vendored in to ensure the
repository is self contained, feel free to ignore it;
- `doc/`: manpages, with their translated versions;
- `po/`: gettext `.po` files for the translated languages and hunspell
dictionaries for spell checking;
- `src/`: main source code for the project;
- `tests/`: integration tests for the project.
## Contributing
Extra tools used for development are:
- [ShellCheck] for validating scripts;
- [po4a], [mdpo] and [gettext] for i18n and l10n support;
- [pandoc] for generating the documentation HTML and website.
[ShellCheck]: https://www.shellcheck.net/
[po4a]: https://po4a.org/index.php.en
[gettext]: https://www.gnu.org/software/gettext/
[pandoc]: https://pandoc.org/
[mdpo]: https://mdpo.readthedocs.io/en/master/
For running the extra development-only checks, run:
```shell
$ make dev-check
```
and for generating the documentation HTML and website, run:
```shell
$ make public
```
Send contributions to the [mailing list] via
[`git send-email`](https://git-send-email.io/).
## Links
- [homepage](https://euandreh.xyz/td/en/)
- [source code](https://euandreh.xyz/td.git/)
- [bug tracking](https://euandreh.xyz/td/TODOs.html)
- [mailing list]
- [CI logs](https://euandreh.xyz/td/ci.html)
- [CHANGELOG](https://euandreh.xyz/td/en/CHANGELOG.html)
[mailing list]: https://lists.sr.ht/~euandreh/public-inbox?search=%5Btd%5D
## Releases
- [v0.1.0](https://euandreh.xyz/td.git/commit/?id=v0.1.0) [td-v0.1.0.tar.gz](https://euandreh.xyz/td.git/snapshot/td-v0.1.0.tar.gz) ([sig](https://euandreh.xyz/td.git/snapshot/td-v0.1.0.tar.gz.asc)) - 2021-06-13
## License
The code is licensed under
[GNU Affero General Public License v3.0 or later][AGPL-3.0-or-later]
(AGPL-3.0-or-later).
[AGPL-3.0-or-later]: https://euandreh.xyz/td.git/tree/COPYING
|