2012-06-05 11 views
10

Il contesto è questo:
Un pacchetto aveva sviluppato diverse filiali in diversi repositoryCome copiare un pacchetto di Monticello a un altro repository con un nome diverso con Gofer

  • squeaksource
  • source.squeak.org/trunk

Lo sviluppo si è interrotto in source.squeak.org e l'obiettivo è di riportare il ramo a squeaksource in modo che tutte le versioni vengano pubblicate in un unico repository.
Ma per facilitare la navigazione umana e la rapida identificazione del ramo, desidero aggiungere un identificativo di ramo standard al nome della copia di squeaksource.
C'è un modo per automatizzare questa operazione? Forse con Gofer?

+0

Vuoi aggiungere un esempio pseudocodice dell'operazione di trasformazione/copia ... –

+0

La mia intenzione era qualcosa di simile:
Utility copyEveryVersionAfter: 'Universi -ls.39 'fromRepository:' source.squeak.org/trunk 'toRepository:' www.squeaksource.com/universes 'conBranchSuffix:' squeaktrunk ' –

risposta

7

I pacchetti Monticello sono immutabili. Puoi spostare facilmente le versioni, ma non rinominare i file. Se lo fai, rompi la cronologia e perdi la possibilità di unire le versioni all'interno dell'albero della versione e con i contributi di altre persone.

Per spostare tutte le versioni di pacchetto Un url da URL di origine-bersaglio è possibile utilizzare:

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, ovviamente, ho dimenticato questa funzione ... L'UUID è usato solo come un checksum, ma non per scopi di identificazione, conta solo il nome. Potrei ovviamente usare la chirurgia versionInfo, o la superpotenza della magia nera come un vecchio nomeForward: newName ... –

+0

Sì, potrebbe funzionare se controlli tutti i rami esistenti del tuo progetto. Ricorda ancora che qualsiasi operazione (caricamento, confronto, fusione, ...) che coinvolge versioni non derivanti dal tuo ramo richiederà nuovamente magia nera separata. –

3

Una soluzione più arcana che evita la successiva serializzazione e deserializzazione di pacchetti Monticello. Questo è utile per molto grandi repository e accelera la copia un po ':

| 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]