in build_docs.pl [709:790]
sub init_repos {
#===================================
my ( $repos_dir, $temp_dir, $reference_dir, $target_repo ) = @_;
printf(" - %20s: Checking out minimal\n", 'target_repo');
$target_repo->checkout_minimal();
my %child_dirs = map { $_ => 1 } $repos_dir->children;
delete $child_dirs{ $temp_dir->absolute };
my $conf = $Conf->{repos}
or die "Missing <repos> in config";
my @repo_names = sort keys %$conf;
delete $child_dirs{ $target_repo->git_dir->absolute };
my $tracker_path = $target_repo->destination . '/html/branches.yaml';
# check out all remaining repos in parallel
my $tracker = ES::BranchTracker->new( file($tracker_path), @repo_names );
my $pm = proc_man( $Opts->{procs} * 3 );
unless ( $pm->start('target_repo') ) {
printf(" - %20s: Checking out remaining\n", 'target_repo');
$target_repo->checkout_all();
$pm->finish;
}
for my $name (@repo_names) {
next if $name eq 'docs';
my $url = $conf->{$name};
# We always use ssh-style urls regardless of conf.yaml so we can use
# our ssh key for the cloning.
$url =~ s|https://([^/]+)/|git\@$1:|;
my $repo = ES::Repo->new(
name => $name,
git_dir => $repos_dir->subdir("$name.git"),
tracker => $tracker,
url => $url,
reference => $reference_dir,
keep_hash => $Opts->{keep_hash} || 0,
);
delete $child_dirs{ $repo->git_dir->absolute };
if ( $Opts->{linkcheckonly} ){
say "Skipping fetching repo $name."
}
else {
$pm->start($name) and next;
$repo->update_from_remote();
$pm->finish;
}
}
$pm->wait_all_children;
# Parse the --sub_dir options and attach the to the repo
my %sub_dirs = ();
foreach (@{ $Opts->{sub_dir} }) {
die "invalid --sub_dir $_"
unless /(?<repo>[^:]+):(?<branch>[^:]+):(?<dir>.+)/;
my $dir = dir($+{dir})->absolute;
die "--sub_dir $dir doesn't exist" unless -e $dir;
ES::Repo->get_repo($+{repo})->add_sub_dir($+{branch}, $dir);
}
for ( keys %child_dirs ) {
my $dir = dir($_);
next unless -d $dir;
say "Removing old repo <" . $dir->basename . ">";
$dir->rmtree;
}
# Setup the docs repo
# We support configuring the remote for the docs repo for testing
ES::DocsRepo->new(
tracker => $tracker,
dir => $conf->{docs} || '/docs_build',
keep_hash => $Opts->{keep_hash} || 0
);
return $tracker;
}