add -u[user] option to info/check/tell (not clean!)
authorEric Allman <eric@ucbvax.Berkeley.EDU>
Wed, 3 Dec 1980 01:59:24 +0000 (17:59 -0800)
committerEric Allman <eric@ucbvax.Berkeley.EDU>
Wed, 3 Dec 1980 01:59:24 +0000 (17:59 -0800)
SCCS-vsn: usr.bin/sccs/sccs.c 1.49
SCCS-vsn: usr.bin/sccs/sccs.1 1.20

usr/src/usr.bin/sccs/sccs.1
usr/src/usr.bin/sccs/sccs.c

index 13ff1a6..7905349 100644 (file)
@@ -112,6 +112,13 @@ flag is given,
 branches (i.e.,
 \s-1SID\s0's with two or fewer components)
 are ignored.
 branches (i.e.,
 \s-1SID\s0's with two or fewer components)
 are ignored.
+If the
+.B \-u
+flag is given
+(with an optional argument)
+then only files being edited by you
+(or the named user)
+are listed.
 .IP check
 Like ``info''
 except that nothing is printed if nothing is being edited,
 .IP check
 Like ``info''
 except that nothing is printed if nothing is being edited,
@@ -129,7 +136,9 @@ of the files being edited
 on the standard output.
 Takes the
 .B \-b
 on the standard output.
 Takes the
 .B \-b
-flag like 
+and
+.B \-u
+flags like 
 ``info'' and ``check''.
 .IP diffs
 Gives a ``diff'' listing between the current version of the
 ``info'' and ``check''.
 .IP diffs
 Gives a ``diff'' listing between the current version of the
@@ -217,6 +226,14 @@ in the current directory:
 .BX
 sccs delta *.c
 .EX
 .BX
 sccs delta *.c
 .EX
+To get a list of files being edited that are not on branches:
+.BX
+sccs info \-b
+.EX
+To delta everything being edited by you:
+.BX
+sccs delta \`sccs tell \-u\`
+.EX
 In a makefile, to get source files
 from an
 .SM SCCS
 In a makefile, to get source files
 from an
 .SM SCCS
index 2466dca..8e70ad5 100644 (file)
@@ -92,7 +92,7 @@
 **             Copyright 1980 Regents of the University of California
 */
 
 **             Copyright 1980 Regents of the University of California
 */
 
-static char SccsId[] = "@(#)sccs.c     1.48 %G%";
+static char SccsId[] = "@(#)sccs.c     1.49 %G%";
 \f
 /*******************  Configuration Information  ********************/
 
 \f
 /*******************  Configuration Information  ********************/
 
@@ -172,27 +172,27 @@ struct sccsprog
 
 struct sccsprog SccsProg[] =
 {
 
 struct sccsprog SccsProg[] =
 {
-       "admin",        PROG,   REALUSER,       PROGPATH(admin),
-       "chghist",      PROG,   0,              PROGPATH(rmdel),
-       "comb",         PROG,   0,              PROGPATH(comb),
-       "delta",        PROG,   0,              PROGPATH(delta),
-       "get",          PROG,   0,              PROGPATH(get),
-       "help",         PROG,   NO_SDOT,        PROGPATH(help),
-       "prt",          PROG,   0,              PROGPATH(prt),
-       "rmdel",        PROG,   REALUSER,       PROGPATH(rmdel),
-       "what",         PROG,   NO_SDOT,        PROGPATH(what),
-       "sccsdiff",     SHELL,  REALUSER,       PROGPATH(sccsdiff),
-       "edit",         CMACRO, NO_SDOT,        "get -e",
-       "delget",       CMACRO, NO_SDOT,        "delta:mysrp/get:ixbeskcl -t",
-       "deledit",      CMACRO, NO_SDOT,        "delta:mysrp/get:ixbskcl -e -t",
-       "fix",          FIX,    NO_SDOT,        NULL,
-       "clean",        CLEAN,  REALUSER,       (char *) CLEANC,
-       "info",         CLEAN,  REALUSER,       (char *) INFOC,
-       "check",        CLEAN,  REALUSER,       (char *) CHECKC,
-       "tell",         CLEAN,  REALUSER,       (char *) TELLC,
-       "unedit",       UNEDIT, NO_SDOT,        NULL,
-       "diffs",        DIFFS,  NO_SDOT|REALUSER, NULL,
-       NULL,           -1,     0,              NULL
+       "admin",        PROG,   REALUSER,               PROGPATH(admin),
+       "chghist",      PROG,   0,                      PROGPATH(rmdel),
+       "comb",         PROG,   0,                      PROGPATH(comb),
+       "delta",        PROG,   0,                      PROGPATH(delta),
+       "get",          PROG,   0,                      PROGPATH(get),
+       "help",         PROG,   NO_SDOT,                PROGPATH(help),
+       "prt",          PROG,   0,                      PROGPATH(prt),
+       "rmdel",        PROG,   REALUSER,               PROGPATH(rmdel),
+       "what",         PROG,   NO_SDOT,                PROGPATH(what),
+       "sccsdiff",     SHELL,  REALUSER,               PROGPATH(sccsdiff),
+       "edit",         CMACRO, NO_SDOT,                "get -e",
+       "delget",       CMACRO, NO_SDOT,                "delta:mysrp/get:ixbeskcl -t",
+       "deledit",      CMACRO, NO_SDOT,                "delta:mysrp/get:ixbskcl -e -t",
+       "fix",          FIX,    NO_SDOT,                NULL,
+       "clean",        CLEAN,  REALUSER|NO_SDOT,       (char *) CLEANC,
+       "info",         CLEAN,  REALUSER|NO_SDOT,       (char *) INFOC,
+       "check",        CLEAN,  REALUSER|NO_SDOT,       (char *) CHECKC,
+       "tell",         CLEAN,  REALUSER|NO_SDOT,       (char *) TELLC,
+       "unedit",       UNEDIT, NO_SDOT,                NULL,
+       "diffs",        DIFFS,  NO_SDOT|REALUSER,       NULL,
+       NULL,           -1,     0,                      NULL
 };
 
 /* one line from a p-file */
 };
 
 /* one line from a p-file */
@@ -798,6 +798,8 @@ clean(mode, argv)
        extern struct pfile *getpfent();
        register struct pfile *pf;
        register char **ap;
        extern struct pfile *getpfent();
        register struct pfile *pf;
        register char **ap;
+       extern char *username();
+       char *usernm = NULL;
 
        /*
        **  Process the argv
 
        /*
        **  Process the argv
@@ -805,8 +807,25 @@ clean(mode, argv)
 
        for (ap = argv; *ap != NULL; ap++)
        {
 
        for (ap = argv; *ap != NULL; ap++)
        {
-               if (strcmp(*ap, "-b") == 0)
-                       nobranch = TRUE;
+               if (**ap == '-')
+               {
+                       /* we have a flag */
+                       switch ((*ap)[1])
+                       {
+                         case 'b':
+                               nobranch = TRUE;
+                               break;
+
+                         case 'u':
+                               if ((*ap)[2] != '\0')
+                                       usernm = &(*ap)[2];
+                               else if (ap[1] != NULL && ap[1][0] != '-')
+                                       usernm = *++ap;
+                               else
+                                       usernm = username();
+                               break;
+                       }
+               }
        }
 
        /*
        }
 
        /*
@@ -862,6 +881,8 @@ clean(mode, argv)
                        {
                                if (nobranch && isbranch(pf->p_nsid))
                                        continue;
                        {
                                if (nobranch && isbranch(pf->p_nsid))
                                        continue;
+                               if (usernm != NULL && strcmp(usernm, pf->p_user) != 0 && mode != CLEANC)
+                                       continue;
                                gotedit = TRUE;
                                gotpfent = TRUE;
                                if (mode == TELLC)
                                gotedit = TRUE;
                                gotpfent = TRUE;
                                if (mode == TELLC)
@@ -890,7 +911,15 @@ clean(mode, argv)
        /* cleanup & report results */
        fclose(dirfd);
        if (!gotedit && mode == INFOC)
        /* cleanup & report results */
        fclose(dirfd);
        if (!gotedit && mode == INFOC)
-               printf("Nothing being edited\n");
+       {
+               printf("Nothing being edited");
+               if (nobranch)
+                       printf(" (on trunk)");
+               if (usernm == NULL)
+                       printf("\n");
+               else
+                       printf(" by %s\n", usernm);
+       }
        if (mode == CHECKC)
                exit(gotedit);
        return (EX_OK);
        if (mode == CHECKC)
                exit(gotedit);
        return (EX_OK);
@@ -958,15 +987,11 @@ unedit(fn)
        bool delete = FALSE;
        bool others = FALSE;
        char *myname;
        bool delete = FALSE;
        bool others = FALSE;
        char *myname;
-       extern char *getlogin();
+       extern char *username();
        struct pfile *pent;
        extern struct pfile *getpfent();
        char buf[120];
        extern char *makefile();
        struct pfile *pent;
        extern struct pfile *getpfent();
        char buf[120];
        extern char *makefile();
-# ifdef UIDUSER
-       struct passwd *pw;
-       extern struct passwd *getpwuid();
-# endif UIDUSER
 
        /* make "s." filename & find the trailing component */
        pfn = makefile(fn);
 
        /* make "s." filename & find the trailing component */
        pfn = makefile(fn);
@@ -1001,17 +1026,7 @@ unedit(fn)
        }
 
        /* figure out who I am */
        }
 
        /* figure out who I am */
-# ifdef UIDUSER
-       pw = getpwuid(getuid());
-       if (pw == NULL)
-       {
-               syserr("who are you? (uid=%d)", getuid());
-               exit(EX_OSERR);
-       }
-       myname = pw->pw_name;
-# else
-       myname = getlogin();
-# endif UIDUSER
+       myname = username();
 
        /*
        **  Copy p-file to temp file, doing deletions as needed.
 
        /*
        **  Copy p-file to temp file, doing deletions as needed.
@@ -1282,3 +1297,34 @@ syserr(f, p1, p2, p3)
                exit(EX_OSERR);
        }
 }
                exit(EX_OSERR);
        }
 }
+\f/*
+**  USERNAME -- return name of the current user
+**
+**     Parameters:
+**             none
+**
+**     Returns:
+**             name of current user
+**
+**     Side Effects:
+**             none
+*/
+
+char *
+username()
+{
+# ifdef UIDUSER
+       extern struct passwd *getpwuid();
+       register struct passwd *pw;
+
+       pw = getpwuid(getuid());
+       if (pw == NULL)
+       {
+               syserr("who are you? (uid=%d)", getuid());
+               exit(EX_OSERR);
+       }
+       return (pw->pw_name);
+# else
+       return (getlogin());
+# endif UIDUSER
+}