# $Id: Link.pm 1689 2007-06-28 22:44:24Z guillomovitch $ package Youri::Submit::Action::Link; =head1 NAME Youri::Submit::Action::Link - Noarch packages linking =head1 DESCRIPTION This action plugin ensures linking of noarch packages between arch-specific directories. =cut use warnings; use strict; use Carp; use Cwd; use File::Spec; use base qw/Youri::Submit::Step/; sub _init { my $self = shift; my %options = ( symbolic => 0, # use symbolic linking @_ ); $self->{_symbolic} = $options{symbolic}; } sub process_packages { my ($self, $packages, $repository, $target, $context) = @_; croak "Not a class method" unless ref $self; foreach my $package (@$packages) { # only needed for noarch packages next unless $package->get_arch() eq 'noarch'; my $default_dir = $repository->get_install_dir($package, $target, $define); my $file = $package->get_file_name(); foreach my $arch ($repository->get_extra_arches()) { # compute installation target, forcing arch my $other_dir = $repository->get_install_dir( $package, $target, $context, { arch => $arch } ); if (! $self->{_test} && -d $other_dir) { my $current_dir = cwd(); chdir $other_dir or croak "Can't change directory to $other_dir: $!"; my $default_file = File::Spec->abs2rel($default_dir) . '/' . $file; if ($self->{_symbolic}) { symlink $default_file, $file or croak "Can't symlink $default_file to $file: $!"; } else { link $default_file, $file or croak "Can't link $default_file to $file: $!"; } chdir $current_dir or croak "Can't change directory to $current_dir: $!"; } } } } =head1 COPYRIGHT AND LICENSE Copyright (C) 2002-2006, YOURI project This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;