5 |
|
require Exporter; |
6 |
|
@ISA=qw(Exporter); |
7 |
|
@EXPORT=qw(BootStrapProject); |
8 |
+ |
use Utilities::cvsmodule; |
9 |
|
|
10 |
|
sub BootStrapProject($) { |
11 |
|
my $url=shift; |
16 |
|
|
17 |
|
my $filename; |
18 |
|
$BootHash={ |
19 |
+ |
'cvsrep_StartTag' => \&cvsrep_start, |
20 |
+ |
'cvsrep' => 'none', |
21 |
+ |
'cvsrep_EndTag' => \&cvsrep_end, |
22 |
+ |
'cvs_StartTag' => \&cvs_start, |
23 |
+ |
'cvs' => 'none', |
24 |
+ |
'cvs_EndTag' => 'none', |
25 |
|
'config_starttag' => \&config_starttag, |
26 |
+ |
'config_endtag' => \&config_endtag, |
27 |
|
'config' => 'none', |
28 |
|
'base' => 'none', |
29 |
|
'base_starttag' => \&base_start, |
39 |
|
'file' => 'none', |
40 |
|
'file_starttag' => \&file_start |
41 |
|
}; |
42 |
< |
$filename=urlhandler($url); |
42 |
> |
$filename=urlhandler::urlhandler($url); |
43 |
|
$switch=Switcher->new($BootHash, $filename); |
44 |
|
$switch->parse(); |
45 |
|
} |
46 |
|
|
47 |
< |
sub Bootlocaltop($hashref) { |
47 |
> |
sub Bootlocaltop { |
48 |
|
my $hashref=shift; |
49 |
|
use Cwd; |
50 |
|
use Utilities::AddDir; |
51 |
|
|
52 |
< |
checkparam($hashref, $name, "name"); |
53 |
< |
checkparam($hashref, $name, "version"); |
54 |
< |
$ENV{LOCALTOP}=&cwd."/".$$hashref{'name'}."_".$$hashref{'version'}; |
52 |
> |
$switch->checkparam($hashref, $name, "name"); |
53 |
> |
$switch->checkparam($hashref, $name, "version"); |
54 |
> |
if ( ! defined $ENV{devareaname} ) { |
55 |
> |
my $vers=$$hashref{'version'}; |
56 |
> |
$vers=~s/^$$hashref{'name'}_//; |
57 |
> |
$ENV{LOCALTOP}=&cwd."/".$$hashref{'name'}."_".$vers; |
58 |
> |
} |
59 |
> |
else { |
60 |
> |
$ENV{LOCALTOP}=&cwd."/".$ENV{devareaname}; |
61 |
> |
} |
62 |
|
$scramdir=$ENV{LOCALTOP}."/.SCRAM"; |
63 |
< |
&adddir($scramdir); |
63 |
> |
&AddDir::adddir($scramdir); |
64 |
> |
chdir $ENV{LOCALTOP}; |
65 |
|
} |
66 |
|
|
67 |
|
sub project_start { |
71 |
|
|
72 |
|
$hashref=$switch->SetupValueHash( \@vars ); |
73 |
|
Bootlocaltop($hashref); |
74 |
+ |
print "Installing Project $$hashref{'name'} ". |
75 |
+ |
"Version $$hashref{'version'}\n"; |
76 |
|
open ( ENVIRONMENT , ">$scramdir/Environment" ) || die "Unable to open ". |
77 |
|
"Environment file : $!\n"; |
78 |
|
print ENVIRONMENT 'SCRAM_PROJECTNAME='.$$hashref{'name'}."\n"; |
83 |
|
"version=$$hashref{version}>\n"; |
84 |
|
print INSTALLFILE "<base urltype=file value=$scramdir>\n"; |
85 |
|
print INSTALLFILE "<file name=Environment>\n"; |
86 |
+ |
push @{ $basehash{file}}, "$ENV{SCRAM_HOME}/toolbox"; |
87 |
+ |
$lastbasekey='file'; |
88 |
+ |
push @dirstack, $scramdir; |
89 |
+ |
$currentdir=$scramdir; |
90 |
|
} |
91 |
|
|
92 |
|
sub project_finish { |
104 |
|
my $hashref; |
105 |
|
|
106 |
|
$hashref=$switch->SetupValueHash( \@vars ); |
107 |
< |
checkparam($hashref, $name, "dir"); |
107 |
> |
$switch->checkparam($hashref, $name, "dir"); |
108 |
> |
$$hashref{'dir'}=~s/`//g; |
109 |
|
print ENVIRONMENT 'projconfigdir='.$$hashref{'dir'}."\n"; |
110 |
|
$ENV{SCRAM_BootStrapFiles}=$ENV{SCRAM_BootStrapFiles}.":". |
111 |
|
$ENV{LOCALTOP}."/".$$hashref{'dir'}; |
112 |
+ |
push @dirstack, $ENV{LOCALTOP}."/".$$hashref{'dir'}; |
113 |
+ |
$currentdir=$ENV{LOCALTOP}."/".$$hashref{'dir'}; |
114 |
+ |
if ( $switch->context('project') ) { |
115 |
+ |
print INSTALLFILE "<$name dir=$$hashref{dir}>\n"; |
116 |
+ |
} |
117 |
+ |
} |
118 |
+ |
sub config_endtag { |
119 |
+ |
my $name=shift; |
120 |
+ |
|
121 |
+ |
pop @dirstack; |
122 |
+ |
$currentdir=$dirstack[$#dirstack]; |
123 |
+ |
if ( $switch->context('project') ) { |
124 |
+ |
print INSTALLFILE "</$name>\n"; |
125 |
+ |
} |
126 |
|
} |
127 |
|
|
128 |
|
sub file_start { |
131 |
|
my $hashref; |
132 |
|
|
133 |
|
$hashref=$switch->SetupValueHash( \@vars ); |
134 |
< |
checkparam($hashref, $name, "name"); |
134 |
> |
$switch->checkparam($hashref, $name, "name"); |
135 |
|
# now download the file |
136 |
|
print "Downloading File .... $$hashref{'name'}\n"; |
137 |
< |
&urlhandler(&geturlbase."/".$$hashref{'name'}, |
137 |
> |
&urlhandler::urlhandler(&geturlbase."/".$$hashref{'name'}, |
138 |
|
$scramdir."/".$$hashref{'name'}) ; |
139 |
|
if ( $switch->context('project') ) { |
140 |
|
print INSTALLFILE "<$name name=$$hashref{name}>\n"; |
147 |
|
my $hashref; |
148 |
|
|
149 |
|
$hashref=$switch->SetupValueHash( \@vars ); |
150 |
< |
checkparam($hashref, $name, "name"); |
150 |
> |
$switch->checkparam($hashref, $name, "name"); |
151 |
|
use clientfile; |
152 |
|
$ENV{SCRAM_ProjReqsDoc}= |
153 |
< |
&urlhandler(&geturlbase."/".$$hashref{'name'}, |
154 |
< |
$scramdir."/".$$hashref{'name'}) ; |
153 |
> |
$currentdir."/".$$hashref{'name'}; |
154 |
> |
print ENVIRONMENT 'SCRAM_ProjReqsDoc='.$ENV{SCRAM_ProjReqsDoc}."\n"; |
155 |
> |
# &urlhandler::urlhandler(&geturlbase."/".$$hashref{'name'}, |
156 |
> |
# $scramdir."/".$$hashref{'name'}) ; |
157 |
|
if ( $switch->context("project") ) { |
158 |
|
print INSTALLFILE "<$name name=$$hashref{name}>\n"; |
159 |
|
} |
165 |
|
my $hashref; |
166 |
|
|
167 |
|
$hashref=$switch->SetupValueHash( \@vars ); |
168 |
< |
checkparam($hashref, $name, 'urltype'); |
169 |
< |
checkparam($hashref, $name, 'value'); |
168 |
> |
$switch->checkparam($hashref, $name, 'urltype'); |
169 |
> |
$switch->checkparam($hashref, $name, 'value'); |
170 |
|
push @{ $basehash{ $$hashref{'urltype'} }}, $$hashref{'value'}; |
171 |
|
$lastbasekey=$$hashref{'urltype'}; |
172 |
|
#print $lastbasekey." lastbasekey \n"; |
176 |
|
pop @{ $basehash{$lastbasekey} }; |
177 |
|
} |
178 |
|
|
179 |
< |
sub checkparam($hash, $name, $key) { |
180 |
< |
my $hashref=shift; |
181 |
< |
my $name=shift; |
182 |
< |
my $key=shift; |
183 |
< |
|
184 |
< |
if ( ! defined $$hashref{$key} ) { |
185 |
< |
print "BootParser: Badly formed $name tag -". |
186 |
< |
" undefined $key parameter\n"; |
187 |
< |
exit 1; |
188 |
< |
} |
189 |
< |
$$hashref{$key}=~s/["']//; |
190 |
< |
} |
179 |
> |
#sub checkparam($hash, $name, $key) { |
180 |
> |
# my $hashref=shift; |
181 |
> |
# my $name=shift; |
182 |
> |
# my $key=shift; |
183 |
> |
# |
184 |
> |
# if ( ! defined $$hashref{$key} ) { |
185 |
> |
# print "BootParser: Badly formed $name tag -". |
186 |
> |
# " undefined $key parameter\n"; |
187 |
> |
# exit 1; |
188 |
> |
# } |
189 |
> |
# $$hashref{$key}=~s/["']//; |
190 |
> |
#} |
191 |
|
|
192 |
|
#Just a file for now! |
193 |
|
#Will eventually cross ref with access checker to get types available. |
223 |
|
my @vars=@_; |
224 |
|
my $hashref; |
225 |
|
} |
226 |
+ |
|
227 |
+ |
sub cvsrep_start { |
228 |
+ |
my $name=shift; |
229 |
+ |
my @vars=@_; |
230 |
+ |
my $hashref; |
231 |
+ |
|
232 |
+ |
$hashref=$switch->SetupValueHash( \@vars ); |
233 |
+ |
$switch->checkparam($hashref, $name, 'auth' ); |
234 |
+ |
$switch->checkparam($hashref, $name, 'base' ); |
235 |
+ |
$cvsobject=cvsmodule->new(); |
236 |
+ |
$cvsobject->set_base($$hashref{base}); |
237 |
+ |
$cvsobject->set_auth($$hashref{auth}); |
238 |
+ |
if ( exists $$hashref{user} ) { |
239 |
+ |
$cvsobject->set_user($$hashref{user}); |
240 |
+ |
} |
241 |
+ |
if ( exists $$hashref{passkey} ) { |
242 |
+ |
$cvsobject->set_passkey($$hashref{passkey}); |
243 |
+ |
} |
244 |
+ |
} |
245 |
+ |
|
246 |
+ |
sub cvsrep_end { |
247 |
+ |
my $name=shift; |
248 |
+ |
$cvsobject=undef; #Move out of scope to destroy cvsrep context |
249 |
+ |
} |
250 |
+ |
|
251 |
+ |
sub cvs_start { |
252 |
+ |
my $name=shift; |
253 |
+ |
my @vars=@_; |
254 |
+ |
my $hashref; |
255 |
+ |
|
256 |
+ |
if ( ! defined $cvsobject ) { |
257 |
+ |
print "BootStraper: Undefined cvs repository on line ". |
258 |
+ |
$switch->{linenumber}."\n - set up repository". |
259 |
+ |
"specifics with the <cvsrep> flag\n"; |
260 |
+ |
exit 1; |
261 |
+ |
} |
262 |
+ |
$hashref=$switch->SetupValueHash( \@vars ); |
263 |
+ |
$switch->checkparam( $hashref, $name, "fn" ); |
264 |
+ |
$cvsobject->invokecvs( (split / /, $$hashref{fn} ) ); |
265 |
+ |
} |