chriswarbo-net: 9eb425d55cf496df1937d89cac1f76cf974ed683
1: ---
2: title: Git Repo Pages
3: ---
4:
5: I've revamped the way I'm generating and storing [Web pages](/projects/repos)
6: relating to [my git repositories](/projects/repos).
7:
8: Previously, these were in the `projects/repos` subdirectory of [this site](/),
9: generated by [active code](/projects/activecode) during rendering. This had a
10: few downsides:
11:
12: - The whole site needs to be regenerated whenever a repo gets pushed, since the
13: content is based on the repo's files (e.g. a `README`). The build system's
14: caching ensures that only the necessary pages would change, but it's still a
15: pain, e.g. if pushing to a repo while halfway through some refactor that
16: makes the site build fail.
17: - Mirroring [this site on IPFS](http://ipfs.io/ipns/chriswarbo.net) requires an
18: entirely new hash, and hence IPNS update, even for these small changes.
19:
20: The solution is to split off each git repo to its own "site", which these old
21: URLs now redirect to. Links to these separate sites can be found on [the repos
22: page](/projects/repos), and they all live in
23: [the /git directory](/git/chriswarbo-net) (those directories without `.git` at
24: the end), which have previously been used for the auto-generated
25: [`git2html`](/git/git2html) pages. Those `git2html` pages are still there, along
26: with any issues tracked by `artemis` (rendered using `mhonarc`). It's all a bit
27: bare-bones at the moment, but I plan to clean it up a little, and also include
28: any `asv` benchmarks defined in the repo.
29:
30: Each git repo site is also hosted on IPFS, with an IPNS name to track the latest
31: version. IPNS still seems rather hacky (e.g. entries seem to expire after 1 day)
32: but for the moment the repos are available at the following addresses:
33:
34: ```{pipe="cat > keys"}
35: QmP457RvBiHTq9TBWa817b7KPYTTEso82y1WySR9NeQSuJ annotatedb
36: QmcjQ62nY6B4bV5rMpBK45HcU4i3Mtmfma8PbGLHC5gmEq ant-colony
37: QmVhEKuMn2wyRQ81H6g3DAKXWz1yi3KSec8SagR8WDFCz2 apt-repo-tools
38: QmUGC7srZZEc3L8nPcSgsLUkgTkw2VB4b5uzQ5NCgau2Nr arbitrary-haskell
39: QmRymc8NwuGiNHPJhzHNdJFNYcjy7Kcuygbmhrvf64Hc8Q arduino-json-client
40: Qma91V7cxCXu6Sk5jVAoVCCiZUytXdwtP7FirHKChyRU9E arrowlets-for-nodejs
41: QmcfHJnKAirXaFhp8aMTkLEmJBqbvBbkKGmVE7zGEDx4EY ast-plugin
42: QmNg5kznLkpzo5xu2FTnr4ujCbAqkJD4roui5kot6hX1K8 asv-nix
43: QmXnGYKBEGEUrPLR2TQACe7PW2y9y6PHSytWcf6LavCr5S bitbitjump-maude
44: QmUC2RN5DGwRmhkVP81oDq3JgwScaRuvBgQK9vBicZ4kMk bugseverywhere
45: QmNgGmCzapHKZQmnfLZJKPTXRzVAjMRqgqNMHA1CkbfW2s cabal2db
46: QmVYPCRGtF5AJSkg1hrcTujFTsBAXLbcobFJMTtbiZCCPQ chriswarbo-net
47: Qma9uZKJETxd98QB6CMXg6L1HCv5pz46FbTdhi3hXXaT4M chrome-duplicate-tab-detector
48: QmWA4jVoPwjWYdZQxqt1XEj1KpdhRFmcLQjZGBqgqmSd3R clutter-file-browser
49: QmSTPvggjk7o4Vo3VMFfJxY65qwVf8sT1xJ2bL4HpFkczx dependent-types-talk
50: QmSXTNvPdNw9fbnqewqQX5YU8Jx3q9mgz9vfAyDJpuKmZg explore-theories
51: QmTbfXJtE7gcgehaJ9xHcAe4eHjs7FEDoqRYd3JuT6geR8 feed2maildir
52: QmY6sidbzkGjngyxFXBkgQWaeQwS4QNWqciLG6ZRGU2VPg general-tests
53: QmcE82MsPYKL27GRxXHZXSENov1xgsc6oc8F9nPdBcUKrS genetic-turing-machines
54: QmNtf9V1MLALrQfPEQdCtSYrAp7nKXuc9N9cikVyvG8SEe genifunctors
55: QmZDbMAaarYeWEe61EYRKPTGnLFRBm41792Ew7GwVYUbBY get-deps
56: QmdFJgH4fnKzGfC6HCuPJ1h4QJzJ7RN4KxS38yGpNR5MJe ghc-dup
57: Qme5gpqq4m6Se71i3yKLbf5vWbof9i4qVguTPcYnZZitp8 git2html
58: QmVYxkZKRtLmqTtdmAiEPAovw6nJzFZBBtSKhPvVbAkqnc gnucleon
59: QmUzN7kajUhkfamBKjtEt9nZ9ydd2cWv69YGfzV4NCQLN2 gnucleon-clutter
60: Qmbg5PLQcD4nuLLkoRuJZh7hR9uVg2qcsYFr8nCGTqtixx gpu-simulations
61: QmXdgABqxQmZFyQb29qcJ1af7VLosHDKTRruWV4v7mYXcf gravity-spiral
62: QmWv958VzBJQchGjYKiSaxLC9ugrjvXkqMpVrmjp9AonXq haskell-te
63: QmW74ox79okYt24GEct2yvroPWPnbLbrwXcaYoHZcPCHsP hipspec
64: QmXQLfXsmXsGVPagfvojVXB51LP6ipeMQMnXAkXQxJw77y hs2ast
65: QmRGQBVuf7C6WRgFRWBjNBWe7ebr8MyAkFQcLMmHw2H6yf hs2ast-tests
66: Qmcia7HHUZt7xVLqdGsfdkQKuBnSfrnqm77C8SNaeMEvhw iddish
67: QmVcADUGcpJLroJUTQr1XJvJDbhjkdm9fcxHbqynWWnBxa ifcxt
68: QmNV2SX34kJ8uhZzTTPGhhbZBYjiePsrftLpwdLNYzWd6U iron
69: QmZ2ox1kQt9kVs1kTZSjxurTZyvrHkEzR2ApVFHHx54D23 isahipster
70: QmSds955qLwpfnc8yW9obwDN2gQWqv8gpqiMyc19YS5V2i isaplanner-tip
71: QmRfUKRxgQTzYtD681uUwStJ9KTPduhHCaDabp9KRvEhbX java-gnucleon
72: QmQcmrsLpDLymgv5KV5xpv8URD8tQDu3pSue7GAcWL7Nuk java-maxint
73: QmNoh1MGo54WAfkf7ostsejEjr1ESQK1CrftNeYaZ3ibfM java-package-installer
74: QmcvYQWUvr8i2ehej7BomYfJUBKyfUhVcSg7o5fHkCyPGd java-spider
75: Qmc3aQTDcCaWNMHjjopwnfnjN1w6R3wVYdGUBXan9U8Cxr javascript-base64
76: QmPGVbrRZRVWAjysW9w8JUsyAY9nnB7EvA9fV7KG3VTJ8A js-plumb
77: QmTmYB2pij68531QxwTc5Ez9NCQFhZABafFHNx6oaQQTKz k-means
78: QmRVrPdBJjG53DMZZZX7xwKouneEfTC8bFpFy6NfzMu2ev lazy-lambda-calculus
79: QmP114ziNJjrTWBVTwUzvZ9s5VL7W5Fz4MMciS7miZP9jH lazy-smallcheck-2012
80: QmdMR4YvwVFGwSwZRZ8FYbWDr89CJnoAB65xZi552zzi23 mc-aixi-ctw
81: QmduVnJtqLubZXvEsMpazz7sN9vg6T2R4LJftG5kh7xhMx md2pdf
82: QmezKEcCgVbKPr8xRSBtTiJzo1BeYuoGRPPDrbdtexukHZ ml4hs
83: QmdTML9eoHFxzrWJyCR8W7ao9uH4wkcyzM5UmTf5pfX5dv ml4hs-helper
84: QmTCpScDd8etRDB8i2RbmkDbinE5tayNFdz3sN1SL6M5fa ml4hsfe
85: QmbfxT2rA8HZapDg7nQF3x7iWtmpMsuKcbVt5HLY9F6bvy ml4pg
86: QmUjBpovgUc6uQVfGmg3S2nJsLGe6ieg8VDd7MzCkR44VU mlspec
87: QmbbdkGTuHcaNQ7Azhsk3K6zEJCt6ZGVY1KkF2ygFh8zYu mlspec-bench
88: QmeAiHeArhxZBouSPgi8ZbzbYgXeoCARvNvgLPPLoTWAPJ mlspec-helper
89: QmRD1idh3NzZ6ibd2wgdg5dt2anKTYq3zNiCT2j7jQdX3H nix-config
90: QmWwsCYvphXnA8eCqeSPgpWsBqMTiFQz2ho8YbFx1y2S5a nix-eval
91: QmZ9i76XFSoWzy6ari9ny8mBCN7cepNCxoT7CTu4rFXjvY ocportal-salmon
92: QmNPBJULUDbQfwHxZhoN8A5Mxhsv2zQmMZBJE4AD2P9GSG order-deps
93: Qme31Nkufz2LdGwVvHg2HsN7VcfF6C9nzrsaWTTxptUK4a panhandle
94: QmVRbryXSDKZDRAodEGoczcLyMoWWPJY4TmAxar6kgSAYp panpipe
95: QmVFBWUkrroj1JeCYkHTUVNryJrRYvAqFs6bhx4YCzs2nF particle-storage-ring-simulation
96: QmQZhq79gXN192td7tTpAKwy2gNoVfZGg54e4a177D9HiN php-core
97: QmQBRb6Q3nx2MxUSdAEg2ZZ83xxywYoFP6ttebpUdiB3Gc php-easycheck
98: QmXfnhNow7J4GLvPh9paLZiQT9fdErxyesGqoL7XQSscF5 php-plumb
99: QmXAJsc3e58iTGRoodaceKfu7bxFZSTC47Bn9c7887kTzQ php-prelude
100: QmV5MbzWZQHjRjHsQ9XDTYP8M6VYcgDtYoewfCkJR9ndQP powerplay
101: QmRdc5CGgaVpjy5NYVANS6BDVrzCCgj2YfGrRfudp6sZrY pubsubclient
102: Qmb681ot89DnJ62H7RWWT3K1dfCPxk7km2ACBezsSU3VBz purely-functional-self-modifying-code
103: QmX4zoJS1qiM2tPXbihUaMRjXX1y4SaW7Y7b7kMf9qnz18 python-app-prefs
104: QmP3dSXgWjpPG8oQUDzGHpZij54o8U3uFhxbgY54qVxHWg python-clutter-experiments
105: QmP9cftyPNDt7CUfCornxjhjRco3XLEcXFckCMA9GwPTRg python-decompiler
106: QmR64iFzkfaL8njQ5xrXVWVe123YgZ8JYUajxkvvUySaeb python-examples
107: QmeeejPEe15x6ZC3H5EgHsnoyqi7imdWYDvdgDtpyM1Ekc python-graphics-tests
108: QmWtMVRp36ro3sCqvdo28y7N77y7VM69N5fnytMNYkaFBZ python-pipes-simulation
109: QmeCt1v2gCX1BpL6XC5Ba6xSSUwaVh3W9BuM6QoY3t34fi python-plumb
110: QmSrQcg22TQEtbzhrLBD68XqXT4g7gK92CUijduV3AfiHz python-random-walks
111: QmaHxE731gq6FBRSaS8G4EBykyHttuQvZ2S7JtmE6Zfnot python-visualiser
112: QmVFUN7iymmYwyXniGtbAjfvKL899e2itvE4uzfnLeNgGC quickspec
113: QmRLeYAas1MyZo7ZekkSsmvgYMKuTWizdP4a83LoJV15dw quickspec-measure
114: QmWEAhKpfRcUvp5attkuL9rNkWLR34vPAsMwuNqtWNURTY recurrent-clustering
115: QmR2n3hboVPc9xyXwuyYdQ56DMj6nYgUJ3n5TWJoeEpkRT reduce-equations
116: QmfHmpZMSNDjMR3mNDdVrS2JMYLxvkPod6PNc6xQKXiT47 run-weka
117: QmZ8Z2Zz53obTJhmN3vuE9itKC68JcZWPhm1jLnDK3m3tZ runtime-arbitrary
118: Qmevuvcx5WTLHXcLsHCPyQBJU5WbnNnUhQiLhbT4jUKaTm runtime-arbitrary-tests
119: QmUCPXLTvkMxyfBCLLLUutaF9YSwVjhSNm8Stp9ZRg1oiL sample-bench
120: QmfD84i6RhwFBRo1iaTs57F283YpmNyGjVkbwGR7vnNFpZ search-optimisation-streams
121: QmaKX5rSANxPMrcjWzYyunRVBJ27ZSRLYUhCjDggc1zTP6 service-packs
122: Qmea8j3P1pNaDy73KtAinCbcX5jmK4FKNRvHLkM8Sb2eTM spoon
123: QmaBjPeZ1Sytq9VMGwQdLF5W82ShWWZ7jcjfWCMj2b9v14 stp-sites
124: QmUWfrFrZCTKPU5ErHQi7MJorPRz494TPcYzJPSaR3QEwD theory-exploration-benchmarks
125: QmSCbE5HJaxWCAD6FoMSqi8rpti4nL4Y6ARd547LqBWm1J tinc
126: QmNXBN6a36qtxRjRT7qNgMEfXoCbGyQNG2MUX6T561YiCx tip-benchmarks
127: QmXFuyhxQDe9zB4sULZvmvejHnCwHcKanQYp4VdtyW3Fpw tree-features
128: QmR36tKJDS6avjozwBALirWf7GwvdQN8bP7ER3iee7aGhR turtleviewer
129: QmcgyG3kMcbq6YsynZuLLVY9s3ZTzZujSt8tNn9eUHHv83 type-parser
130: QmU663KSfLzHMpSC4CkyWXfbcLwAzsDTswPHZP9s4W9cTR warbo-dotfiles
131: QmRRXFBRaPdBSp1ahKKAgSSzBqjN9e9TKpZHqTBx1xKmvB warbo-emacs-d
132: Qme6nrk3sMbfia1dwnqDBZ1aDtjohYxUSXfdDoj3Svh4VX warbo-utilities
133: QmZZumTbK5AXRzi564KfD3axMnrrVbJ4rzEeewnHYyMghC writing
134: QmS8fH5Wm8vdPTriAEVtdRKpsawjcTo94wZjSst2HRWqS6 wtk
135: ```
136:
137: ```{.unwrap pipe="sh | pandoc -f markdown -t json"}
138: while read -r LINE
139: do
140: KEY=$(echo "$LINE" | cut -d' ' -f1)
141: NAME=$(echo "$LINE" | cut -d' ' -f2)
142: echo " - [$NAME](/git/$NAME) is available at [$KEY](http://ipfs.io/ipns/$KEY)"
143: done < keys
144: ```
Generated by git2html.