mirror of https://github.com/kirsle/.dotfiles
1 changed files with 80 additions and 0 deletions
@ -0,0 +1,80 @@ |
|||
#!/usr/bin/perl |
|||
|
|||
use strict; |
|||
use warnings; |
|||
use Cwd; |
|||
|
|||
# Make symlinks from your git-project repo into the system. This is only |
|||
# designed to work with Media Temple's git-project workflow. |
|||
# |
|||
# Usage: sudo link-stuff.pl /path/to/git/project |
|||
# |
|||
# The git-project root should have top-level folders such as `perl-libs`, with |
|||
# a path convention like e.g. `perl-libs/$NAME/lib/**/*.pm` -- this script will |
|||
# attempt to find system-installed counterparts and symlink them to the file |
|||
# from your git repo. |
|||
# |
|||
# Currently supports the following types of things: |
|||
# * perl-libs |
|||
|
|||
my $root = shift; |
|||
if (!$root) { |
|||
die "Usage: $0 /path/to/git/project\n"; |
|||
} |
|||
if (!-d $root) { |
|||
die "Error: $root is not a directory\n"; |
|||
} |
|||
|
|||
chdir($root); |
|||
my $abspath = Cwd::abs_path("."); |
|||
|
|||
if (-d "./perl-libs") { |
|||
perl_libs(); |
|||
} |
|||
|
|||
sub perl_libs { |
|||
# Root directories to check. |
|||
my @lib = ( |
|||
"/usr/share/perl5", |
|||
"/usr/share/perl5/vendor_perl", |
|||
); |
|||
|
|||
# Find all the perl-libs projects. |
|||
opendir(my $dh, "./perl-libs"); |
|||
foreach my $project (readdir($dh)) { |
|||
next unless -d "./perl-libs/$project/lib"; |
|||
print "Project: perl-libs/$project\n"; |
|||
|
|||
# Get its modules. |
|||
foreach my $module (scan("./perl-libs/$project/lib")) { |
|||
$module =~ s{^\./perl-libs/$project/lib/}{}g; |
|||
foreach my $lib (@lib) { |
|||
if (-f "$lib/$module") { |
|||
print " - Link: $lib/$module\n"; |
|||
unlink("$lib/$module"); |
|||
symlink("$abspath/perl-libs/$project/lib/$module", "$lib/$module"); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
# Recursively scan a directory. |
|||
sub scan { |
|||
my $dir = shift; |
|||
|
|||
my @found; |
|||
|
|||
opendir (my $dh, $dir); |
|||
foreach my $file (readdir($dh)) { |
|||
next if ($file eq '.' || $file eq '..'); |
|||
if (-d "$dir/$file") { |
|||
push @found, scan("$dir/$file"); |
|||
} else { |
|||
push @found, "$dir/$file"; |
|||
} |
|||
} |
|||
closedir($dh); |
|||
|
|||
return @found; |
|||
} |
Loading…
Reference in new issue