Changeset 898


Ignore:
Timestamp:
Nov 10, 2009, 3:31:28 AM (10 years ago)
Author:
Bruno Cornec
Message:
  • Do not add conf files if already present in the list (changing pbconffiles into a hash for that to still keep order as this is mandatory)
  • Small optimisations for pb_conf function usage in pb
Location:
devel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • devel/pb-modules/lib/ProjectBuilder/Conf.pm

    r891 r898  
    2424our @EXPORT = qw(pb_conf_init pb_conf_add pb_conf_read pb_conf_read_if pb_conf_get pb_conf_get_if);
    2525
    26 # Global list of conf files
    27 my @pbconffiles = ();
     26# Global hash of conf files
     27# Key is the conf file name
     28# Value is its rank
     29my %pbconffiles;
     30
     31# Global hash of cached values.
     32# We consider that values can not change during the life of pb
     33# my %cachedval;
    2834
    2935=pod
     
    5359=item B<pb_conf_init>
    5460
    55 This function setup the environment PBPROJ for project-builder function usage rfom other projects.
     61This function setup the environment PBPROJ for project-builder function usage from other projects.
    5662The first parameter is the project name.
    57 It sets up environement variables (PBPROJ)
     63It sets up environment variables (PBPROJ)
    5864
    5965=cut
     
    8187
    8288pb_log(2,"DEBUG: pb_conf_add with ".Dumper(@_)."\n");
    83 push(@pbconffiles,@_);
     89
     90foreach my $cf (@_) {
     91    # Skip already used conf files
     92    next if (defined $pbconffiles{$cf});
     93    # Add the new one at the end
     94    my $num = keys %pbconffiles;
     95    $pbconffiles{$cf} = $num;
     96}
    8497}
    8598
     
    191204my $ptr = undef;
    192205
    193 # the most important conf file is first, so read them in revers order
    194 foreach my $f (reverse @pbconffiles) {
     206# the most important conf file is first, so read them in reverse order
     207foreach my $f (reverse sort { $pbconffiles{$a} <=> $pbconffiles{$b} } keys %pbconffiles) {
    195208    $ptr = pb_conf_get_fromfile_if("$f",$ptr,@param);
    196209}
     
    234247foreach my $i (0..$#param) {
    235248    $p1 = $ptr1[$i];
     249    # Optimisation doesn't seem useful
     250    # if ((defined $p1) && (defined $cachedval{$p1})) {
     251    # $ptr1[$i] = $cachedval{$p1};
     252    # next;
     253    # }
    236254    $p2 = $ptr2[$i];
    237255    # Always try to take the param from ptr1
     
    271289    }
    272290    $ptr1[$i] = $p1;
     291    # Cache values to avoid redoing all that analyze when asked again on a known value
     292    # $cachedval{$p1} = $p1;
    273293}
    274294pb_log(2,"DEBUG: pb_conf_get output: ".Dumper(@ptr1)."\n");
  • devel/pb/bin/pb

    r897 r898  
    528528    my ($scheme, $uri) = pb_cms_init($pbinit);
    529529
    530     my ($pkgv, $pkgt) = pb_conf_get_if("pkgver","pkgtag");
     530    # We need 2 lines here
     531    my ($pkgv, $pkgt, $testver) = pb_conf_get_if("pkgver","pkgtag","testver");
     532    my @pt = pb_conf_get_if("vmlist","velist");
    531533
    532534    # declare packager and repo for filtering
     
    536538
    537539    foreach my $pbpkg (@pkgs) {
    538         my ($testver) = pb_conf_get_if("testver");
    539540        $ENV{'PBPKG'} = $pbpkg;
    540541
     
    596597
    597598        my %build;
    598         my @pt;
    599599        # We want to at least build for the underlying distro
    600600        my ($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $arch) = pb_distro_init();
     
    603603
    604604        # Get list of distributions for which I need to generate build files
    605         @pt = pb_conf_get_if("vmlist","velist");
    606605        if (defined $pt[0]->{$ENV{'PBPROJ'}}) {
    607606            $tmpl .= $pt[0]->{$ENV{'PBPROJ'}};
     
    632631        # Do not do that for website
    633632        if ((not defined $param) || ($param ne "Web")) {
     633            pb_log(0,"Build files are being generated for ...\n");
    634634            my %virt;
    635635            # De-duplicate similar VM and VE
     
    731731                push @notfound,$b if ($build{$b} =~ /no/);
    732732            }
    733             pb_log(0,"Build files generated for ".join(',',sort(@found))."\n");
     733            pb_log(0," ... ".join(',',sort(@found))."\n");
    734734            pb_log(0,"No Build files found for ".join(',',sort(@notfound))."\n") if (@notfound);
    735735            pb_log(2,"DEBUG: patches: ".Dumper(%patches)."\n");
     
    876876
    877877    # Get list of packages to build
    878     # Get content saved in cms2build
    879878    my $ptr = pb_get_pkg();
    880879    @pkgs = @$ptr;
    881880
     881    # Get content saved in cms2build
    882882    my ($pkg) = pb_conf_read("$ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb","pbpkg");
    883883    $pkg = { } if (not defined $pkg);
     
    11741174
    11751175    if ($cmt ne "Announce") {
     1176        # Get list of packages to build
    11761177        my $ptr = pb_get_pkg();
    11771178        @pkgs = @$ptr;
     
    19791980    my ($scheme2,$uri) = pb_cms_init($pbinit);
    19801981
    1981     my ($pbconf) = pb_conf_get("pbconfurl");
     1982    my ($pbconf,$pburl) = pb_conf_get("pbconfurl","pburl");
    19821983    $uri = $pbconf->{$ENV{'PBPROJ'}};
    19831984    my ($scheme, $account, $host, $port, $path) = pb_get_uri($uri);
    19841985
    19851986    # Checking CMS repositories status
    1986     my ($pburl) = pb_conf_get("pburl");
    19871987    ($scheme2, $account, $host, $port, $path) = pb_get_uri($pburl->{$ENV{'PBPROJ'}});
    19881988
     
    24602460my $pbscript = "$ENV{'PBDESTDIR'}/snapv";
    24612461
     2462my ($pbac) = pb_conf_get($vtype."login");
     2463
    24622464foreach my $v (@$vm) {
    24632465    # Name of the account to deal with for VM/VE
    24642466    # Do not use the one passed potentially with -a
    2465     my ($pbac) = pb_conf_get($vtype."login");
    24662467    my ($vmexist,$vmpid);
    24672468
Note: See TracChangeset for help on using the changeset viewer.