Desejo alterar um pacote, testá-lo e, esperamos, enviar uma solicitação de recebimento posteriormente. Como faço isso de maneira segura e eficiente? A pergunta pode parecer muito ampla. Aceitarei a resposta que cobre os seguintes problemas:
Eu esperaria instalar um ramo separado de um pacote e poder alternar entre ele e o ramo estável por capricho, com a recompilação realizada automaticamente quando for necessário, mas
package.el
não parece oferecer uma maneira direta de fazer isso. Esta resposta no emacs-SE nos informa que “Se várias cópias de um pacote estiverem instaladas, a primeira será carregada”, então acho que se pode mexer manualmente,load-path
mas isso não parece robusto. Qual é a maneira padrão de selecionar uma versão específica do pacote entre as instaladas?Mesmo que eu consiga expor várias ramificações ao Emacs, para ajustes significativos, preciso garantir que a ramificação sem patch seja “descarregada” e seus efeitos colaterais isolados. Lida
unload-feature
com isso adequadamente ou talvez tenha idiossincrasias que todo testador de pacotes com várias versões deve conhecer?Como instalo e testo a versão local? A resposta parece estar dependente de o pacote ser simples (= um arquivo) ou com vários arquivos. O EmacsWiki diz sobre pacotes com vários arquivos : " MELPA cria pacotes para você ". Duvido que precise (ou deva) conversar com o MELPA toda vez que altero um
defun
formulário em um pacote com vários arquivos, mas a questão permanece. Pelo menos eu preciso informar ao gerenciador de pacotes sobre a versão local e, em caso afirmativo, como faço?Quais nomes devo atribuir às versões locais dos pacotes? Suponha que eu queira trabalhar em vários recursos ou bugs simultaneamente, o que significa ter várias ramificações. O Emacs não permitirá nomear versões de maneira descritiva (na linha de
20170117.666-somebugorfeature
). Acho que poderia renomear o pacote em si, um sufixo por ramificação, mas, novamente, como mexer manualmenteload-path
no primeiro trimestre, esse é um truque feio, então não vou tentar com algo que pretendo enviar upstream, a menos que seja uma prática amplamente aceita .
As perguntas provavelmente são ingênuas, pois nunca escrevi um patch nem o apliquei com git ou com vcs similares. No entanto, para muitos usuários do Emacs, a correção de um pacote do Emacs pode ser o primeiro (ou talvez o único) empreendimento de programação social, e é por isso que acredito que as respostas a essa pergunta ainda sejam valiosas.
emacs -L
abordagem para carregar uma versão local de um pacote que também instalei globalmente usando o Cask. Uma coisa que me impressionou foi que a execução<package>-version
sempre retorna a versão globalmente instalada, mesmo quando eu estava realmente executando a versão modificada local. Acontece que isso ocorreu porque o<package>-version
para este pacote obtém a versãopackages.el
.