[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