diff options
author | Patrick Spek <p.spek@tyil.nl> | 2019-10-02 14:57:54 +0200 |
---|---|---|
committer | Patrick Spek <p.spek@tyil.nl> | 2019-10-02 14:57:54 +0200 |
commit | e9301b2f9bee3d9bb6354fe58578654fd21ff548 (patch) | |
tree | ac633cfec1845052125bbc95061b5536fa4a88ca | |
parent | eac0f1c0d14a9c3ac33cefb8eed82fe6f6ea9849 (diff) |
Redo vimbundle into gittab
-rw-r--r-- | .gitignore | 5 | ||||
-rwxr-xr-x | .local/bin/gittab | 87 | ||||
-rwxr-xr-x | .local/bin/vimbundle | 23 | ||||
-rw-r--r-- | .local/etc/gittab/basedirs | 1 | ||||
-rw-r--r-- | .local/etc/gittab/tabs/awesome | 0 | ||||
-rw-r--r-- | .local/etc/gittab/tabs/vim (renamed from .vim/bundletab) | 0 |
6 files changed, 92 insertions, 24 deletions
@@ -15,4 +15,7 @@ /.local/* !/.local/bin /.local/bin/* -!/.local/bin/vimbundle +!/.local/bin/gittab +!/.local/etc +/.local/etc/* +!/.local/etc/gittab diff --git a/.local/bin/gittab b/.local/bin/gittab new file mode 100755 index 0000000..1877ac2 --- /dev/null +++ b/.local/bin/gittab @@ -0,0 +1,87 @@ +#! /usr/bin/env perl6 + +use v6.d; + +constant TABDIR = $*HOME.add('.local/etc/gittab/tabs'); +constant TABCONF = $*HOME.add('.local/etc/gittab/basedirs'); + +#| Update managed git repositories +multi sub MAIN ( + #| A list of targets to update. + *@targets, +) { + @targets = TABDIR.dir.map(*.basename) unless @targets; + + for @targets -> $target { + my $tab = find-tab($target); + + note "No gittab for target '$target'" unless $tab; + + my $basedir = get-basedir($target); + + mkdir($basedir) unless $basedir.d; + + for $tab.lines.grep(!*.starts-with("#")) { + my ($name, $repo, $branch) = $_.words; + + if (!$basedir.add($name).d) { + chdir $basedir; + run « git clone --single-branch --branch "$branch" --depth 1 "$repo" "$name" »; + } + + chdir $basedir.add($name); + run « git switch "$branch" »; + run « git pull origin "$branch" »; + } + } +} + +#| List managed git repositories +multi sub MAIN ( + Bool:D :$list!, +) { + my @tabs = TABDIR.dir.map(*.basename).sort; + my $longest = @tabs.map(*.chars).sort.tail; + + for @tabs { + "%-{$longest}s %s\n".printf($_, get-basedir($_)); + } +} + +sub find-tab ( + Str:D $name, +) { + my @attempts = + $name, + $name ~ 'tab', + ; + + for @attempts { + my $fh = TABDIR.add($_); + + return $fh if $fh.f; + } + + Nil; +} + +sub get-basedir ( + Str:D $tab, +) { + state %basedirs; + + if (!%basedirs && TABCONF.e) { + TABCONF + .lines + .grep(!*.starts-with('#')) + .map({ + my ($tab, $basedir) = $_.words; + + %basedirs{$tab} = $basedir.IO; + }) + } + + return $*HOME unless %basedirs{$tab}:exists; + + $*HOME.add(%basedirs{$tab}); +} diff --git a/.local/bin/vimbundle b/.local/bin/vimbundle deleted file mode 100755 index 27406fe..0000000 --- a/.local/bin/vimbundle +++ /dev/null @@ -1,23 +0,0 @@ -#! /usr/bin/env perl6 - -#| Update installed bundles for vim. -sub MAIN () -{ - my $bundletab = $*HOME.add(".vim/bundletab"); - my $bundledir = $*HOME.add(".vim/bundle"); - - die "No bundletab!" unless $bundletab.e; - - for $bundletab.lines.grep(!*.starts-with("#")) { - my ($name, $repo, $branch) = $_.words; - - if (!$bundledir.add($name).d) { - chdir $bundledir; - run « git clone --single-branch --branch "$branch" --depth 1 "$repo" "$name" »; - } - - chdir $bundledir.add($name); - run « git switch "$branch" »; - run « git pull origin "$branch" »; - } -} diff --git a/.local/etc/gittab/basedirs b/.local/etc/gittab/basedirs new file mode 100644 index 0000000..bc0ee14 --- /dev/null +++ b/.local/etc/gittab/basedirs @@ -0,0 +1 @@ +vim .vim/bundle diff --git a/.local/etc/gittab/tabs/awesome b/.local/etc/gittab/tabs/awesome new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.local/etc/gittab/tabs/awesome diff --git a/.vim/bundletab b/.local/etc/gittab/tabs/vim index a2b9c21..a2b9c21 100644 --- a/.vim/bundletab +++ b/.local/etc/gittab/tabs/vim |