|
#!/usr/bin/python3
|
|
|
|
'''
|
|
OBSERVAÇÃO: O número de linhas do texto de ajuda do Git varia conforme a largura da tela.
|
|
Use uma janela com 80 colunas para fazer as medições.
|
|
'''
|
|
|
|
import locale
|
|
import re
|
|
from itertools import chain
|
|
from subprocess import run, PIPE
|
|
|
|
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
|
|
|
|
|
|
def get_svn_commands():
|
|
svn_commands = (
|
|
'svn',
|
|
'svnadmin',
|
|
# 'svnauthz',
|
|
# 'svnauthz-validate',
|
|
# 'svnbench',
|
|
# 'svndumpfilter',
|
|
# 'svnfsfs',
|
|
'svnlook',
|
|
# 'svnmucc',
|
|
# 'svnrdump',
|
|
# 'svnserve',
|
|
# 'svnsync',
|
|
# 'svnversion',
|
|
)
|
|
re_subcmds = re.compile(r'^ {3}([\w-]+)', flags=re.MULTILINE)
|
|
commands = {}
|
|
for command in svn_commands:
|
|
commands[command] = []
|
|
try:
|
|
text = run([command, 'help'], stdout=PIPE, stderr=PIPE, universal_newlines=True, check=True).stdout
|
|
commands[command] = re_subcmds.findall(text)
|
|
except:
|
|
pass
|
|
return commands
|
|
|
|
|
|
def get_git_commands():
|
|
text = run(['git', 'help'], stdout=PIPE, universal_newlines=True).stdout
|
|
comandos_comuns = re.findall(r'^\s{3}([\w-]*)\b', text, flags=re.MULTILINE)
|
|
comandos_comuns.sort()
|
|
text = run(['git', 'help', '-a'], stdout=PIPE, universal_newlines=True).stdout
|
|
todos_cmds = re.findall(r' {2}([\w-]+)\s+([\w-]+)?', text, flags=re.MULTILINE)
|
|
todos_cmds = list(chain(*todos_cmds))
|
|
todos_cmds.sort()
|
|
while not(todos_cmds[0]):
|
|
todos_cmds.pop(0)
|
|
return comandos_comuns, todos_cmds
|
|
|
|
|
|
def get_hg_commands():
|
|
text = run(['hg', 'help'], stdout=PIPE, universal_newlines=True).stdout
|
|
trecho = re.findall(r'list of commands:(.*)additional help topics:', text, flags=re.DOTALL)[0]
|
|
comandos = re.findall(r'^ (\w+)', trecho, flags=re.MULTILINE)
|
|
comandos.sort()
|
|
return comandos
|
|
|
|
|
|
def num_linhas_help(comando, subcomando=None):
|
|
if not subcomando:
|
|
num_linhas = run('%s --help | wc -l' % comando, shell=True, universal_newlines=True,
|
|
stdout=PIPE, stderr=PIPE).stdout.strip()
|
|
else:
|
|
if comando == 'hg':
|
|
comando = 'chg'
|
|
subcomando = '-v ' + subcomando # versão estendida do help do Mercurial
|
|
num_linhas = run('%s help %s | wc -l' % (comando, subcomando), shell=True,
|
|
universal_newlines=True, stdout=PIPE, stderr=PIPE).stdout.strip()
|
|
return int(num_linhas)
|
|
|
|
|
|
def get_help_comandos_comuns():
|
|
subcomandos = (
|
|
'add',
|
|
'backout',
|
|
# 'bisect',
|
|
'blame',
|
|
'branch',
|
|
'cat',
|
|
'checkout',
|
|
'clone',
|
|
'commit',
|
|
'copy',
|
|
'diff',
|
|
'log',
|
|
'merge',
|
|
'mv',
|
|
'pull',
|
|
'push',
|
|
'rebase',
|
|
'reset',
|
|
'revert',
|
|
'rm',
|
|
'show',
|
|
'status',
|
|
'update',
|
|
'tag',
|
|
)
|
|
total_linhas = [0, 0, 0]
|
|
total_comandos = [0, 0, 0]
|
|
seq_vcs = ('svn', 'hg', 'git')
|
|
print('Subcomando,', ', '.join(seq_vcs), end='')
|
|
for subcomando in subcomandos:
|
|
print('\n', subcomando, sep='', end='')
|
|
for i, vcs in enumerate(seq_vcs):
|
|
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
|
|
num_linhas = num_linhas_help(vcs, subcomando)
|
|
if vcs == 'hg' and subcomando in ['show', 'checkout']:
|
|
# hg showconfig não faz parte da relação e checkout é apelido para update
|
|
num_linhas = 0
|
|
locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
|
|
print(',', '{:n}'.format(num_linhas) if num_linhas else '', end='')
|
|
if num_linhas:
|
|
total_linhas[i] += num_linhas
|
|
total_comandos[i] += 1
|
|
print('\nTotal linhas, {:n}, {:n}, {:n}'.format(*total_linhas))
|
|
print('Número de comandos, {}, {}, {}'.format(*total_comandos))
|
|
print('Média linhas/comando, {:n}, {:n}, {:n}'.format(*(
|
|
round(linhas / comandos) for linhas, comandos in zip(total_linhas, total_comandos)))
|
|
)
|
|
return
|
|
|
|
|
|
def titulo(texto):
|
|
print('\n\n', texto, sep='')
|
|
print('=' * len(texto), '\n', sep='')
|
|
|
|
|
|
def main():
|
|
titulo('Comandos do Subversion')
|
|
commands = get_svn_commands()
|
|
total_subcomandos = 0
|
|
for command in sorted(commands.keys()):
|
|
print('\n%s: %s subcomandos' % (command, len(commands[command])))
|
|
print(' ', ', '.join(commands[command]))
|
|
total_subcomandos += len(commands[command])
|
|
print('\nTotal:', total_subcomandos)
|
|
|
|
titulo('Comandos do Git')
|
|
comuns, comandos = get_git_commands()
|
|
print('Comuns:', len(comuns), 'subcomandos')
|
|
print(' ', ', '.join(comuns))
|
|
print('\nTodos:', len(comandos), 'subcomandos')
|
|
print(' ', ', '.join(comandos))
|
|
|
|
titulo('Comandos do Mercurial')
|
|
comandos = get_hg_commands()
|
|
print('hg:', len(comandos), 'subcomandos')
|
|
print(' ', ', '.join(comandos))
|
|
|
|
titulo('Número de linhas de help dos comandos mais comuns')
|
|
get_help_comandos_comuns()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|