diff options
-rw-r--r-- | lib/PublicInbox/Fetch.pm | 3 | ||||
-rw-r--r-- | lib/PublicInbox/LeiMirror.pm | 61 | ||||
-rw-r--r-- | t/lei-mirror.t | 2 |
3 files changed, 64 insertions, 2 deletions
diff --git a/lib/PublicInbox/Fetch.pm b/lib/PublicInbox/Fetch.pm index 0539fe50..184b4f26 100644 --- a/lib/PublicInbox/Fetch.pm +++ b/lib/PublicInbox/Fetch.pm @@ -91,7 +91,7 @@ sub get_fingerprint2 { Digest::SHA::sha256(do { local $/; <$rd> }); } -sub do_fetch { +sub do_fetch { # main entry point my ($cls, $lei, $cd) = @_; my $ibx_ver; $lei->{curl} //= PublicInbox::LeiCurl->new($lei) or return; @@ -124,6 +124,7 @@ Unable to infer inbox URL from <$git_url> EOM $ibx_uri = URI->new($inbox_url); } + PublicInbox::LeiMirror::write_makefile($dir, $ibx_ver); $lei->qerr("# inbox URL: $ibx_uri/"); my $res = do_manifest($lei, $dir, $ibx_uri) or return; my ($code, $v1_path, $v2_epochs, $muri, $ft, $mf) = @$res; 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; diff --git a/t/lei-mirror.t b/t/lei-mirror.t index 9fdda5aa..3eb7f36a 100644 --- a/t/lei-mirror.t +++ b/t/lei-mirror.t @@ -19,6 +19,7 @@ test_lei({ tmpdir => $tmpdir }, sub { ok(-f "$t1/public-inbox/msgmap.sqlite3", 't1-mirror indexed'); is(PublicInbox::Inbox::try_cat("$t1/description"), "mirror of $http/t1/\n", 'description set'); + ok(-f "$t1/Makefile", 'convenience Makefile added (v1)'); lei_ok('ls-external'); like($lei_out, qr!\Q$t1\E!, 't1 added to ls-externals'); @@ -27,6 +28,7 @@ test_lei({ tmpdir => $tmpdir }, sub { lei_ok('add-external', $t2, '--mirror', "$http/t2/", \'--mirror v2'); ok(-f "$t2/msgmap.sqlite3", 't2-mirror indexed'); ok(-f "$t2/description", 't2 description'); + ok(-f "$t2/Makefile", 'convenience Makefile added (v2)'); is(PublicInbox::Inbox::try_cat("$t2/description"), "mirror of $http/t2/\n", 'description set'); |