2012-06-05 5 views
10

Kontekst jest to jedno:
Pakiet miał kilka oddziałów prezentowane w kilku repozytoriówJak skopiować pakiet Monticello do innego repozytorium pod inną nazwą z Gofer

  • squeaksource
  • source.squeak.org/trunk

Rozwój zatrzymany na source.squeak.org, a celem jest przeniesienie oddziału do źródła piszącego, aby wszystkie wersje zostały opublikowane w jednym repozytorium.
Aby jednak ułatwić przeglądanie ludzi i szybką identyfikację oddziału, chcę dodać standardową identyfikację oddziału do nazwy kopii piskliwych.
Czy istnieje sposób automatyzacji tej operacji? Może z Goferem?

+0

Chcesz dodać pseudokod przykład działania transformacja/kopiowania ... –

+0

Moją intencją było coś jak:
Utility copyEveryVersionAfter: „Wszechświaty -ls.39 'fromRepository:' source.squeak.org/trunk 'toRepository:' www.squeaksource.com/universes 'withBranchSuffix:' squeaktrunk ' –

Odpowiedz

7

Pakiety Monticello są niezmienne. Możesz łatwo przenosić wersje, ale nie powinieneś zmieniać nazw plików. Jeśli to zrobisz, przełamiesz historię i stracisz możliwość scalania wersji w drzewie wersji i wkładów innych osób.

Aby przenieść wszystkie wersje pakietu z źródło url do cel url można użyć:

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

Ach, oczywiście, zapomniałem o tej funkcji ... UUID jest używany tylko jak suma kontrolna, ale nie w celu identyfikacji, liczy się tylko nazwa. Mógłbym oczywiście skorzystać z chirurgii versionInfo lub supergocyty czarnej magii, jak oldName sięForward: newName ... –

+0

Tak, to może działać, jeśli kontrolujesz wszystkie istniejące gałęzie projektu. Ponownie pamiętaj, że każda operacja (ładowanie, porównywanie, łączenie ...) z wersjami nie pochodzącymi z twojej gałęzi będzie wymagać ponownego oddzielenia czarnej magii. –

3

Bardziej arcane rozwiązanie, które pozwala uniknąć późniejszej serializacji i deserializacji pakietów Monticello. Jest to przydatne w przypadku bardzo dużych repozytoriów i przyspiesza kopiowanie sporo:

| 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] 
Powiązane problemy