2010-05-17 20 views
7

J'ai quelques projets ANT pour plusieurs clients différents; la structure du répertoire que j'ai pour mes projets ressemble à ceci:Meilleures pratiques pour les sous-modules de fonctionnalités de projet avec Mercurial et 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 

Dans la CdT les modules compilez le sous-projet dans un seul fichier Javascript qui est placé dans le répertoire Javascript du projet maître.

Par exemple, les répertoires:

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

... tous sont combinés et minified (une sorte de compilation) dans un autre Nom de fichier Javascript dans le répertoire _master-proj/js; et dans la dernière étape, le _master-proj est compilé pour être déployé sur le serveur. Maintenant, en ce qui concerne la façon dont je voudrais mettre en place avec hg, ce que je voudrais pouvoir faire est de cloner le projet maître et ses sous-projets à partir de leurs propres référentiels de ligne de base dans un copie de travail du client, de sorte que les modules peuvent être ajoutés (en utilisant hg) à la copie de travail d'un client particulier. En outre, lorsque je modifie/corrige des bogues dans la copie de travail d'un client, je souhaite également pouvoir transférer les modifications/corrections de bogues dans le référentiel de base du projet principal/sous-projet. , à des fins de tirer éventuellement les modifications/corrections dans les copies de travail d'autres clients qui pourraient contenir les mêmes bogues qui doivent être corrigés.

De cette façon, je serai en mesure d'utiliser les mêmes correctifs de bugs entre différents clients.

Cependant ... Je ne suis pas sûr de la meilleure façon de le faire en utilisant hg et Eclipse.

I que vous pouvez utiliser hg's Convert Extension pour diviser un sous-répertoire dans un projet distinct en utilisant l'option --filemap.

Cependant, je suis encore un peu confus quant à savoir s'il serait préférable d'utiliser le Convert Extension ou s'il serait préférable de simplement loger chacun des modules dans leur propre référentiel et les vérifier dans un seul espace de travail pour chaque client.

+0

Existe-t-il un nom court et succinct pour le verbe que j'essaie d'expliquer/d'exécuter ici? – leeand00

+0

Je pense qu'un autre endroit où je suis confus sur ce devrait être comment puis-je vérifier les modules spécifiques corrects dont j'ai besoin de leurs dépôts individuels, sans inclure le tout dans un grand référentiel? – leeand00

+1

Je pense que j'ai peut-être trouvé la réponse ici: http://mercurial.selenic.com/wiki/subrepos – leeand00

Répondre

3

Ouais, on dirait que subrepos sont ce que vous cherchez, mais je pense peut-être que la bonne réponse est la mauvaise question et je soupçonne fortement que vous allez rencontrer la même issues that occur when using svn:externals

Je recommande au lieu que vous "publiez" vos fichiers JS combinés et minimisés dans un artefact repository et utilisez un gestionnaire de dépendances tel que Ivy pour extraire des versions spécifiques de vos artefacts dans votre projet maître. Cette approche vous permet de mieux contrôler les versions de sous-projets utilisées par votre projet maître.

Si vous avez besoin d'effectuer des corrections de bogues sur un sous-projet pour un client particulier, vous pouvez simplement faire les corrections sur la ligne principale pour ce sous-projet, publier une nouvelle version (idéalement via un automated build pipeline) projet d'utiliser la nouvelle version. Oh, vous vouliez tester la nouvelle version avec le projet de leur maître avant de publier?Dans ce cas, avant de pousser votre correctif, combinez et réduisez votre sous-projet localement, publiez-le sur un local repository et demandez au projet maître du client de choisir cette version pour vos tests.