<# .SYNOPSIS This script synchronizes README files with the CommonReadMe.md. .DESCRIPTION This script inserts the content of the CommonReadMe.md into the two README files in * crates/parol/README.md * README.md .PARAMETER ParameterName The script takes no parameters. .INPUTS No input objects are needed. .OUTPUTS The script does not return any output. .EXAMPLE ./crates/parol/sync_readmes.ps1 Runs the script from the root of the repository. .NOTES I wrote this script because I wanted to have a common README file for the crate and the repository. The crate README file is located in the crates/parol/README.md file and the repository README file is located in the README.md file. Unfortunately there is no include directive available in Markdown, so I had to write this script to synchronize the two files. #> $scriptPath = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path) $filePath = [System.IO.Path]::Combine($scriptPath, "CommonReadMe.md") $nl = [Environment]::NewLine $commonContent = Get-Content $filePath -Raw -Encoding UTF8 $startPattern = "Unfortunately there is no include directive available in Markdown -->" $commonContent = $startPattern + $nl + $nl + $commonContent $readmeFiles = [System.IO.Path]::Combine($scriptPath, "README.md"), [System.IO.Path]::Combine($scriptPath, "..", "..", "README.md") function takeWhile { param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [object[]]$InputObject, [Parameter(Mandatory = $true)] [scriptblock]$Predicate ) begin { $found = $false } process { if (!$found) { if (& $Predicate $_) { $_ } else { $found = $true } } } } $readmeFiles | ForEach-Object { $readmeContent = Get-Content $_ | takeWhile -Predicate { $_ -ne $startPattern } Set-Content $_ $readmeContent -Encoding UTF8 Add-Content $_ $commonContent -Encoding UTF8 }