diff options
Diffstat (limited to 'zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6')
-rw-r--r-- | zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment-0001.html | 1172 | ||||
-rw-r--r-- | zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment.html | 1172 |
2 files changed, 2344 insertions, 0 deletions
diff --git a/zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment-0001.html b/zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment-0001.html new file mode 100644 index 000000000..785637314 --- /dev/null +++ b/zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment-0001.html @@ -0,0 +1,1172 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" +"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /> +<title>[218] rename Mandriva_upload.pm to Mageia_upload.pm</title> +</head> +<body> + +<style type="text/css"><!-- +#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } +#msg dl.meta dt { float: left; width: 6em; font-weight: bold; } +#msg dt:after { content:':';} +#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } +#msg dl a { font-weight: bold} +#msg dl a:link { color:#fc3; } +#msg dl a:active { color:#ff0; } +#msg dl a:visited { color:#cc6; } +h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } +#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; } +#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; } +#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; } +#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; } +#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; } +#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; } +#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; } +#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; } +#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; } +#logmsg pre { background: #eee; padding: 1em; } +#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;} +#logmsg dl { margin: 0; } +#logmsg dt { font-weight: bold; } +#logmsg dd { margin: 0; padding: 0 0 0.5em 0; } +#logmsg dd:before { content:'\00bb';} +#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; } +#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; } +#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; } +#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; } +#logmsg table th.Corner { text-align: left; } +#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; } +#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; } +#patch { width: 100%; } +--></style> +<div id="msg"> +<dl class="meta"> +<dt>Revision</dt> <dd>218</dd> +<dt>Author</dt> <dd>boklm</dd> +<dt>Date</dt> <dd>2011-01-06 03:12:24 +0100 (Thu, 06 Jan 2011)</dd> +</dl> + +<h3>Log Message</h3> +<pre>rename Mandriva_upload.pm to Mageia_upload.pm</pre> + +<h3>Added Paths</h3> +<ul> +<li><a href="#build_systemmdvyouricoretrunklibYouriRepositoryMageia_uploadpm">build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm</a></li> +</ul> + +<h3>Removed Paths</h3> +<ul> +<li><a href="#build_systemmdvyouricoretrunklibYouriRepositoryMandriva_uploadpm">build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm</a></li> +</ul> + +</div> +<div id="patch"><pre> +<a id="build_systemmdvyouricoretrunklibYouriRepositoryMageia_uploadpmfromrev210build_systemmdvyouricoretrunklibYouriRepositoryMandriva_uploadpm">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)</a> +=================================================================== +--- 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; + +<a id="build_systemmdvyouricoretrunklibYouriRepositoryMandriva_uploadpm">Deleted: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm</a> +=================================================================== +--- 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; + +</pre></div> + +</body> +</html>
\ No newline at end of file diff --git a/zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment.html b/zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment.html new file mode 100644 index 000000000..785637314 --- /dev/null +++ b/zarb-ml/mageia-sysadm/attachments/20110106/4f8cb1c6/attachment.html @@ -0,0 +1,1172 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" +"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /> +<title>[218] rename Mandriva_upload.pm to Mageia_upload.pm</title> +</head> +<body> + +<style type="text/css"><!-- +#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } +#msg dl.meta dt { float: left; width: 6em; font-weight: bold; } +#msg dt:after { content:':';} +#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } +#msg dl a { font-weight: bold} +#msg dl a:link { color:#fc3; } +#msg dl a:active { color:#ff0; } +#msg dl a:visited { color:#cc6; } +h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } +#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; } +#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; } +#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; } +#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; } +#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; } +#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; } +#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; } +#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; } +#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; } +#logmsg pre { background: #eee; padding: 1em; } +#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;} +#logmsg dl { margin: 0; } +#logmsg dt { font-weight: bold; } +#logmsg dd { margin: 0; padding: 0 0 0.5em 0; } +#logmsg dd:before { content:'\00bb';} +#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; } +#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; } +#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; } +#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; } +#logmsg table th.Corner { text-align: left; } +#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; } +#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; } +#patch { width: 100%; } +--></style> +<div id="msg"> +<dl class="meta"> +<dt>Revision</dt> <dd>218</dd> +<dt>Author</dt> <dd>boklm</dd> +<dt>Date</dt> <dd>2011-01-06 03:12:24 +0100 (Thu, 06 Jan 2011)</dd> +</dl> + +<h3>Log Message</h3> +<pre>rename Mandriva_upload.pm to Mageia_upload.pm</pre> + +<h3>Added Paths</h3> +<ul> +<li><a href="#build_systemmdvyouricoretrunklibYouriRepositoryMageia_uploadpm">build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mageia_upload.pm</a></li> +</ul> + +<h3>Removed Paths</h3> +<ul> +<li><a href="#build_systemmdvyouricoretrunklibYouriRepositoryMandriva_uploadpm">build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm</a></li> +</ul> + +</div> +<div id="patch"><pre> +<a id="build_systemmdvyouricoretrunklibYouriRepositoryMageia_uploadpmfromrev210build_systemmdvyouricoretrunklibYouriRepositoryMandriva_uploadpm">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)</a> +=================================================================== +--- 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; + +<a id="build_systemmdvyouricoretrunklibYouriRepositoryMandriva_uploadpm">Deleted: build_system/mdv-youri-core/trunk/lib/Youri/Repository/Mandriva_upload.pm</a> +=================================================================== +--- 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; + +</pre></div> + +</body> +</html>
\ No newline at end of file |