Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Generating anonymous psf file using PERL script
{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}
- Save the following script as generatePSF.pl
#!/usr/bin/perl -w
use IO::File;
use strict;
my $cvsloc = "http://dev.eclipse.org/viewcvs/index.cgi";
my %RES = ();
my %PROJECTS = ();
my %DONE = ();
my $fh;
sub generatePSF {
my $p = shift;
print STDOUT "Generating ${p}.psf\n";
$fh = new IO::File("${p}.psf", "w") or die $!;
print $fh <<PSF;
<?xml version="1.0" encoding="UTF-8"?>
<psf version="2.0">
<provider id="org.eclipse.team.cvs.core.cvsnature">
PSF
%DONE = ();
getDependencies($p);
print $fh <<PSF2;
</provider>
</psf>
PSF2
close($fh);
}
sub getDependencies {
my ($id) = shift;
my %deps = getDependenciesFromCVS($id);
print $fh "<project reference=\"1.0,$RES{$id}{REPLOC},$RES{$id}{PATH},$id,$RES{$id}{VERSION}\"/>\n" unless $DONE{$id};
$DONE{$id}++;
foreach my $d(keys %{$deps{$id}}) {
getDependencies($d) unless $DONE{$d};
}
}
sub getDependenciesFromCVS {
my ($pn) = shift;
my %DEP = ();
return %DEP unless $pn;
my $dependencies_xml_url = "${cvsloc}/$RES{$pn}{PATH}/dependencies.xml?root=Technology_Project\\\&view=co";
my $dependencies_xml_local = "${pn}.dependencies.xml";
system("wget -o wget.tmp -O $dependencies_xml_local $dependencies_xml_url");
open(D, $dependencies_xml_local) or die $!;
my $proj = "";
while(my $ln = <D>) {
chomp $ln;
if($ln =~ /<dependencies/) {
($proj) = $ln =~ /id=\"(.*?)\"/; $proj =~ s/\s+//g;
}
elsif($ln =~ /<project/) {
my ($dep) = $ln =~ /id=\"(.*?)\"/; $dep =~ s/\s+//g;
$DEP{$proj}{$dep} = 1;
}
}
close(D);
unlink("wget.tmp");
unlink($dependencies_xml_local);
return %DEP;
}
if(@ARGV < 3) {
print "Usage: $0 project_name path_to_projects_xml path_to_resourcelocation_xml\n";
exit(0);
}
my ($project_name, $project_xml, $resourceloc_xml) = @ARGV;
open(P, $project_xml) or die $!;
while(my $ln = <P>) {
chomp $ln;
if($ln =~ /id=/) {
my ($id) = $ln =~ /id=\"(.*?)\"/; $id =~ s/\s+//g;
$PROJECTS{$id} = 1;
}
}
close(P);
my $found = 0;
my $buf = "";
open(R, $resourceloc_xml) or die $!;
while(my $ln = <R>) {
chomp $ln;
if($ln =~ /<project/) {
$found = 1;
$buf = "";
}
elsif($ln =~ /<\/project>/) {
$found = 0;
my ($id) = $buf =~ /id=\"(.*?)\"/; $id =~ s/\s+//g;
my ($ver) = $buf =~ /<version>(.*?)<\/version>/; $ver =~ s/\s+//g;
my ($reploc) = $buf =~ /<repositoryLocation>(.*?)<\/repositoryLocation>/; $reploc =~ s/\s+//g;
my ($path) = $buf =~ /<path>(.*?)<\/path>/; $path =~ s/\s+//g;
$RES{$id}{VERSION} = $ver;
$RES{$id}{REPLOC} = $reploc;
$RES{$id}{PATH} = $path;
#print "$id ** $ver ** $reploc ** $path\n";
}
if($found) {
$buf .= $ln;
}
}
close(R);
if($project_name eq "all") {
foreach my $p(keys %PROJECTS) {
generatePSF($p);
}
}
else {
generatePSF($project_name);
}
- Download projects.xml and resourceLocation.xml to local directory from http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.higgins/builds/org.eclipse.higgins.auto/runtime/?root=Technology_Project
- run generatePSF.pl to generate {project_name}.psf file
./generatePSF.pl project_name path_to_projects_xml path_to_resourcelocation_xml e.g: ./generatePSF.pl org.eclipse.higgins.idas.cp.jndi projects.xml resourceLocation.xml or ./generatePSF.pl all projects.xml resourceLocation.xml
If you pass project_name=all, the script will generate psf for all projects in projects.xml, otherwise it will generate psf for the project specified
Note: This script requires PERL and wget installed on your machine. You can get both PERL and wget by installing cygwin from http://www.cygwin.com on Windows