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
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
|
# Tasks
## DONE Remove hardcoded `public/` path in some files under `aux/` {#task-f09dedb7-1b25-0b5e-2520-910a9aa32562}
- DONE in 2021-06-22
Done in
[`57335b3e7c4c9e91c5747778180d611e5f15d144`](https://git.euandreh.xyz/git-permalink/commit/?id=57335b3e7c4c9e91c5747778180d611e5f15d144).
- TODO in 2021-06-22
## DONE Add test for install target {#task-755d8aa8-d39e-f8ce-d4c8-a8649338fffc}
- DONE in 2021-06-22
Done in
[`afecd9fc874922c01676cbb871a5159867a1ee67`](https://git.euandreh.xyz/git-permalink/commit/?id=afecd9fc874922c01676cbb871a5159867a1ee67).
- TODO in 2021-06-22
## DONE Use colours on `testing`/`test_ok` output {#task-cded56f2-c939-3c69-c818-0fb62d62cfd8}
- DONE in 2021-06-22
Done in
[`95a32d0d88783b880e67660865a0b3f69c705c25`](https://git.euandreh.xyz/git-permalink/commit/?id=95a32d0d88783b880e67660865a0b3f69c705c25).
- TODO in 2021-06-22
## DONE `--` doesn't work for `getopts` {#task-bebbe847-f552-be4b-b886-70a621162b69}
- DONE in 2021-06-22
Done in
[`298cfec38bd597b3c171f11d0d4451f6134243cf`](https://git.euandreh.xyz/git-permalink/commit/?id=298cfec38bd597b3c171f11d0d4451f6134243cf).
- TODO in 2021-06-22
---
```shell
$ ./src/git-permalink.sh -p -- --version
./src/git-permalink.sh : option non permise -- -
./src/git-permalink.sh : option non permise -- v
./src/git-permalink.sh : option non permise -- e
./src/git-permalink.sh : option non permise -- r
./src/git-permalink.sh : option non permise -- s
./src/git-permalink.sh : option non permise -- i
./src/git-permalink.sh : option non permise -- o
./src/git-permalink.sh : option non permise -- n
https://git.euandreh.xyz/git-permalink/tree/--version?id=5c2f15ac772615c390c0bc226a0f90ee37bad4e8
$ ./src/git-permalink.sh -p -- --help
./src/git-permalink.sh : option non permise -- -
Usage: git permalink [-phV] FICHIER [LINENO]
Options:
-p seulement imprimez le lien, n'essayez pas de l'ouvrir
-h, --help afficher ce message d'aide
-V, --version imprime le numeró de version
```
## DONE Add example to manpage on how to get the permalink of a file called `--help` {#task-ada9b39a-cc42-97b2-bd02-ad9c0adc475c}
- DONE in 2021-06-22
Done in
[`761a80b9e95c32b233d8f2a60208b7915795142b`](https://git.euandreh.xyz/git-permalink/commit/?id=761a80b9e95c32b233d8f2a60208b7915795142b).
- TODO in 2021-06-22
## DONE Write tests by creating and configuring repositories locally {#task-ab5a4835-3d79-03e4-8342-7f5add40b159}
- DONE in 2021-06-22
Done in
[`41683f99cc520c89e6bf5a15a2255e7928e461c6`](https://git.euandreh.xyz/git-permalink/commit/?id=41683f99cc520c89e6bf5a15a2255e7928e461c6).
- TODO in 2021-06-22
## CANCELLED Use `gettext` for translating `src/git-permalink.sh` texts {#task-717fa8b7-1c92-5766-8872-280ae061bf4b}
- CANCELLED in 2021-06-21
I've considered this, and I even started working on it, but I've chosen not to pursue it further, as I now think this is a mistake.
Regardless of gettext's power and usefulness, it is definitely an overkill for for this application.
It would bring more things to the project, both in build time (requiring the generation of message files and friends) but also in run time (loading the message files themselves).
This could certainly be done via `$PREFIX/libexec/$lang.sh` or something equivalent, but this would also be increasing the installation complexity, too.
Expecting a sane installation environment is sane (but not always true), but the reasoning behind doing is just "because".
The same functionality can be implemented with less, and it already is.
It may be true that for bigger programs the same trade-off reasoning would tip the balance to the other side, and make choosing gettext a *better* decision, but this is not the case.
For the modest purpose of this software, the current solution is good enough.
Maybe it could be less restrictive of country or encoding, but the fundamental idea of embedded variables with an `eval` to define the relevant one stays the same.
Changing from an `eval` to a `case` statement builds upon the same underlying principle: of having string variables on the same file, and keep them in sync in a completely manual process.
Consider the cost and complexity of building tooling around the [quotation of the `don't` text][quotation], and one can envision one of the challenges that including in specialised i18n tooling might bring along.
Those tools have their usages and places, they do exist for a good reason, and they should be used when applicable, but this is not it.
This isn't really about POSIX sh, implementation language, or even the size of the program, but about the trade-off analysis of this use case, where I'm the one writing the code and the translations on a tiny piece of POSIX sh code.
This analysis makes me choose **not** to use `gettext`.
[quotation]: https://git.euandreh.xyz/git-permalink/tree/src/git-permalink.sh?id=caaac9ffb8c80432ef41ad9434762d3e3401f01a#n11
- TODO in 2021-06-21
## DONE Make `OVERRIDES` and `SUPPORTED REMOTES` a subsection of `CONFIGURATION` {#task-9be7e4f5-df3c-ed5f-1ca1-2ce9fc61d944}
- DONE in 2021-06-21
Done in
[`c1f27ad0dadcab90939c157cd516a4204fd9919d`](https://git.euandreh.xyz/git-permalink/commit/?id=c1f27ad0dadcab90939c157cd516a4204fd9919d).
- TODO in 2021-06-21
## DONE Mark `[OPTIONS]` as optional in manpages {#task-1d80cea9-b246-0168-7844-34fe629b255f}
- DONE in 2021-06-21
They're not really optional, but to be replaced by the option.
Done in
[`dd529f393357a1709fe2146f02720ff5fb215e6c`](https://git.euandreh.xyz/git-permalink/commit/?id=dd529f393357a1709fe2146f02720ff5fb215e6c).
- TODO in 2021-06-21
---
Use `[\fIOPTIONS\fR]` in manpages.
See `man man.1` for reference.
## DONE Add `EXIT STATUS` section in manpages {#task-de34e119-049f-67a0-da8b-e0103ed24a2b}
- DONE in 2021-06-21
Done in
[`1dff45eb075a8717a65c2a79e454b6e61c52f14d`](https://git.euandreh.xyz/git-permalink/commit/?id=1dff45eb075a8717a65c2a79e454b6e61c52f14d).
- TODO in 2021-06-21
## TODO Use `hunspell` for checking spelling mistakes in translations {#task-4ae91595-6e6d-be17-d882-754a478da878}
- TODO in 2021-06-21
## CANCELLED Consider `-?` flag for showing the help message {#task-fbc4e2cc-b9e0-53e2-6b0a-8ec118962046}
- CANCELLED in 2021-06-21
It may have been true and conventional historically, but neither [POSIX], nor [TAOUP], nor [Conventions for Command Line Options] instruct that.
[POSIX]: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
[TAOUP]: http://www.catb.org/~esr/writings/taoup/html/ch10s05.html
[Conventions for Command Line Options]: https://nullprogram.com/blog/2020/08/01/
- TODO in 2021-06-21
## TODO Use `getopts` in `aux/workflow/manpages.sh` {#task-9ee2bbc8-295f-52b7-4104-483869bad017}
- TODO in 2021-06-22
Actually, I didn't implement this.
What I did was add `getopts` to `src/git-permalink.sh.in`, not to `aux/workflow/manpages.sh`.
- DONE in 2021-06-22
Done <del>kind of</del> in
[`0ee2ce2c85d3376b35dc9338309e50e3c6f9eb80`](https://git.euandreh.xyz/git-permalink/commit/?id=0ee2ce2c85d3376b35dc9338309e50e3c6f9eb80).
- TODO in 2021-06-21
---
Instead of the current <del>confusing</del> positional argument with some optional one.
## DONE Fix missing signature link {#task-eb65cbf1-bff9-be13-f185-3ea53333aa6f}
- DONE in 2021-06-19
Done in
[`3cd0c4f1f3798f5cf4b67ba1f6f36879bd6a033f`](https://git.euandreh.xyz/git-permalink/commit/?id=3cd0c4f1f3798f5cf4b67ba1f6f36879bd6a033f).
- TODO in 2021-06-19
## DONE Translate usage/help strings and manpages {#task-9e842529-b782-84a2-1d0a-801a8766cb7e}
- DONE in 2021-06-19
Integration with Makefile done in
[`b81c6437937fb594629d627334cc7e1fc2135507`](https://git.euandreh.xyz/git-permalink/commit/?id=b81c6437937fb594629d627334cc7e1fc2135507).
- DOING in 2021-06-18
Translation of:
- usage/help strings done in
[`bf41672f72ee3ff7679c93e0d5a8f8646c19db3e`](https://git.euandreh.xyz/git-permalink/commit/?id=bf41672f72ee3ff7679c93e0d5a8f8646c19db3e);
- manpages done in
[`d0a5a24788e6c1720fce72629da4639fac372fad`](https://git.euandreh.xyz/git-permalink/commit/?id=d0a5a24788e6c1720fce72629da4639fac372fad).
- TODO in 2021-06-16
## DONE Fix tests in CI {#task-1e18a7cc-1055-bd09-3060-c03292ba583b}
- DONE in 2021-06-12
There was a test that was too brittle, and it was removed. See [CI logs before] and [CI logs after].
Done in
[`cd7bd39b1b6ce7d958f48d63b42ba3ab5fdf6f21`](https://git.euandreh.xyz/git-permalink/commit/?id=cd7bd39b1b6ce7d958f48d63b42ba3ab5fdf6f21).
- TODO in 2021-06-12
---
For some reason, running them locally witn `./aux/guix/with-container.sh 'make clean public dev-check'` passes, but the same command doesn't on CI.
[CI logs before]: https://euandreh.xyz/git-permalink/ci-logs/2021-06-12T22:51:21+00:00-07a75e37a4564ed13bc2f50ab84009df137bc223.log
[CI logs after]: https://euandreh.xyz/git-permalink/ci-logs/2021-06-12T23:15:22+00:00-cd7bd39b1b6ce7d958f48d63b42ba3ab5fdf6f21.log
## DONE Support override via git config {#task-7695d33d-e96e-d313-b74b-860addde01c3}
- DONE in 2021-06-12
Done in
[`dc51a628910eb872430e108084e81ee37f6e7dff`](https://git.euandreh.xyz/git-permalink/commit/?id=dc51a628910eb872430e108084e81ee37f6e7dff).
- TODO in 2021-06-12
## DONE Write `README.md`, `description` and `long-description` {#task-9bc160b8-5739-133d-1d46-61ba68ebd39e}
- DONE in 2021-06-12
Finished `README.md` in
[`d64e4491e417e31f35d3637ded05f5175c19b071`](https://git.euandreh.xyz/git-permalink/commit/?id=d64e4491e417e31f35d3637ded05f5175c19b071).
- DOING in 2021-06-12
The `description` was already good enough.
The `long-description` has better content over the previous duplication of whatever was in `description`.
Done in
[`9e089d29ec64936df39b9b1a0e385f988d843416`](https://git.euandreh.xyz/git-permalink/commit/?id=9e089d29ec64936df39b9b1a0e385f988d843416).
The `README.md` is less empty, but still missing a "Usage" section.
Done in
[`a9022eb2f72efd9b99212a057df33cba762cd13b`](https://git.euandreh.xyz/git-permalink/commit/?id=a9022eb2f72efd9b99212a057df33cba762cd13b).
- TODO in 2021-06-12
## DONE Write tests {#task-fd654661-fa97-83db-1d49-83a66866ccfa}
- DONE in 2021-06-12
I didn't find a simple way to test without getting too much into the weeds with mocking Git, and I don't think it is worth it.
The tests I created are actually just exercising the help and versions flags, and asserting that other flags are ignored.
For effectiveness this is pretty shallow and pretty useless, but I'm fine with the state of not testing the core functionality.
To do that it would require me to split `src/git-permalink.sh` into two files, one with the function definitions and the other as a runner.
But then I would have to glue them together on the `install` target, and more similar complications.
Given all that, I chose not to write more tests, and call this done.
Done in
[`50a7c011274359ef058d30be87b9d29ca4fd06ed`](https://git.euandreh.xyz/git-permalink/commit/?id=50a7c011274359ef058d30be87b9d29ca4fd06ed).
- TODO in 2021-06-12
## DONE Write manpage {#task-6e6f917f-26ad-09fd-9a09-84b5df0f3ea4}
- DONE in 2021-06-12
Done in
[`0f02b1bf62005b451ff4b91a88716cb6e0365849`](https://git.euandreh.xyz/git-permalink/commit/?id=0f02b1bf62005b451ff4b91a88716cb6e0365849).
- TODO in 2021-06-12
---
Show example of how to create an override URL on `git config` from a known URL.
## DONE Support default flags {#task-a66edd2e-cec4-ef7d-5a8a-3c9013381719}
- DONE in 2021-06-12
Done in
[`9aded035e3a6ab3fbac3129353db587b22132c79`](https://git.euandreh.xyz/git-permalink/commit/?id=9aded035e3a6ab3fbac3129353db587b22132c79).
- TODO in 2021-06-12
---
Those are:
- `-h`
- `--help`
- `-V`
- `--version`
## DONE Support more forges {#task-cebc5298-17ad-5c60-dfa5-a25b66433a3a}
- DONE in 2021-06-19
- TODO in 2021-06-12
---
The ones done so far as of this writing:
- <input type="checkbox" disabled checked /> git.euandreh.xyz
- <input type="checkbox" disabled checked /> sourcehut
- <input type="checkbox" disabled checked /> savannah
- <input type="checkbox" disabled checked /> gitlab
- <input type="checkbox" disabled checked /> github
The one I can think of right now but almost never use to merit being
part of the first version:
- <input type="checkbox" disabled checked /> Kernel CGit (where Git itself in publicly available): [`caaac9ffb8c80432ef41ad9434762d3e3401f01a`](https://git.euandreh.xyz/git-permalink/commit/?id=caaac9ffb8c80432ef41ad9434762d3e3401f01a)
- <input type="checkbox" disabled checked /> codeberg: [`8be93bf6e7077d69eec43a80b773f9c2a6530524`](https://git.euandreh.xyz/git-permalink/commit/?id=8be93bf6e7077d69eec43a80b773f9c2a6530524)
- <input type="checkbox" disabled checked /> notabug: [`0ee7b1fa813809e2e86e4e322999d3d56f1d180d`](https://git.euandreh.xyz/git-permalink/commit/?id=0ee7b1fa813809e2e86e4e322999d3d56f1d180d)
- <input type="checkbox" disabled checked /> pagure: [`67573428bfcba5eb91cb286153ec593666c2a437`](https://git.euandreh.xyz/git-permalink/commit/?id=67573428bfcba5eb91cb286153ec593666c2a437)
- <input type="checkbox" disabled checked /> bitbucket: [`2c5e8e11a26a9a09cbeb2ceda1ca7b4e4f3aa68a`](https://git.euandreh.xyz/git-permalink/commit/?id=2c5e8e11a26a9a09cbeb2ceda1ca7b4e4f3aa68a)
- <input type="checkbox" disabled checked /> <del>generic cgit?</del> No, people should use `git-permalink.template-file-commit` and `git-permalink.template-commit-file` instead
# Bugs
# Improvements
# Decisions
## DONE Commit the generated manpage translations directly into the repository {#decision-1f7db3d5-002e-515e-f209-0d0917228359}
- DONE in 2021-06-21
---
This is an anti-pattern in the viewpoint of the category of files that should exist in the repository, but this is made strictly for one rule: reducing the dependencies of the project for users (and not for developers), namely, gettext.
Since gettext itself isn't standard (see [discussion] on this topic), adding this requirement to the consumer (user of packager) isn't desirable.
So here I'm optimising for more things being commited in the repository in the name of less requirements.
[discussion]: https://www.austingroupbugs.net/view.php?id=1122
# Questions
## DONE Is an empty blank line in groff the same as a `.P` request? {#question-e3b7748d-2e67-b60b-e966-ad80c754ea58}
- DONE in 2021-06-16
Done in
[`c24b3a73b259943bb2440c587d8054ce90480552`](https://git.euandreh.xyz/git-permalink/commit/?id=c24b3a73b259943bb2440c587d8054ce90480552).
- TODO in 2021-06-16
---
When reading the manpage with `man` or looking at the final output generated with `pandoc`, it seems to me that an empty line behaves and mean the same thing as a `.P` request.
If this is true, these two snippets are equivalent:
```troff
.\" First snippet, using .PP
.PP
The first paragraph.
.PP
The second paragrah.
.PP
The third paragraph.
.\" Second snippet, using empty lines
The first paragraph.
The second paragrah.
The third paragraph.
```
I find the second option to be much more readable, and if both are equivalent I prefer writing that.
In fact, I don't see any reason at all to use `.PP`.
# Resources
# Scratch
|