collect-repositories/bin/collector-repos
2022-08-16 00:52:49 +02:00

82 lines
2.3 KiB
Ruby
Executable file

#!/usr/bin/env ruby
# frozen_string_literal: true
# vim: set ts=2 sw=2 et ft=ruby:
require 'find'
require 'thor'
require 'table_print'
require 'tty-spinner'
class ListRepos < Thor
desc 'list [SELECTOR]', 'List repositories'
method_option :root, type: :string, aliases: '-r'
def list(selector_str="")
basedir = options['root'] || '.'
projects = []
spinner = TTY::Spinner.new(
hide_cursor: true,
clear: true
)
selector = self.class.build_selector(selector_str)
selector_str2 = selector.map { |k, v| "#{k}=#{v}" }.join(' ')
puts "selector = #{selector_str2}"
## COLLECT
spinner.auto_spin
Find.find(basedir) do |path|
next unless path =~ %r{.*/.git/config$}
project_root = File.dirname(File.dirname(path))
lines = File.readlines(path)
projects << {
path: project_root,
github: lines.select { |line| line =~ /github\.com/ }.any?,
gitlab: lines.select { |line| line =~ /gitlab\.com/ }.any?,
bitbucket: lines.select { |line| line =~ /bitbucket\.com/ }.any?,
gitea_glenux: lines.select { |line| line =~ /code\.(dinlas\.)?apps\.glenux\.net/ }.any?,
}
end
spinner.stop
## REDUCE
projects_selected = projects.select do |vals|
res = true
selector.each do |k,v|
res &&= (vals[k] == v)
end
res
end
## DISPLAY
# require 'pp'
# pp projects_selected
tp.set :max_width, 100
tp projects_selected, :path, :github, :gitlab, :bitbucket, :gitea_glenux
end
def self.build_selector(str)
str.split(',').map do |keyval|
name, value = keyval.split('=')
{ name.to_sym => (value =~ /true/i) ? true : false }
end
.inject({}, &:merge)
end
end
ListRepos.start(ARGV)
# find ~/src -ipath '*/.git/config' -exec sh -c "grep -l 'github.com' {} \
# | sed -e 's,^,github ,' -e 's,.git/config$,,'" \;
#
# find ~/src -ipath '*/.git/config' -exec sh -c "grep -l 'bitbucket.com' {} \
# | sed -e 's,^,bitbucket ,' -e 's,.git/config$,,'" \;
#
# find ~/src -ipath '*/.git/config' -exec sh -c "grep -l 'gitlab.com' {} \
# | sed -e 's,^,gitlab ,' -e 's,.git/config$,,'" \;
#
# find ~/src -ipath '*/.git/config' -exec sh -c "grep -l 'code.dinlas.apps.glenux.net' {} \
# | sed -e 's,^,gitea-glenux ,' -e 's,.git/config$,,'" \;