ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/scram
(Generate patch)

Comparing COMP/SCRAM/src/scram (file contents):
Revision 1.18 by williamc, Tue Mar 30 08:53:35 1999 UTC vs.
Revision 1.27 by williamc, Fri Dec 17 10:56:29 1999 UTC

# Line 1 | Line 1
1 < #!/usr/local/bin/perl5
1 > #!/usr/local/bin/perl5 -w
2   #
3   # User Interface
4   #
5  
6 < $inputcmd=shift;
7 < $found='false';
8 < $bold  = "\033[1m";
9 < $normal = "\033[0m";
10 < @allowed_commands=qw(project build install version list arch setup);
11 <
12 < foreach $command ( @allowed_commands ) {
13 <         if ( $inputcmd=~/^$command\Z/i) {
14 <                # Deal with a help request
15 <                do{     helpheader($command);
16 <                        &{"help_".$command}; exit; } if $ARGV[0]=~/help/i;
17 <                &$command; $found='true';
18 <                last;
19 <         }
20 < }
21 <
22 < if ( ! ( $found=~/true/ ) ) {
23 <        helpheader('Recognised Commands');
24 <        foreach $command ( @allowed_commands ) {
25 <        print "      $bold scram ".$command.$normal."\n";      
26 <        }
27 <        print "\n";
28 <        print "Help on individual commands available through\n\n";
29 <        print "$bold       scram".$normal." command$bold help $normal\n\n";
30 < }
31 <
32 < sub help_build {
33 <        &build;
34 < }
35 < sub build {
36 <        # is this a based or free release?
37 <        FullEnvInit();
38 <        use BuildSetup;
39 <        $ENV{MAKETARGETS}=join ' ',@ARGV;
40 <        BuildSetup($ENV{THISDIR},@ARGV);
41 < #       system("$ENV{TOOL_HOME}/BuildSetup",$ENV{THISDIR},@ARGV);
42 < }
43 <
44 < sub project {
45 <        # process options
46 <        while ( $ARGV[0]=~"^-" ) {
47 <         if ( (shift @ARGV)=~/-d/ ) {  #installation area directory
48 <          chdir $ARGV[0];
49 <          shift @ARGV;
50 <         }
51 <        }
52 <        my $project=shift @ARGV;
53 <        my $version=shift @ARGV;
54 <        environmentinit();
55 <        use File::Copy;
56 <        use Utilities::AddDir;
57 <        
58 <           use BootStrapProject;
59 <           # get the bootstrap files downloaded
60 <           BootStrapProject("$project\?\?$version");
61 <           # Go setup the rest of the environement, now we can
62 <           chdir $ENV{LOCALTOP};
63 <           &localtop;
64 <           LoadEnvFile();
65 <           #
66 <           # Now create the directories specified in the interface
67 <           #
68 <           foreach $key ( keys %ENV ) {
69 <                if ( $key=~/^INT/ ) {
70 <                        AddDir::adddir($ENV{$key});
71 <                }
72 <           }
73 <           if ( ! -e "$ENV{LOCALTOP}/$ENV{projconfigdir}" ) {
74 <                system("cp", "-r", "$ENV{RELEASETOP}/$ENV{projconfigdir}",
75 <                                "$ENV{LOCALTOP}/$ENV{projconfigdir}");
76 <           }
77 <           use clientfile;
78 <           BuildClientFile( $ENV{SCRAM_ProjReqsDoc} );
79 <           use Cwd;
80 <           print "Installation Located at:\n".cwd()."\n";
81 < }
82 <
83 < sub FullEnvInit {
84 <    environmentinit();
85 <    localtop();
86 <    LoadEnvFile();
87 < }
88 <
89 < sub environmentinit {
90 <        use Utilities::setarchitecture;
91 <        my $name;
92 <        my $value;
93 <
94 <        $ENV{LatestBuildFile}=""; # stop recursive behaviour in make
95 <        setarchitecture::setarch();
96 <        $ENV{INTwork}="tmp/$ENV{SCRAM_ARCH}";
97 <        $ENV{INTlib}="lib/$ENV{SCRAM_ARCH}";
98 <        $ENV{INTsrc}="src";
99 <        $ENV{INTbin}="bin/$ENV{SCRAM_ARCH}";
100 <        $ENV{INTlog}="logs";
101 <
102 <        if ( ! ( exists $ENV{SCRAM_HOME}) ){
103 <         $ENV{SCRAM_HOME}="/afs/cern.ch/cms/Releases";
104 <         print "Warning : Environment Variable SCRAM_HOME not set.\n";
105 <         print "Defaulting to $ENV{SCRAM_HOME}\n";
106 <        }
107 <         if ( ! ( exists $ENV{SCRAM_CONFIG} ) ){
108 <                $ENV{SCRAM_CONFIG}="$ENV{SCRAM_HOME}/configuration";
109 <        }
110 <        if ( ! ( exists $ENV{TOOL_HOME} ) ){
111 <                $ENV{TOOL_HOME}="$ENV{SCRAM_HOME}/src";
112 <        }
113 <        if ( ! ( exists $ENV{SCRAM_LOOKUPDB} ) ){
114 <                $ENV{SCRAM_LOOKUPDB}="$ENV{SCRAM_CONFIG}/project.lookup";
115 <        }
116 < }
117 <
118 < sub localtop {
119 <        # find localtop
120 <        use Cwd;
121 <        my $thispath=cwd;
122 <        block: {
123 <        do {
124 <          if ( -e "$thispath/.SCRAM" ) {
125 <                $ENV{LOCALTOP}=$thispath;
126 <                last block;
127 <          }
128 <        } while ( ( $thispath=~s/(.*)\/.*/$1/ )=~/./  );
129 <        if ( ! (defined $ENV{LOCALTOP}) ) {
130 <         print "Unable to locate the top of local release. Exiting\n";
131 <         exit 1;
132 <        }
133 <        } #end block
134 <        ($ENV{THISDIR}=cwd)=~s/^$ENV{LOCALTOP}//;
135 <        $ENV{THISDIR}=~s/^\///;
136 <        $ENV{SCRAM_WORKDIR}="$ENV{LOCALTOP}/.SCRAM";
137 < }
138 <
139 < sub LoadEnvFile {
140 <        open ( SCRAMENV, "<$ENV{SCRAM_WORKDIR}/Environment" ) ||
141 <                die "Cant find Environment file $!\n";
142 <        while ( <SCRAMENV> ) {
143 <           chomp;
144 <           next if /^#/;
145 <           next if /^\s*$/ ;
146 <           ($name, $value)=split /=/;
147 <           eval "\$ENV{${name}}=\"$value\"";
148 <        }
149 <        close SCRAMENV;
150 < }
151 <
152 < sub env {
153 <   print "Sorry - Not yet\n";
154 < }
155 <
156 < #
157 < # Create a lookup tag in the site database
158 < #
159 < sub install ( $tagname, $version ) {
160 <        my $tagname=shift @ARGV;
161 <        my $version=shift @ARGV;
162 <
163 <        # create database entry
164 <        &FullEnvInit;
165 <        if ( $version eq "" ) {
166 <           $version=$ENV{SCRAM_PROJVERSION};
167 <        }
168 <        if ( $tagname eq "" ) {
169 <           $tagname=$ENV{SCRAM_PROJECTNAME};
170 <        }
171 <        my $filename="$ENV{SCRAM_CONFIG}/project.lookup";
172 <        my $outfile="$ENV{SCRAM_CONFIG}/project.lookup.tmp";
173 <        open ( LOCALLOOKUPDB, "<$filename" );
174 <        open ( OUTFILE , ">$outfile" ) or die "Unable to open $outfile $!\n";
175 <        while ( <LOCALLOOKUPDB> ) {
176 <            if ( /^$tagname/ ) {
177 <                print "Related tag :".$_."\n";
178 <                if ( /$version/) {
179 <                  print "$tagname $version already exists. Overwrite (y/n)\n";
180 <                  if ( ! (<STDIN>=~/y/i ) ) {
181 <                        print "Aborting install ...\n";
182 <                        close OUTFILE;
183 <                        close LOCALLOOKUPDB;
184 <                        exit 1;
185 <                  }
186 <                }
187 <                else {
188 <                        print OUTFILE $_;
189 <                }
190 <            }
191 <            else {
192 <                print OUTFILE $_;
193 <            }
194 <        }
195 <        print OUTFILE "$tagname:$version:file:$ENV{LOCALTOP}".
196 <                "/.SCRAM/InstallFile\n";
197 <        close OUTFILE;
198 <        close LOCALLOOKUPDB;
199 <        copy ( "$outfile", "$filename" )
200 <                || die "Unable to copy $! \n";
201 <
202 < }
203 <
204 < sub help_install()  {
205 <
206 < print <<ENDTEXT;
207 < Associates a label with the current release in the SCRAM database.
208 < This allows other users to refer to a centrally installed project by
209 < this label rather than a remote url reference.
210 <
211 < Usage:
212 <
213 <                 scram install [[label] [version]]
214 <
215 < label   : override default label (the project name of the current release)
216 < version : the version tag of the current release. If version is not
217 <          specified the base release version will be taken by default.
218 <
219 < ENDTEXT
220 < exit;
221 < }
222 <
223 < sub helpheader ($label) {
224 <        my $label=shift;
225 < print <<ENDTEXT;
226 < *************************************************************************
227 <                   SCRAM HELP --------- $label
228 < *************************************************************************
229 < ENDTEXT
230 < }
231 <
232 < sub version {
233 <        print "Scram version : prototype\n";
234 < }
235 <
236 < sub list {
237 <        &environmentinit;
238 <        my $filename="$ENV{SCRAM_CONFIG}/project.lookup";
239 <        open ( LOCALLOOKUPDB, "<$filename" );
240 <        print "Installed Projects\n";
241 <        print "------------------\n";
242 <        print "|Project Name  | Project Version |\n";
243 <        print "----------------------------------\n";
244 <        while ( <LOCALLOOKUPDB> ) {
245 <          ( $name, $version, $type, $url ) = split ":", $_;
246 <          printf "%1s",$name;
247 <          printf "%25s\n",$version;
248 <          printf "--> %25s\n",$type.":".$url;
249 <        }
250 <        close LOCALLOOKUPDB;
251 < }
252 <
253 < sub arch {
254 <        &environmentinit();
255 <        print "$ENV{SCRAM_ARCH}\n";
256 < }
257 <
258 <
259 < #
260 < # Setup a new tool
261 < #
262 <
263 < sub setup {
264 <        my $toolname=shift @ARGV;
265 <
266 <        &FullEnvInit;
267 <        if ( $ENV{SCRAM_BootStrapFiles}!~/$ENV{LOCALTOP}\/\.SCRAM/ ) {
268 <          $ENV{SCRAM_BootStrapFiles}="$ENV{LOCALTOP}/.SCRAM:".
269 <                        $ENV{SCRAM_BootStrapFiles};
270 <        }
271 <        # Check for the correct toolfile
272 <        # ideally try and download it if not already in .SCRAM
273 <        # Only scram toolbox files supported so far
274 <        if ( ! -e "$ENV{LOCALTOP}/.SCRAM/$toolname" ) {
275 <                &urlhandler::urlhandler("file:$ENV{SCRAM_HOME}/toolbox/"
276 <                        .$toolname, "$ENV{LOCALTOP}/.SCRAM/$toolname") ;
277 <        }
278 <        # Parse the toolfile and update the clientsettings file
279 <        # currently just append to the end
280 <        use clientfile;
281 <        clientfile::openclientfile('add');
282 <        clientfile::_tool("file:$toolname");
283 <        closeclientfile;
284 < }
285 <
286 < sub help_setup {
287 <
288 < print <<ENDTEXT;
289 < Allows installation of a new tool/external package into an already
290 < existing area.
291 <
292 < Usage:
293 <
294 <                 $bold scram setup $normal toolname
295 <
296 < toolname : The name of the tool setup file required.
297 < ENDTEXT
298 < exit;
299 < }
300 <
301 < sub help_list {
302 < print <<ENDTEXT;
303 < Create an entry in the SCRAM database so that an installed project can be
304 < referenced in the 'project' command by a tag/version combination.
305 < Usage: (command to be issued from inside an installed project)
306 <
307 <        $bold   scram install $normal [project_tag [version_tag]]
308 <
309 < If not specified the project_tag and version_tag default to the project
310 < name and version of the installation.
311 < ENDTEXT
312 < exit;
313 < }
314 < sub help_project {
315 < print <<ENDTEXT;
316 < Setup a new project development area. The new area will appear in the current
317 < working directory.
318 < Usage:
319 <
320 <        $bold scram project [-d install_area] $normal project_url [project_version]
321 <
322 < Options:
323 <
324 < project_url: The url of a scram bootstrap file.
325 <             Currently supported types are:
326 <                $bold Database label $normal
327 <                        Labels can be assigned to bootstrap files for easy
328 <                        access (See "scram install" command). If you
329 <                        specify a label you must also specify a project_version.
330 <                        e.g.
331 <
332 <                           scram project SCRAM V1_0
333 <                                
334 <                           scram project ORCA ORCA_1_1_1
335 <
336 <                        To see the list of installed projects use the
337 <                        "scram list" command.
338 <
339 <                $bold file: $normal A regular file on an accessable file system
340 <                        e.g.
341 <
342 <                           file:~/myprojects/projecta/config/BootStrapFile
343 <
344 < project_version:
345 <                 Only for use with a database label
346 <
347 < -d install_area:
348 <                 Indicate a project installation area into which the new
349 <                 project area should appear. Default is the current working
350 <                 directory.
351 <        
352 < ENDTEXT
353 < }
354 <
355 < sub help_version {
356 < print <<ENDTEXT;
357 < Print the version number of scram
358 < Usage:
359 <                $bold scram version $normal
360 <
361 < ENDTEXT
362 < }
363 <
364 < sub help_arch {
365 < print <<ENDTEXT;
366 < Print out the architecture flag for the current machine.
367 <
368 < Usage:
369 <        $bold   scram arch $normal
370 < ENDTEXT
371 < }
6 > #use Scram::SCRAM;
7 > use ActiveDoc::CommandLineInterface;
8 > use ActiveDoc::SimpleUserInterface;
9 > use Utilities::PathMod;
10 > use Configuration::Tool;
11 >
12 > # Set up our scram objects
13 > $self={};
14 > $self->{UI}=ActiveDoc::SimpleUserInterface->new();
15 > # Search for configuration resource file
16 > $self->{configpath}="$ENV{HOME}:$ENV{SCRAM_HOME}/configuration";
17 > $self->{PathMod}=Utilities::PathMod->new();
18 > $self->{file}=$self->{PathMod}->SearchPath(
19 >                        $self->{configpath},".scramrc");
20 >
21 > #$self->{cli}=ActiveDoc::CommandLineInterface->new(qw(Scram::SCRAM ActiveDoc::UserInterface_basic));
22 > $self->{cli}=ActiveDoc::CommandLineInterface->new(qw(Scram::SCRAM), $self->{UI});
23 > $self->{cli}->parse(@ARGV)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines