Initial import
This commit is contained in:
commit
dfc0aa33ad
3 changed files with 109 additions and 0 deletions
10
Gemfile
Normal file
10
Gemfile
Normal file
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
# git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
||||
|
||||
#gem 'table_print'
|
||||
gem 'thor'
|
||||
gem 'tty-spinner'
|
||||
|
17
Gemfile.lock
Normal file
17
Gemfile.lock
Normal file
|
@ -0,0 +1,17 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
thor (1.2.1)
|
||||
tty-cursor (0.7.1)
|
||||
tty-spinner (0.9.3)
|
||||
tty-cursor (~> 0.7)
|
||||
|
||||
PLATFORMS
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
thor
|
||||
tty-spinner
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.20
|
82
bin/collector-repos
Executable file
82
bin/collector-repos
Executable file
|
@ -0,0 +1,82 @@
|
|||
#!/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$,,'" \;
|
Loading…
Reference in a new issue