1 pontos por GN⁺ 5 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • Um pequeno erro ao digitar repetidamente o comando jj leva a um erro de subcomando, mas isso pode ser absorvido com um alias de configuração do jj
  • O exemplo mostra a falha de jj jj show -T 'change_id.short()', que tenta obter o ID curto do changeset atualmente em edição
  • O jj permite definir alias no arquivo de configuração, como no git, e com jj util exec é possível repassar o restante do comando de volta para o jj
  • Um alias simples faz com que -T seja interpretado não como alvo de execução, mas como opção de jj util exec, então é preciso interromper o parsing de argumentos com --
  • Com a configuração final jj = ["util", "exec", "--", "jj"], não só jj jj show, mas também jj jj jj... show repetido várias vezes passa a imprimir o mesmo ID de changeset

jj digitado repetidamente falha com erro de subcomando

  • Ao usar jj, se você digitar mais um jj na linha de comando, o segundo jj será interpretado como um subcomando e falhará
    • O exemplo é um comando que tenta obter o ID curto do changeset atualmente em edição
$ jj jj show -T 'change_id.short()'
error: unrecognized subcommand 'jj'
Usage: jj [OPTIONS] <COMMAND>
For more information, try '--help'.
  • Também dá para contornar isso com um alias do shell, mas é possível usar o alias da própria configuração do jj
    • Para editar a configuração, pode-se usar jj config edit
    • Para alterar a configuração pelo shell, pode-se usar jj config set

Em jj util exec, fixe o repasse de argumentos com --

  • A primeira tentativa consiste em executar o jj novamente a partir do alias com jj util exec
[aliases]


# jj all the way down
jj = ["util", "exec", "jj"]
  • Nessa configuração, -T é interpretado não pelo jj que será executado, mas como uma opção de jj util exec, e por isso falha
$ jj jj show -T 'change_id.short()'
error: unexpected argument '-T' found
tip: to pass '-T' as a value, use '-- -T'
Usage: jj util exec [OPTIONS] <COMMAND> [ARGS]...
For more information, try '--help'.
  • Ao inserir --, o parsing de opções é interrompido dali em diante, e os argumentos restantes podem ser passados como estão para o alvo de execução
[aliases]


# jj all the way down
jj = ["util", "exec", "--", "jj"]
  • Depois da configuração final, tanto jj show normal quanto jj jj show aninhado e versões ainda mais repetidas de jj jj jj ... show exibem o mesmo ID curto de changeset
$ jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx

1 comentários

 
GN⁺ 5 시간 전
Opiniões no Lobste.rs
  • Antes também já tinha havido git git git git git

  • Isso também dá para fazer de um jeito mais simples:

    [aliases]  
    jj = []  
    

    A única desvantagem desse formato é que, se minha memória não falha, ao rodar sem outros argumentos, como em jj jj, ele não executa o comando padrão como jj faria

    • Então esse jeito mais simples na verdade não faz a mesma coisa, não é?
  • Uau, quase 1 ano atrás (28/09/25) eu tinha postado a mesma solução no Discord do JJ
    Para fazer um erro de digitação jj jj ... se comportar como jj ..., na verdade é preciso isto:

    [aliases]  
    jj = ["util", "exec", "--", "jj"]  
    

    Na verdade, gosto bastante dessa abordagem

  • Isso é uma referência a bunny party?

  • Também adicionei ao gist de configuração do jj que eu mantenho: https://gist.github.com/pksunkara/622bc04242d402c4e43c7328234fd01c

  • Mesmo assim, queria ver uma versão explicando o que é o Jujutsu e por que eu deveria usá-lo, em tamanho de tweet e como se fosse para uma criança de 5 anos
    No meu emprego anterior, usei Git diariamente por 4 anos e odiava de verdade. Era grotescamente complexo demais para o que precisávamos e para a maioria dos usos, e, para a maioria das pessoas, não era um sistema de controle de versão distribuído, mas sim uma ferramenta centralizada baseada em servidor e centrada no Github
    Acho engraçado que muitos usuários de Git não saibam que git também significa, no inglês britânico, “uma pessoa irritadiça, pouco cooperativa e inútil”. É uma palavra que descreve bem o Git como ferramenta
    Dito isso, nunca usei outros sistemas de controle de versão, então sou fraco em comparações. Jujutsu também é difícil de pesquisar no Google, e a documentação parece voltada a usuários de controle de versão mais experientes do que eu

    • Acho que Torvalds escolheu git justamente pelo sentido de pessoa grosseira e irritadiça