Qual versão do X introduziu o recurso Y?

10

Uma grande parte do meu trabalho diário é o desenvolvimento de software para uso em máquinas com diferentes versões do mesmo software, como bash, find, e grep. Ao encontrar um recurso que seria útil, por exemplo, para simplificar o código, é importante saber se esse recurso está disponível nas ferramentas mais antigas instaladas. Para coisas críticas, também seria útil saber se esse recurso era novo ou existe há anos nas ferramentas instaladas mais antigas.

Quais são as maneiras rápidas de responder a isso com autoridade nas ferramentas Linux, especialmente nos GNU Core Utils? Algumas possibilidades em ordem decrescente de precisão:

  • A pesquisa binária binária (sic), executando as diferentes versões, é obviamente a resposta final, mas é, de longe, a que consome mais tempo. Instalações mais antigas geralmente não estão disponíveis por razões de segurança.
  • Ler o código é quase tão bom, mas pode ser demorado proibir se o recurso for nomeado vagamente, o nome não corresponder diretamente aos nomes das variáveis ​​/ funções / objetos ou foi implementado antes de ser ativado.
  • Os logs de alterações , quando disponíveis, geralmente conectam alterações de recursos às versões de software.
  • Os registros de confirmação podem fornecer dicas, mas não sabem em qual versão eles serão incluídos.
  • as páginas de manual raramente mencionam datas.
  • O mesmo se aplica a Googling , e você também teria um tempo difícil excluindo todas as fontes não-autorizadas.
l0b0
fonte
Você poderia elaborar os motivos por trás dessa pergunta?
Faheem Mitha 23/03
ISTM que, se você precisar portar o software para essas plataformas diferentes, deverá ter uma instalação "mais antiga" disponível em algum lugar. Portanto, uma resposta bastante rápida e autorizada seria experimentá-la nessa plataforma. Idealmente em todas as plataformas (se você escreveu um caso de teste como um script, poderia enviá-lo a todas as suas plataformas de portabilidade e obter uma série de respostas sim / não).
roaima 31/08

Respostas:

7

Geralmente, há um changelog. De fato, este (ou outros "avisos importantes" de mudanças) é exigido pela GPL! (Pelo menos, efetivamente para qualquer coisa com vários colaboradores - consulte a seção 2a da GPLv2.)

Para o pacote coreutils do GNU - e para praticamente todo o resto do projeto GNU diretamente - este arquivo é definitivamente o primeiro lugar a procurar e deve responder à sua pergunta 95% do tempo.

mattdm
fonte
Você tem uma referência ao log de alterações do coreutils? O último que eu poderia encontrar era de 2007.
l0b0
2
O GNU Coreutils ChangeLog não é atualizado desde 2007. cvs.savannah.gnu.org/viewvc/coreutils/… Você precisa examinar os logs do git agora.
Mikel
2
Pode ser gerado automaticamente a partir dos logs do git. Há uma entrada ChangeLog.bz2no /usr/share/doc/coreutils-8.10meu sistema Fedora, e a entrada principal é de 2011-02-04. Também é possível que este seja um garfo de RH - vou verificar isso mais tarde hoje.
mattdm
@mattdm: Há /usr/share/doc/coreutils/changelog.gz no Ubuntu - Obrigado! Infelizmente, remonta apenas a 2008, o que é muito recente para algumas das ferramentas relevantes. Eu acho que assume o lugar onde o último terminou, no entanto.
L0b0 23/03
3
Aqui está a prova: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING Role para a linha 131.
Shinnok
4

Por que não usar o controle de origem aferente a X para procurar o recurso Y? O repositório de origem é a melhor maneira de identificar quando um recurso específico foi introduzido.

Para coreutils, acesse http://git.savannah.gnu.org/cgit/coreutils.git e procure por palavras-chave relacionadas a Y em mensagens de log ou linhas de código específicas que você identificou como pertencentes a Y. Você pode fazer isso em a interface web diretamente, ou melhor ainda, clone do repo fonte à sua estação e pesquisar usando git-bisect , git-culpa e git-log --grep .

Em seguida, use git-description para descobrir que a tag é a mais próxima de um commit específico. As tags são usadas principalmente para números de versão, portanto, você fornecerá a versão que introduziu o commit.

Você pode adaptar o método acima, dependendo do X e do seu controle de origem.

Shinnok
fonte
Como você identifica qual commit / linha foi inserida em qual versão do software? Além disso, a pesquisa Savannah está com uma falha grave - não há resultados para cadeias que obviamente estão nas mesmas mensagens de log.
L0b0 23/03
Use git-description para descobrir que a tag é a mais próxima de um commit específico. As tags são usadas principalmente para números de versão. Quanto a Savannah estar quebrada, você não pode fazer muito a respeito. O Git clona o repositório na sua caixa e trabalha do seu jeito usando os comandos git que descrevi no post.
Shinnok 23/03
1

No Debian e plataformas como o Debian-derivado Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

fornece o registro de alterações do GNU Core Utilities desde a versão anterior 4.5.1-1.

Não tenho certeza se existem soluções igualmente convenientes em outras plataformas.

mklement0
fonte