Created
September 3, 2019 16:35
-
-
Save ryangreenberg/260d11109fa3858a38721bbc9b7f745c to your computer and use it in GitHub Desktop.
Create markdown files to redirect a batch of documents in a repository
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'fileutils' | |
require 'pathname' | |
USAGE = "#{$PROGRAM_NAME} <src dir> <dest dir>" | |
abort USAGE unless ARGV.size == 2 | |
src = ARGV[0] | |
dst = ARGV[1] | |
is_clean = `git diff HEAD`.strip.empty? | |
abort "Cannot run with other changes to files in git. Please commit or stash." unless is_clean | |
entries = Dir.glob(File.join(src, "**/*")) | |
files = entries.select {|e| File.file?(e) } | |
# Move src files | |
warn "Moving #{files.size} files from #{src} to #{dst}" | |
system("git mv #{src} #{dst}") | |
system("git commit -am 'Move files from #{src} to #{dst}'") | |
warn "" | |
# Create placeholders from dest back to src | |
root = `git rev-parse --show-toplevel`.strip | |
md_files = files.select {|f| f.end_with?('.md') } | |
warn "Creating redirects for #{md_files.size} .md files" | |
md_files.each do |src_file| | |
relative_src = src_file.sub(root, '') | |
relative_dst = relative_src.sub(src, dst) | |
src_pathname = Pathname.new(File.join(root, src_file)) | |
dst_pathname = Pathname.new(File.join(root, relative_dst)) | |
link_relative_path = dst_pathname.relative_path_from(src_pathname.dirname) | |
puts " - #{relative_src} => #{relative_dst}" | |
header = File.read(dst_pathname).split("\n").map {|line| line.strip }.detect {|line| line =~ /^#/ } | |
redirect_text = "This document has moved to [#{relative_dst}](#{link_relative_path})" | |
new_contents = "#{header}\n\n#{redirect_text}" | |
FileUtils.mkdir_p(src_pathname.dirname) | |
File.write(src_file, new_contents) | |
end | |
puts "" | |
system("git add #{src}") | |
system("git commit -am 'Add pointers to new content at #{dst}'") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment