mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 01:30:22 +00:00
51 lines
1.1 KiB
Ruby
Executable File
51 lines
1.1 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require "optparse"
|
|
|
|
ROOT = File.expand_path "../../", __FILE__
|
|
|
|
|
|
# Extract and sort a list of submodules
|
|
def sort_entries(file_data)
|
|
submodules = []
|
|
file_data.scan(/(^\[submodule[^\n]+\n)((?:\t[^\n]+\n)+)/).each do |head, body|
|
|
path = body.match(/^\tpath\s*=\s*\K(.+)$/)[0]
|
|
submodules << [path, head + body]
|
|
end
|
|
submodules.sort! { |a,b| a[0] <=> b[0] }
|
|
submodules.collect { |i| i[1] }
|
|
end
|
|
|
|
|
|
usage = <<-EOH
|
|
Usage:
|
|
#{$0} [-t|--test] [-h|--help]
|
|
|
|
Examples:
|
|
#{$0} # Update .gitmodules file in-place
|
|
#{$0} --help # Display this help message
|
|
#{$0} --test # Exit with an error code if .gitmodules needs sorting
|
|
EOH
|
|
|
|
$testing = false
|
|
OptionParser.new do |opts|
|
|
opts.banner = usage
|
|
opts.on("-h", "--help") do
|
|
puts usage
|
|
exit
|
|
end
|
|
opts.on("-t", "--test", "Don't update file; only test if it's unsorted") do
|
|
$testing = true
|
|
end
|
|
end.parse!
|
|
|
|
|
|
unsorted = File.read("#{ROOT}/.gitmodules")
|
|
sorted = sort_entries(unsorted).join
|
|
|
|
if $testing
|
|
exit unsorted == sorted
|
|
else
|
|
File.write "#{ROOT}/.gitmodules", sorted
|
|
end
|