diff options
author | Eric Wong <e@80x24.org> | 2021-09-15 21:35:57 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-09-15 23:14:21 +0000 |
commit | 5d9dcc31959d520d3e7bed3f68871245bc915ca3 (patch) | |
tree | 00c2e401ba1e8b4a793816913dadf513df5d13cd /lib/PublicInbox/LeiMirror.pm | |
parent | 8d56d54e94125626a4777e5d45bfdc1342f0ba13 (diff) | |
download | public-inbox-5d9dcc31959d520d3e7bed3f68871245bc915ca3.tar.gz |
Since the beginning of time, I've been dropping Makefiles in $INBOX_DIR (and above hiearchies) to organize groups of commands. make(1) is widely available in various flavors and a familiar tool for our target audience. It is easy to run in the right directory, typically has built-in shell completion, and doesn't silently ignore errors by default like Bourne shell.
Diffstat (limited to 'lib/PublicInbox/LeiMirror.pm')
-rw-r--r-- | lib/PublicInbox/LeiMirror.pm | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm index c113c9de..23a2156c 100644 --- a/lib/PublicInbox/LeiMirror.pm +++ b/lib/PublicInbox/LeiMirror.pm @@ -9,7 +9,7 @@ use parent qw(PublicInbox::IPC); use IO::Uncompress::Gunzip qw(gunzip $GunzipError); use PublicInbox::Spawn qw(popen_rd spawn run_die); use File::Temp (); -use Fcntl qw(SEEK_SET); +use Fcntl qw(SEEK_SET O_CREAT O_EXCL O_WRONLY); sub do_finish_mirror { # dwaitpid callback my ($arg, $pid) = @_; @@ -201,6 +201,7 @@ sub clone_v1 { my $cerr = run_reap($lei, $cmd, $opt); return $lei->child_error($cerr, "@$cmd failed") if $cerr; _try_config($self); + write_makefile($self->{dst}, 1); index_cloned_inbox($self, 1); } @@ -234,6 +235,7 @@ failed to extract epoch number from $src my $mg = PublicInbox::MultiGit->new($dst, 'all.git', 'git'); $mg->fill_alternates; for my $i ($mg->git_epochs) { $mg->epoch_cfg_set($i) } + write_makefile($self->{dst}, 2); undef $on_destroy; # unlock index_cloned_inbox($self, 2); } @@ -356,4 +358,61 @@ sub ipc_atfork_child { $self->SUPER::ipc_atfork_child; } +sub write_makefile { + my ($dir, $ibx_ver) = @_; + my $f = "$dir/Makefile"; + if (sysopen my $fh, $f, O_CREAT|O_EXCL|O_WRONLY) { + print $fh <<EOM or die "print($f) $!"; +# This is a v$ibx_ver public-inbox, see the public-inbox-v$ibx_ver-format(5) +# manpage for more information on the format. This Makefile is +# intended as a familiar wrapper for users unfamiliar with +# public-inbox-* commands. +# +# See the respective manpages for public-inbox-fetch(1), +# public-inbox-index(1), etc for more information on +# some of the commands used by this Makefile. +# +# This Makefile will not be modified nor read by public-inbox, +# so you may edit it freely with your own convenience targets +# and notes. public-inbox-fetch will recreate it if removed. +EOM + print $fh <<'EOM' or die "print($f): $!"; +# the default target: +help : + @echo Common targets: + @echo ' make fetch - fetch from remote git repostorie(s)' + @echo ' make update - fetch and update index ' + @echo + @echo Rarely needed targets: + @echo ' make reindex - may be needed for new features/bugfixes' + @echo ' make compact - rewrite Xapian storage to save space' + +fetch : + public-inbox-fetch +update : + @if ! public-inbox-fetch --exit-code; \ + then \ + c=$$?; \ + test $$c -eq 127 && exit 0; \ + exit $$c; \ + elif test -f msgmap.sqlite3 || test -f public-inbox/msgmap.sqlite3; \ + then \ + public-inbox-index; \ + else \ + echo 'public-inbox index not initialized'; \ + echo 'see public-inbox-index(1) man page'; \ + fi +reindex : + public-inbox-index --reindex +compact : + public-inbox-compact + +.PHONY : help fetch update reindex compact +EOM + close $fh or die "close($f): $!"; + } else { + die "open($f): $!" unless $!{EEXIST}; + } +} + 1; |