*** sup.1.orig Sun Dec 10 14:50:16 1995 --- sup.1 Sun Dec 10 15:53:08 1995 *************** *** 716,723 **** .I list= to specify the list of files in the release. .I scan= ! must be used in multi-release collections that are scanned to keep ! the scan files for the different releases separate. .I host= to allow different host restrictions for this release. .I next= --- 716,725 ---- .I list= to specify the list of files in the release. .I scan= ! tells supscan to generate ! .B scanfile ! for this release. Supscan will only generate scan files for releases that specify ! a scanfile or for collections that do not have a releases file. .I host= to allow different host restrictions for this release. .I next= *************** *** 725,731 **** be a combination of serveral other releases. If the same file appears in more than one chained release, the first one found will be used. If these files are not specified for a release the default names: ! prefix,list,scan and host will be used. .TP .B scan This file, created by --- 727,733 ---- be a combination of serveral other releases. If the same file appears in more than one chained release, the first one found will be used. If these files are not specified for a release the default names: ! prefix, list and host will be used. .TP .B scan This file, created by *************** *** 931,937 **** for a collection .TP <\fIbase-directory\fR>\fB/sup/\fR<\fIcollection\fR>\fB/scan ! scan file for a collection .TP \fB/usr/\fR<\fIcollection\fR> default base directory for a file collection --- 933,939 ---- for a collection .TP <\fIbase-directory\fR>\fB/sup/\fR<\fIcollection\fR>\fB/scan ! default scan file for a collection if no release file exists .TP \fB/usr/\fR<\fIcollection\fR> default base directory for a file collection *** supservers.8.orig Sun Dec 10 15:45:47 1995 --- supservers.8 Sun Dec 10 15:48:15 1995 *************** *** 167,172 **** --- 167,180 ---- .I supscan to produce output messages as it scans the files in the collection. + The "release" option + .I -r + causes + .I supscan + to only update the scan file for the specified release. More than one + release may be specified by using + .I -r + multiple times. The "system" flag .I -s *** scan.c.orig Mon Dec 11 23:52:54 1995 --- scan.c Wed Dec 13 08:15:36 1995 *************** *** 183,189 **** static omitanyone(); static anyglob(); static int getscanfile(); ! static chkscanfile(); static makescanfile(); static recordone(); static recordexec(); --- 183,189 ---- static omitanyone(); static anyglob(); static int getscanfile(); ! static int chkscanfile(); static makescanfile(); static recordone(); static recordexec(); *************** *** 322,334 **** return (TRUE); } ! makescanlists () { TREELIST *tl; char buf[STRINGLENGTH]; char *p,*q; FILE *f; char *saveprefix = prefix; int count = 0; (void) sprintf (buf,FILERELEASES,collname); --- 322,336 ---- return (TRUE); } ! makescanlists (releases) ! char **releases; { TREELIST *tl; char buf[STRINGLENGTH]; char *p,*q; FILE *f; char *saveprefix = prefix; + char **rel_index; int count = 0; (void) sprintf (buf,FILERELEASES,collname); *************** *** 347,360 **** goaway ("Can't chdir to %s",prefix); (void) chdir (basedir); } ! makescan (tl->TLlist,tl->TLscan); free ((char *)tl); count++; } (void) fclose (f); } if (count == 0) ! makescan ((char *)NULL,(char *)NULL); } static --- 349,374 ---- goaway ("Can't chdir to %s",prefix); (void) chdir (basedir); } ! if (releases) ! { ! rel_index = releases; ! while (*rel_index) { ! if (!strcmp (*rel_index, tl->TLname)) { ! makescan (tl->TLlist,tl->TLscan); ! break; ! } ! rel_index++; ! } ! } ! else ! makescan (tl->TLlist,tl->TLscan); free ((char *)tl); count++; } (void) fclose (f); } if (count == 0) ! makescan ((char *)NULL,FILESCANDEF); } static *************** *** 400,409 **** char *listfile,*scanfile; { listT = NULL; ! chkscanfile (scanfile); /* can we can write a scan file? */ ! doscan (listfile); /* read list file and scan disk */ ! makescanfile (scanfile); /* record names in scan file */ ! Tfree (&listT); /* free file list tree */ } static --- 414,424 ---- char *listfile,*scanfile; { listT = NULL; ! if(chkscanfile (scanfile)) { /* can we can write a scan file? */ ! doscan (listfile); /* read list file and scan disk */ ! makescanfile (scanfile);/* record names in scan file */ ! Tfree (&listT); /* free file list tree */ ! } } static *************** *** 816,822 **** register TREELIST *tl; if (scanfile == NULL) ! scanfile = FILESCANDEF; (void) sprintf (buf,FILESCAN,collname,scanfile); if (stat(buf,&sbuf) < 0) return (FALSE); --- 831,837 ---- register TREELIST *tl; if (scanfile == NULL) ! return(FALSE); (void) sprintf (buf,FILESCAN,collname,scanfile); if (stat(buf,&sbuf) < 0) return (FALSE); *************** *** 924,930 **** FILE *f; if (scanfile == NULL) ! scanfile = FILESCANDEF; (void) sprintf (fname,FILESCAN,collname,scanfile); (void) sprintf (tname,"%s.temp",fname); if (NULL == (f = fopen (tname, "w"))) --- 939,945 ---- FILE *f; if (scanfile == NULL) ! return(FALSE); (void) sprintf (fname,FILESCAN,collname,scanfile); (void) sprintf (tname,"%s.temp",fname); if (NULL == (f = fopen (tname, "w"))) *************** *** 933,938 **** --- 948,954 ---- (void) unlink (tname); (void) fclose (f); } + return(TRUE); } static makescanfile (scanfile) *************** *** 943,950 **** FILE *scanF; /* output file for scanned file list */ int recordone (); - if (scanfile == NULL) - scanfile = FILESCANDEF; (void) sprintf (fname,FILESCAN,collname,scanfile); (void) sprintf (tname,"%s.temp",fname); scanF = fopen (tname,"w"); --- 959,964 ---- --- supscan.c Sun Dec 10 15:44:22 1995 *************** *** 25,40 **** /* * supscan -- SUP Scan File Builder * ! * Usage: supscan [ -v ] collection [ basedir ] * supscan [ -v ] -f dirfile * supscan [ -v ] -s ! * -f "file" -- use dirfile instead of system coll.dir ! * -s "system" -- perform scan for system supfile ! * -v "verbose" -- print messages as you go ! * collection -- name of the desired collection if not -s ! * basedir -- name of the base directory, if not ! * the default or recorded in coll.dir ! * dirfile -- name of replacement for system coll.dir. * ********************************************************************** * HISTORY --- 25,42 ---- /* * supscan -- SUP Scan File Builder * ! * Usage: supscan [ -v ] collection [ -r release ] [ basedir ] * supscan [ -v ] -f dirfile * supscan [ -v ] -s ! * -f "file" -- use dirfile instead of system coll.dir ! * -r "release" -- scan only the specified release. Multiple ! * releases can be specified. ! * -s "system" -- perform scan for system supfile ! * -v "verbose" -- print messages as you go ! * collection -- name of the desired collection if not -s ! * basedir -- name of the base directory, if not ! * the default or recorded in coll.dir ! * dirfile -- name of replacement for system coll.dir. * ********************************************************************** * HISTORY *************** *** 158,163 **** --- 160,167 ---- char *collname; /* collection name */ char *basedir; /* base directory name */ char *prefix; /* collection pathname prefix */ + char **releases = NULL; /* releases to scan */ + int numreleases = 0; /* size of releases */ long lasttime = 0; /* time of last upgrade */ long scantime; /* time of this scan */ int newonly = FALSE; /* new files only */ *************** *** 190,196 **** ctime (&scantime)); (void) fflush (stdout); if (!setjmp (sjbuf)) { ! makescanlists (); /* record names in scan files */ scantime = time ((long *)NULL); printf ("SUP Scan for %s completed at %s",collname, ctime (&scantime)); --- 194,201 ---- ctime (&scantime)); (void) fflush (stdout); if (!setjmp (sjbuf)) { ! /* record names in scan files */ ! makescanlists (releases); scantime = time ((long *)NULL); printf ("SUP Scan for %s completed at %s",collname, ctime (&scantime)); *************** *** 215,223 **** usage () { ! fprintf (stderr,"Usage: supscan [ -v ] collection [ basedir ]\n"); ! fprintf (stderr," supscan [ -v ] -f dirfile\n"); ! fprintf (stderr," supscan [ -v ] -s\n"); exit (1); } --- 220,238 ---- usage () { ! fprintf(stderr,"Usage: supscan [ -v ] [ -r release ] collection [ basedir ]\n" ! " supscan [ -v ] [ -r release ] -f dirfile\n" ! " supscan [ -v ] [ -r release ] -s\n" ! " supscan [ -v ] [ -r release ] -s\n" ! " -f \"file\" -- use dirfile instead of system coll.dir\n" ! " -r \"release\" -- scan only the specified release. Multiple\n" ! " releases can be specified.\n" ! " -s \"system\" -- perform scan for system supfile\n" ! " -v \"verbose\" -- print messages as you go\n" ! " collection -- name of the desired collection if not -s\n" ! " basedir -- name of the base directory, if not\n" ! " the default or recorded in coll.dir\n" ! " dirfile -- name of replacement for system coll.dir.\n"); exit (1); } *************** *** 243,248 **** --- 258,280 ---- --argc; argv++; filename = argv[1]; + break; + case 'r': + if (argc == 2) + usage (); + --argc; + argv++; + if (argv[1][0] == '-') + usage (); + numreleases++; + releases = (char **)realloc(releases, + sizeof(*releases) * (numreleases+1)); + if (!releases) { + fprintf(stderr,"supscan: cannot malloc!\n"); + exit(1); + } + releases[numreleases - 1] = argv[1]; + releases[numreleases] = NULL; break; case 'v': trace = TRUE;