¿Qué hay en la carpeta "contrib"?

42

A menudo, los proyectos de software de código abierto tienen una carpeta llamada "contrib". Por ejemplo, Django tiene uno . ¿Para qué sirve?

Coronel Panic
fuente
Compartir su investigación ayuda a todos . Cuéntanos qué has probado y por qué no satisfizo tus necesidades. Esto demuestra que te has tomado el tiempo para tratar de ayudarte a ti mismo, nos salva de reiterar respuestas obvias y, sobre todo, te ayuda a obtener una respuesta más específica y relevante. También vea Cómo preguntar
mosquito
11
La pregunta era bastante clara, OMI. - "¿Qué es esta Contribcarpeta que sigo viendo en los proyectos?" - "¿Por qué, o por qué un proyecto no tendría uno?" - "¿Hay alguna convención estándar para esto que debería saber?"
BrainSlugs83

Respuestas:

18

Es para el software que ha contribuido al proyecto, pero que los desarrolladores principales podrían no mantener. Nombrarlo "contrib" o "Contrib" es una convención establecida desde hace mucho tiempo, pero en realidad no hay nada especial sobre el nombre, y generalmente solo se usa en proyectos bastante grandes.

Bryan Oakley
fuente
2
Esta es la respuesta correcta.
Blrfl
También he notado que las cosas en contrib ocasionalmente se convertirán en no contrib. Supongo que la implicación en esto es que se ha adoptado en la línea principal del proyecto para un apoyo y desarrollo más activos.
fostandy
1
@fostandy: sí, eso es correcto.
Bryan Oakley
15

Mirando los proyectos populares de código abierto que vienen a la mente, no veo ninguna mención de ninguna carpeta "contrib":

El único que tiene una carpeta "contrib" es Django. Para Django, el papel de esta carpeta ya se explica en la documentación :

Django tiene como objetivo seguir la filosofía de "baterías incluidas" de Python. Se entrega con una variedad de herramientas adicionales opcionales que resuelven problemas comunes de desarrollo web.

Este código vive django/contriben la distribución de Django. Este documento ofrece un resumen de los paquetes en contrib, junto con cualquier dependencia que tengan esos paquetes.

El Capítulo 16 de The Django Book contiene una descripción más detallada del rol de este directorio y la lista de contenidos.

Otro ejemplo es Solr . Con gitstats, podemos obtener las estadísticas sobre los contribuyentes.

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%

Luego, podemos seleccionar solo el contribdirectorio ejecutando:

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

y obtenga las estadísticas una vez más:

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

Por lo tanto, los principales autores son prácticamente los mismos, lo que significa que no son contribuciones de personas externas. Mirando los directorios dentro de la contribcarpeta, parece que una vez más, se trata de "una variedad de herramientas adicionales y opcionales", exactamente como en Django. Por ejemplo, no necesita el controlador de solicitud de importación de datos para que Solr funcione, pero si desea importar datos de una base de datos o XML, es bueno contribtenerlos en la carpeta. Lo mismo para map-reduce, puede que no lo necesite necesariamente, pero hay casos en los que lo necesita.

¿Son esos complementos o complementos? No usaría este término. Los complementos y complementos tienen una integración específica con la aplicación principal. Por ejemplo, no se espera que un complemento se ejecute de forma independiente, sino alojado dentro de la aplicación principal. Por otro lado, contribcontiene herramientas que probablemente pueden ejecutarse de forma independiente.

Arseni Mourzenko
fuente
2
En realidad, me preguntaba exactamente qué es un "contrib". Solr tiene entonces, Grunt también. ¿Es este otro término para plugin / add-on /?
Martyn
@ user3265472: edité mi respuesta para incluir Solr. En cuanto a Grunt, ¿estás hablando de este ? No creo que haya un directorio contrib.
Arseni Mourzenko
Sí, ese es, perdón, me perdí la carpeta de la pregunta. Estaba tratando de entender el término "contrib". Grunt tiene varios complementos / bibliotecas (?) Nombrados como tales (Grunt-contrib-uglify, Grunt-contrib-jshint, etc.). Sin embargo, su descripción dada me da una mejor idea, gracias.
Martyn
2
Algunos paquetes en Debian caen en una clase de paquetes llamados 'contrib'. Esto es lo que el Manual de políticas de Debian tiene que decir al respecto "Los paquetes en las otras áreas de archivo (contrib, no libre) no se consideran parte de la distribución de Debian, aunque apoyamos su uso y proporcionamos infraestructura para ellos (como nuestro sistema de seguimiento de errores y listas de correo ".
Kevin Wheeler
3
¡Muchos y muchos proyectos de OSS que he visto a lo largo de los años tienen una carpeta llamada Contrib(mirando otra más ahora mismo en Akka.NET)! - No tengo idea de por qué tienen una carpeta llamada así, o cuál es la convención para esta convención de nomenclatura. - Ninguna de las cosas mencionadas hasta ahora parece encajar en todas las formas en que he visto "contrib". - parece que cada proyecto tiene cosas completamente diferentes allí (Akka.Net parece poner una buena parte de su base de código allí: Akka.Clustering, Logging, DI, Persistence, TestKits, etc.).
BrainSlugs83
6

Está destinado a bibliotecas o componentes que contribuyen al proyecto, pero que no son propiedad ni son parte del proyecto en sí. Siempre lo he usado como una ubicación común o compartida para colocar las bibliotecas de terceros que estoy usando.

Por ejemplo, podrías tener:

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

Luego, haga referencia a ellos en cada uno de los componentes del proyecto utilizando rutas relativas, de modo que no se necesite ningún tipo de configuración o configuración antes de construirlo. Se generará directamente desde el repositorio sin importar dónde se haya extraído localmente.

Amac
fuente
No comparto este punto de vista. Para lo que describe, prefiero usar los nombres vendoro thirdparty.
moi
2

Git es un gran ejemplo de software de código abierto que utiliza esta convención:

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

Aquí hay un extracto relevante de ese archivo README.md:

Software contribuido

Aunque estas piezas están disponibles como parte del árbol fuente oficial de git, están en un estado algo diferente. La intención es mantener herramientas interesantes alrededor de git aquí, tal vez incluso las experimentales, para darles a los usuarios un acceso más fácil a ellas y para que las herramientas tengan una mayor exposición, de modo que puedan mejorarse más rápido.

No espero tocarlos tanto. En lo que respecta a mi operación diaria, estos subdirectorios son propiedad de sus respectivos autores principales. Estoy dispuesto a ayudar si los usuarios de estos componentes y los "propietarios" de contrib / subtree tienen problemas técnicos / de diseño para resolver, pero la iniciativa para arreglar y / o mejorar las cosas debe estar del lado de los propietarios de subtree.

Alex W
fuente