¿Podemos usar Composer con checkout SVN disperso para compartir dependencies?

Nuestra configuration de desarrollo actual utiliza un único repository de Subversion que contiene múltiples proyectos, cada uno con twigs, tags y troncales. A continuación, utilizamos una "salida escasa" para seleccionar los proyectos y las twigs de esos proyectos con los que trabajar.

El resultado es que la estructura del directory de una copy de trabajo coincide con la del repository, incluida la información de la sucursal, y nunca usamos el svn switch . (Este estilo de trabajo probablemente sea familiar para cualquiera que use SVN, pero puede sorprender a quienes no lo usan).

Estamos pensando en usar Composer para administrar las dependencies externas e internas, pero no estoy seguro de cómo esto puede funcionar con el estilo de trabajo de pago disperso.

Me gustaría alguna forma de usar un directory dentro del process de pago existente para satisfacer una dependencia, en lugar de que cada "proyecto raíz" necesite una copy por separado.

Por ejemplo:

  • sitios / Foo / tronco
    • depende de lib Aaa, por lo que hace reference a lib / Aaa / trunk
    • Depende de lib Bbb 1.5. *, por lo que hace reference a lib / Bbb / branches / release-1.5
  • sitios / Bar / trunk
    • depende de lib Aaa 1.0. *, por lo que hace reference a lib / Aaa / branches / release-1.0
    • Depende de lib Bbb 1.5. *, por lo que hace reference a lib / Bbb / branches / release-1.5

En este momento, si edito el código en lib / Bbb / branches / release-1.5, puedo probar esos cambios en ambos sitios, sin necesidad de confirmar uno y actualizar el otro.

¿Hay alguna forma de usar Composer para administrar estas dependencies?

(PD: No responda con "renunciar a SVN, use Git, es el awesomez"; esa es una respuesta a una pregunta diferente).

No, no creo que pueda hacer esto con Composer de manera estándar: espera copyr los files desde cualquier fuente (Packagist / VCS / Zips) a la carpeta del proveedor local, que no es lo que desea.

Dicho esto, creo que hay dos forms potenciales en que puede hacer que esto funcione (al less en parte):

Autocargador

Podría intentar usar el campo de autoload en el file composer.json para include los files correctos en el proyecto. De todos modos, necesitaría administrar los loggings de las sucursales / versiones pertinentes manualmente (como supongo que ahora lo hace), pero podría gestionar la inclusión de las bibliotecas internas a través de Composer. Esto probablemente requiera que sus bibliotecas tengan el espacio de nombre correcto. Las routes a los files para cada espacio de nombres son relativas a la raíz del proyecto, pero pueden ir debajo de la raíz (a través de la ruta /../ si es necesario).

Sin embargo, para ser honesto, si ya tiene un autocargador para estos files, es posible que esta solución no tenga mucha ventaja. Documentos relevantes

Complemento Composer

También podría escribir un plugin de compositor / "instalador personalizado" que probablemente podría gestionar esto. Esto tendría la ventaja de que podría lograr que revisara las partes correctas del repository disperso para tener la versión correcta disponible, así como la correcta verificación de la versión wildstar, pero sería una empresa mucho más difícil y arriesgada.

El process básico sería definir un nuevo tipo de package (por ejemplo, 'internal-svn-package'). Usted crearía el complemento como una biblioteca externa que se instala normalmente a través de Composer, que declara (a través de composer.json) que maneja este nuevo tipo de package. Su lógica personalizada se usaría luego para cualquier package que esté listdo con este tipo personalizado. Sin embargo, no estoy seguro de qué parte de la lógica del compositor interno para las revisiones de SVN pueda reutilizar. Documentos relevantes