From 1be510f9529cb082f802408b472a77d074b394c0 Mon Sep 17 00:00:00 2001 From: Nicolas Vigier Date: Sun, 14 Apr 2013 13:46:12 +0000 Subject: Add zarb MLs html archives --- zarb-ml/mageia-sysadm/2011-January/001565.html | 1188 ++++++++++++++++++++++++ 1 file changed, 1188 insertions(+) create mode 100644 zarb-ml/mageia-sysadm/2011-January/001565.html (limited to 'zarb-ml/mageia-sysadm/2011-January/001565.html') diff --git a/zarb-ml/mageia-sysadm/2011-January/001565.html b/zarb-ml/mageia-sysadm/2011-January/001565.html new file mode 100644 index 000000000..a6e0b5065 --- /dev/null +++ b/zarb-ml/mageia-sysadm/2011-January/001565.html @@ -0,0 +1,1188 @@ + + + + [Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm + + + + + + + + + +

[Mageia-sysadm] [218] rename Mandriva_upload.pm to Mageia_upload.pm

+ root at mageia.org + root at mageia.org +
+ Thu Jan 6 03:12:24 CET 2011 +

+
+ +
Revision: 218
+Author:   boklm
+Date:     2011-01-06 03:12:24 +0100 (Thu, 06 Jan 2011)
+Log Message:
+-----------
+rename Mandriva_upload.pm to Mageia_upload.pm
+
+Added Paths:
+-----------
+    build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm
+
+Removed Paths:
+-------------
+    build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm
+
+Copied: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm (from rev 210, build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm)
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm	                        (rev 0)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm	2011-01-06 02:12:24 UTC (rev 218)
+@@ -0,0 +1,546 @@
++# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume  $
++package Youri::Repository::Mandriva_upload;
++
++=head1 NAME
++
++Youri::Repository::PLF - PLF repository implementation
++
++=head1 DESCRIPTION
++
++This module implements PLF repository.
++
++=cut
++
++use warnings;
++use strict;
++use Carp;
++use Memoize;
++use File::Find 'find';
++use base qw/Youri::Repository/;
++use MDV::Distribconf::Build;
++use SVN::Client;
++
++use constant {
++    PACKAGE_CLASS   => 'Youri::Package::URPM',
++    PACKAGE_CHARSET => 'utf8'
++};
++
++memoize('_get_media_config');
++
++my %translate_arch = (
++    i386 => 'i586',
++    sparc64 => 'sparcv9',
++);
++
++sub _init {
++    my $self   = shift;
++    my %options = (
++        noarch => 'i586', # noarch packages policy
++	src => 'i586',
++	install_root => '',
++        test          => 0,  # test mode
++        verbose       => 0,  # verbose mode
++	queue	      => '',
++	rejected      => '',
++        @_
++    );
++    foreach my $var ('upload_state') {
++	$self->{"_$var"} = [];
++	foreach my $value (split ' ', $options{$var}) {
++	    push @{$self->{"_$var"}}, $value
++	}
++    }
++    print "Initializing repository\n";
++    foreach my $v ('rejected', 'svn', 'queue', 'noarch', 'install_root', 'upload_root', 'verbose') {
++        $self->{"_$v"}  = $options{$v}
++    }
++    foreach my $target (@{$options{targets}}) {
++	$self->{$target} = [];
++	print "Adding $target ($options{$target}{arch})\n" if $self->{_verbose};
++	foreach my $value (split ' ', $options{$target}{arch}) {
++	    push @{$self->{_arch}{$target}}, $value;
++	    push @{$self->{_extra_arches}}, $value
++	}
++    }
++    $self
++}
++
++sub get_group_id {
++    my ($user) = @_;
++    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
++    $year+=1900;
++    $mon++;
++    my $hostname = `hostname`;
++    my ($host) = $hostname =~ /([^.]*)/;
++    sprintf "$year%02d%02d%02d%02d%02d.$user.$host.${$}_", $mon, $mday, $hour, $min, $sec;
++}
++
++sub get_target_arch {
++    my ($self, $target) = $_;
++    return $self->{_arch}{$target}
++}
++
++sub set_arch_changed {
++    my ($self, $target, $arch) = @_;
++    if ($arch eq 'noarch') {
++	    $self->{_arch_changed}{$_} = 1 foreach @{$self->{_arch}{$target}}
++    } elsif ($arch eq 'src') {
++	    $self->{_arch_changed} = $self->{_src}
++    } else {
++	$self->{_arch_changed}{$arch} = 1
++    }
++}
++
++sub get_arch_changed {
++    my ($self, $target) = @_;
++    return [ keys %{$self->{_arch_changed}} ]
++}
++
++sub set_install_dir_changed {
++    my ($self, $install_dir) = @_;
++    $self->{_install_dir_changed}{$install_dir} = 1;
++}
++
++sub get_install_dir_changed {
++    my ($self) = @_;
++    return [ keys %{$self->{_install_dir_changed}} ];
++}
++
++sub _get_media_config {
++    my ($self, $target) = @_;
++    my %media;
++    my $real_target = $target;
++    $real_target =~ s/_force//;
++    foreach my $arch (@{$self->{_arch}{$target}}) {
++	my $root = "$self->{_install_root}/$real_target/$arch";
++	my $distrib = MDV::Distribconf::Build->new($root);
++	print "Getting media config from $root\n" if $self->{_verbose};
++	$self->{distrib}{$arch} = $distrib;
++	$distrib->loadtree or die "$root does not seem to be a distribution tree\n";
++	$distrib->parse_mediacfg;
++	foreach my $media ($distrib->listmedia) {
++	    my $rpms = $distrib->getvalue($media, 'rpms');
++	    my $debug_for = $distrib->getvalue($media, 'debug_for');
++	    my $srpms = $distrib->getvalue($media, 'srpms');
++	    my $path = $distrib->getfullpath($media, 'path');
++	    if (!$rpms) {
++		if (-d $path) {
++		    print "MEDIA defining $media in $path\n" if $self->{_verbose} > 1;
++		    $media{$arch}{$media} = $path
++		} else {
++		    print "ERROR $path does not exist for media $media on $arch\n"
++		}
++	    } else {
++		my ($media) = split ' ', $rpms;
++		if (-d $path) {
++		    print "MEDIA defining SOURCE media for $media in $path\n" if $self->{_verbose} > 1;
++		    $media{src}{$media} = $path
++		} else {
++		    print "ERROR $path does not exist for source media $media on $arch\n"
++		}
++	    }
++	}
++    }
++    \%media
++}
++
++sub get_package_class {
++    return PACKAGE_CLASS;
++}
++
++sub get_package_charset {
++    return PACKAGE_CHARSET;
++}
++
++sub get_upload_dir {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++    croak "Not a class method" unless ref $self;
++    my $arch = $package->get_arch();
++    return
++        $self->{_upload_root} .
++        "/$self->{_queue}/$target/" .
++        _get_section($self, $package, $target, $user_context, $app_context) .
++	'/' . 
++	($user_context->{prefix} ? '' : get_group_id($user_context->{user}))
++}
++
++sub get_install_path {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++
++    return $self->_get_path($package, $target, $user_context, $app_context);
++}
++
++
++sub get_distribution_paths {
++    my ($self, $package, $target) = @_;
++
++    return $self->_get_distribution_paths($package, $target);
++}
++
++sub get_archive_path {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++
++    return $self->_get_path($package, $target, $user_context, $app_context);
++}
++
++sub get_reject_path {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++
++    return $self->{_rejected};
++}
++
++
++sub _get_path {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++
++    my $section = $self->_get_section($package, $target, $user_context, $app_context);
++    my $arch = $app_context->{arch} || $package->get_arch();
++    $arch = $translate_arch{$arch} || $arch;
++    if ($arch eq 'noarch') {
++	$arch = $self->{_noarch} 
++    } elsif ($arch eq 'src') {
++	return "$target/SRPMS/$section"
++    }
++    "$target/$arch/media/$section"
++}
++
++sub _get_distribution_paths {
++    my ($self, $package, $target) = @_;
++
++    my $arch = $package->get_arch();
++    $arch = $translate_arch{$arch} || $arch;
++    if ($arch eq 'noarch') {
++	map { "$target/$_" } $self->get_extra_arches;
++    } elsif ($arch eq 'src') {
++	die "no way to get distribution path using a $arch package";
++    } else {
++	"$target/$arch";
++    }
++}
++
++sub get_arch {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++    my $arch = $package->get_arch();
++    $arch = $translate_arch{$arch} || $arch;
++    if ($arch eq 'noarch') {
++	$arch = $self->{_noarch} 
++    }
++    $arch
++}
++
++sub get_version_path {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++
++    my $section = $self->_get_section($package, $target, $user_context, $app_context);
++
++    return "$self->{_module}/$section";
++}
++
++=head2 get_replaced_packages($package, $target, $user_context, $app_context)
++
++Overrides parent method to add libified packages.
++
++=cut
++
++sub get_replaced_packages {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++    croak "Not a class method" unless ref $self;
++
++    my @replaced_packages = 
++        $self->SUPER::get_replaced_packages($package, $target, $user_context, $app_context);
++
++    # mandriva lib policy:
++    # library package names change with revision, making mandatory to
++    # duplicate older revisions search with a custom pattern
++    my $name = $package->get_name();
++    if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
++        push(@replaced_packages,
++            grep { $package->compare($_) > 0 }
++            map { PACKAGE_CLASS->new(file => $_) }
++            $self->get_files(
++                $self->{_install_root},
++                $self->get_install_path($package, $target, $user_context, $app_context),
++                PACKAGE_CLASS->get_pattern(
++                    $1 . '[\d_\.]+' . $2, # custom name pattern
++                    undef,
++                    undef,
++                    $package->get_arch()
++                ),
++            )
++        );
++    }
++
++    # kernel packages have the version in the name
++    # binary dkms built for old kernels have to be removed too
++    if ($name =~ /^kernel-([^\d]*-)?([\d.]*)-(.*)$/) { # "desktop", "2.6.28", "2mnb"
++        push(@replaced_packages,
++            map { PACKAGE_CLASS->new(file => $_) }
++            $self->get_files(
++                $self->{_install_root},
++                $self->get_install_path($package, $target, $user_context, $app_context),
++                PACKAGE_CLASS->get_pattern(
++                    '(kernel-' . $1 . '\d.*|.*-kernel-[\d.]*-' . $1 . '\d.*)',
++                    undef,
++                    undef,
++                    $package->get_arch()
++                ),
++            )
++        );
++    }
++
++    return @replaced_packages;
++       
++}
++
++sub _get_main_section {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++
++    my $section = $self->_get_section($package, $target, $user_context, $app_context);
++    my ($main_section) = $section =~ m,^([^/]+),;
++    $main_section
++}
++
++sub _get_section {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++
++    my $name = $package->get_name();
++    my $cname = $package->get_canonical_name();
++    my $version = $package->get_version();
++    my $release = $package->get_release();
++    my $section = $user_context->{section};
++    my $media = $self->_get_media_config($target);
++    my $arch = $package->get_arch();
++    my $file = $package->as_file();
++    $file =~ s,/+,/,g; # unneeded?
++    # FIXME: use $self->get_arch()
++    $arch = $self->{_noarch} if $arch eq 'noarch';
++    $arch = $translate_arch{$arch} || $arch;
++
++    if (!$section) {
++        $section = $self->{packages}{$file}{section};
++        print "Section undefined, repository says it is '$section' for '$file'\n" if $self->{_verbose};
++    }
++    if ($section && $section !~ /debug_/ && $package->is_debug()) {
++	$section = "debug_$section"
++    }
++
++    # if have section already, check if it exists, and may return immediately
++    if ($section) {
++	print "Using requested section $section\n";
++	if ($media->{$arch}{$section}) { 
++	    return $section
++	} else {
++	    die "FATAL youri: unknown section $section for target $target for arch $arch\n"
++	}
++    }
++    # else, try to find section automatically
++
++    # pattern for search of src package with specific version-release,
++    # should be searched first, because we prefer to find the precise
++    # section a package is already in
++    my $specific_source_pattern = PACKAGE_CLASS->get_pattern(
++        $cname,
++        $version,
++        $release,
++        'src'
++    );
++
++    my $source_pattern = PACKAGE_CLASS->get_pattern(
++        $cname,
++        undef,
++        undef,
++        'src'
++    );
++
++    # if a media has no source media configured, or if it is a debug
++    # package, we search in binary media
++
++    # pattern for search when a binary media has no src media configured
++    my $specific_binary_pattern = PACKAGE_CLASS->get_pattern(
++          $name,
++          $version,
++          $release,
++          $arch
++    );
++
++    # last resort pattern: previous existing binary packages
++    my $binary_pattern = PACKAGE_CLASS->get_pattern(
++          $name,
++          undef,
++          undef,
++          $arch
++    );
++
++    # first try to find section for the specific version, as it is possibly already there;
++    # this is the case for when called in Youri::Submit::Action::Archive, to find the
++    # section the package got installed
++    print "Looking for package $name with version $version-$release\n";
++    foreach my $m (keys %{$media->{$arch}}) {
++        print " .. section '$m' path '".$media->{$arch}{$m}."'\n" if $self->{_verbose};
++        # - prefer source for non-debug packages, use binary if there is no source media configured
++        # - debug packages must be searched in binary medias, due to their
++        #   src section != binary section; NOTE: should/need we search in
++        #   src medias and add the 'debug_' prefix?
++        if (!$package->is_debug() && $media->{src}{$m}) {
++            next unless $self->get_files('', $media->{src}{$m}, $specific_source_pattern);
++        } else {
++            next unless $self->get_files('', $media->{$arch}{$m}, $specific_binary_pattern);
++        }
++        $section = $m;
++        last;
++    }
++
++    # if still not found, try finding any version of the package in a
++    # /release subsection (safe default: /release is default for cooker,
++    # should be locked for released distros, and we don't risk wrongly
++    # choosing /backports, /testing, or /updates);
++    # this is the case for when called at submit, to find the section where
++    # the package already resides
++    if (!$section) {
++        # debug packages should be found by previous specific version search
++        # NOTE: as above, should/need we search here and add the 'debug_' prefix?
++        # ... probably... as at least mdv-youri-submit-force will process debug packages
++        if ($package->is_debug() && $self->{_verbose}) {
++            print "Warning: debug package $name with version $version-$release not found.\n";
++        }
++
++        print "Warning: Looking for any section with a package $name of any version\n";
++        foreach my $m (keys %{$media->{$arch}}) {
++            print " .. section '$m' path '".$media->{$arch}{$m}."'\n" if $self->{_verbose};
++            # NOTE: !$package->is_debug() test is here to prevent when above FATAL error is removed
++            next if $m !~ /release/ || ($m =~ /debug/ && !$package->is_debug());
++            # - prefer source
++            if ($media->{src}{$m}) {
++                next unless $self->get_files('', $media->{src}{$m}, $source_pattern);
++            } else {
++                next unless $self->get_files('', $media->{$arch}{$m}, $binary_pattern);
++            }
++            $section = $m;
++            last;
++        }
++    }
++
++    # FIXME: doing this here is wrong; this way the caller can never know if
++    # a section was actually found or not; should return undef and let the
++    # caller set a default (Note: IIRC PLF|Zarb has this right, see there) -spuk
++    print STDERR "Warning: Can't guess destination: section missing, defaulting to contrib/release\n" unless $section;
++    $section ||= 'contrib/release';
++
++    # next time we don't need to search everything again
++    $self->{packages}{$file}{section} = $section;
++
++    print "Section is '$section'.\n";
++
++    return $section;
++}
++
++sub get_upload_newer_revisions {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++    croak "Not a class method" unless ref $self;
++    my $arch = $package->get_arch();
++    my $name = $package->get_full_name;
++    $name =~ s/^\@\d+://;
++    my $pattern = $self->get_package_class()->get_pattern($package->get_name(), undef, undef, $arch);
++    my $media = $self->_get_media_config($target);
++    my @packages;
++    foreach my $state (@{$self->{_upload_state}}) {
++	foreach my $m (keys %{$media->{$arch}}) {
++	    my $path = "$self->{_upload_root}/$state/$target/$m";
++	    print "Looking for package $package revisions for $target in $path (pattern $pattern)\n" if $self->{_verbose};
++	    find(
++		sub { 
++		    s/\d{14}\.[^.]*\.[^.]*\.\d+_//; 
++		    s/^\@\d+://;
++		    return if ! /^$pattern/; 
++		    return if /\.info$/; 
++		    print "Find $_\n"; 
++		    push @packages, $File::Find::name if $package->check_ranges_compatibility("== $name", "< $_")
++		}, $path);
++	}
++    }
++    return
++        @packages;
++}
++
++sub package_in_svn {
++    my ($self, $srpm_name) = @_;
++    my $ctx = new SVN::Client(
++	auth => [SVN::Client::get_simple_provider(),
++	SVN::Client::get_simple_prompt_provider(\&simple_prompt,2),
++	SVN::Client::get_username_provider()]
++    );
++
++    my $svn_entry = $ctx->ls("$self->{_svn}/$srpm_name", 'HEAD', 0);
++    if ($svn_entry) {
++	print "Package $srpm_name is in the SVN\n";
++	return 1
++    }
++}
++
++sub get_svn_url {
++    my ($self) = @_;
++    $self->{_svn}
++}
++
++sub get_revisions {
++    my ($self, $package, $target, $user_context, $app_context, $filter) = @_;
++    croak "Not a class method" unless ref $self;
++    print "Looking for package $package revisions for $target\n" if $self->{_verbose} > 0;
++
++    my $arch = $app_context->{arch} || $user_context->{arch} || $package->get_arch();
++    my $media_arch = $arch eq 'noarch' ? $self->{_noarch} : $arch;
++    my $path = $arch eq 'src' ? "$target/SRPMS/" : "$target/$media_arch/media";
++    my $media = $self->_get_section($package, $target, $user_context, $app_context);
++    my $name = $package->get_name();
++    my @packages = map { $self->get_package_class()->new(file => $_) }
++	$self->get_files(
++	    $self->{_install_root},
++	    "$path/$media",
++	    $self->get_package_class()->get_pattern(
++		    $name,
++		undef,
++		undef,
++		$package->get_arch(),
++	    )
++	);
++
++    @packages = grep { $filter->($_) } @packages if $filter;
++
++    return
++        sort { $b->compare($a) } # sort by revision order
++        @packages;
++}
++
++sub reject {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++    croak "Not a class method" unless ref $self;
++
++
++}
++
++sub get_archive_dir {
++    my ($self, $package, $target, $user_context, $app_context) = @_;
++    croak "Not a class method" unless ref $self;
++
++    return
++        $self->{_archive_root}
++}
++
++
++# 20060801 warly
++#
++# Upload steps
++# SRPMS are uploaded in /home/mandrake/uploads/todo/$target/$media/group_id
++#
++# 
++#
++
++=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;
+
+Deleted: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm
+===================================================================
+--- build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm	2011-01-06 02:11:28 UTC (rev 217)
++++ build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm	2011-01-06 02:12:24 UTC (rev 218)
+@@ -1,546 +0,0 @@
+-# $Id: /local/youri/soft/trunk/lib/Youri/Upload/Action/RSS.pm 857 2006-01-29T10:15:43.298856Z guillaume  $
+-package Youri::Repository::Mandriva_upload;
+-
+-=head1 NAME
+-
+-Youri::Repository::PLF - PLF repository implementation
+-
+-=head1 DESCRIPTION
+-
+-This module implements PLF repository.
+-
+-=cut
+-
+-use warnings;
+-use strict;
+-use Carp;
+-use Memoize;
+-use File::Find 'find';
+-use base qw/Youri::Repository/;
+-use MDV::Distribconf::Build;
+-use SVN::Client;
+-
+-use constant {
+-    PACKAGE_CLASS   => 'Youri::Package::URPM',
+-    PACKAGE_CHARSET => 'utf8'
+-};
+-
+-memoize('_get_media_config');
+-
+-my %translate_arch = (
+-    i386 => 'i586',
+-    sparc64 => 'sparcv9',
+-);
+-
+-sub _init {
+-    my $self   = shift;
+-    my %options = (
+-        noarch => 'i586', # noarch packages policy
+-	src => 'i586',
+-	install_root => '',
+-        test          => 0,  # test mode
+-        verbose       => 0,  # verbose mode
+-	queue	      => '',
+-	rejected      => '',
+-        @_
+-    );
+-    foreach my $var ('upload_state') {
+-	$self->{"_$var"} = [];
+-	foreach my $value (split ' ', $options{$var}) {
+-	    push @{$self->{"_$var"}}, $value
+-	}
+-    }
+-    print "Initializing repository\n";
+-    foreach my $v ('rejected', 'svn', 'queue', 'noarch', 'install_root', 'upload_root', 'verbose') {
+-        $self->{"_$v"}  = $options{$v}
+-    }
+-    foreach my $target (@{$options{targets}}) {
+-	$self->{$target} = [];
+-	print "Adding $target ($options{$target}{arch})\n" if $self->{_verbose};
+-	foreach my $value (split ' ', $options{$target}{arch}) {
+-	    push @{$self->{_arch}{$target}}, $value;
+-	    push @{$self->{_extra_arches}}, $value
+-	}
+-    }
+-    $self
+-}
+-
+-sub get_group_id {
+-    my ($user) = @_;
+-    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
+-    $year+=1900;
+-    $mon++;
+-    my $hostname = `hostname`;
+-    my ($host) = $hostname =~ /([^.]*)/;
+-    sprintf "$year%02d%02d%02d%02d%02d.$user.$host.${$}_", $mon, $mday, $hour, $min, $sec;
+-}
+-
+-sub get_target_arch {
+-    my ($self, $target) = $_;
+-    return $self->{_arch}{$target}
+-}
+-
+-sub set_arch_changed {
+-    my ($self, $target, $arch) = @_;
+-    if ($arch eq 'noarch') {
+-	    $self->{_arch_changed}{$_} = 1 foreach @{$self->{_arch}{$target}}
+-    } elsif ($arch eq 'src') {
+-	    $self->{_arch_changed} = $self->{_src}
+-    } else {
+-	$self->{_arch_changed}{$arch} = 1
+-    }
+-}
+-
+-sub get_arch_changed {
+-    my ($self, $target) = @_;
+-    return [ keys %{$self->{_arch_changed}} ]
+-}
+-
+-sub set_install_dir_changed {
+-    my ($self, $install_dir) = @_;
+-    $self->{_install_dir_changed}{$install_dir} = 1;
+-}
+-
+-sub get_install_dir_changed {
+-    my ($self) = @_;
+-    return [ keys %{$self->{_install_dir_changed}} ];
+-}
+-
+-sub _get_media_config {
+-    my ($self, $target) = @_;
+-    my %media;
+-    my $real_target = $target;
+-    $real_target =~ s/_force//;
+-    foreach my $arch (@{$self->{_arch}{$target}}) {
+-	my $root = "$self->{_install_root}/$real_target/$arch";
+-	my $distrib = MDV::Distribconf::Build->new($root);
+-	print "Getting media config from $root\n" if $self->{_verbose};
+-	$self->{distrib}{$arch} = $distrib;
+-	$distrib->loadtree or die "$root does not seem to be a distribution tree\n";
+-	$distrib->parse_mediacfg;
+-	foreach my $media ($distrib->listmedia) {
+-	    my $rpms = $distrib->getvalue($media, 'rpms');
+-	    my $debug_for = $distrib->getvalue($media, 'debug_for');
+-	    my $srpms = $distrib->getvalue($media, 'srpms');
+-	    my $path = $distrib->getfullpath($media, 'path');
+-	    if (!$rpms) {
+-		if (-d $path) {
+-		    print "MEDIA defining $media in $path\n" if $self->{_verbose} > 1;
+-		    $media{$arch}{$media} = $path
+-		} else {
+-		    print "ERROR $path does not exist for media $media on $arch\n"
+-		}
+-	    } else {
+-		my ($media) = split ' ', $rpms;
+-		if (-d $path) {
+-		    print "MEDIA defining SOURCE media for $media in $path\n" if $self->{_verbose} > 1;
+-		    $media{src}{$media} = $path
+-		} else {
+-		    print "ERROR $path does not exist for source media $media on $arch\n"
+-		}
+-	    }
+-	}
+-    }
+-    \%media
+-}
+-
+-sub get_package_class {
+-    return PACKAGE_CLASS;
+-}
+-
+-sub get_package_charset {
+-    return PACKAGE_CHARSET;
+-}
+-
+-sub get_upload_dir {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-    croak "Not a class method" unless ref $self;
+-    my $arch = $package->get_arch();
+-    return
+-        $self->{_upload_root} .
+-        "/$self->{_queue}/$target/" .
+-        _get_section($self, $package, $target, $user_context, $app_context) .
+-	'/' . 
+-	($user_context->{prefix} ? '' : get_group_id($user_context->{user}))
+-}
+-
+-sub get_install_path {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+-    return $self->_get_path($package, $target, $user_context, $app_context);
+-}
+-
+-
+-sub get_distribution_paths {
+-    my ($self, $package, $target) = @_;
+-
+-    return $self->_get_distribution_paths($package, $target);
+-}
+-
+-sub get_archive_path {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+-    return $self->_get_path($package, $target, $user_context, $app_context);
+-}
+-
+-sub get_reject_path {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+-    return $self->{_rejected};
+-}
+-
+-
+-sub _get_path {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+-    my $section = $self->_get_section($package, $target, $user_context, $app_context);
+-    my $arch = $app_context->{arch} || $package->get_arch();
+-    $arch = $translate_arch{$arch} || $arch;
+-    if ($arch eq 'noarch') {
+-	$arch = $self->{_noarch} 
+-    } elsif ($arch eq 'src') {
+-	return "$target/SRPMS/$section"
+-    }
+-    "$target/$arch/media/$section"
+-}
+-
+-sub _get_distribution_paths {
+-    my ($self, $package, $target) = @_;
+-
+-    my $arch = $package->get_arch();
+-    $arch = $translate_arch{$arch} || $arch;
+-    if ($arch eq 'noarch') {
+-	map { "$target/$_" } $self->get_extra_arches;
+-    } elsif ($arch eq 'src') {
+-	die "no way to get distribution path using a $arch package";
+-    } else {
+-	"$target/$arch";
+-    }
+-}
+-
+-sub get_arch {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-    my $arch = $package->get_arch();
+-    $arch = $translate_arch{$arch} || $arch;
+-    if ($arch eq 'noarch') {
+-	$arch = $self->{_noarch} 
+-    }
+-    $arch
+-}
+-
+-sub get_version_path {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+-    my $section = $self->_get_section($package, $target, $user_context, $app_context);
+-
+-    return "$self->{_module}/$section";
+-}
+-
+-=head2 get_replaced_packages($package, $target, $user_context, $app_context)
+-
+-Overrides parent method to add libified packages.
+-
+-=cut
+-
+-sub get_replaced_packages {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-    croak "Not a class method" unless ref $self;
+-
+-    my @replaced_packages = 
+-        $self->SUPER::get_replaced_packages($package, $target, $user_context, $app_context);
+-
+-    # mandriva lib policy:
+-    # library package names change with revision, making mandatory to
+-    # duplicate older revisions search with a custom pattern
+-    my $name = $package->get_name();
+-    if ($name =~ /^(lib\w+[a-zA-Z_])[\d_\.]+([-\w]*)$/) {
+-        push(@replaced_packages,
+-            grep { $package->compare($_) > 0 }
+-            map { PACKAGE_CLASS->new(file => $_) }
+-            $self->get_files(
+-                $self->{_install_root},
+-                $self->get_install_path($package, $target, $user_context, $app_context),
+-                PACKAGE_CLASS->get_pattern(
+-                    $1 . '[\d_\.]+' . $2, # custom name pattern
+-                    undef,
+-                    undef,
+-                    $package->get_arch()
+-                ),
+-            )
+-        );
+-    }
+-
+-    # kernel packages have the version in the name
+-    # binary dkms built for old kernels have to be removed too
+-    if ($name =~ /^kernel-([^\d]*-)?([\d.]*)-(.*)$/) { # "desktop", "2.6.28", "2mnb"
+-        push(@replaced_packages,
+-            map { PACKAGE_CLASS->new(file => $_) }
+-            $self->get_files(
+-                $self->{_install_root},
+-                $self->get_install_path($package, $target, $user_context, $app_context),
+-                PACKAGE_CLASS->get_pattern(
+-                    '(kernel-' . $1 . '\d.*|.*-kernel-[\d.]*-' . $1 . '\d.*)',
+-                    undef,
+-                    undef,
+-                    $package->get_arch()
+-                ),
+-            )
+-        );
+-    }
+-
+-    return @replaced_packages;
+-       
+-}
+-
+-sub _get_main_section {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+-    my $section = $self->_get_section($package, $target, $user_context, $app_context);
+-    my ($main_section) = $section =~ m,^([^/]+),;
+-    $main_section
+-}
+-
+-sub _get_section {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-
+-    my $name = $package->get_name();
+-    my $cname = $package->get_canonical_name();
+-    my $version = $package->get_version();
+-    my $release = $package->get_release();
+-    my $section = $user_context->{section};
+-    my $media = $self->_get_media_config($target);
+-    my $arch = $package->get_arch();
+-    my $file = $package->as_file();
+-    $file =~ s,/+,/,g; # unneeded?
+-    # FIXME: use $self->get_arch()
+-    $arch = $self->{_noarch} if $arch eq 'noarch';
+-    $arch = $translate_arch{$arch} || $arch;
+-
+-    if (!$section) {
+-        $section = $self->{packages}{$file}{section};
+-        print "Section undefined, repository says it is '$section' for '$file'\n" if $self->{_verbose};
+-    }
+-    if ($section && $section !~ /debug_/ && $package->is_debug()) {
+-	$section = "debug_$section"
+-    }
+-
+-    # if have section already, check if it exists, and may return immediately
+-    if ($section) {
+-	print "Using requested section $section\n";
+-	if ($media->{$arch}{$section}) { 
+-	    return $section
+-	} else {
+-	    die "FATAL youri: unknown section $section for target $target for arch $arch\n"
+-	}
+-    }
+-    # else, try to find section automatically
+-
+-    # pattern for search of src package with specific version-release,
+-    # should be searched first, because we prefer to find the precise
+-    # section a package is already in
+-    my $specific_source_pattern = PACKAGE_CLASS->get_pattern(
+-        $cname,
+-        $version,
+-        $release,
+-        'src'
+-    );
+-
+-    my $source_pattern = PACKAGE_CLASS->get_pattern(
+-        $cname,
+-        undef,
+-        undef,
+-        'src'
+-    );
+-
+-    # if a media has no source media configured, or if it is a debug
+-    # package, we search in binary media
+-
+-    # pattern for search when a binary media has no src media configured
+-    my $specific_binary_pattern = PACKAGE_CLASS->get_pattern(
+-          $name,
+-          $version,
+-          $release,
+-          $arch
+-    );
+-
+-    # last resort pattern: previous existing binary packages
+-    my $binary_pattern = PACKAGE_CLASS->get_pattern(
+-          $name,
+-          undef,
+-          undef,
+-          $arch
+-    );
+-
+-    # first try to find section for the specific version, as it is possibly already there;
+-    # this is the case for when called in Youri::Submit::Action::Archive, to find the
+-    # section the package got installed
+-    print "Looking for package $name with version $version-$release\n";
+-    foreach my $m (keys %{$media->{$arch}}) {
+-        print " .. section '$m' path '".$media->{$arch}{$m}."'\n" if $self->{_verbose};
+-        # - prefer source for non-debug packages, use binary if there is no source media configured
+-        # - debug packages must be searched in binary medias, due to their
+-        #   src section != binary section; NOTE: should/need we search in
+-        #   src medias and add the 'debug_' prefix?
+-        if (!$package->is_debug() && $media->{src}{$m}) {
+-            next unless $self->get_files('', $media->{src}{$m}, $specific_source_pattern);
+-        } else {
+-            next unless $self->get_files('', $media->{$arch}{$m}, $specific_binary_pattern);
+-        }
+-        $section = $m;
+-        last;
+-    }
+-
+-    # if still not found, try finding any version of the package in a
+-    # /release subsection (safe default: /release is default for cooker,
+-    # should be locked for released distros, and we don't risk wrongly
+-    # choosing /backports, /testing, or /updates);
+-    # this is the case for when called at submit, to find the section where
+-    # the package already resides
+-    if (!$section) {
+-        # debug packages should be found by previous specific version search
+-        # NOTE: as above, should/need we search here and add the 'debug_' prefix?
+-        # ... probably... as at least mdv-youri-submit-force will process debug packages
+-        if ($package->is_debug() && $self->{_verbose}) {
+-            print "Warning: debug package $name with version $version-$release not found.\n";
+-        }
+-
+-        print "Warning: Looking for any section with a package $name of any version\n";
+-        foreach my $m (keys %{$media->{$arch}}) {
+-            print " .. section '$m' path '".$media->{$arch}{$m}."'\n" if $self->{_verbose};
+-            # NOTE: !$package->is_debug() test is here to prevent when above FATAL error is removed
+-            next if $m !~ /release/ || ($m =~ /debug/ && !$package->is_debug());
+-            # - prefer source
+-            if ($media->{src}{$m}) {
+-                next unless $self->get_files('', $media->{src}{$m}, $source_pattern);
+-            } else {
+-                next unless $self->get_files('', $media->{$arch}{$m}, $binary_pattern);
+-            }
+-            $section = $m;
+-            last;
+-        }
+-    }
+-
+-    # FIXME: doing this here is wrong; this way the caller can never know if
+-    # a section was actually found or not; should return undef and let the
+-    # caller set a default (Note: IIRC PLF|Zarb has this right, see there) -spuk
+-    print STDERR "Warning: Can't guess destination: section missing, defaulting to contrib/release\n" unless $section;
+-    $section ||= 'contrib/release';
+-
+-    # next time we don't need to search everything again
+-    $self->{packages}{$file}{section} = $section;
+-
+-    print "Section is '$section'.\n";
+-
+-    return $section;
+-}
+-
+-sub get_upload_newer_revisions {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-    croak "Not a class method" unless ref $self;
+-    my $arch = $package->get_arch();
+-    my $name = $package->get_full_name;
+-    $name =~ s/^\@\d+://;
+-    my $pattern = $self->get_package_class()->get_pattern($package->get_name(), undef, undef, $arch);
+-    my $media = $self->_get_media_config($target);
+-    my @packages;
+-    foreach my $state (@{$self->{_upload_state}}) {
+-	foreach my $m (keys %{$media->{$arch}}) {
+-	    my $path = "$self->{_upload_root}/$state/$target/$m";
+-	    print "Looking for package $package revisions for $target in $path (pattern $pattern)\n" if $self->{_verbose};
+-	    find(
+-		sub { 
+-		    s/\d{14}\.[^.]*\.[^.]*\.\d+_//; 
+-		    s/^\@\d+://;
+-		    return if ! /^$pattern/; 
+-		    return if /\.info$/; 
+-		    print "Find $_\n"; 
+-		    push @packages, $File::Find::name if $package->check_ranges_compatibility("== $name", "< $_")
+-		}, $path);
+-	}
+-    }
+-    return
+-        @packages;
+-}
+-
+-sub package_in_svn {
+-    my ($self, $srpm_name) = @_;
+-    my $ctx = new SVN::Client(
+-	auth => [SVN::Client::get_simple_provider(),
+-	SVN::Client::get_simple_prompt_provider(\&simple_prompt,2),
+-	SVN::Client::get_username_provider()]
+-    );
+-
+-    my $svn_entry = $ctx->ls("$self->{_svn}/$srpm_name", 'HEAD', 0);
+-    if ($svn_entry) {
+-	print "Package $srpm_name is in the SVN\n";
+-	return 1
+-    }
+-}
+-
+-sub get_svn_url {
+-    my ($self) = @_;
+-    $self->{_svn}
+-}
+-
+-sub get_revisions {
+-    my ($self, $package, $target, $user_context, $app_context, $filter) = @_;
+-    croak "Not a class method" unless ref $self;
+-    print "Looking for package $package revisions for $target\n" if $self->{_verbose} > 0;
+-
+-    my $arch = $app_context->{arch} || $user_context->{arch} || $package->get_arch();
+-    my $media_arch = $arch eq 'noarch' ? $self->{_noarch} : $arch;
+-    my $path = $arch eq 'src' ? "$target/SRPMS/" : "$target/$media_arch/media";
+-    my $media = $self->_get_section($package, $target, $user_context, $app_context);
+-    my $name = $package->get_name();
+-    my @packages = map { $self->get_package_class()->new(file => $_) }
+-	$self->get_files(
+-	    $self->{_install_root},
+-	    "$path/$media",
+-	    $self->get_package_class()->get_pattern(
+-		    $name,
+-		undef,
+-		undef,
+-		$package->get_arch(),
+-	    )
+-	);
+-
+-    @packages = grep { $filter->($_) } @packages if $filter;
+-
+-    return
+-        sort { $b->compare($a) } # sort by revision order
+-        @packages;
+-}
+-
+-sub reject {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-    croak "Not a class method" unless ref $self;
+-
+-
+-}
+-
+-sub get_archive_dir {
+-    my ($self, $package, $target, $user_context, $app_context) = @_;
+-    croak "Not a class method" unless ref $self;
+-
+-    return
+-        $self->{_archive_root}
+-}
+-
+-
+-# 20060801 warly
+-#
+-# Upload steps
+-# SRPMS are uploaded in /home/mandrake/uploads/todo/$target/$media/group_id
+-#
+-# 
+-#
+-
+-=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;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: </pipermail/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment-0001.html>
+
+ + + + + + + + + + + + + + +
+

+ +
+More information about the Mageia-sysadm +mailing list
+ -- cgit v1.2.1