/* #Sp‚cification: utilitaires / pget pget permet d' */ #include #include #include "projet.h" /* Localise le makefile.dat d'un sous-r‚pertoire d'une r‚vision. */ static MAKEFILE * pget_makefile( USERINFO *user, const char *ptpath) { MAKEFILE *ret = new MAKEFILE (NULL,1,"",user); if (ret->isok()){ char tbdir[10][MAXSIZ_NAME]; int i=0; char path[MAXSIZ_PATH]; strcpy (path,ptpath); // On decompose le path dans tbdir[] while (path[0] != '\0'){ path_splitlex (path,path,tb[i++]); } if (i!=0){ char curpath[MAXSIZ_PATH]; curpath[0] = '\0'; for (i--; i>=0; i--){ char tmp[MAXSIZ_PATH]; char *sdir = tbdir[i]; sprintf (tmp,"%s/makefile.dat",sdir); REVISION_FILE *file = ret->locate (tmp); if (file == NULL){ fprintf (stderr,"Pas de sous-r‚pertoire %s dans %s\n" ,sdir,curpath); delete ret; ret = NULL; break; }else{ path_make (curpath,sdir,curpath); MAKEFILE *tmpm = new MAKEFILE (NULL,1,file->getrev(),curpath,user); delete ret; ret = NULL; if (!tmpm->isok()){ fprintf (stderr,"makefile.dat du sous-r‚pertoire %s\n" "est d‚fectueux\n",curpath); delete tmpm; break; }else{ ret = tmpm; } } } } } return ret; } /* Localise la r‚vision de chaque fichier et remplace dans dst Retourne -1 si un fichier existe pas. 0 si ok. */ static int near pget_import( const MAKEFILE *src, MAKEFILE *dst, char *fichiers[], int nb) { int ret = 0; for (int i=0; ilocate (fichier); if (src_file == NULL){ fprintf (stderr,"Pas de fichier %s\n",fichier); ret = -1; }else{ const REVISION *rev = src_file->getrev(); MAKEFILE_FILE *dst_file = dst->locate (fichier); printf ("Fichier %s: ",fichier); if (dst_file == NULL){ printf ("Nouveau fichier %s\n",fichier): } } } return ret; } int main (int argc, char *argv[]) { int ret = -1; if (argc < 4){ fprintf (stderr, "pget 1.0\n" "pget revision projet fichier [ fichier ... ]\n" "exemple: cd _6_1_2_1/v3/edit\n" " pget 6.1.4.2 v3/edit editor.c job.c\n" ); }else{ const char *prog = prog_getid(1); USERINFO *user = userinfo_findenv (prog); if (user != NULL){ VERSION_DAT ver (user); if (REVISION::check(argv[1])){ REVISION rev (argv[1]); REVISION_ONE *one = ver.get(rev); if (one != NULL){ user->setversion (one); MAKEFILE *mak = pget_makefile (user,argv[2]); if (mak != NULL){ MAKEFILE curdir (".",0,argv[2],user); if (curdir->isok()){ ret = pget_import (mak,curdir,argv+2,argc-2); } delete mak; } } } } } return ret; }