mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50: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
 |