require "json"

def each_submodule(base_path)
  `cd #{base_path} && git submodule status`.lines do |line|
    hash, path = line[1..].split " "
    full_path = "#{base_path}/#{path}"
    url = `git config --file #{base_path}/.gitmodules --get 'submodule.#{path}.url'`.chomp.delete_suffix(".git")

    if url =~ /dev.danilafe.com/
      file_url = "#{url}/src/commit/#{hash}"
    else
      raise "Submodule URL #{url.dump} not in a known format!"
    end

    yield ({ :path => full_path, :url => file_url })
    each_submodule(full_path) { |m| yield m }
  end
end

hash = {}
each_submodule(".") do |m|
  next unless m[:path].start_with? "./code/"
  hash[m[:path].delete_prefix("./code/")] = m[:url]
end

puts JSON.pretty_generate(hash)
