# Tasks
## TODO Remove `| \` at the end of lines {#task-1f103822-c865-254c-f6b6-4968f2fb473e}
- TODO in 2021-07-26
## TODO Replace `git://` with `https://` {#task-ab7d98bb-7557-1891-b102-a48942d762be}
- TODO in 2021-07-26
## TODO Stick to 80 columns in documentation {#task-67a3e4ba-1339-4084-1743-edc261d0cc72}
- TODO in 2021-07-26
## DONE Remove dependency on Perl {#task-bf65e50a-b424-9fce-ba8e-fcd6b3bf1c7a}
- DONE in 2021-07-23
Done in
[`94ec6277e47878485bc44bd753129c516c044f8d`](https://git.euandreh.xyz/git-permalink/commit/?id=94ec6277e47878485bc44bd753129c516c044f8d).
- TODO in 2021-07-22
## TODO Add `` pointing to the translated HTML pages {#task-43e9d7dd-987a-2f71-629f-28a4cc69be1e}
- TODO in 2021-07-22
## DONE Add directory structure explanation to `README.md` {#task-c140c4df-042e-6aa5-2202-c27e707d7eb4}
- DONE in 2021-07-21
Done in
[`6b96fdc765371be62236ac0468529eb0ad4d1462`](https://git.euandreh.xyz/git-permalink/commit/?id=6b96fdc765371be62236ac0468529eb0ad4d1462).
- TODO in 2021-07-19
## WONTFIX As it turns out, `/dev/urandom` is not POSIX either {#task-d1dc781f-8659-b02a-2b52-021528985f7c}
- WONTFIX in 2021-07-15
Since POSIX doesn't have a
[cryptographically secure pseudorandom number generator], I'll stick with the
current solution, as there is no standard way to replace it.
[cryptographically secure pseudorandom number generator]: https://en.wikipedia.org/wiki/Cryptographically-secure_pseudorandom_number_generator
- INACTIVE in 2021-07-15
---
However I can't find a solution to this one.
## DONE As it turns out, `mktemp` is not POSIX {#task-f4807694-2187-5cb5-115e-c5970a052f1f}
- DONE in 2021-07-15
Done in
[`42354876de823f52a431eac900d360c074c6198d`](https://git.euandreh.xyz/git-permalink/commit/?id=42354876de823f52a431eac900d360c074c6198d).
- TODO in 2021-07-15
## DONE Fix empty HTML files for translated markdown in CI {#task-f957647c-df05-c0c1-a38b-2e6faea99b8f}
- DONE in 2021-07-16
Done in
[`870262a86860705d29ea9a2ce852c987b47add71`](https://git.euandreh.xyz/git-permalink/commit/?id=870262a86860705d29ea9a2ce852c987b47add71).
- TODO in 2021-07-14
## CANCELLED Also enforce translations in `assert-readme.sh` {#task-6946fc69-3f25-fc6b-5f4d-89cb940021f0}
- CANCELLED in 2021-07-14
After an initial attempt, I realized that the generated markdown output
depends on how mdpo emits the markdown, and that there are many ways to emit
semantically equivalent markdown.
One example is adding all the `[a link]: ...` to the bottom of the file
instead or where it was placed initially.
Since each README would have its own links, enforcing the translation becomes
less feasible.
- TODO in 2021-07-14
## DONE Stop guessing languages in `assert-manpages.sh` {#task-be785104-8bf8-4107-349f-ae859c1db153}
- DONE in 2021-07-14
Instead of guessing the language, `assert-manpages.sh` has a hardcoded list of
supported languages, and now errors out when given a file with an unexpected
naming or unsupported language.
Done in
[`92aa59b4481bfd30b9c29d3171c346e50fa93c9f`](https://git.euandreh.xyz/git-permalink/commit/?id=92aa59b4481bfd30b9c29d3171c346e50fa93c9f).
Update: This was ultimately done and implemented in
[`0f689438635d3a1c4cbf9cc1e62b69a72e642c68`](https://git.euandreh.xyz/git-permalink/commit/?id=0f689438635d3a1c4cbf9cc1e62b69a72e642c68).
- TODO in 2021-07-14
## DONE Fix link wrapping with md2po usage {#task-37fb45fb-d5d8-5511-2bd3-ebd2c3fee891}
- DONE in 2021-07-16
Fixed upstream and in
[`ae9b9b32aea1370478dc6d3daf7b769029d41bde`](https://git.euandreh.xyz/git-permalink/commit/?id=ae9b9b32aea1370478dc6d3daf7b769029d41bde).
- WAITING in 2021-07-14
The issue filled upstream: .
- TODO in 2021-07-14
There are still situations when the link gets broken with wrapping.
This needs a little bit more time and investigation.
- DONE in 2021-07-13
Fixed upstream in mdpo, done in
[`a923f39376c511f128eb84a8b32b7464737a3972`](https://git.euandreh.xyz/package-repository/commit/?id=a923f39376c511f128eb84a8b32b7464737a3972).
- TODO in 2021-07-13
## DONE Add `installcheck` and `uninstallcheck` targets {#task-0b034315-cbd2-6fd6-fd32-9e00a12b7594}
- DONE in 2021-07-07
Done in
[`ded158891da92c8e402b408e934a49e5b00b5490`](https://git.euandreh.xyz/git-permalink/commit/?id=ded158891da92c8e402b408e934a49e5b00b5490).
- TODO in 2021-07-07
## CANCELLED Remove empty lines from roff source {#task-f65531fa-e44b-14b1-fa32-70a22346e060}
- CANCELLED in 2021-07-14
Both pandoc and groff can understand empty lines in the roff source.
Since there is no standard, it is reasonable to depend on implementation
quirks.
- TODO in 2021-07-07
---
From roff(7):
> Never include empty or blank lines in a roff document. Instead,
> use the empty request (a line consisting of a dot only) or a
> line comment .\" if a structuring element is needed.
## DONE Support two categories of translations: mine and contributed {#task-b4d3eb41-64f4-9882-e03b-ab76af4dbd00}
- DONE in 2021-07-15
Done in
[`83e65d38d5269c7f505b5e65cd57ce640bba66bf`](https://git.euandreh.xyz/git-permalink/commit/?id=83e65d38d5269c7f505b5e65cd57ce640bba66bf).
- TODO in 2021-07-06
---
For the translations that I write myself, I can do things such as give warnings
and even enforce that they stay up-to-date.
I can't do the same for contributed translation, both because I shouldn't
enforce things, but also people may always leave.
Having two tiers of translations would allow for contributions to fit in the
workflow when available, be updated when possible, and included when requested,
without creating trouble for the ones I maintain.
Things to consider from the viewpoint of the contributor:
- visibility when translations are missing;
- how to contribute;
- where to put translations;
- where to get `.po` files from.
## DONE Investigate the accessibility and need for ARIA elements for manpages and markdown {#task-55fe6623-2bfc-49dd-061c-3899ae2b1c68}
- DONE in 2021-07-13
As I found out, ARIA stands for "Accessible Rich Internet Applications", but
since markdown and manpages include no JavaScript, the HTML itself being
semantic is already accessible.
This isn't even a "WONTFIX", but a "NONISSUE".
- TODO in 2021-07-06
---
Eligible for investigations are:
- manpages (I'd expect those to be standard, but who knows);
- HTML from manpages as generated by pandoc;
- HTML from markdown, also as generated by pandoc, both for `commonmark.sh` and
`TODOs.sh`.
Test them with a desktop screen reader, talkback and maybe a browser screen
reader such as ChromeVox (or its free alternative).
## CANCELLED Add `EXIT_STATUS` section to manpage {#task-d6f1ddb3-2111-bcdb-1873-0a414a5f7157}
- CANCELLED in 2021-06-27
This was already implemented :)
In fact, this is a duplicate of
[`#task-de34e119-049f-67a0-da8b-e0103ed24a2b`](#task-de34e119-049f-67a0-da8b-e0103ed24a2b).
- TODO in 2021-06-27
## DONE Translate README.md and CHANGELOG.md {#task-7c5cd2aa-6d92-0423-bfa7-81f2e8436586}
- DONE in 2021-06-27
`README.md` translated in
[`c7f999434f1299eaf6a4488380844f4205105b68`](https://git.euandreh.xyz/git-permalink/commit/?id=c7f999434f1299eaf6a4488380844f4205105b68).
- DOING in 2021-06-27
`CHANGELOG.md` translated in
[`cb6f339cf5bff6dec6b9c8b1bcf79496980ec36a`](https://git.euandreh.xyz/git-permalink/commit/?id=cb6f339cf5bff6dec6b9c8b1bcf79496980ec36a).
- TODO in 2021-06-26
---
Unlike `doc/git-permalink.*.1.in` files, these two don't need to be commited
into the repository.
The reason why the manpages are is to lessen the requirement on the consumer
when they're on the canonical `make && make install` path.
They can even `make check` before installing (or uninstalling), and all of those
targets are specifically kept with minimal requirements, so that the user can
build, test and install the software without requiring extra dependencies.
Due to that, the translated manpages are kept in the repository so that users
don't need `po4a` or `gettext`.
The same is not true for the `public` target.
This is meant for building the HTML pages of the website.
Even though all of the code that generates those pages live in the repository
under `aux/`, `make public` isn't part of the canonical steps required for users
to install software.
Because of that, `{README,CHANGELOG}.{pt,fr,eo}.md` don't need to live in the
repository, and can be generated on the fly under the `public` target.
As with manpages, the actual file will be `README.en.md`, and `README.md` is a
symlink to that.
I should also add links to the translated versions on each translation.
This should bring an accompanying change to `aux/workflow/assert-readme.sh` and
`aux/workflow/assert-changelog.sh`.
## DONE Remove hard coded `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 specialized 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
## DONE Use `hunspell` for checking spelling mistakes in translations {#task-4ae91595-6e6d-be17-d882-754a478da878}
- DONE in 2021-06-25
It is not included in the `dev-check` target because of errors of `iconv` and
UTF-8:
```text
$ ./aux/guix/with-container.sh 'make spellcheck'
sh aux/workflow/assert-spelling.sh -l 'pt fr eo en'
error - iconv: UTF-8 -> ANSI_X3.4-1968
error - iconv: UTF-8 -> ANSI_X3.4-1968
error - iconv: UTF-8 -> ANSI_X3.4-1968
error - iconv: UTF-8 -> ANSI_X3.4-1968
error - iconv: UTF-8 -> ANSI_X3.4-1968
error - iconv: UTF-8 -> ANSI_X3.4-1968
error - iconv: UTF-8 -> ANSI_X3.4-1968
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
error - iconv: ANSI_X3.4-1968 -> UTF-8
public/fr/git-permalink.1.html:25: Locate: rer | Try: RER
public/fr/git-permalink.1.html:29: Locate: remote | Try: remonte
public/fr/git-permalink.1.html:29: Locate: origin | Try: origine
public/fr/git-permalink.1.html:29: Locate: mod | Try: dom
public/fr/git-permalink.1.html:30: Locate: apr | Try: par
public/fr/git-permalink.1.html:34: Locate: sactiv | Try: activit
public/fr/git-permalink.1.html:34: Locate: activit | Try: activait
public/fr/git-permalink.1.html:48: Locate: RENCES | Try: RENDES
public/fr/git-permalink.1.html:49: Locate: rences | Try: rendes
public/fr/git-permalink.1.html:52: Locate: git | Try: g
public/fr/git-permalink.1.html:52: Locate: berg | Try: ber
public/fr/git-permalink.1.html:54: Locate: git | Try: g
```
This will be dealt with elsewhere (probably in my website's repository).
The separate `spellcheck` target is enough.
Done in
[`f4deaf6bd66ed07cab897002c4cacd2e28027552`](https://git.euandreh.xyz/git-permalink/commit/?id=f4deaf6bd66ed07cab897002c4cacd2e28027552).
- 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
## DONE Use `getopts` in `aux/workflow/manpages.sh` {#task-9ee2bbc8-295f-52b7-4104-483869bad017}
- DONE in 2021-06-23
Done in
[`412a3f36cb40dba18f4f0f70a6804882ac6c68eb`](https://git.euandreh.xyz/git-permalink/commit/?id=412a3f36cb40dba18f4f0f70a6804882ac6c68eb).
- 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 kind of in
[`0ee2ce2c85d3376b35dc9338309e50e3c6f9eb80`](https://git.euandreh.xyz/git-permalink/commit/?id=0ee2ce2c85d3376b35dc9338309e50e3c6f9eb80).
- TODO in 2021-06-21
---
Instead of the current confusing 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.
Done in
[`cd7bd39b1b6ce7d958f48d63b42ba3ab5fdf6f21`](https://git.euandreh.xyz/git-permalink/commit/?id=cd7bd39b1b6ce7d958f48d63b42ba3ab5fdf6f21).
- TODO in 2021-06-12
---
For some reason, running them locally with
`./aux/guix/with-container.sh 'make clean public dev-check'` passes, but the
same command doesn't on CI.
## 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:
- git.euandreh.xyz
- sourcehut
- savannah
- gitlab
- github
The one I can think of right now but almost never use to merit being
part of the first version:
- Kernel CGit (where Git itself in publicly available): [`caaac9ffb8c80432ef41ad9434762d3e3401f01a`](https://git.euandreh.xyz/git-permalink/commit/?id=caaac9ffb8c80432ef41ad9434762d3e3401f01a)
- codeberg: [`8be93bf6e7077d69eec43a80b773f9c2a6530524`](https://git.euandreh.xyz/git-permalink/commit/?id=8be93bf6e7077d69eec43a80b773f9c2a6530524)
- notabug: [`0ee7b1fa813809e2e86e4e322999d3d56f1d180d`](https://git.euandreh.xyz/git-permalink/commit/?id=0ee7b1fa813809e2e86e4e322999d3d56f1d180d)
- pagure: [`67573428bfcba5eb91cb286153ec593666c2a437`](https://git.euandreh.xyz/git-permalink/commit/?id=67573428bfcba5eb91cb286153ec593666c2a437)
- bitbucket: [`2c5e8e11a26a9a09cbeb2ceda1ca7b4e4f3aa68a`](https://git.euandreh.xyz/git-permalink/commit/?id=2c5e8e11a26a9a09cbeb2ceda1ca7b4e4f3aa68a)
- generic cgit? No, people should use `git-permalink.template-file-commit` and `git-permalink.template-commit-file` instead
# Bugs
# Improvements
# Decisions
## DONE Add decision on using language identifier for translation, but not the country {#decision-ce5cd33e-b3a1-1606-0d78-0d9586b07529}
- DONE in 2021-07-13
Decided!
Using the language only is better, period.
There are special cases where the country actually helps specify two different
languages, such as zh_CN and zh_TW.
But the default should be the language encompassing universally all countries
that speak that language.
Regionalisms are avoided to better inclusivity of less populated countries.
BONUS: The golden rule is to make the translation unit to be the sentence
rather than words.
This is just a general comment on translation logistics, and has nothing to do
with including the country.
- TODO in 2021-07-06
---
Wikipedia has the best approach to translations, in my opinion, and I'm
considering following it, or do something inspired by it.
The main concept is do translate content based on the language, but not the
country.
So instead of having a `pt_PT` and a `pt_BR` version, there is only one `pt`
version, and local differences are included in the translation itself.
Other than the obvious benefit of requiring less translations to exist, I like
the fact that they are capable of capturing the language, without excluding
different countries or communities that speak them.
Everywhere else I see the country as part of the language identifier or the
translation, and I don't like it.
Personally, I'd rather have a text that is a little bit less idiomatic to a
country, but is universal to the language.
Wikipedia has other decisions that I disagree with, such as serving different
content for desktop and mobile, from different DNS addresses ([1], [2]).
That is just to say that I want to take some of their ideas, but not all.
[1]: https://diff.wikimedia.org/2009/06/30/wikimedia-mobile-launch/
[2]: https://www.mediawiki.org/wiki/Reading/Web/Mobile#About
## DONE Use `aux/workflow/manpages.sh` in the `make && make install` flow {#decision-6c2801da-bcb9-dd38-69bf-270a6f9b5acd}
- DONE in 2021-06-23
- TODO in 2021-06-23
---
Excerpt from
[`412a3f36cb40dba18f4f0f70a6804882ac6c68eb`](https://git.euandreh.xyz/git-permalink/commit/?id=412a3f36cb40dba18f4f0f70a6804882ac6c68eb)
that implemented this change:
```text
I disliked the fact that aux/workflow/manpages.sh still is being used
for the "install" and "uninstall" targets. Before this file, the
canonical workflow of "make && make install/uninstall" was 100%
embedded within the Makefile itself. But now the Makefile calls to an
external script for that. This isn't a real cost, other than how
obvious the behaviour is for someone looking at the Makefile for the
first time.
I still chose to do it anyway, because there was already too many
things in the Makefile itself, and it was getting worse with time. I
made sure to never cross the line of relying on an external tool for
the canonical "make && make install/uninstall", and even for
"make check". Those all work without requiring any extra tool outside
what POSIX defines, such as "sed", "awk", etc. Despite the cost of
adding this detour from the liner Makefile flow, I found it to be worth
it to call to the external script, as this script can now also be
shared across projects, and the customized Makefile be made simpler.
In other to remove the "-- $(do_subst)" horrendous hack, I chose to use
an inference rule for ".in" files, and remove the "$(do_subst)"
variable altogether. Now all the files that need to go through sed
should end in ".in", and the Makefile will take care of producing it.
The upside is that this model is much better integrater into make
itself.
```
## 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 consumers (and not for developers), namely,
gettext.
Since gettext itself isn't standard (see [discussion] on this topic), adding
this requirement to the consumer (user or packager) isn't desirable.
So here I'm optimizing 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 Should I switch from pandoc to groff for generating HTML? {#question-539a1902-ed41-fc93-806a-088b6caf8134}
- DONE in 2021-07-13
No.
Pandoc is too lenient with man, and knows only about man and not about the
rest of troffs toolchain (`tbl`, `eqn`, `pic`, etc.), but groff is worst on
Unicode, so we stick to pandoc.
- TODO in 2021-07-10
## 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