Date: Wed, 19 Aug 2015 15:56:10 GMT From: roam@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r289925 - soc2015/roam/ports Message-ID: <201508191556.t7JFuAOt076814@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: roam Date: Wed Aug 19 15:56:09 2015 New Revision: 289925 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=289925 Log: Add a script for updating /usr/ports/ with these. ObQuote: "Mama's gonna keep baby cosy and warm" Added: soc2015/roam/ports/update.pl Added: soc2015/roam/ports/update.pl ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2015/roam/ports/update.pl Wed Aug 19 15:56:09 2015 (r289925) @@ -0,0 +1,75 @@ +#!/usr/bin/perl + +use v5.012; +use strict; +use warnings; + +use Cwd 'abs_path'; +use POSIX ':sys_wait_h'; + +sub find_ports($); +sub process_port($ $ $); + +MAIN: +{ + my ($base, $tgt) = ('.', '/usr/ports'); + + my @ports = find_ports $base; + process_port $_, $base, $tgt for @ports; +} + +sub find_ports($) +{ + my ($base) = @_; + my @res; + + opendir my $db, $base or die "opendir($base): $!\n"; + while (my $d = readdir $db) { + next if $d eq '.' || $d eq '..'; + chdir $db or die "chdir($base): $!\n"; + next unless -d $d; + + opendir my $ds, $d or die "opendir($base/$d): $!\n"; + while (my $p = readdir $ds) { + next if $p eq '.' || $p eq '..'; + chdir $ds or die "chdir($base/$d): $!\n"; + next unless -d $p && -f "$p/Makefile" && -f "$p/pkg-plist"; + + push @res, "$d/$p"; + } + closedir $ds or die "closedir($base/$d): $!\n"; + } + closedir $db or die "closedir($base): $!\n"; + + return @res; +} + +sub process_port($ $ $) +{ + my ($port, $base, $tgt) = @_; + + my ($basename, $tgtname) = ("$base/$port", "$tgt/$port"); + my $baseabs = abs_path($basename); + + if (-l $tgtname) { + my $lname = readlink $tgtname or die "readlink($tgtname): $!\n"; + if (abs_path($lname) ne $baseabs) { + die "FIXME: remove $tgtname to be replaced by a symlink to $baseabs"; + } + else { say "RDBG just fine: $tgtname is a symlink to $baseabs"; } + } elsif (-d $tgtname) { + my @cmd = ('rsync', '-av', '--delete', '--', "$baseabs/", "$tgtname/"); + my $res = system { $cmd[0] } @cmd; + if (!WIFEXITED($res) || WEXITSTATUS($res) != 0) { + die "@cmd failed\n"; + } + say "RDBG just fine: rsynced $baseabs to $tgtname successfully"; + } elsif (-e $tgtname) { + unlink $tgtname or die "unlink($tgtname): $!\n"; + } + + if (! -e $tgtname) { + symlink $baseabs, $tgtname or + die "symlink($baseabs, $tgtname): $!\n"; + } +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201508191556.t7JFuAOt076814>