KatolaZ
5dcc2807cd
|
6 years ago | |
---|---|---|
LICENSE | 6 years ago | |
README.md | 6 years ago | |
config_example.txt | 6 years ago | |
phrollo | 6 years ago |
README.md
phrollo: a phlogroll in a shellscript
=============================================
phrollo
is a simple tool to manage a phlog roll. It uses a simple
configuration file and outputs the relevant selectors to be added to a
gophermap. The list of selectors of updated phlogs is sorted in
decreasing order of update time (meaning that more recent updates appear
at the top of the list). phrollo
also prints on stderr an updaterd
config file, to be used for future calls.
phrollo
detects updates by using shasum -a 256
, i.e. by computing
a hash of the resource and comparing it with the hash obtained when the
resource was last seen.
Usage
Either :
./phrollo status.txt
or:
cat status.txt | ./phrollo
will print the sorted list of gopher selectors on stdout, and the updated config file on stderr.
IMPORTANT: The next time phrollo
is run, it must be given the last
config file generated, so be sure to redirect stderr appropriately. A
fully working example is given below.
Configuration file
The format of the phrollo
config file is as follows:
DATE \t DESCRIPTION \t URI \t HOST \t PORT \t SHASUM
where:
- DATE: is the last time the phlog was updated, or an empty string for a new phlog;
- DESCRIPTION: is the description of the phlog (e.g., the name of the author)
- URI: is the path of the phlog
- HOST: well, the host
- PORT: normally 70
- SHASUM: the shasum of the phlog at the time of the latest change, or an empty string for a new phlog
Example
Let us construct an initial phrollo
config file containing all the
phlogs we would like to follow. Since phrollo
has never seen any of
those phlogs, both DATE and SHASUM will be ignored. We will indicated
them with a "-" dash. Notice that fields are separated by actual TABs:
- Slugmax /~slugmax/cgi-bin/slerm zaibatsu.circumlunar.space 70 -
- RPDO /Phlog 1436.ninja 70 -
- Alex Shroeder / alexschroeder.ch 70 -
- Solderpunk /~solderpunk/phlog zaibatsu.circumlunar.space 70 -
- Tomasino /phlog gopher.black 70 -
- KatolaZ /~katolaz/phlog republic.circumlunar.space 70 -
Now we can feed this file to phrollo
:
cat config.txt | ./phrollo 2> config_updated.txt > gophermap
and we will get the following output in gophermap
:
1(20190126) Alex Shroeder / alexschroeder.ch 70
1(20190126) KatolaZ /~katolaz/phlog republic.circumlunar.space 70
1(20190126) RPDO /Phlog 1436.ninja 70
1(20190126) Slugmax /~slugmax/cgi-bin/slerm zaibatsu.circumlunar.space 70
1(20190126) Solderpunk /~solderpunk/phlog zaibatsu.circumlunar.space 70
1(20190126) Tomasino /phlog gopher.black 70
which is a list of selectors corresponding to the phlogs specified in the config file, and the updated config file in config_updated.txt:
20190126 Tomasino /phlog gopher.black 70 bd141abfc29522e3e2b5d00f1a656212201ae5def60de90a7ce847cddeb6d0db
20190126 Solderpunk /~solderpunk/phlog zaibatsu.circumlunar.space 70 4df8feff5237db12a4fb1c43d95f254dc26b0e35e3b008d53cc5004ad2c6acb9
20190126 Slugmax /~slugmax/cgi-bin/slerm zaibatsu.circumlunar.space 70 bfd0e14e2c5b08fff6b968804dd253e488c5e0bfd9d80cec4ca7599928fac53f
20190126 RPDO /Phlog 1436.ninja 70 d61e34dfc71a10f5b45c6ccf7f6d96e4f976832efdd179e71a0981695b317dc9
20190126 KatolaZ /~katolaz/phlog republic.circumlunar.space 70 af9b99199b344b027addeb09ba71621123bf799605b6190a65be145221bcefde
20190126 Alex Shroeder / alexschroeder.ch 70 36d66161d096c5c729a6433c411fad9da978931cdfab40e9bd57787aa0e0b1f6
Then, we can run phrollo
again using the latest updated config file
to detect updates and generate the new gophermap. It is possible to
automate the update procedure by something like:
#!/bin/sh
cp config.txt config.txt."$(date +%Y%m%d)"
cat config.txt | ./phrollo 2> config.txt.new > gophermap.new
[ $? -eq 0 ] && {
mv config.txt.new config.txt
mv gophermap.new gophermap
}