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
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
|
# 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`](https://euandreh.xyz/git-permalink.git/commit/?id=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
---
- [ ] finish open tasks:
[`#td-0c4937c5-fbbd-9ec9-4a23-e71eebf18fee`](#td-0c4937c5-fbbd-9ec9-4a23-e71eebf18fee)
and
[`#td-f211218a-7ea2-1e84-fa0d-5aeb7f4f415a`](#td-f211218a-7ea2-1e84-fa0d-5aeb7f4f415a).
[`#td-d1dc781f-8659-b02a-2b52-021528985f7c`](#td-d1dc781f-8659-b02a-2b52-021528985f7c),
[`#td-77737feb-62ea-b34c-6ab0-cbe8a8827f39`](#td-77737feb-62ea-b34c-6ab0-cbe8a8827f39),
[`#td-e8d9a644-ead4-af05-8582-eef22af90633`](#td-e8d9a644-ead4-af05-8582-eef22af90633)
and
[`#td-931167c8-96a9-46eb-63e7-224c5e2be583`](#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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=3ebd9ba070c2b371012e906c65034871866f72c0));
2. [x] migrate ids in `TODOs.md` to the `td` format ([`aa58672137a59de8c5e02643173895b3ab85ae64`](https://euandreh.xyz/git-permalink.git/commit/?id=aa58672137a59de8c5e02643173895b3ab85ae64));
3. [x] remove ad-hoc sed scripts from `aux/workflow/TODOs.sh` (done in [`c3aeb6446cab045e4514e212edd46779329b6c8f`](https://euandreh.xyz/git-permalink.git/commit/?id=c3aeb6446cab045e4514e212edd46779329b6c8f);
4. [x] simplify `TODOs.md` to `td` HTML processing (done in [`8c6b918e41e6149d11e0fec666c5d631d137e508`](https://euandreh.xyz/git-permalink.git/commit/?id=8c6b918e41e6149d11e0fec666c5d631d137e508));
5. [x] remove `TODOs.md` checks from `aux/workflow/assert-todos.sh` (done in [`dc9515abaf8b13a2ce1a8941066bbae605b92590`](https://euandreh.xyz/git-permalink.git/commit/?id=dc9515abaf8b13a2ce1a8941066bbae605b92590)).
## DONE Recover i18n tests by testing against installed package {#td-a9ac7e4e-9bec-d8ab-c106-33e05b19012c}
- DONE in 2021-10-03
Done in
[`69afe7c6f7890571188904068fd83d9f72020eee`](https://euandreh.xyz/git-permalink.git/commit/?id=69afe7c6f7890571188904068fd83d9f72020eee)
and
[`66a2ddce1a56a4a6a402b126b7759626aa4ffd67`](https://euandreh.xyz/git-permalink.git/commit/?id=66a2ddce1a56a4a6a402b126b7759626aa4ffd67).
- TODO in 2021-09-29
## TODO Archive release tarballs in Internet Archive/Software Heritage and link them on the README {#td-931167c8-96a9-46eb-63e7-224c5e2be583}
- 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`](https://euandreh.xyz/git-permalink.git/commit/?id=4bb8a07e27f0c9645a298517b923a68c5a85cf13)
and
[`dfd56b73b2fc4edae07ec4dc46b0cf7b8525a3ae`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=8f9ee7253eb7666af44817b724f1b17bc4ab79e1).
- DONE in 2021-08-24
Done in
[`01dacd5677f5f5cc71a9253eb9829a36ccf13444`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=e7a121e4fb8110cdb0ff4884a556cdfaf906b920).
## CANCELLED Verify if git-permalink is a "Strictly Conforming POSIX Application" {#td-79c9aa0e-d5ef-78d2-0a01-1b5a06cce6d9}
- 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](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap02.html#tag_02_02_01).
## DONE Add dark mode CSS media query for HTML pages {#td-0c5d9ffc-435e-b395-48ef-29a84bb689e9}
- DONE in 2021-09-20
Done in
[`63643a72b2335d083535f3ee8a93f083877dbd59`](https://euandreh.xyz/git-permalink.git/commit/?id=63643a72b2335d083535f3ee8a93f083877dbd59).
- TODO in 2021-08-20
## DONE `favicon.{png,svg}` as a symlink instead of a copy {#td-bd6ebb44-a6f7-5e14-39df-64e8e7cfc21e}
- DONE in 2021-08-19
`favicon.png` was actually unused, and was removed in
[`df2484645e542510223aeedf0faca5bc38492c65`](https://euandreh.xyz/git-permalink.git/commit/?id=df2484645e542510223aeedf0faca5bc38492c65).
`favicon.svg` made a symlink in
[`4aa4d0a18bd816d91b7fd531ca902a0f4d654022`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=e9aff79d8cfe32b74d11162dda58b9ca062e1161).
- TODO in 2021-08-17
## DONE Improve `installcheck.sh` {#td-4a7e02bd-ab82-c628-fa1c-02749c178936}
- DONE in 2021-08-19
Done in
[`e9aff79d8cfe32b74d11162dda58b9ca062e1161`](https://euandreh.xyz/git-permalink.git/commit/?id=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:
```shell
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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=ca68b3579dbe05ab9e11d78586c4e4efaa35932a).
- DOING in 2021-08-15
I've sent a [another message], now to Savannah, to try to fix this too.
[another message]: https://lists.gnu.org/r/savannah-hackers-public/2021-08/msg00000.html
- 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.
[message]: https://yhetil.org/guix-user/162732098483.1190082.2428052336447457010@localhost/t/
- 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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=94ec6277e47878485bc44bd753129c516c044f8d).
- TODO in 2021-07-22
## DONE Add `<link "alternate" ... />` pointing to the translated HTML pages {#td-43e9d7dd-987a-2f71-629f-28a4cc69be1e}
- DONE in 2021-10-02
Done in
[`ffbdc7325c7271ab816dc3c1327f6efe67858f1f`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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.
[PRNG]: https://en.wikipedia.org/wiki/Pseudorandom_number_generator
- 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 {#td-f4807694-2187-5cb5-115e-c5970a052f1f}
- DONE in 2021-07-15
Done in
[`42354876de823f52a431eac900d360c074c6198d`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=92aa59b4481bfd30b9c29d3171c346e50fa93c9f).
Update: This was ultimately done and implemented in
[`0f689438635d3a1c4cbf9cc1e62b69a72e642c68`](https://euandreh.xyz/git-permalink.git/commit/?id=0f689438635d3a1c4cbf9cc1e62b69a72e642c68).
- TODO in 2021-07-14
## DONE Fix link wrapping with md2po usage {#td-37fb45fb-d5d8-5511-2bd3-ebd2c3fee891}
- DONE in 2021-07-16
Fixed upstream and in
[`ae9b9b32aea1370478dc6d3daf7b769029d41bde`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/package-repository.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/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 {#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`](#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`](https://euandreh.xyz/git-permalink.git/commit/?id=c7f999434f1299eaf6a4488380844f4205105b68).
- DOING in 2021-06-27
`CHANGELOG.md` translated in
[`cb6f339cf5bff6dec6b9c8b1bcf79496980ec36a`](https://euandreh.xyz/git-permalink.git/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/` {#td-f09dedb7-1b25-0b5e-2520-910a9aa32562}
- DONE in 2021-06-22
Done in
[`57335b3e7c4c9e91c5747778180d611e5f15d144`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/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://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 Add example to manpage on how to get the permalink of a file called `--help` {#td-ada9b39a-cc42-97b2-bd02-ad9c0adc475c}
- DONE in 2021-06-22
Done in
[`761a80b9e95c32b233d8f2a60208b7915795142b`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=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][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://euandreh.xyz/git-permalink.git/tree/src/git-permalink.sh?id=caaac9ffb8c80432ef41ad9434762d3e3401f01a#n11
- 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`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/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 {#td-de34e119-049f-67a0-da8b-e0103ed24a2b}
- DONE in 2021-06-21
Done in
[`1dff45eb075a8717a65c2a79e454b6e61c52f14d`](https://euandreh.xyz/git-permalink.git/commit/?id=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:
```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://euandreh.xyz/git-permalink.git/commit/?id=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.
[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` {#td-9ee2bbc8-295f-52b7-4104-483869bad017}
- DONE in 2021-06-23
Done in
[`412a3f36cb40dba18f4f0f70a6804882ac6c68eb`](https://euandreh.xyz/git-permalink.git/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 <del>kind of</del> in
[`0ee2ce2c85d3376b35dc9338309e50e3c6f9eb80`](https://euandreh.xyz/git-permalink.git/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 {#td-eb65cbf1-bff9-be13-f185-3ea53333aa6f}
- DONE in 2021-06-19
Done in
[`3cd0c4f1f3798f5cf4b67ba1f6f36879bd6a033f`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=b81c6437937fb594629d627334cc7e1fc2135507).
- DOING in 2021-06-18
Translation of:
- usage/help strings done in
[`bf41672f72ee3ff7679c93e0d5a8f8646c19db3e`](https://euandreh.xyz/git-permalink.git/commit/?id=bf41672f72ee3ff7679c93e0d5a8f8646c19db3e);
- manpages done in
[`d0a5a24788e6c1720fce72629da4639fac372fad`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/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 {#td-7695d33d-e96e-d313-b74b-860addde01c3}
- DONE in 2021-06-12
Done in
[`dc51a628910eb872430e108084e81ee37f6e7dff`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/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://euandreh.xyz/git-permalink.git/commit/?id=9e089d29ec64936df39b9b1a0e385f988d843416).
The `README.md` is less empty, but still missing a "Usage" section.
Done in
[`a9022eb2f72efd9b99212a057df33cba762cd13b`](https://euandreh.xyz/git-permalink.git/commit/?id=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`](https://euandreh.xyz/git-permalink.git/commit/?id=50a7c011274359ef058d30be87b9d29ca4fd06ed).
- TODO in 2021-06-12
## DONE Write manpage {#td-6e6f917f-26ad-09fd-9a09-84b5df0f3ea4}
- DONE in 2021-06-12
Done in
[`0f02b1bf62005b451ff4b91a88716cb6e0365849`](https://euandreh.xyz/git-permalink.git/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 {#td-a66edd2e-cec4-ef7d-5a8a-3c9013381719}
- DONE in 2021-06-12
Done in
[`9aded035e3a6ab3fbac3129353db587b22132c79`](https://euandreh.xyz/git-permalink.git/commit/?id=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:
- [x] Kernel CGit (where Git itself in publicly available): [`caaac9ffb8c80432ef41ad9434762d3e3401f01a`](https://euandreh.xyz/git-permalink.git/commit/?id=caaac9ffb8c80432ef41ad9434762d3e3401f01a)
- [x] codeberg: [`8be93bf6e7077d69eec43a80b773f9c2a6530524`](https://euandreh.xyz/git-permalink.git/commit/?id=8be93bf6e7077d69eec43a80b773f9c2a6530524)
- [x] notabug: [`0ee7b1fa813809e2e86e4e322999d3d56f1d180d`](https://euandreh.xyz/git-permalink.git/commit/?id=0ee7b1fa813809e2e86e4e322999d3d56f1d180d)
- [x] pagure: [`67573428bfcba5eb91cb286153ec593666c2a437`](https://euandreh.xyz/git-permalink.git/commit/?id=67573428bfcba5eb91cb286153ec593666c2a437)
- [x] bitbucket: [`2c5e8e11a26a9a09cbeb2ceda1ca7b4e4f3aa68a`](https://euandreh.xyz/git-permalink.git/commit/?id=2c5e8e11a26a9a09cbeb2ceda1ca7b4e4f3aa68a)
- [x] <del>generic cgit?</del> 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 {#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.
[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 {#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`](https://euandreh.xyz/git-permalink.git/commit/?id=a3b44f937180e7544b70ca375543060a3ee57570).
---
Excerpt from
[`412a3f36cb40dba18f4f0f70a6804882ac6c68eb`](https://euandreh.xyz/git-permalink.git/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 {#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.
[discussion]: https://www.austingroupbugs.net/view.php?id=1122
# 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`](https://euandreh.xyz/git-permalink.git/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
|