2012-06-05 7 views
10

El contexto es éste:
Un paquete había desarrollado varias ramas en varios repositoriosCómo copiar un paquete de Monticello a otro repositorio bajo un nombre diferente con Gofer

  • squeaksource
  • source.squeak.org/trunk

Desarrollo detenido en source.squeak.org, y el objetivo es transferir la rama a squeaksource para tener todas las versiones publicadas en un único repositorio.
Pero para facilitar la exploración humana y la rápida identificación de la sucursal, deseo agregar una identificación de sucursal estándar al nombre de la copia squeaksource.
¿Hay alguna forma de automatizar esta operación? Con Gofer tal vez?

+0

¿Quieres que añadir un ejemplo de pseudocódigo de la operación de transformación/copia ... –

+0

Mi intención era algo así como:
Utilidad copyEveryVersionAfter: 'universos -ls.39 'de Depósito:' source.squeak.org/trunk 'toRepository:' www.squeaksource.com/universes 'withBranchSuffix:' squeaktrunk ' –

Respuesta

7

Los paquetes de Monticello son inmutables. Puede mover fácilmente las versiones, pero no debe cambiar el nombre de los archivos. Si lo haces, rompes la historia y pierdes la posibilidad de fusionar las versiones dentro de tu árbol de versiones y con las contribuciones de otras personas.

Para mover todas las versiones del paquete de Un url de url fuente a objetivo puede utilizar:

Gofer new 
    repository: 'source url'; 
    package: 'A'; 
    fetch 

" If you understand the concequences you could rename/rebranch the version files in your package-cache at this point. " 

Gofer new 
    repository: 'target url'; 
    package: 'A'; 
    push 
+0

Ah, por supuesto, olvidé esta característica ... El UUID se usa solo como una suma de comprobación, pero no con fines de identificación, solo el nombre cuenta. Por supuesto, podría utilizar la cirugía de versionInfo, o superpotencia de magia negra como oldName becomeForward: newName ... –

+0

Sí, eso podría funcionar si controlas todas las ramas existentes de tu proyecto. Nuevamente, tenga en cuenta que cualquier operación (cargar, comparar, fusionar, ...) que involucre versiones que no provengan de su rama requerirá magia negra por separado nuevamente. –

3

Una solución más arcano que evita la serialización y deserialización de paquetes Monticello posterior. Esto es muy útil para grandes depósitos y acelera la copia un poco:

| sourceRepositoryUrl destinationRepositoryUrl files | 

repositoryUrl := 'http://www.squeaksource.com/PROJECT'. 
destinationRepositoryUrl := 'http://smalltalkhub.com/mc/USER/PROJECT/main'. 

files := (MCHttpRepository new 
    parseFileNamesFromStream: (ZnClient new get: repositoryUrl; entity) readStream) 
    select: [ :each | ZnMonticelloServerDelegate new isValidMczName: each ]. 

files do: [ :fileName ||entity stream| 

    Transcript show: fileName; cr. 
    "download version" 
    entity := ZnClient new 
    beOneShot; 
     url: repositoryUrl; 
     addPath: fileName; 
     get; 
     entity. 

    "upload the version to gemstone" 
    ZnClient new 
     beOneShot; 
     ifFail: [ :exception | Transcript show: fileName; show: ' '; print: exception ]; 
     username: 'USER' password: 'PASSWORD'; 
     entity: entity; 
     url: destinationRepositoryUrl; 
     addPath: fileName; 
     put ] 
displayingProgress: [ :fileName| 'Copying ', fileName] 
Cuestiones relacionadas