2 # Source step. Creates a source tarball equivalent to what was used to
3 # build the binary release, in the Build step.
5 package Bootstrap
::Step
::Source
;
8 use File
::Copy
qw(move);
9 use File
::Find
qw(find);
10 use MozBuild
::Util
qw(MkdirWithPath);
11 @ISA = ("Bootstrap::Step");
16 my $config = new Bootstrap
::Config
();
17 my $product = $config->Get(var
=> 'product');
18 my $appName = $config->Get(var
=> 'appName');
19 my $productTag = $config->Get(var
=> 'productTag');
20 my $version = $config->GetVersion(longName
=> 0);
21 my $rc = $config->Get(var
=> 'rc');
22 my $logDir = $config->Get(sysvar
=> 'logDir');
23 my $sourceDir = $config->Get(var
=> 'sourceDir');
24 my $mozillaCvsroot = $config->Get(var
=> 'mozillaCvsroot');
27 my $versionedSourceDir = catfile
($sourceDir, $product . '-' . $version,
28 'batch-source', 'rc' . $rc);
30 if (not -d
$versionedSourceDir) {
31 MkdirWithPath
(dir
=> $versionedSourceDir)
32 or die("Cannot create $versionedSourceDir: $!");
35 $this->CvsCo(cvsroot
=> $mozillaCvsroot,
36 tag
=> $productTag . '_RELEASE',
37 modules
=> ['mozilla/client.mk',
38 catfile
('mozilla', $appName, 'config')],
39 workDir
=> $versionedSourceDir,
40 logFile
=> catfile
($logDir, 'source.log')
45 cmdArgs
=> ['-f', 'client.mk', 'checkout',
46 'MOZ_CO_PROJECT=' . $appName . ',xulrunner'],
47 dir
=> catfile
($versionedSourceDir, 'mozilla'),
48 logFile
=> catfile
($logDir, 'source.log'),
51 # change all CVS/Root files to anonymous CVSROOT
52 File
::Find
::find
(\
&CvsChrootCallback
, catfile
($versionedSourceDir,
55 # remove leftover mozconfig files
56 unlink(glob(catfile
($versionedSourceDir, 'mozilla', '.mozconfig*')));
58 my $tarFile = $product . '-' . $version . '-' . 'source' . '.tar.bz2';
62 cmdArgs
=> ['-cjf', $tarFile, 'mozilla'],
63 dir
=> catfile
($versionedSourceDir),
64 logFile
=> catfile
($logDir, 'source.log'),
67 chmod(0644, glob("$versionedSourceDir/$tarFile"));
73 my $config = new Bootstrap
::Config
();
74 my $logDir = $config->Get(sysvar
=> 'logDir');
76 my $logFile = catfile
($logDir, 'source.log');
80 checkFor
=> '^checkout finish',
92 my $config = new Bootstrap
::Config
();
93 my $product = $config->Get(var
=> 'product');
94 my $version = $config->GetVersion(longName
=> 0);
95 my $rc = $config->Get(var
=> 'rc');
96 my $logDir = $config->Get(sysvar
=> 'logDir');
97 my $sourceDir = $config->Get(var
=> 'sourceDir');
98 my $stagingUser = $config->Get(var
=> 'stagingUser');
99 my $stagingServer = $config->Get(var
=> 'stagingServer');
101 my $candidateDir = $config->GetFtpCandidateDir(bitsUnsigned
=> 0);
103 my $versionedSourceDir = catfile
($sourceDir, $product . '-' . $version);
105 $this->CreateCandidatesDir();
109 cmdArgs
=> ['-av', '-e', 'ssh', catfile
('batch-source', 'rc' . $rc,
110 $product . '-' . $version . '-source.tar.bz2'),
111 $stagingUser . '@' . $stagingServer . ':' . $candidateDir],
112 logFile
=> catfile
($logDir, 'source.log'),
113 dir
=> catfile
($versionedSourceDir),
120 my $config = new Bootstrap
::Config
();
121 my $product = $config->Get(var
=> 'product');
122 my $version = $config->GetVersion(longName
=> 0);
124 $this->SendAnnouncement(
125 subject
=> "$product $version source step finished",
126 message
=> "$product $version source archive was copied to the candidates dir.",
130 # Change the CVS/Root file to be the anonymous CVS Root
131 sub CvsChrootCallback
{
132 my $config = new Bootstrap
::Config
();
133 my $anonCvsroot = $config->Get(var
=> 'anonCvsroot');
135 my $dirent = $File::Find
::name
;
136 if ((-f
$dirent) and ($dirent =~ /.*CVS\/Root
$/)) {
137 open(FILE
, "> $dirent");
138 print FILE
"$anonCvsroot\n";