2010-05-17 4 views
7

Ho un paio di progetti ANT per diversi client diversi; la struttura di directory che ho per i miei progetti si presenta così:Best practice per sottomoduli di funzionalità di progetto con Mercurial ed Eclipse?

L___standard_workspace 
    L___.hg 
    L___validation_commons-sub-proj <- JS Library/Module 
    | L___java 
    | | L___jar 
    | L___old_stuff 
    | L___src 
    | | L___css 
    | | L___js 
    | |  L___validation_commons 
    | L___src-test 
    |  L___js 
    L___v_file_attachment-sub-proj <- JS Library/Module 
    | L___java 
    | | L___jar 
    | L___src 
    | | L___css 
    | | L___js 
    | L___src-test 
    |  L___js 
    L___z_business_logic-sub-proj <- JS Library/Module 
    | L___java 
    | | L___jar 
    | L___src 
    |  L___css 
    |  L___js 
    L____master-proj    <- Master web-deployment module where js libraries are compiled to. 
     L___docs 
     L___java 
     | L___jar 
     | L___src 
     |  L___AntTasks 
     |   L___build 
     |   | L___classes 
     |   |  L___com 
     |   |   L___company 
     |   L___dist 
     |   L___nbproject 
     |   | L___private 
     |   L___src 
     |    L___com 
     |     L___company 
     L___remoteConfig 
     L___src 
     | L___css 
     | | L___blueprint 
     | | | L___plugins 
     | | | | L___buttons 
     | | | | | L___icons 
     | | | | L___fancy-type 
     | | | | L___link-icons 
     | | | | | L___icons 
     | | | | L___rtl 
     | | | L___src 
     | | L___jsmvc 
     | L___img 
     | | L___background-shadows 
     | | L___banners 
     | | L___menu 
     | L___js 
     | | L___approve 
     | | L___cart 
     | | L___confirm 
     | | L___history 
     | | L___jsmvc 
     | | L___mixed 
     | | L___office 
     | L___stylesheets 
     | L___swf 
     L___src-standard 

All'interno del lavoro copiare i moduli compilare il sotto-progetto in un unico file JavaScript che viene inserito nella directory Javascript del progetto principale.

Per esempio, le directory:

  • validation_commons-sub-proj
  • v_file_attachment-sub-proj
  • z_business_logic-sub-proj

... tutti sono combinati e minified (un po 'come compilato) in una diversa Nome file JavaScript nella directory _master-proj/js; e nella fase finale lo _master-proj viene compilato per essere distribuito sul server.

Ora, per quanto riguarda il modo in cui vorrei impostarlo con hg, quello che mi piacerebbe poter fare è clonare il progetto principale ei suoi sottoprogetti dai propri repository di base in un copia di lavoro del cliente, in modo che i moduli possano essere aggiunti (usando hg) alla copia di lavoro di un particolare cliente.

Inoltre, quando applico alcune modifiche/correzione dei bug nella copia di lavoro di un cliente, vorrei essere in grado di trasferire facoltativamente le modifiche/correzioni di errori al repository di base/progetto principale del sottoprogetto , allo scopo di estrarre le modifiche/correzioni in altre copie di lavoro del cliente che potrebbero contenere gli stessi bug che devono essere corretti.

In questo modo sarò in grado di utilizzare le stesse correzioni di bug tra diversi client.

Tuttavia ... Non sono sicuro del modo migliore per farlo utilizzando hg ed Eclipse.

I che è possibile utilizzare hg's Convert Extension per suddividere una sottodirectory in un progetto separato utilizzando l'opzione --filemap.

Tuttavia, sono ancora un po 'confuso sul fatto che sarebbe meglio utilizzare Convert Extension o se fosse preferibile semplicemente ospitare tutti i moduli nel proprio repository e controllarli in un unico spazio di lavoro per ogni cliente.

+0

C'è un breve nome succinto per il verbo che sto tentando di spiegare/eseguire qui? – leeand00

+0

Penso che un altro posto in cui sono confuso su questo dovrebbe essere come posso controllare i moduli specifici corretti che ho bisogno dai loro repository individuali, senza includere tutto in un unico grande repository? – leeand00

+1

Penso di aver trovato la risposta qui: http://mercurial.selenic.com/wiki/subrepos – leeand00

risposta

3

Sì, sembra che subrepos sono quello che stai cercando, ma penso che forse questa è la risposta giusta per la domanda sbagliata e ho il forte sospetto che si incorrerà in simili issues that occur when using svn:externals

Invece mi sento di raccomandare che "pubblichi" i file JS combinati e minificati in un artefact repository e utilizzi un gestore delle dipendenze come Ivy per inserire versioni specifiche dei tuoi artefatti nel tuo progetto principale. Questo approccio ti dà un controllo molto maggiore sulle versioni del sottoprogetto utilizzate dal tuo progetto principale.

Se è necessario apportare correzioni di bug a un sottoprogetto per un particolare client, è sufficiente apportare le correzioni sulla linea principale per quel sottoprogetto, pubblicare una nuova versione (idealmente tramite un automated build pipeline) e aggiornare il proprio master progetto per utilizzare la nuova versione. Oh, volevi testare la nuova versione con il loro progetto principale prima di pubblicare?In tal caso, prima di inviare la correzione, combinare e ridurre a livello locale il sottoprogetto, pubblicarlo su un local repository e richiedere al progetto principale del cliente di prelevare tale versione.

Problemi correlati