aboutsummaryrefslogtreecommitdiff

Tasks

TODO Install README.md and CHANGELOG.md as manpages {#td-a5575802-ffe2-8ac5-f7c3-dea3a1e6f0c4}

  • TODO in 2022-01-21

README.md and CHANGELOG.md, alongside their translations, can be converted to troff with pandoc, and installed with the rest of the manpages.

The goal is to not have information in form of documentation that exists only in the repository and not in the installation.

The troff files could look like either git-permalink.README.7 or git-permalink.readme.7.

Inspired by: https://lobste.rs/s/868tlr/why_how_add_changelog_your_next_cli.

DONE Run ShellCheck on src/git-permalink.in {#td-06b21a7e-ccea-55ea-4136-96e27a92f25a}

  • DONE in 2022-01-19

Done in a8ec600813624167770d2bfb19d5dbafcc10b791. - TODO in 2022-01-16

TODO Add spanish translations {#td-f211218a-7ea2-1e84-fa0d-5aeb7f4f415a}

  • TODO in 2022-01-13

CANCELLED Do doctests with troff {#td-4bf3142e-80fd-bd3b-4bab-f472a7ab6bfd}

  • CANCELLED in 2022-01-20

The setup and maintanece cost would be too high for 1 or 2 trivial checks in the documentation. - TODO in 2022-01-13

DOING Release v1.0.0 {#td-d6adcb7a-5252-d883-2b81-501c6f648214}

  • DOING in 2021-10-11
  • TODO in 2021-10-03

#td-d1dc781f-8659-b02a-2b52-021528985f7c, #td-77737feb-62ea-b34c-6ab0-cbe8a8827f39, #td-e8d9a644-ead4-af05-8582-eef22af90633 and #td-931167c8-96a9-46eb-63e7-224c5e2be583 will be left as is, to be implemented in another project and later this one will reap the benefits; - [x] write missing translations, mainly for the updated notes in the CHANGELOG.md; - [x] update links from https://git.euandreh.xyz/git-permalink/ to https://euandreh.xyz/git-permalink.git/. Done in bff3e4c43cf409a041c060fd6c8bbb411545c57c.

DONE Migrate TODOs.md to use td {#td-0c4937c5-fbbd-9ec9-4a23-e71eebf18fee}

  • DONE in 2022-01-19
  • DOING in 2021-09-29
  • TODO in 2021-09-29

  1. [x] create .tdrc file (3ebd9ba070c2b371012e906c65034871866f72c0);
  2. [x] migrate ids in TODOs.md to the td format (aa58672137a59de8c5e02643173895b3ab85ae64);
  3. [x] remove ad-hoc sed scripts from aux/workflow/TODOs.sh (done in c3aeb6446cab045e4514e212edd46779329b6c8f;
  4. [x] simplify TODOs.md to td HTML processing (done in 8c6b918e41e6149d11e0fec666c5d631d137e508);
  5. [x] remove TODOs.md checks from aux/workflow/assert-todos.sh (done in dc9515abaf8b13a2ce1a8941066bbae605b92590).

DONE Recover i18n tests by testing against installed package {#td-a9ac7e4e-9bec-d8ab-c106-33e05b19012c}

  • DONE in 2021-10-03

Done in 69afe7c6f7890571188904068fd83d9f72020eee and 66a2ddce1a56a4a6a402b126b7759626aa4ffd67. - TODO in 2021-09-29

  • TODO in 2021-09-27

DONE Use gettext for statically translating strings {#td-e9b72107-7dad-0844-d993-503259c729b5}

  • DONE in 2021-10-03

Done in 4bb8a07e27f0c9645a298517b923a68c5a85cf13 and dfd56b73b2fc4edae07ec4dc46b0cf7b8525a3ae. - TODO in 2021-09-14

CANCELLED Add quotes around $(DESTDIR)$(PREFIX) in Makefile and test it with directories that have spaces {#td-c88197ce-ade4-2d30-07fb-b52cf004a201}

  • CANCELLED in 2021-08-24

Reverted in 8f9ee7253eb7666af44817b724f1b17bc4ab79e1. - DONE in 2021-08-24

Done in 01dacd5677f5f5cc71a9253eb9829a36ccf13444. - TODO in 2021-08-24

TODO Remove dependency on Pandoc {#td-e8d9a644-ead4-af05-8582-eef22af90633}

  • TODO in 2021-08-20

This will enable also to add diacritics to mkstemp and mkstemp functions back, as seen in e7a121e4fb8110cdb0ff4884a556cdfaf906b920.

  • CANCELLED in 2021-10-02

I guess it is, but Git itself isn't, so it doesn't really makes sense. - TODO in 2021-08-20


Verify if this is a worthy status to seek and, if so, declare it on the README.md.

Strictly Conforming POSIX Application.

DONE Add dark mode CSS media query for HTML pages {#td-0c5d9ffc-435e-b395-48ef-29a84bb689e9}

  • DONE in 2021-09-20

Done in 63643a72b2335d083535f3ee8a93f083877dbd59. - TODO in 2021-08-20

  • DONE in 2021-08-19

favicon.png was actually unused, and was removed in df2484645e542510223aeedf0faca5bc38492c65.

favicon.svg made a symlink in 4aa4d0a18bd816d91b7fd531ca902a0f4d654022. - TODO in 2021-08-17

DONE Assert make clean all check install ... does not depend on aux/ {#td-079946ed-7e58-3051-78d6-71ba12342aba}

  • DONE in 2021-08-19

Done in e9aff79d8cfe32b74d11162dda58b9ca062e1161. - TODO in 2021-08-17

DONE Improve installcheck.sh {#td-4a7e02bd-ab82-c628-fa1c-02749c178936}

  • DONE in 2021-08-19

Done in e9aff79d8cfe32b74d11162dda58b9ca062e1161. - TODO in 2021-08-15


  1. can run make clean public dev-check from a tarball;
  2. after cleaning the directory, it is back to its original state (in file count, maybe?);
  3. can run make clean public dev-check from a Git clone;
  4. after running it, there are no diffs;
  5. after running clean, there are also no diffs;
  6. git clean -ffdx reports zero files or directories.

TODO Reduce size of the produced image {#td-77737feb-62ea-b34c-6ab0-cbe8a8827f39}

  • TODO in 2021-08-13

Currently it is at 2GB, and everything just seems much bigger than it should.

Other than POSIX utilities, what I actually need is: - a spell checker: hunspell seems fine - markdown conversion: pandoc is too big, and should probably be replaced - tools to manipulate .po files: gettext (GNU) + mdpo (Python) + po4a (Perl) are too big, and should probably also be replaced too; - git: it is what it is; - shellcheck: also too big, and should probably be replaced also.

This is the output of inspecting the content of the generated Docker image:

12K gnu/store/pb04fd6k96262q5d93cz55ksxcw80rp0-xdg-mime-database
16K gnu/store/qgbixwmzgk1xzxc9wf7kw6fgvpf9hyym-xdg-desktop-database
16K gnu/store/z6j9hw07mz2gqqh67a5bgb4hl881zsq3-glib-schemas
20K gnu/store/m4j6sqfq5lwvr7k499mlr24syppnvzpi-emacs-subdirs
28K gnu/store/2dqjp4nl4iqkwz0914lq2ch098c1vvli-python-wrapper-3.8.2
60K gnu/store/b8zij3wdyz81nk5p4rf14v3v82smr0dn-python-flake8-print-4.0.0
72K gnu/store/5cqn27ngvq9h0vnpvskn1ilx6w4qfnil-python-flake8-implicit-str-concat-patched-0.2.0
76K gnu/store/97xqi6rvmia4w850qbidlsb741qr7ndy-python-entrypoints-0.3
76K gnu/store/fsr8dqg8irjvxajilhq3qf2myin5l9cv-python-zipp-1.0.0
76K gnu/store/ibvr3izfm99bmxg6cbb2qyhrb23ablla-python-imagesize-1.2.0
80K gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0
84K gnu/store/a3y3k3pzl5x2py2ymqdv7633725fr8vx-python-pytest-runner-5.2
88K gnu/store/f5x2dl22lkrm9l6m8a9n1f61wjadzxz7-python-filelock-3.0.12
92K gnu/store/b6fq45iashmj7ya313k803bxl9gnfg2l-python-cfgv-3.1.0
92K gnu/store/yf2bb2mv6hzffc601n50pmbm908fsw21-python-mccabe-0.6.1
96K gnu/store/wb47l1a7w2h1dpd6bfalcq17qzfclcf7-python-sphinxcontrib-jsmath-1.0.1
100K    gnu/store/yrwirrblml57nwga1aza6rg3l9s8qga0-libsigsegv-2.12
104K    gnu/store/mdximiybshcy2k2a627gw7mdz471plwb-info-dir
108K    gnu/store/q01v2xjfcl7d020y3yh865695gm8i3gx-python-iso8601-0.1.13
112K    gnu/store/h7sy4hr7arjknbyy1aq0xwv6fksnzw9n-libxau-1.0.9
116K    gnu/store/2xx1lz27bd9hrgxaxhzdiaxz45dy8ybs-python-appdirs-1.4.3
120K    gnu/store/f0yrgzf176va1j72f514bz9nbcq59mv7-python-webencodings-0.5.1
120K    gnu/store/hjmz8ymac939ribn7g3jkgms4dk2az3a-python-six-1.14.0
120K    gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0
124K    gnu/store/hn93865npvy54c2g3a5s3mns0q62zr4y-manual-database
132K    gnu/store/p5zrqks0bfak2x8k8x18sn06fzi6y72l-python-sphinx-argparse-0.2.5
136K    gnu/store/ay6pwcfga5z7lm3l236h89x15h6201n7-perl-yaml-tiny-1.73
136K    gnu/store/fn08k41vi9gvxlpxznq4l4nif8grkjqv-python-pysocks-1.7.1
140K    gnu/store/4zs7yw2yl5km552xny1dg2ai1nn137wh-python-sphinx-alabaster-theme-0.7.12
140K    gnu/store/88x396rgfy1fn657sr9kn35nzragmfa2-python-editdistance-0.3.1-1.3ea84a7
152K    gnu/store/yxmiqam6mvhllplhl4fhv28322r7dpab-python-markupsafe-1.1.1
156K    gnu/store/j0r41p59bi42bba0wqingw49ndvfg2hv-python-freezegun-0.3.14
160K    gnu/store/rxaqc9f6m9mxx7hhv6xq4ny616vd0r4q-python-readme-renderer-26.0
160K    gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8
176K    gnu/store/0vxhhd8dqiwf7q8x4bk3pdgblix4g6xz-python-pytest-cov-2.8.1
180K    gnu/store/caia95dd5c2bm9qigp2am4fx9xfkfhpz-python-toml-0.10.2
180K    gnu/store/i68b86j7yfn9mvarnpvp4cw4gl3294kv-python-polib-1.1.0
180K    gnu/store/jpff35dlnldk0fnj4q8vhb0jbkwqbnx7-python-nodeenv-1.4.0
180K    gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1
188K    gnu/store/6cdl970wcv4jhvpgbh8sdj54a5gwhmwj-libxdmcp-1.1.3
200K    gnu/store/i5a9qb07y9xjh9ry8hp6km43kji16nmd-libltdl-2.4.6
228K    gnu/store/mjpmjzvaj9gfsak7cnn8xp3z7dsgmbwj-python-mock-3.0.5
232K    gnu/store/wnm7njzz4q569mmm52m06i3ar55p2857-python-bump2version-1.0.1
240K    gnu/store/6pyps99cjax2qycgdc902r0b8abqm0np-ghc-hostname-1.0
240K    gnu/store/v6rcs6b82g9gqkmdc8iknhavai2ims6r-python-setuptools-scm-3.4.3
244K    gnu/store/p4sqymm0yvc7z2x089793ib2iksfk5wx-ghc-base-orphans-0.8.1
252K    gnu/store/bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3
252K    gnu/store/w09mhd864dfdywlgy754ikddw1dgnknr-ghc-extensible-exceptions-0.1.1.4
260K    gnu/store/ba0w23pl5mdjdpq0ig0j3n8cc6aglng0-ghc-wcwidth-bootstrap-0.0.2
260K    gnu/store/d48261l1a5xvyibj5vlnravwlkwcil8c-perl-html-parser-3.72
264K    gnu/store/cwpy0xs89wyxkg0n0cva0hf389ipm7dc-python-pathspec-0.7.0
264K    gnu/store/d67v4rns34c14gy0p54cia36ghc72h8z-python-importlib-metadata-1.5.0
276K    gnu/store/753rqi9k70j6kpbimfmk58cgym5b7rk9-ghc-setenv-0.1.1.3
280K    gnu/store/rykm237xkmq7rl1p0nwass01p090p88x-zlib-1.2.11
288K    gnu/store/jnqzzn7bpfalqkw9556gy9y24jz11f5f-python-twine-1.15.0
292K    gnu/store/2ba545klz02k35v9qp474qsw4827qwsn-python-pycodestyle-2.7.0
296K    gnu/store/8wvw24g5a1d4mbwrv48h1arf8d61zy7v-ghc-call-stack-0.1.0
300K    gnu/store/1jv9igwzdanf7f7dwgyl3zci1mz9qapg-python-pymd4c-8d58510d801d1765e9f83e3d153fb81a8e3b17a2
300K    gnu/store/hrwwpzpjyxif92vhgyiwblwqcp5wvbny-ghc-unbounded-delays-0.1.1.0
304K    gnu/store/5zfrihl2sg0svssmac0l06hyq6zjik8b-python-packaging-20.0
304K    gnu/store/d1czi5zwwg4yl56kl29brync5mfvlyh4-python-sortedcontainers-2.1.0
308K    gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0
320K    gnu/store/vi6j22jdyy78yfnhggmr504c70fcrnsp-python-isort-4.3.4
328K    gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0
328K    gnu/store/ylr16ssg802wbwqk4syfyb1xhgy4yks0-md4c-0.4.8
344K    gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0
344K    gnu/store/jlm51s1gz6pah5bn7mc1i12kj5xilhck-m4-1.4.18
348K    gnu/store/2j54g0s8db1b10ggs4rirfb5vv8abm2y-python-certifi-2020.12.5
356K    gnu/store/3z3mc1ayy6dq0wpvkv63g0cby6x88q33-python-pkginfo-1.7.0
376K    gnu/store/sarhq1n0ni6xhdsi7667dqn1sq3rq2hz-python-importlib-resources-3.0.0
388K    gnu/store/hriam6khs4kjpy11bwkz5r0vr7s5rr1a-ghc-old-locale-1.0.0.7
404K    gnu/store/y1rrag8v36qbzhl2q9lfcl42crxdx2f7-hunspell-dict-eo-utf8-630b34e6f8f3cbe7aa7b27b6d8ab118e27252fd1
412K    gnu/store/7wmvv8k5h3djmclmadrp8hkmj3f65lc2-ghc-quickcheck-io-0.2.0
412K    gnu/store/gyy0dn0avmrdqfi06wayl7bkrxdx2nyd-ghc-integer-logarithms-1.0.3
424K    gnu/store/v4z42zgb9rp4kjm156lr64cmfi2vj6bb-nghttp2-1.41.0-lib
428K    gnu/store/vb12knxd3cdrgnk548l4f6m628ikg8pf-libtasn1-4.16.0
436K    gnu/store/hgr362nvsjrm8nli47waxl8q7ymi6h9s-libcap-2.31
436K    gnu/store/rmfiprfvpmxiym2rw178xwg6vk3h5ldl-ghc-dlist-0.8.0.7
460K    gnu/store/0g0j5j7m52mcfwazd8scip4qb7r001m9-attr-2.4.48
460K    gnu/store/63a4fyi0s7kqg7k1rcvdi35w5ndlz7ff-python-tqdm-4.43.0
460K    gnu/store/g7pznwv07852px2c1bm5gkafiwnvblba-expat-2.4.1
460K    gnu/store/p2gmgrxj1y03x2yxhyf3g4bskns85843-mdpo-patched-0.3.63
460K    gnu/store/xkzsfdnigh5ifjcn9pvf4sda1wrxzj1q-python-yamllint-1.26.1
472K    gnu/store/6vdk2qf8gzzwdzgg5n48qxd2d926wvr8-ghc-test-framework-hunit-0.3.0.2
472K    gnu/store/8bbvix05m62q4mwv6c29mf30yp30lshz-ghc-quickcheck-unicode-1.0.1.0
480K    gnu/store/kc6bxvy9vl0c0zb1fkgm3xrxfzqnxlvk-python-requests-2.25.0
480K    gnu/store/wand0zrwwnds6x636746116cfh3sy50k-python-pyopenssl-20.0.0
484K    gnu/store/v3nxkr58yb16f2qpvps9g9kkc1k2kqdk-ghc-hspec-expectations-0.8.2
492K    gnu/store/w17k300p63cxzzzccnw7z2ppgpqsb5p7-perl-cgi-4.52
504K    gnu/store/xd6hpc28f792hbrg9m04adiflwgb56mp-ghc-test-framework-quickcheck2-0.3.0.5
508K    gnu/store/2hc0nsmzj2pvdmi4zraq9a6nfa4sb7h9-python-requests-toolbelt-0.8.0
508K    gnu/store/9l9r6b9rc3f5bkg9v7jczabyi8vnnrvq-ghc-splitmix-bootstrap-0.0.3
516K    gnu/store/d9vjjsjvkpqna6821rz1ngacmk1kq3pa-python-pyyaml-5.4.1
524K    gnu/store/a9f7wmc75hbpg520phw9z4l9asm3qvsw-bzip2-1.0.8
552K    gnu/store/a215343yn8b6zamrrashmj4v5jrwzm6b-ghc-hspec-2.7.1
556K    gnu/store/38q41ck6vfprv76nkvsbw89l1hf1j1zn-hunspell-dict-en-utf8-630b34e6f8f3cbe7aa7b27b6d8ab118e27252fd1
564K    gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6
576K    gnu/store/ihl3h0s000vlkvadxvv21cbn4fqzvmav-python-idna-2.10
580K    gnu/store/z3c14b0xgrm8pznvc3y3lrvvmcv5v92s-ghc-tasty-smallcheck-0.8.1
584K    gnu/store/a6mfs1s8ajpbf6gca09pxfzqnhjxvms2-ghc-clock-0.8
584K    gnu/store/yrsr32wy5rvnvx7gvbx91kfjxbcy4zal-ghc-clock-bootstrap-0.8
592K    gnu/store/5405kwis5vwkvp911acklyp3kw5wm42g-hspec-discover-2.7.1
600K    gnu/store/anl8007zsl4x37xvpfk2k2dk55dav3lp-ghc-diff-0.3.4
616K    gnu/store/j1s85l5an85ydad3xilwkx3cn9j620ps-python-elementpath-1.4.0
628K    gnu/store/97p5gvb7jglmn9jpgwwf5al1798wi61f-acl-2.2.53
632K    gnu/store/60lrlr3i9vhwaagkngckmskwarscv5sw-ghc-tasty-ant-xml-1.1.6
656K    gnu/store/kn51f7ah2ypaygcyqsd73ml5hcjn19i8-ghc-tf-random-0.5
660K    gnu/store/bda9hah0slrj74g3mlsb6r8gxbja2c1c-python-flake8-3.9.1
700K    gnu/store/42kvr8wc45x2q37qm87b86427jnnzciz-ghc-tasty-hunit-0.10.0.2
700K    gnu/store/df6zhqmm3a7md4imwzwwdqs8kp6if82h-ghc-hunit-1.6.0.0
728K    gnu/store/0w8l118mpd6ibfr4x6jcgfb8wadfxkrh-ghc-logict-0.7.0.2
728K    gnu/store/ljidknch26f18g13l2cjqjqfl8cijdk7-ghc-uuid-types-1.0.3
776K    gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1
780K    gnu/store/5yjp2rlvhjbxn02w5vby35ymrs0fmcjb-gdbm-1.18.1
792K    gnu/store/gis091d49w14iy463hiddd3a4cb7pvl6-ghc-async-2.2.2
796K    gnu/store/747z33isnpcw3n4h2d5qz9dvzcrk49y5-python-dateutil-2.8.1
804K    gnu/store/y4m2bm9ayci11cihak3yfg3alrxcrg23-python-identify-1.4.25
808K    gnu/store/a7nlsfqaxffivpdcgdj2k40n7h4pbk6j-python-pyflakes-2.3.1
832K    gnu/store/9s4ciqbzpi8jzzjmmsy6i0xr4460k4vs-ghc-tagged-0.8.6
844K    gnu/store/cnn5jc9myapxgmxllidss1qsslqj0mhd-ghc-pcre-light-0.4.0.4
868K    gnu/store/jhb3add48n1wyrfb9ilfd3gr054433ca-ghc-hashable-1.2.7.0
876K    gnu/store/5dxvb2zlzgfqhmdqbvkahc2gqw10djn3-python-pre-commit-2.10.0
892K    gnu/store/5h811myaa1xwx7ccxsbddi3frw58ybmw-python-sphinxcontrib-devhelp-1.0.2
896K    gnu/store/pzm72ywfyqv1g0h4571p6zlhg566cwwd-libidn2-2.3.0
904K    gnu/store/4dqrwm4yih6j7zpwfnx41qx0c2y16ybl-ghc-regex-base-0.93.2
912K    gnu/store/0q8410qkshkppigcw52jf8h31yzmvvf2-python-sphinxcontrib-qthelp-1.0.3
912K    gnu/store/wch2gcj9ja6yqj8jzm2gil082bpv0zwq-ghc-random-1.1
940K    gnu/store/yk0hb8yawfsnr72dmcf7s72ccw2q0jqk-ghc-transformers-compat-0.6.5
944K    gnu/store/08i1lwmkzrp21sk2gllbndbkssjglpih-python-sphinxcontrib-applehelp-1.0.2
952K    gnu/store/6lm3n9nlvycbr6cw2lw3m7r8afd6qprq-python-sphinxcontrib-serializinghtml-1.1.4
976K    gnu/store/n5zs7y1sj957fnf8pknvwlyj7i703pcf-python-sphinxcontrib-htmlhelp-1.0.3
976K    gnu/store/zg126cjicrpm2p6zc08ra5vh4ddag7ww-libgc-8.0.4
984K    gnu/store/z1frpbapn763xp3jd60535scim7ajkq4-python-cffi-1.14.4
992K    gnu/store/fd7sx13lhrgbrnsa5k3g8inas417p5q5-python-urllib3-1.26.4
996K    gnu/store/6z2ri6yzpagh5pc32m8gn95lzarxkims-python-jinja2-2.11.2
1012K   gnu/store/bnrdw6326sdwvmarlcw79mfhkg6dlhmd-ghc-syb-0.7.1
1,0M    gnu/store/xkcc4372psi79xiidw4k33nmyf6mk36h-python-asn1crypto-1.4.0
1,1M    gnu/store/fvhj74pghapbjvsvj27skvkra1by1965-bash-minimal-5.0.16
1,1M    gnu/store/j4b95vjgicwm3407vyxz7zpjqbc3pakl-nettle-3.5.1
1,1M    gnu/store/k08j1silv8zxfglz3mb5q7ngmya9cv39-python-pycparser-2.20
1,1M    gnu/store/pvpypq3x9j9r3x8s9zbjwjrq9gn9z6fz-python-html5lib-1.1
1,1M    gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16
1,1M    gnu/store/vxpm139mwdz4aj51ifwidkqb0kc1lyyh-ghc-scientific-0.3.6.2
1,1M    gnu/store/wlk99qc1fr9nn5ckgychd3wmyi41nlfs-python-chardet-3.0.4
1,2M    gnu/store/8z5dr9pwh076gk81qqwb4hixsa7c4z99-ghc-ansi-wl-pprint-0.6.9
1,2M    gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4
1,2M    gnu/store/ass5dj9nk0pal6nml1zlzi24n8n2kphb-ghc-chasingbottoms-1.3.1.7
1,2M    gnu/store/dnanpgqaxyhb609pmaxp9w1i54ydzpw1-cyrus-sasl-2.1.27
1,2M    gnu/store/dxqk5wsl5bf2bspyg72zm703zan35rlv-curl-7.77.0
1,2M    gnu/store/hzx0iyg1a637zywcbhv3l9lk9fkyihgs-sed-4.8
1,2M    gnu/store/r7k859hmcnkazf492fasqvk25jflnfk6-xz-5.2.4
1,3M    gnu/store/b16j0q70nlvs6zdlrl4gygan9rd4098m-python-bleach-3.1.5
1,3M    gnu/store/chhbmhxzsir2rlmfmfpgapc2rakkx2fj-python-nose-1.3.7
1,3M    gnu/store/i6wkshxcswdvfq9nyp6gldjcasnz3snr-python-snowballstemmer-2.0.0
1,3M    gnu/store/knvggm5l80nz8yssmpfpwc11qnrvp1ad-python-coverage-5.2.1
1,3M    gnu/store/yhqc5imq7sn2sf9f48dj4gk12y4kw4s4-grep-3.4
1,4M    gnu/store/1mnhlwm48j2bv54k1yxhj2j2dyrgr6xi-ghc-ansi-terminal-0.9.1
1,4M    gnu/store/cqwj25wxzzs8frz5c9alqns24bcfspqz-libbsd-0.10.0
1,4M    gnu/store/krpyb0zi700dcrg9cc8932w4v0qivdg9-pkg-config-0.29.2
1,4M    gnu/store/l2c8070bvqx6rrnkr6hyi6w8zc9b11nb-hunspell-dict-fr-utf8-630b34e6f8f3cbe7aa7b27b6d8ab118e27252fd1
1,5M    gnu/store/a5gxkxkshw70wvqb24bzlarna357ci10-ghc-tasty-quickcheck-0.10.1
1,5M    gnu/store/d5znm55k37rvz3njmn67w441s9sgamr6-dbus-1.12.16
1,5M    gnu/store/fwya18dazamh2cjdkgh5wpxi7lqn4fcm-python-distlib-0.3.0
1,5M    gnu/store/mypg42bass5n61liwyq7llrwla4w8bny-python-distlib-0.3.1
1,6M    gnu/store/b97221kcaf7naf177y5sh62nbqc9b9nr-ghc-regex-posix-0.95.2
1,6M    gnu/store/imbqpg3mzy691af8mlhzpjf2qikdxiqv-ghc-smallcheck-1.1.5
1,6M    gnu/store/knp4rkdm39ph4brkbzsp07q248nfffi1-readline-8.0.4
1,6M    gnu/store/n8101inszxyr9d6llp2pqsxf4b4sr4s8-ghc-th-abstraction-0.3.1.0
1,6M    gnu/store/vv0w6a0cqqhzvqjqrqlpzqs0s6cw0gn1-ghc-xml-1.3.14
1,7M    gnu/store/5rxrd1rz598n0ib6a4raq7b8fy4w366c-ghc-test-framework-0.8.2.0
1,7M    gnu/store/bcjcd97xvh0qkvq1maqj6qab88xb30dv-bash-static-5.0.16
1,7M    gnu/store/mmhimfwmmidf09jw1plw3aw1g1zn2nkh-bash-static-5.0.16
1,8M    gnu/store/akk2yjkprj9wn8zl8pzgmpx399ancmq4-hunspell-1.7.0
1,8M    gnu/store/h39b801d2cby2aj0v3ykam5fbgya6g62-python-pytest-bootstrap-5.3.5
1,8M    gnu/store/zh08jngrxnpbfrs189mmibik15pipw3z-python-pytest-5.3.5
1,9M    gnu/store/2nlm4nzab90i13yinjll8yd005mc593p-python-xmlschema-1.1.2
1,9M    gnu/store/4k33n2nhsnnaxk2ip75gj7xiqdjns5hq-make-4.3
1,9M    gnu/store/k0aqiy7yx8n28dvm3f0a04ka5sd8y950-pcre-8.44
1,9M    gnu/store/lpq21nhvxgymjkr5bfagvjab60jy67my-ghc-colour-2.3.5
1,9M    gnu/store/qq4fl5wsxi0jv9w33sw5a6wvbxw8yxs4-diffutils-3.7
1,9M    gnu/store/s3q0r640csj5j2bd9058q5vsbhnmqyha-ghc-base-compat-0.10.5
2,0M    gnu/store/xmk55rk59r400vra01cpbglijbmsynkw-ghc-time-compat-1.9.2.2
2,0M    gnu/store/zscs5sl169gwhhipk3y4rj6gysc8cqml-python-hypothesis-5.4.1
2,1M    gnu/store/nq698gwkg1sfbzxcp6x08aiyk1516llb-ghc-unordered-containers-0.2.10.0
2,4M    gnu/store/jyxv85scwbplisx6xrwfr94k70m1ynhn-findutils-4.7.0
2,5M    gnu/store/4i9lvjz9z9j4kj412jpqv4zxjcik9qcb-libunistring-0.9.10
2,5M    gnu/store/g8jsacrrdyfxdskw9yagj02dn0i5xj5b-libselinux-3.0
2,7M    gnu/store/8nh0hbrr8iaz6qkwavcnzi0824f3xb68-libsepol-3.0
2,7M    gnu/store/si99c27x59s2pkm3610nsy24y25jdj56-python-cryptography-3.3.1
2,8M    gnu/store/2zakswhc9g439yc8wic8q0hs3igi9g5b-python-sphinx-rtd-theme-0.2.4
2,9M    gnu/store/1bykpz8fih7kzad16bqs6gs4xbq88xa2-ghc-tasty-1.2.3
2,9M    gnu/store/1z88ibzrdryp76md6z0a2nb38i8b7rwa-ghc-primitive-0.6.4.0
2,9M    gnu/store/35afkywncrr5xsb4cxcljf6rpjcb7f61-gmp-6.2.0
2,9M    gnu/store/3f1fglk0f6jym9r0zfaf7vqjn6gx6js5-python-pytz-2021.1
3,2M    gnu/store/g9gf1ndxryjc15mrjiy41w162lx8j6cv-sqlite-3.32.3
3,4M    gnu/store/wwnhg16d85d6lhs0nrjjrk0q2m5x35w0-ghc-optparse-applicative-0.14.3.0
3,6M    gnu/store/fl90i75bki0bzdisn2rxhm6s4sil6k5b-ghc-hspec-meta-2.6.0
3,7M    gnu/store/4pwl1gbp5ajk4myw91nbpcjmcgk8h1y7-ghc-hspec-core-2.7.1
3,8M    gnu/store/zm5x7j8vaaqr5nfrzi2ql96p5rgbj8sr-libx11-1.7.1A
3,9M    gnu/store/alfmgg03i759f8ppzkbbad82lbdpv22h-gawk-5.0.1
4,1M    gnu/store/3dq8iadbrdcvmzbvb45gi2d66j0naizf-python-docutils-0.16
4,2M    gnu/store/5f1p9bwr30j8l9h0gx0q60pjf4anwksf-python-setuptools-52.0.0
4,3M    gnu/store/f9c81k6akl8kc1c1fw2pda75wj7vr0ha-openldap-2.4.57
4,3M    gnu/store/njg9zgb1jkx0df2bqvc2mj8g860a5wih-po4a-text-0.61
4,4M    gnu/store/mvjsaciai66x95ybvxfyghhx654ijacy-ghc-attoparsec-0.13.2.3
4,5M    gnu/store/av65fmjs2iahr25vljpajs2vxhfl7glp-bdb-5.3.28
4,6M    gnu/store/ckpchpflfwhag5qsfk8klvmihwzqg9rp-pcre2-10.35
4,7M    gnu/store/akfvf50sga6msjkzay5ga1bp20pbisal-ghc-quickcheck-2.13.2
4,7M    gnu/store/apnbx15v3h2lwjhpshm0c2zic6n8kc6s-mit-krb5-1.1a
5,3M    gnu/store/mpq90jzqm7j6yyl36j0cy6qw9smjdx30-hunspell-dict-pt-utf8-630b34e6f8f3cbe7aa7b27b6d8ab118e27252fd1
5,8M    gnu/store/jlk67v3nddhv0z963wfvahk8fc8gqcz8-gnutls-3.6.16
6,1M    gnu/store/llnbxrlcd0cghby22nlzprrdvcgp64sk-python-virtualenv-20.2.1
6,3M    gnu/store/7dfyxmv6h9x4l7vvs1qfx3vs6vwcjr2w-profile
6,6M    gnu/store/j05bmqvxjqd7v0l8whh8v8hnp0apxxpq-ghc-regex-tdfa-1.2.3.2
6,6M    gnu/store/vcj5zp88c20czis0pvq76kailmlps9fj-python-pygments-2.7.4
6,8M    gnu/store/87kif0bpf0anwbsaw0jvg8fyciw4sz67-bash-5.0.16
6,9M    gnu/store/4gffr26pb2zpasncanbp2ibamg1c5ms6-openssl-1.1.1k
7,4M    gnu/store/l95f2r0yhp0xw7xpqwp7cy023xx04jgf-ghc-generic-deriving-1.12.4
7,5M    gnu/store/b1940pfi34sxd3h3gxzx1x5mzwc55flp-linux-libre-headers-5.4.20
8,6M    gnu/store/c8w9z48vvx2a3q3k44ch9yn00wk1qwhb-libxml2-2.9.10
8,7M    gnu/store/6hlk3yk84vwy2k47l5crksn28kigf3g5-shared-mime-info-1.15
9,4M    gnu/store/a45p39mgqvfd8kjwibyr0q42k1mw7gmf-util-linux-2.35.1-lib
9,9M    gnu/store/dch0dsbznkn4i1w35csfxrfjrqnj9lrl-ghc-vector-0.12.0.3
11M gnu/store/kvpjv5ibk86zz038ysrzzz57qwwk02qa-gettext-0.20.1
12M gnu/store/dac6blivlj60clvlkj8kr7swb1sd04sj-ghc-aeson-1.4.5.0
13M gnu/store/lv92cmzqjpb8mxygpqdvh0mkkkfi9vmz-libxcb-1.14
14M gnu/store/zzkly5rbfvahwqgcs7crz0ilpi7x5g5p-ncurses-6.2
16M gnu/store/lbv1wcry4x50q8xb01pgyn48jk83ixk7-python-sphinx-3.3.1
17M gnu/store/ki081kgd0jyzcr7ppnqwj3380gx1javv-glib-2.62.6
19M gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32
19M gnu/store/n8awazyldv9hbzb7pjcw76hiifmvrpvd-coreutils-8.32
23M gnu/store/4dm0k7xvmjr51zzhqhmcjs6wvjgjazr1-shellcheck-0.7.1
30M gnu/store/ky3vdrxigqrj61z9gjpnz8dsr0qxc7xc-python-babel-2.9.0
34M gnu/store/01b4w3m6mp55y531kyi1g8shh722kwqm-gcc-7.5.0-lib
38M gnu/store/6gsllvpall89xm88069v9nwyc0ixkdda-git-2.32.0
40M gnu/store/ksy2b6fwfmz40gjajvspl87ia4vsfzj7-glibc-2.31
41M gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31
55M gnu/store/18hp7flyb3yid3yp49i6qcdq0sbi5l1n-guile-3.0.2
64M gnu/store/8zvc5mvk0xm3ygrxsgpyy5ilxb5rzjry-perl-5.30.2
74M gnu/store/jpn2xaibw6m5kcr0y229szwkd5g55rvn-pandoc-2.7.3
92M gnu/store/plmbldixvy90pdqg08n3a2lk9k00dwy8-python-3.8.2
131M    gnu/store/3m747d4cxfxycpj3ylxrhwyg492j9ri9-ghc-8.6.5-doc
1,4G    gnu/store/5i95kk1qdfvl6ld3hf6a4q7kxw6sgpkv-ghc-8.6.5
2,4G    gnu/store/

DONE installcheck.sh: Run make all check in a different directory, without the Git repository {#td-a0644009-70d7-56ff-c595-ea39fe24dc2b}

  • DONE in 2021-08-19

Done in e9aff79d8cfe32b74d11162dda58b9ca062e1161. - TODO in 2021-08-06

DONE Run "check" in installcheck target {#td-db34da8d-bf61-43ae-b8f0-f2299834a937}

  • DONE in 2021-08-19

Done in e9aff79d8cfe32b74d11162dda58b9ca062e1161. - TODO in 2021-08-02

DONE Build and use Docker images from Guix packs {#td-54ec4fdc-e2e0-32f6-cca3-45f28c8903a2}

  • DONE in 2021-08-14

Done in a6a5d25c3f91cbcb9018718c15fae2726bc7ea41. - TODO in 2021-08-02

DONE Remove | \ at the end of lines {#td-1f103822-c865-254c-f6b6-4968f2fb473e}

  • DONE in 2021-07-27

Done in f428574ec4bf3d65954ed1b0c34ed86730f67647. - TODO in 2021-07-26

DONE Replace git:// with https:// {#td-ab7d98bb-7557-1891-b102-a48942d762be}

  • DONE in 2021-09-20

Done in ca68b3579dbe05ab9e11d78586c4e4efaa35932a. - DOING in 2021-08-15

I've sent a another message, now to Savannah, to try to fix this too.

  • DOING in 2021-07-28

I've configured the server to serve repositories on https://euandreh.xyz/git-permalink.git, and cloning and fetching works properly. However Guix can't understand a channel served over a bare HTTPS repository. I've sent a message to the help-guix mailing list, because for some reason the main Guix channel itself is a bare HTTPS Git repository, but I can't do the same for mine.

  • TODO in 2021-07-26

DONE Stick to 80 columns in documentation {#td-67a3e4ba-1339-4084-1743-edc261d0cc72}

  • DONE in 2021-07-27

Done in b84e82277146d7ac6b841904e2bf3db4acbdca71. - TODO in 2021-07-26

DONE Remove dependency on Perl {#td-bf65e50a-b424-9fce-ba8e-fcd6b3bf1c7a}

  • DONE in 2021-07-23

Done in 94ec6277e47878485bc44bd753129c516c044f8d. - TODO in 2021-07-22

  • DONE in 2021-10-02

Done in ffbdc7325c7271ab816dc3c1327f6efe67858f1f. - TODO in 2021-07-22


Use both $(TRANSLATIONS) and $(CONTRIBLANGS) as sources to generate the HTML to be included in the <head>, and do so for the README.md, CHANGELOG.md and manpages.

DONE Add directory structure explanation to README.md {#td-c140c4df-042e-6aa5-2202-c27e707d7eb4}

  • DONE in 2021-07-21

Done in 6b96fdc765371be62236ac0468529eb0ad4d1462. - TODO in 2021-07-19

TODO As it turns out, /dev/urandom is not POSIX either {#td-d1dc781f-8659-b02a-2b52-021528985f7c}

  • TODO in 2021-08-15

The UUID generation doesn't have to be cryptographically secure. A PRNG would do just fine.

  • 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.

  • INACTIVE in 2021-07-15

However I can't find a solution to this one.

DONE As it turns out, mktemp is not POSIX {#td-f4807694-2187-5cb5-115e-c5970a052f1f}

  • DONE in 2021-07-15

Done in 42354876de823f52a431eac900d360c074c6198d. - TODO in 2021-07-15

DONE Fix empty HTML files for translated markdown in CI {#td-f957647c-df05-c0c1-a38b-2e6faea99b8f}

  • DONE in 2021-07-16

Done in 870262a86860705d29ea9a2ce852c987b47add71. - TODO in 2021-07-14

CANCELLED Also enforce translations in assert-readme.sh {#td-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 {#td-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.

Update: This was ultimately done and implemented in 0f689438635d3a1c4cbf9cc1e62b69a72e642c68. - TODO in 2021-07-14

  • DONE in 2021-07-16

Fixed upstream and in ae9b9b32aea1370478dc6d3daf7b769029d41bde. - WAITING in 2021-07-14

The issue filled upstream: https://github.com/mondeja/mdpo/issues/155. - 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. - TODO in 2021-07-13

DONE Add installcheck and uninstallcheck targets {#td-0b034315-cbd2-6fd6-fd32-9e00a12b7594}

  • DONE in 2021-07-07

Done in ded158891da92c8e402b408e934a49e5b00b5490. - TODO in 2021-07-07

CANCELLED Remove empty lines from roff source {#td-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 {#td-b4d3eb41-64f4-9882-e03b-ab76af4dbd00}

  • DONE in 2021-07-15

Done in 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 {#td-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 {#td-d6f1ddb3-2111-bcdb-1873-0a414a5f7157}

  • CANCELLED in 2021-06-27

This was already implemented :)

In fact, this is a duplicate of #td-de34e119-049f-67a0-da8b-e0103ed24a2b. - TODO in 2021-06-27

DONE Translate README.md and CHANGELOG.md {#td-7c5cd2aa-6d92-0423-bfa7-81f2e8436586}

  • DONE in 2021-06-27

README.md translated in c7f999434f1299eaf6a4488380844f4205105b68. - DOING in 2021-06-27

CHANGELOG.md translated in 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/ {#td-f09dedb7-1b25-0b5e-2520-910a9aa32562}

  • DONE in 2021-06-22

Done in 57335b3e7c4c9e91c5747778180d611e5f15d144. - TODO in 2021-06-22

DONE Add test for install target {#td-755d8aa8-d39e-f8ce-d4c8-a8649338fffc}

  • DONE in 2021-06-22

Done in afecd9fc874922c01676cbb871a5159867a1ee67. - TODO in 2021-06-22

DONE Use colours on testing/test_ok output {#td-cded56f2-c939-3c69-c818-0fb62d62cfd8}

  • DONE in 2021-06-22

Done in 95a32d0d88783b880e67660865a0b3f69c705c25. - TODO in 2021-06-22

DONE -- doesn't work for getopts {#td-bebbe847-f552-be4b-b886-70a621162b69}

  • DONE in 2021-06-22

Done in 298cfec38bd597b3c171f11d0d4451f6134243cf. - TODO in 2021-06-22


$ ./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://euandreh.xyz/git-permalink.git/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 in 2021-06-22

Done in 761a80b9e95c32b233d8f2a60208b7915795142b. - TODO in 2021-06-22

DONE Write tests by creating and configuring repositories locally {#td-ab5a4835-3d79-03e4-8342-7f5add40b159}

  • DONE in 2021-06-22

Done in 41683f99cc520c89e6bf5a15a2255e7928e461c6. - TODO in 2021-06-22

CANCELLED Use gettext for translating src/git-permalink.sh texts {#td-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, 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.

  • TODO in 2021-06-21

DONE Make OVERRIDES and SUPPORTED REMOTES a subsection of CONFIGURATION {#td-9be7e4f5-df3c-ed5f-1ca1-2ce9fc61d944}

  • DONE in 2021-06-21

Done in c1f27ad0dadcab90939c157cd516a4204fd9919d. - TODO in 2021-06-21

DONE Mark [OPTIONS] as optional in manpages {#td-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. - TODO in 2021-06-21


Use [\fIOPTIONS\fR] in manpages. See man man.1 for reference.

DONE Add EXIT STATUS section in manpages {#td-de34e119-049f-67a0-da8b-e0103ed24a2b}

  • DONE in 2021-06-21

Done in 1dff45eb075a8717a65c2a79e454b6e61c52f14d. - TODO in 2021-06-21

DONE Use hunspell for checking spelling mistakes in translations {#td-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:

$ ./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. - TODO in 2021-06-21

CANCELLED Consider -? flag for showing the help message {#td-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.

  • TODO in 2021-06-21

DONE Use getopts in aux/workflow/manpages.sh {#td-9ee2bbc8-295f-52b7-4104-483869bad017}

  • DONE in 2021-06-23

Done in 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. - TODO in 2021-06-21


Instead of the current confusing positional argument with some optional one.

  • DONE in 2021-06-19

Done in 3cd0c4f1f3798f5cf4b67ba1f6f36879bd6a033f. - TODO in 2021-06-19

DONE Translate usage/help strings and manpages {#td-9e842529-b782-84a2-1d0a-801a8766cb7e}

  • DONE in 2021-06-19

Integration with Makefile done in b81c6437937fb594629d627334cc7e1fc2135507. - DOING in 2021-06-18

Translation of: - usage/help strings done in bf41672f72ee3ff7679c93e0d5a8f8646c19db3e; - manpages done in d0a5a24788e6c1720fce72629da4639fac372fad. - TODO in 2021-06-16

DONE Fix tests in CI {#td-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. - 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 {#td-7695d33d-e96e-d313-b74b-860addde01c3}

  • DONE in 2021-06-12

Done in dc51a628910eb872430e108084e81ee37f6e7dff. - TODO in 2021-06-12

DONE Write README.md, description and long-description {#td-9bc160b8-5739-133d-1d46-61ba68ebd39e}

  • DONE in 2021-06-12

Finished README.md in 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.

The README.md is less empty, but still missing a "Usage" section. Done in a9022eb2f72efd9b99212a057df33cba762cd13b. - TODO in 2021-06-12

DONE Write tests {#td-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. - TODO in 2021-06-12

DONE Write manpage {#td-6e6f917f-26ad-09fd-9a09-84b5df0f3ea4}

  • DONE in 2021-06-12

Done in 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 {#td-a66edd2e-cec4-ef7d-5a8a-3c9013381719}

  • DONE in 2021-06-12

Done in 9aded035e3a6ab3fbac3129353db587b22132c79. - TODO in 2021-06-12


Those are: - -h - --help - -V - --version

DONE Support more forges {#td-cebc5298-17ad-5c60-dfa5-a25b66433a3a}

  • DONE in 2021-06-19
  • TODO in 2021-06-12

The ones done so far as of this writing:

  • [x] euandreh.xyz
  • [x] sourcehut
  • [x] savannah
  • [x] gitlab
  • [x] github

The one I can think of right now but almost never use to merit being part of the first version:

Bugs

Improvements

Decisions

DONE Add decision on using language identifier for translation, but not the country {#td-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.

DONE Use aux/workflow/manpages.sh in the make && make install flow {#td-6c2801da-bcb9-dd38-69bf-270a6f9b5acd}

  • DONE in 2021-06-23
  • TODO in 2021-06-23

Update:

Now I've moved aux/workflow/manpages.sh to doc/manpages.sh, in similar spirit to how tests/*.sh don't depend on aux/lib.sh, but on tests/lib.sh instead.

The big idea is to decouple everything from aux/ from the main targets, and one coulg rm -rf aux/ and still be able to make all check install uninstall correctly. This way I keep the aux/ directory with files from my personal workflow, and the project doesn't depend on it for its main code.

Done in a3b44f937180e7544b70ca375543060a3ee57570.


Excerpt from 412a3f36cb40dba18f4f0f70a6804882ac6c68eb that implemented this change:

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 {#td-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.

Questions

DONE How to make the generated HTML files be more semantic? Only by writing it manually? {#td-e7faf3ec-a40e-f35c-7380-6965942d957f}

  • DONE in 2021-10-02

Either by writing them manually, or by using tools that better translate the markup (troff with the man macro package) into semantic HTML.

Since the first class target format are manpages to be viewed after being installed, and the HTML is derived from that, I choose not to write HTML and generate manpages, and instead keep the current solution. The semantic can be improved by having better tools, and in fact we would all benefit from having alternatives to groff and pandoc. Until then, the current HTML is all we have. - TODO in 2021-08-20

DONE Should I switch from pandoc to groff for generating HTML? {#td-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? {#td-e3b7748d-2e67-b60b-e966-ad80c754ea58}

  • DONE in 2021-06-16

Done in 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:

.\" 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