[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Recherche volontaire pour classer les paquets



Julien Louis a écrit :
>
> Le fichier debian/control contient toutes les informations sur les
> paquets sources et les binaires. Il suffit de modifier la ligne Package:
> par Source:

Ok, merci.

Voici donc une nouvelle version avec les options suivantes :

-b : pour récupérer seulement les paquets binaires,
-s : pour récupérer seulement les paquets sources,
-t temp : pout utiliser <temp> comme répertoire temporaire

il faut aussi passer le cvsroot en parametre au script qui renvoie les paquets 
binaires et sources aucune des options -b et -s n'est utilisée.

A+,
Christian.
#! /usr/bin/perl -w

use strict;
use Getopt::Std;

# Get the options
our($opt_b, $opt_s, $opt_t);
getopts('bst:');
$opt_t = '/tmp' unless ($opt_t);
($opt_b, $opt_s) = (1, 1) unless ($opt_b or $opt_s);

# Check args
&print_usage() unless ($ARGV[0]);

my $cvsroot = $ARGV[0];

if (uc($cvsroot) eq 'KDE') {
  $cvsroot = ':pserver:anonymous@anoncvs.kde.org:/home/kde';
}


# Go to a temp dir
chdir($opt_t);

##
# Get the modules from the CVS repository
##

# Get the CVSROOT/modules file from the repository
`cvs -d $cvsroot checkout CVSROOT/modules`;

# Read the modules in that file
open MODULES, 'CVSROOT/modules' or die "Could not open CVSROOT/modules !\n";
my @modules = <MODULES>;
close MODULES;

# Delete that file
`rm -rf CVSROOT`;

# Clean up the modules
@modules = grep { chomp; s/^(\S+)\s*.*$/$1/ } @modules;

##
# Get the packages from the modules
##

my @packages = ();
my @sources = ();
foreach my $mod (@modules) {

  # Get the debian/control file from each module if possible
  `cvs -d $cvsroot checkout '$mod/debian/control' &> /dev/null`;

  # Read that file
  if (open CONTROL, "$mod/debian/control") {
    my @infos = <CONTROL>;
    close CONTROL;

    # Delete that file
    `rm -rf '$mod'`;

    # Clean up the infos
    chomp @infos;

    # Find the packages in that file
    my @bin = grep { s/^Package: (\S+)\s*$/$1/ } @infos;

    # Add them to the packages list
    push @packages, @bin;

    # Find the sources in that file
    my @src = grep { s/^Source: (\S+)\s*$/$1/ } @infos;

    # Add them to the sources list
    push @sources, @src;
  }
}

print "packages : @packages \n\n" if ($opt_b);
print "sources : @sources \n\n" if ($opt_s);

sub print_usage {
  print STDERR "Usage: $0 [options] cvsroot \n";
  print STDERR "options: -b : print binary packages\n";
  print STDERR "         -s : print source packages\n";
  print STDERR "         -t temp : use <temp> as a temporary directory\n";
  exit(1);
}

Reply to: