summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@debian.org>2018-12-27 23:43:13 -0500
committerJames McCoy <jamessan@debian.org>2018-12-27 23:43:13 -0500
commit379b17f64bf92a0deb82c58c8f1a881e92ff274b (patch)
treec5f07d410104f04eb9e9e1a61ff47fbab5db141d
parente0ec53ab19cd9ff527fdd63f6a0c1e8f0fb3f82d (diff)
Initial implementation of helper
Signed-off-by: James McCoy <jamessan@debian.org>
-rwxr-xr-xdh_vim-addon51
1 files changed, 50 insertions, 1 deletions
diff --git a/dh_vim-addon b/dh_vim-addon
index 545f8e1..741cc48 100755
--- a/dh_vim-addon
+++ b/dh_vim-addon
@@ -12,6 +12,7 @@ dh_vim-addon - debhelper addon to help package Vim/Neovim addons
use strict;
use warnings;
use Debian::Debhelper::Dh_Lib;
+use File::Spec;
our $VERSION = '0.1';
@@ -61,7 +62,7 @@ used in the names of the files to install.
=item debian/I<package>.neovim-opt-addon
-This file follows the same format as F<vim-addon>, however they files will be
+This file follows the same format as F<vim-addon>, however the files will be
installed as an optional addon in I<package>.
=back
@@ -71,3 +72,51 @@ installed as an optional addon in I<package>.
init();
# PROMISE: DH NOOP WITHOUT vim-addon vim-opt-addon neovim-addon neovim-opt-addon
+
+my %pkgfiledir = (
+ 'vim-addon' => '/usr/share/vim/vimfiles/pack/dist-bundle/start',
+ 'vim-opt-addon' => '/usr/share/vim/vimfiles/pack/dist-bundle/opt',
+ 'neovim-addon' => '/usr/share/nvim/site/pack/dist-bundle/start',
+ 'neovim-opt-addon' => '/usr/share/nvim/site/pack/dist-bundle/opt',
+);
+
+my $addon_root = qr@/(?:(?:autoload|colors|compiler|doc|ftplugin|indent|plugin|spell|syntax)/|(?:ftdetect|scripts)\.vim)@;
+my @packages = getpackages();
+on_items_in_parallel(\@packages, sub {
+ foreach my $package (@_) {
+ my $tmp = tmpdir($package);
+
+ foreach my $pkgfilebase (keys %pkgfiledir) {
+ my $pkgfile = pkgfile($package, $pkgfilebase);
+ my $skip_process = process_pkg($package) ? 0 : 1;
+ my @files;
+ @files = filearray($pkgfile, $tmp, \&glob_expand_error_handler_reject) if $pkgfile;
+
+ log_installed_files($package, @files);
+
+ next if $skip_process or !@files;
+
+ my %tagdirs;
+ my $dest = $pkgfiledir{$pkgfilebase};
+ my $base = (grep { /.*?$addon_root/ } @files)[0];
+ error("Cannot find base of addon directory. No plugin/, colors/, doc/, syntax/, ftplugin/, autoload/, ftdetect.vim, or scripts.vim present.\n") unless $base;
+
+ $base =~ s@$addon_root.*@@;
+ foreach my $file (@files) {
+ next if excludefile($file);
+
+ (my $relpath = $file) =~ s@$base/@@;
+ my $destpath = File::Spec->join($dest, $package, $relpath);
+ make_symlink($destpath, $file, $tmp);
+
+ if ($destpath =~ m@(.*/doc)/.*\.(?:txt|..x)(?:\.gz)?$@) {
+ $tagdirs{$1} = 1;
+ }
+ }
+
+ if (scalar(%tagdirs)) {
+ doit('helpztags', sort keys %tagdirs);
+ }
+ }
+ }
+});