Pergunta

Às vezes você precisa introduzir mudanças incompatibile atrasados, quando as melhorias supera em muito as desvantagens. É possível alternar facilmente ao comportamento antigo, mas o usuário deve estar ciente de tais alterações.

Portanto, a questão é: como anunciar futuros atrasados ??mudanças incompatíveis com o projeto FLOSS (open source) , de modo que os usuários podem se preparar para eles, e quer mudar o seu uso, ou o programa de configuração para usar velho comportamento.

Porque é projeto OSS, é embalado por várias distribuições de forma independente, e pode ser atualizado automaticamente sem a intervenção do usuário. E (scripts de terceiros, por exemplo) de fluxo de trabalho depois para trás incompatíveis mudança poderia atrapalhar somebodys.

Avenidas actualmente consideradas (e usados):

  • lista de discussão do projeto
  • homepage do projeto
  • notas de lançamento (primeiro aviso, então o anúncio)
  • O blog de mantenedor

Editar 1: Este (incompatível para trás) a mudança iria acontecer em algum principal liberação.

Todas as alterações são sobre qualquer adição de salvaguardas (comandos que recusam que pode usuários novatos completamente Confuse), ou mudando o padrão é mais valores sãos.

Editar 2: No período de transição a configuração padrão (que é feito para ser alterado para lixo default / negar) é alterado para avisar , com a descrição como transformar de um aviso, que também protegeria contra as alterações incompatibile para trás no comportamento padrão.

Mas se for sistema automatizado que pode não ajudar ...


O projeto em questão é Git , sistema de controle de versão distribuído;
consulte um alerta rápido para os usuários em o gitster revista (blog Junio ??C Hamano)

Foi útil?

Solução

  • Alterar a maior do número de versão
  • Anuncie-lo através de todas as vias ao seu dispor
  • Adicionar o anúncio proeminente no readme
  • Adicione código que converte entre o velho eo novo se DB ou outras alterações são obrigados
  • Adicione o código que detecta o uso de métodos depreciados, armazenamento de dados, etc e alerta o usuário antes de realizar alterações destrutivas
  • Faça perguntas relevantes FAQ tipo nos principais sites Q / A por isso, quando as pessoas têm perguntas a resposta é imediata e óbvia usando uma pesquisa simples

Mas o número de versão principal é o alvo principal - as pessoas esperam 1.x para 2.x transições para questões de causa, e são mais cuidado ao atualizar

.

-Adam

Outras dicas

Você tem boas respostas sobre começar a palavra para fora. Mas migrar minha própria mentalidade é o maior problema para mim, especialmente quando as funções obsoletas estão em minha memória muscular. Desaprender é mais difícil do que a aprendizagem.

recebendo avisos de próximos incompatibilidades quando estou realmente usando os comandos que vão mudar é particularmente útil, especialmente com mudanças em padrões. Algo como:

 $ git foo  
 Note: git foo currently defaults to HEAD. Starting with
 version 2.0, git foo will instead default to master.

Eu poderia ir para a RSS (se existir), Twitter (se existir), lista de discussão (e-mail pelo menos 3 vezes como a atualização está se fechando), homepage (torná-lo muito contrastantes, por isso é fácil de ver) e blogue , claro. notas de lançamento são pouco lidos, para levá-lo como o último ponto de informação.

(eu postei isso como primeira resposta, mas não apareceu)

Todos os acima plus.

Se você tem uma mudança em que:

A sintaxe exata de um comando não destrutivo mudaria para ser um comando destrutivo

Eu não vejo nenhuma opção a não fazer a mudança, em vez mais perturbador para tornar o velho comando inteiramente inválida para que, se um usuário atualiza e tentativas (ou muito possivelmente um script tentativas) o comando velho estilo termina com uma mensagem de erro descritiva em stderr. Usando stderr para mensagens de aviso sobre os comandos com mudanças sutis (ou não tão sutis) que são não destrutivo também é uma boa idéia. A definição de destrutivo é um pouco mais complexa em um repositório de origem

Usando avisos stderr para métodos deprecation simples muitas vezes é bom, mas algumas pessoas vão reclamar ele quebra seus scripts (mal escritos). Nestes casos, uma libertação de suspensão de uso silencioso (todas as formas não invasivas de depreciação) seguido por um (advertências stderr) libertação verbal seguido, talvez, (ver abaixo) com uma libertação não funcional mas presente seguido depois por remoção total. Esta última versão não funcional será fortemente dependente do projecto em questão, uma vez que poderia ser mais problemas do que vale a pena, especialmente para aqueles usuários que são bem comportados e manter-se atualizado sobre a funcionalidade obsoleta.

Uma vez que o específico mudança que você referência é a remoção das ins construídos isso deve ficar bem, eu provavelmente não teria feito um lançamento com o built-ins em um modo não funcional, mas eu não sei o projeto bem o suficiente para dizer com certeza.

Nota para código em vez de nível script muda é possível em muitas línguas modernas para deixar em topos método com atributos / anotações que totalmente vai esconder-los de intellisense, bem como refugo para compilar contra eles. Isso faz com que a sua presença (com uma simples exceção se usado) uma maneira muito mais agradável de descobrir que você não pode usá-los de um tempo de execução MissingMethodException ou o que quer.

Apenas meus $ 0,02. ambientes de desenvolvimento modernos (especificamente, .NET) fornecer os meios de relatórios para o desenvolvedor que certas APIs são declaradas obsoletas / preterido e será removido em versões futuras. compilador Microsoft C / C ++ tem #pragma deprecated .

Se nada disso é suportado em seu ambiente, contam com versionamento para fornecer feedback compat .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top