about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiMirror.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-09-15 21:35:57 +0000
committerEric Wong <e@80x24.org>2021-09-15 23:14:21 +0000
commit5d9dcc31959d520d3e7bed3f68871245bc915ca3 (patch)
tree00c2e401ba1e8b4a793816913dadf513df5d13cd /lib/PublicInbox/LeiMirror.pm
parent8d56d54e94125626a4777e5d45bfdc1342f0ba13 (diff)
downloadpublic-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.pm61
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;