[BACK]Return to watch.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / cvs

Diff for /src/usr.bin/cvs/watch.c between version 1.6 and 1.7

version 1.6, 2005/08/16 06:37:57 version 1.7, 2005/10/17 16:16:00
Line 1 
Line 1 
 /*      $OpenBSD$       */  /*      $OpenBSD$       */
 /*  /*
  * Copyright (c) 2005 Xavier Santolaria <xsa@openbsd.org>   * Copyright (c) 2005 Xavier Santolaria <xsa@openbsd.org>
    * Copyright (c) 2005 Moritz Jodeit <moritz@openbsd.org>
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 38 
Line 39 
 #include "proto.h"  #include "proto.h"
   
 static int      cvs_watch_init(struct cvs_cmd *, int, char **, int *);  static int      cvs_watch_init(struct cvs_cmd *, int, char **, int *);
   static int      cvs_watch_pre_exec(struct cvsroot *);
 static int      cvs_watch_remote(CVSFILE *, void*);  static int      cvs_watch_remote(CVSFILE *, void*);
 static int      cvs_watch_local(CVSFILE *, void*);  static int      cvs_watch_local(CVSFILE *, void*);
   
 static int      cvs_watchers_remote(CVSFILE *, void*);  static int      cvs_watchers_init(struct cvs_cmd *, int, char **, int *);
 static int      cvs_watchers_local(CVSFILE *, void*);  static int      cvs_watchers_local(CVSFILE *, void*);
   
   
Line 52 
Line 54 
         "on | off | add | remove [-lR] [-a action] [file ...]",          "on | off | add | remove [-lR] [-a action] [file ...]",
         "a:lR",          "a:lR",
         NULL,          NULL,
         CF_SORT | CF_RECURSE,          CF_SORT | CF_IGNORE | CF_RECURSE,
         cvs_watch_init,          cvs_watch_init,
         NULL,          cvs_watch_pre_exec,
         cvs_watch_remote,          cvs_watch_remote,
         cvs_watch_local,          cvs_watch_local,
         NULL,          NULL,
         NULL,          NULL,
         0          CVS_CMD_SENDDIR | CVS_CMD_ALLOWSPEC | CVS_CMD_SENDARGS2
 };  };
   
 struct cvs_cmd cvs_cmd_watchers = {  struct cvs_cmd cvs_cmd_watchers = {
Line 69 
Line 71 
         "[-lR] [file ...]",          "[-lR] [file ...]",
         "lR",          "lR",
         NULL,          NULL,
         CF_SORT | CF_RECURSE,          CF_SORT | CF_IGNORE | CF_RECURSE,
         cvs_watch_init,          cvs_watchers_init,
         NULL,          NULL,
         cvs_watchers_remote,          cvs_watch_remote,
         cvs_watchers_local,          cvs_watchers_local,
         NULL,          NULL,
         NULL,          NULL,
Line 80 
Line 82 
 };  };
   
   
   static char *aoptstr = NULL;
   static int watchreq = 0;
   
 static int  static int
 cvs_watch_init(struct cvs_cmd *cmd, int argc, char **argv, int *arg)  cvs_watch_init(struct cvs_cmd *cmd, int argc, char **argv, int *arg)
 {  {
         int ch;          int ch;
   
           if (argc < 2)
                   return (CVS_EX_USAGE);
   
           if (strcmp(argv[1], "on") == 0)
                   watchreq = CVS_REQ_WATCH_ON;
           else if (strcmp(argv[1], "off") == 0)
                   watchreq = CVS_REQ_WATCH_OFF;
           else if (strcmp(argv[1], "add") == 0)
                   watchreq = CVS_REQ_WATCH_ADD;
           else if (strcmp(argv[1], "remove") == 0)
                   watchreq = CVS_REQ_WATCH_REMOVE;
           else
                   return (CVS_EX_USAGE);
   
           cmd->cmd_req = watchreq;
           optind = 2;
   
         while ((ch = getopt(argc, argv, cmd->cmd_opts)) != -1) {          while ((ch = getopt(argc, argv, cmd->cmd_opts)) != -1) {
                 switch (ch) {                  switch (ch) {
                 case 'a':                  case 'a':
                         /*                          /*
                          * The `watchers' command does not have the                           * Only `watch add | remove' support the -a option.
                          * -a option. Check which command has been issued.                           * Check which command has been issued.
                          */                           */
                         if (cvs_cmdop != CVS_OP_WATCH)                          if (watchreq != CVS_REQ_WATCH_ADD &&
                               watchreq != CVS_REQ_WATCH_REMOVE)
                                 return (CVS_EX_USAGE);                                  return (CVS_EX_USAGE);
                           if (strcmp(optarg, "commit") != 0 &&
                               strcmp(optarg, "edit") != 0 &&
                               strcmp(optarg, "unedit") != 0 &&
                               strcmp(optarg, "all") != 0 &&
                               strcmp(optarg, "none") != 0)
                                   return (CVS_EX_USAGE);
                           if ((aoptstr = strdup(optarg)) == NULL) {
                                   cvs_log(LP_ERRNO, "failed to copy action");
                                   return (CVS_EX_DATA);
                           }
                         break;                          break;
                 case 'l':                  case 'l':
                         cmd->file_flags &= ~CF_RECURSE;                          cmd->file_flags &= ~CF_RECURSE;
