mirror of
https://github.com/foo-dogsquared/website.git
synced 2025-01-30 22:57:59 +00:00
49 lines
1.3 KiB
Ruby
49 lines
1.3 KiB
Ruby
#!/usr/bin/env nix-shell
|
|
#! nix-shell -i ruby -p "ruby.withPackages (ps: with ps; [ rugged ])" coreutils fzf
|
|
|
|
# frozen_string_literal: true
|
|
|
|
require 'fileutils'
|
|
require 'logger'
|
|
require 'optparse'
|
|
require 'rugged'
|
|
|
|
CONTENT_DIRECTORY = 'content'
|
|
|
|
options = {
|
|
prefix: 'content/',
|
|
repo: './code-workspace'
|
|
}
|
|
logger = Logger.new($stdout)
|
|
logger.level = Logger::WARN
|
|
|
|
OptionParser.new do |opts|
|
|
opts.on('-p', '--prefix PREFIX',
|
|
<<~HELP
|
|
Sets the prefix corresponding to a subdirectory inside
|
|
the content directory.
|
|
HELP
|
|
) do |prefix|
|
|
options[:prefix] = prefix
|
|
end
|
|
|
|
opts.on('--repo REPO', 'The repository location.') do |repo|
|
|
options[:repo] = repo
|
|
end
|
|
|
|
opts.on('-v', '--[no-]verbose', 'Make the program print results') do |v|
|
|
options[:verbose] = v
|
|
end
|
|
end.parse!
|
|
|
|
logger.level = Logger::INFO if options[:verbose]
|
|
|
|
files = Dir.glob('**/', base: CONTENT_DIRECTORY)
|
|
.select { |file| File.directory?(File.expand_path(file, CONTENT_DIRECTORY)) }
|
|
|
|
selected_branch = `echo -e "#{files.join '\n'}" | fzf`.strip.delete_suffix '/'
|
|
|
|
code_workspace = Rugged::Repository.discover(options[:repo])
|
|
code_workspace.head=("refs/heads/#{options[:prefix]}#{selected_branch}")
|
|
logger.info "Switched '#{options[:repo]}' to orphan branch '#{code_workspace}'"
|