O que há na pasta "contrib"?

42

Geralmente, os projetos de software de código aberto têm uma pasta chamada "contrib". Por exemplo, o Django tem um . Para que serve?

Coronel Panic
fonte
Compartilhar sua pesquisa ajuda a todos . Conte-nos o que você tentou e por que ele não atendeu às suas necessidades. Isso demonstra que você reservou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. Veja também How to Ask
gnat
11
A questão era bem clara, IMO. - "O que é essa Contribpasta que eu continuo vendo nos projetos?" - "Por que ou por que um projeto não teria um?" - "Existe alguma convenção padrão para isso que eu deva conhecer?"
precisa saber é o seguinte

Respostas:

18

É para software que foi contribuído para o projeto, mas que pode não ser realmente mantido pelos desenvolvedores principais. Nomear "contrib" ou "Contrib" é uma convenção estabelecida há muito tempo, mas não há realmente nada de especial no nome, e geralmente é usado apenas em projetos razoavelmente grandes.

Bryan Oakley
fonte
2
Essa é a resposta correta.
Blrfl
Notei também que as coisas no contrib ocasionalmente entram no não-contrib. Suponho que a implicação disso é que ele foi adotado na linha principal do projeto para um suporte e desenvolvimento mais ativos?
fostandy
1
@ostosty: sim, isso está correto.
Bryan Oakley
15

Olhando para projetos populares de código aberto que vêm à mente, não vejo menção de nenhuma pasta "contrib":

O único que possui uma pasta "contrib" é o Django. Para o Django, o papel desta pasta já está explicado na documentação :

O Django tem como objetivo seguir a filosofia de "baterias incluídas" do Python. É fornecido com uma variedade de ferramentas extras opcionais que resolvem problemas comuns de desenvolvimento da Web.

Este código reside na django/contribdistribuição do Django. Este documento fornece um resumo dos pacotes no contrib, juntamente com quaisquer dependências desses pacotes.

O Capítulo 16 do Livro do Django contém uma descrição mais detalhada do papel deste diretório e da lista de conteúdos.

Outro exemplo é o Solr . Com gitstats, podemos obter as estatísticas sobre os colaboradores.

Robert Muir         22.09%
Michael McCandless  13.60%
Mark Robert Miller   9.73%
Uwe Schindler        8.17%
Yonik Seeley         5.56%
Steven Rowe          5.55%

Em seguida, podemos selecionar apenas o contribdiretório executando:

git filter-branch --subdirectory-filter solr/contrib --prune-empty

e obtenha as estatísticas mais uma vez:

Robert Muir         19.62%
Steven Rowe          8.87%
Mark Robert Miller   8.33%
Uwe Schindler        8.06%
James Dyer           7.80%

Portanto, os principais autores são praticamente os mesmos, o que significa que essas não são contribuições de pessoas de fora. Olhando para os diretórios dentro da contribpasta, parece que mais uma vez, essas são “uma variedade de ferramentas opcionais extras”, exatamente como no Django. Por exemplo, você não precisa do manipulador de solicitação de importação de dados para fazer o Solr funcionar, mas se você deseja importar dados do banco de dados ou XML, é bom tê-lo na contribpasta. O mesmo para redução de mapa, você pode não necessariamente precisar, mas há casos em que você precisa.

Esses plug-ins ou complementos? Eu não usaria esse termo. Plugins e complementos têm uma integração específica com o aplicativo principal. Por exemplo, não se espera que um plug-in seja executado de forma independente, mas hospedado no aplicativo principal. Por outro lado, contribcontém ferramentas que provavelmente podem ser executadas de forma independente.

Arseni Mourzenko
fonte
2
Na verdade, eu queria saber exatamente o que é um "contrib". Solr também, Grunt também. Este é apenas outro termo para plugin / add-on /?
28578 Martyn
@ user3265472: editei minha resposta para incluir o Solr. Quanto a Grunt, você está falando sobre este ? Eu não acho que exista um diretório contrib.
Arseni Mourzenko
Sim, é esse, desculpe, eu perdi a pasta da pergunta. Eu estava tentando entender o termo "contrib". O Grunt possui vários plugins / bibliotecas (?) Nomeados como tais (Grunt-contrib-uglify, Grunt-contrib-jshint, etc). Sua descrição dada me dá uma idéia melhor, obrigado.
Martyn
2
Alguns pacotes no Debian se enquadram em uma classe de pacotes chamada 'contrib'. Isto é o que o Manual de Políticas Debian tem a dizer sobre isso "Pacotes em outras áreas de arquivos (contrib, não-livres) não são considerados parte da distribuição Debian, apesar de apoiarmos seu uso e fornecer infraestrutura para eles (como nosso sistema de rastreamento de bugs e listas de discussão) ".
Kevin Wheeler
3
Muitos e muitos projetos de OSS que observei ao longo dos anos têm uma pasta chamada Contrib(olhando para outra agora no Akka.NET)! - Não faço ideia por que eles têm uma pasta com esse nome ou qual é a convenção dessa convenção de nomenclatura. - Nenhuma das coisas mencionadas até agora parece se encaixar em todas as formas que eu vi "contrib" usadas. - parece que todo projeto tem coisas completamente diferentes (o Akka.Net parece colocar boa parte de sua base de código: Akka.Clustering, Logging, DI, Persistence, TestKits, etc ...).
precisa saber é o seguinte
6

Destina-se a bibliotecas ou componentes que contribuem para o projeto, mas não pertencem ou fazem parte do próprio projeto. Eu sempre o usei como um local comum ou compartilhado para colocar as bibliotecas de terceiros que estou usando.

Por exemplo, você pode ter:

  • / Contrib / log4net-xxx
  • /Contrib/SSH.NET-xxx
  • / BackendService
  • / DesktopUI
  • / GenUtils
  • / SMCore
  • / WebUI

Em seguida, faça referência a eles em cada um dos componentes do projeto usando caminhos relativos, para que não haja nenhum tipo de instalação ou configuração necessária antes da construção. Ele será construído diretamente a partir do repositório, não importa onde o check-out seja feito localmente.

Amac
fonte
Eu não compartilho dessa visão. Pelo que você descreve, prefiro usar os nomes vendorou thirdparty.
moi
2

Git é um ótimo exemplo de software de código aberto que usa esta convenção:

https://github.com/git/git/tree/master/contrib

Aqui está um trecho relevante desse arquivo README.md:

Software Contribuído

Embora essas peças estejam disponíveis como parte da árvore oficial de fontes git, elas estão em um status um pouco diferente. A intenção é manter ferramentas interessantes em torno do git aqui, talvez até experimentais, para oferecer aos usuários um acesso mais fácil a eles e dar uma maior exposição às ferramentas, para que possam ser melhoradas mais rapidamente.

Eu não estou esperando tocar nelas tanto assim. No que diz respeito à minha operação diária, esses subdiretórios são de propriedade de seus respectivos autores principais. Estou disposto a ajudar se os usuários desses componentes e os "proprietários" da contrib / subárvore tiverem problemas técnicos / de design a resolver, mas a iniciativa de corrigir e / ou melhorar as coisas deve estar do lado dos proprietários da subárvore.

Alex W
fonte