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

Diff for /src/usr.bin/cvs/status.c between version 1.4 and 1.5

version 1.4, 2004/12/07 17:10:56 version 1.5, 2004/12/14 22:30:48
Line 64 
Line 64 
 cvs_status(int argc, char **argv)  cvs_status(int argc, char **argv)
 {  {
         int i, ch, flags;          int i, ch, flags;
         struct cvs_file *cf;          struct cvsroot *root;
   
         cf = NULL;  
         flags = CF_SORT|CF_IGNORE|CF_RECURSE;          flags = CF_SORT|CF_IGNORE|CF_RECURSE;
   
         while ((ch = getopt(argc, argv, "F:flm:Rr:")) != -1) {          while ((ch = getopt(argc, argv, "F:flm:Rr:")) != -1) {
Line 80 
Line 79 
         argv += optind;          argv += optind;
   
         if (argc == 0) {          if (argc == 0) {
                 cf = cvs_file_get(".", flags);                  cvs_files = cvs_file_get(".", flags);
                 if (cf == NULL) {  
                         return (EX_DATAERR);  
                 }  
   
                 cvs_file_examine(cf, cvs_status_file, NULL);  
         } else {          } else {
                 for (i = 0; i < argc; i++) {                  cvs_files = cvs_file_getspec(argv, argc, 0);
                         cf = cvs_file_get(argv[i], flags);  
                 }  
         }          }
           if (cvs_files == NULL)
                   return (EX_DATAERR);
   
           root = CVS_DIR_ROOT(cvs_files);
           if (root == NULL) {
                   cvs_log(LP_ERR,
                       "No CVSROOT specified!  Please use the `-d' option");
                   cvs_log(LP_ERR,
                       "or set the CVSROOT environment variable.");
                   return (EX_USAGE);
           }
   
           if ((root->cr_method != CVS_METHOD_LOCAL) && (cvs_connect(root) < 0))
                   return (EX_PROTOCOL);
   
           cvs_file_examine(cvs_files, cvs_status_file, NULL);
   
           if (root->cr_method != CVS_METHOD_LOCAL) {
                   if (cvs_senddir(root, cvs_files) < 0)
                           return (EX_PROTOCOL);
                   for (i = 0; i < argc; i++)
                           if (cvs_sendarg(root, argv[i], 0) < 0)
                                   return (EX_PROTOCOL);
                   if (cvs_sendreq(root, CVS_REQ_STATUS, NULL) < 0)
                           return (EX_PROTOCOL);
           }
   
         return (0);          return (0);
 }  }
   
Line 104 
Line 122 
 int  int
 cvs_status_file(CVSFILE *cfp, void *arg)  cvs_status_file(CVSFILE *cfp, void *arg)
 {  {
           int ret;
         char *repo, fpath[MAXPATHLEN], rcspath[MAXPATHLEN];          char *repo, fpath[MAXPATHLEN], rcspath[MAXPATHLEN];
         RCSFILE *rf;          RCSFILE *rf;
         struct cvs_ent *entp;          struct cvs_ent *entp;
         struct cvsroot *root;          struct cvsroot *root;
   
         cvs_file_getpath(cfp, fpath, sizeof(fpath));          ret = 0;
         cvs_log(LP_DEBUG, "%s: getting status for %s", __func__, fpath);  
   
         if (cfp->cf_type == DT_DIR) {  
                 root = cfp->cf_ddat->cd_root;  
                 if ((cfp->cf_parent == NULL) ||  
                     (root != cfp->cf_parent->cf_ddat->cd_root)) {  
                         cvs_connect(root);  
                 }  
   
                 cvs_senddir(root, cfp);  
                 return (0);  
         } else  
                 root = cfp->cf_parent->cf_ddat->cd_root;  
   
         rf = NULL;          rf = NULL;
         if (cfp->cf_parent != NULL)          root = CVS_DIR_ROOT(cfp);
                 repo = cfp->cf_parent->cf_ddat->cd_repo;          repo = CVS_DIR_REPO(cfp);
         else  
                 repo = NULL;  
   
         if (cfp->cf_cvstat == CVS_FST_UNKNOWN) {          if ((root->cr_method != CVS_METHOD_LOCAL) && (cfp->cf_type == DT_DIR))
                 if (root->cr_method == CVS_METHOD_LOCAL)                  return (cvs_senddir(root, cfp));
                         cvs_log(LP_WARN, "I know nothing about %s", fpath);  
                 else  
                         cvs_sendreq(root, CVS_REQ_QUESTIONABLE,  
                             CVS_FILE_NAME(cfp));  
                 return (0);  
         }  
   
           cvs_file_getpath(cfp, fpath, sizeof(fpath));
         entp = cvs_ent_getent(fpath);          entp = cvs_ent_getent(fpath);
         if (entp == NULL)  
                 return (-1);  
   
         if (root->cr_method != CVS_METHOD_LOCAL) {          if (root->cr_method != CVS_METHOD_LOCAL) {
                 if (cvs_sendentry(root, entp) < 0) {                  if ((entp != NULL) && (cvs_sendentry(root, entp) < 0)) {
                         cvs_ent_free(entp);                          cvs_ent_free(entp);
                         return (-1);                          return (-1);
                 }                  }
         }  
   
         if (cfp->cf_cvstat == CVS_FST_UPTODATE) {                  switch (cfp->cf_cvstat) {
                 if (root->cr_method != CVS_METHOD_LOCAL)                  case CVS_FST_UNKNOWN:
                         cvs_sendreq(root, CVS_REQ_UNCHANGED,                          ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE,
                             CVS_FILE_NAME(cfp));                              CVS_FILE_NAME(cfp));
                 cvs_ent_free(entp);                          break;
                 return (0);                  case CVS_FST_UPTODATE:
         }                          ret = cvs_sendreq(root, CVS_REQ_UNCHANGED,
                               CVS_FILE_NAME(cfp));
         /* at this point, the file is modified */                          break;
         if (root->cr_method != CVS_METHOD_LOCAL) {                  case CVS_FST_MODIFIED:
                 cvs_sendreq(root, CVS_REQ_MODIFIED, CVS_FILE_NAME(cfp));                          ret = cvs_sendreq(root, CVS_REQ_MODIFIED,
                 cvs_sendfile(root, fpath);                              CVS_FILE_NAME(cfp));
                           if (ret == 0)
                                   ret = cvs_sendfile(root, fpath);
                   default:
                           break;
                   }
         } else {          } else {
                   if (cfp->cf_cvstat == CVS_FST_UNKNOWN) {
                           cvs_log(LP_WARN, "I know nothing about %s", fpath);
                           return (0);
                   }
   
                 snprintf(rcspath, sizeof(rcspath), "%s/%s/%s%s",                  snprintf(rcspath, sizeof(rcspath), "%s/%s/%s%s",
                     root->cr_dir, repo, CVS_FILE_NAME(cfp), RCS_FILE_EXT);                      root->cr_dir, repo, CVS_FILE_NAME(cfp), RCS_FILE_EXT);
   
Line 174 
Line 179 
   
                 rcs_close(rf);                  rcs_close(rf);
         }          }
         cvs_ent_free(entp);  
         return (0);          if (entp != NULL)
                   cvs_ent_free(entp);
           return (ret);
 }  }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5