socsvn commit: r289925 - soc2015/roam/ports
roam at FreeBSD.org
roam at FreeBSD.org
Wed Aug 19 15:56:10 UTC 2015
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";
+ }
+}
More information about the svn-soc-all
mailing list