Line 113 
Line 145 
   
   
 /*  /*
  * cvs_watch_remote()   * cvs_watch_pre_exec()
  *   *
  */   */
 static int  static int
 cvs_watch_remote(CVSFILE *cf, void *arg)  cvs_watch_pre_exec(struct cvsroot *root)
 {  {
           if (root->cr_method != CVS_METHOD_LOCAL) {
                   if (watchreq != CVS_REQ_WATCH_ADD &&
                       watchreq != CVS_REQ_WATCH_REMOVE)
                           return (CVS_EX_OK);
   
                   if (aoptstr == NULL || strcmp(aoptstr, "all") == 0) {
                           /* Defaults to: edit, unedit, commit */
                           if ((cvs_sendarg(root, "-a", 0) < 0) ||
                               (cvs_sendarg(root, "edit", 0) < 0) ||
                               (cvs_sendarg(root, "-a", 0) < 0) ||
                               (cvs_sendarg(root, "unedit", 0) < 0) ||
                               (cvs_sendarg(root, "-a", 0) < 0) ||
                               (cvs_sendarg(root, "commit", 0) < 0)) {
                                   free(aoptstr);
                                   return (CVS_EX_PROTO);
                           }
                   } else {
                           if ((cvs_sendarg(root, "-a", 0) < 0) ||
                               (cvs_sendarg(root, aoptstr, 0) < 0)) {
                                   free(aoptstr);
                                   return (CVS_EX_PROTO);
                           }
                   }
           }
           free(aoptstr);
   
         return (CVS_EX_OK);          return (CVS_EX_OK);
 }  }
   
Line 135 
Line 193 
   
   
 /*  /*
  * cvs_watchers_remote()   * cvs_watch_remote()
  *   *
  */   */
 static int  static int
 cvs_watchers_remote(CVSFILE *cf, void *arg)  cvs_watch_remote(CVSFILE *cf, void *arg)
 {  {
         int ret;          int ret;
         struct cvsroot *root;          struct cvsroot *root;
Line 183 
Line 241 
   
         return (ret);          return (ret);
 }  }
   
   
   /*
    * cvs_watchers_init()
    *
    */
   static int
   cvs_watchers_init(struct cvs_cmd *cmd, int argc, char **argv, int *arg)
   {
           int ch;
   
           while ((ch = getopt(argc, argv, cmd->cmd_opts)) != -1) {
                   switch (ch) {
                   case 'l':
                           cmd->file_flags &= ~CF_RECURSE;
                           break;
                   case 'R':
                           cmd->file_flags |= CF_RECURSE;
                           break;
                   default:
                           return (CVS_EX_USAGE);
                   }
           }
   
           *arg = optind;
           return (CVS_EX_OK);
   }
   
   
 /*  /*
  * cvs_watchers_local()   * cvs_watchers_local()

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7