Forum Programmation.shell CVS et fichiers hard-linkés

Posté par  .
Étiquettes : aucune
0
4
août
2006
Bonjour,
Voici mon problème :
J'ai un projet qui à partir des mêmes sources peut compiler un serveur ou un client.
Du coup pour pouvoir compiler les deux j'ai créés deux répertoires avec l'ensembles des fichiers sources copiés en hard-link (cp -rl CLIENT SERVER).
Mon problème est que lorsque je lance un update avec cvs, les fichiers à updater sont écrasés, détruisant par la même occasion le lien hard que j'avais entre mes deux répertoires. Du coup suivant les updates réalisés, mes deux répertoires ne sont plus synchronisés et je dois à chaque fichier modifié, refaire un hard link.
Je peux réaliser un script qui me parse la sortie de cvs update pour aller directement relinkés les fichiers concernés mais j'ai l'habitude d'utiliser emacs pour cvs et ça m'embête de repasser par le shell.
Une idée ?
  • # Include

    Posté par  (site Web personnel) . Évalué à 1.

    Pourquoi ne pas mettres les fichiers en commun dans un dossier un include (pour les points .h) et compiler une librairie .a pour linker au serveur et au client ?
    • [^] # Re: Include

      Posté par  . Évalué à 1.

      Le projet est constitué déjà de plusieurs lib mais ceratines parties de codes communes sont "customisées" suivant le tye de binaire à compiler.
      C'est choix sont réalisés par le passage d'option à configure. (utilisation des autotools). D'une manière générale, le besoin se fait sentir à partir du moment ou l'on travaille avec des options à configure et que l'on a besoin de travailler en parrallèle sur l'ensemble des binaires.
      Voici un petit script que j'ai réalisé :
      ===========================================================
      #!/bin/bash
      MY_REP=$CWD
      FIND_NAME=-name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
      cd $SERVER
      find ./ -type f $FIND_NAME -exec rm {} \;
      cd $CLIENT
      find ./ -type f $FIND_NAME -exec cp --parent -l {} $SERVER/ \;
      cd $MY_REP
      ===========================================================
      ATTENTION bien initialiser SERVER et CLIENT sinon ca efface tout le home !

      Y'a sans doute mieux... notamment parsing de la sortie de cvs (mais comment s'intégrer à emacs) et gestion des repertoires vides.
      • [^] # Re: Include

        Posté par  . Évalué à 1.

        Oui bon c'etait pour voir si vous suiviez mais ce script est buggé et je suis incapable de le faire fonctionner :
        le $FIND_NAME n'est pas compris tel quel dans la commande find. J'ai essayé toutes les combinaisons : ' \" etc etc...
        FIND_NAME=-name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
        find ./ -type f $FIND_NAME
        n'output pas ce qu'il ferait sans passer par FIND_NAME.
        (
        en faisant :
        find ./ -type f -name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
        Ca marche.
        )
        • [^] # Re: Include

          Posté par  . Évalué à 1.

          pour finir voila le script final, si quelqu'un a mieux ca reste un brouillon hein...

          #!/bin/bash
          MY_REP=$CWD
          mkdir -p $SERVER
          cd $SERVER
          find ./ \( -name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]" \) -exec rm {} \;
          cd $CLIENT
          find ./ \( -name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]" \) -exec cp --parent -l {} $SERVER/ \;
          cd $MY_REP
          exit 0

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.