lib/ES/DocsRepo.pm (81 lines of code) (raw):

package ES::DocsRepo; use strict; use warnings; use v5.10; use Path::Class(); use parent qw( ES::Repo ); #=================================== sub new { #=================================== my ( $class, %args ) = @_; my $tracker = $args{tracker} or die 'Missing <tracker>'; my $dir = $args{dir} or die 'Missing <dir>'; $dir = Path::Class::dir( $dir ); my $self = $class->SUPER::new( name => 'docs', git_dir => $dir->subdir( '.git' ), tracker => $tracker, url => 'git@github.com:elastic/docs.git', keep_hash => $args{keep_hash}, ); $self->{dir} = $dir; return $self; } #=================================== sub add_source { #=================================== my ( $self, $sources, $prefix, $path, $exclude, $map_branches, $private, $alternatives ) = @_; if ( $path eq 'shared/versions/stack/current.asciidoc' ) { push @$sources, { repo => $self, prefix => $prefix, path => $self->_current_stack_version_file, exclude => $exclude, map_branches => $map_branches, private => $private, alternatives => $alternatives, }; } if ( $path eq 'shared/versions/ece/current.asciidoc' ) { push @$sources, { repo => $self, prefix => $prefix, path => $self->_current_ece_version_file, exclude => $exclude, map_branches => $map_branches, private => $private, alternatives => $alternatives, }; } $self->SUPER::add_source( $sources, $prefix, $path, $exclude, $map_branches, $private, $alternatives ); } #=================================== # Use the files from the local filesystem. #=================================== sub prepare { #=================================== my ( $self, $title, $branch, $path, $dest_root, $prefix ) = @_; return $self->{dir}; } #=================================== # Lock the branch to the HEAD branch because that is what we've checked out. #=================================== sub normalize_branch { #=================================== my ( $self, $branch ) = @_; return 'HEAD'; } #=================================== # Add support for the special `{branch}` attribute to resolve paths that # contain the branch of a book. #=================================== sub normalize_path { #=================================== my ( $self, $path, $branch ) = @_; $path =~ s/\{branch\}/$branch/; return $path; } #=================================== sub _current_stack_version_file { #=================================== my ( $self ) = @_; unless ( $self->{current_stack_version_file} ) { my $current = $self->{dir}->file( 'shared/versions/stack/current.asciidoc' ); my $contents = $current->slurp( iomode => '<:encoding(UTF-8)' ); die "Can't parse current.asciidoc: $contents" unless $contents =~ /include::(.+)\[\]/; $self->{current_stack_version_file} = "shared/versions/stack/$1"; } return $self->{current_stack_version_file}; } #=================================== sub _current_ece_version_file { #=================================== my ( $self ) = @_; unless ( $self->{current_ece_version_file} ) { my $current = $self->{dir}->file( 'shared/versions/ece/current.asciidoc' ); my $contents = $current->slurp( iomode => '<:encoding(UTF-8)' ); die "Can't parse current.asciidoc: $contents" unless $contents =~ /include::(.+)\[\]/; $self->{current_ece_version_file} = "shared/versions/ece/$1"; } return $self->{current_ece_version_file}; } 1