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

Diff for /src/usr.bin/rcs/co.c between version 1.75 and 1.76

version 1.75, 2006/04/13 00:58:25 version 1.76, 2006/04/13 03:18:06
Line 180 
Line 180 
                         if ((rev = rcs_getrevnum(rev_str, file)) == NULL)                          if ((rev = rcs_getrevnum(rev_str, file)) == NULL)
                                 fatal("invalid revision: %s", rev_str);                                  fatal("invalid revision: %s", rev_str);
                 } else {                  } else {
                         rev = rcsnum_alloc();                          /* no revisions in RCS file, generate empty 0.0 */
                         rcsnum_cpy(file->rf_head, rev, 0);                          if (file->rf_ndelta == 0) {
                                   rev = rcsnum_parse("0.0");
                                   if (rev == NULL)
                                           fatal("failed to generate rev 0.0");
                           } else {
                                   rev = rcsnum_alloc();
                                   rcsnum_cpy(file->rf_head, rev, 0);
                           }
                 }                  }
   
                 if ((status = checkout_rev(file, rev, argv[i], flags,                  if ((status = checkout_rev(file, rev, argv[i], flags,
Line 245 
Line 252 
         if (date != NULL)          if (date != NULL)
                 givendate = cvs_date_parse(date);                  givendate = cvs_date_parse(date);
   
           if (file->rf_ndelta == 0)
                   printf("no revisions present; generating empty revision 0.0\n");
   
         /* XXX rcsnum_cmp()          /* XXX rcsnum_cmp()
          * Check out the latest revision if <frev> is greater than HEAD           * Check out the latest revision if <frev> is greater than HEAD
          */           */
         for (i = 0; i < file->rf_head->rn_len; i++) {          if (file->rf_ndelta != 0) {
                 if (file->rf_head->rn_id[i] < frev->rn_id[i]) {                  for (i = 0; i < file->rf_head->rn_len; i++) {
                         frev = file->rf_head;                          if (file->rf_head->rn_id[i] < frev->rn_id[i]) {
                         break;                                  frev = file->rf_head;
                                   break;
                           }
                 }                  }
         }          }
   
Line 268 
Line 280 
          * If we cannot find one, we return an error.           * If we cannot find one, we return an error.
          */           */
         rdp = NULL;          rdp = NULL;
         if (frev == file->rf_head) {          if ((file->rf_ndelta != 0) && (frev == file->rf_head)) {
                 if (lcount > 1) {                  if (lcount > 1) {
                         cvs_log(LP_WARN,                          cvs_log(LP_WARN,
                             "multiple revisions locked by %s; "                              "multiple revisions locked by %s; "
Line 295 
Line 307 
                         frev = rdp->rd_num;                          frev = rdp->rd_num;
                         break;                          break;
                 }                  }
         } else {          } else if (file->rf_ndelta != 0) {
                 rdp = rcs_findrev(file, frev);                  rdp = rcs_findrev(file, frev);
         }          }
   
         if (rdp == NULL) {          if ((file->rf_ndelta != 0) && (rdp == NULL)) {
                 checkout_err_nobranch(file, author, date, state, flags);                  checkout_err_nobranch(file, author, date, state, flags);
                 return (-1);                  return (-1);
         }          }
   
         rev = rdp->rd_num;          if (file->rf_ndelta == 0)
                   rev = frev;
           else
                   rev = rdp->rd_num;
   
         rcsnum_tostr(rev, buf, sizeof(buf));          rcsnum_tostr(rev, buf, sizeof(buf));
   
         if (rdp->rd_locker != NULL) {          if ((file->rf_ndelta != 0) && (rdp->rd_locker != NULL)) {
                 if (strcmp(lockname, rdp->rd_locker)) {                  if (strcmp(lockname, rdp->rd_locker)) {
                         strlcpy(msg, "Revision %s is already locked by %s; ",                          strlcpy(msg, "Revision %s is already locked by %s; ",
                             sizeof(msg));                              sizeof(msg));
                         if (flags & CO_UNLOCK)  
                                 strlcat(msg, "use co -r or rcs -u", sizeof(msg));                          if (flags & CO_UNLOCK) {
                                   strlcat(msg, "use co -r or rcs -u",
                                       sizeof(msg));
                           }
   
                         cvs_log(LP_ERR, msg, buf, rdp->rd_locker);                          cvs_log(LP_ERR, msg, buf, rdp->rd_locker);
                         return (-1);                          return (-1);
                 }                  }
         }          }
   
         if ((verbose == 1) && !(flags & NEWFILE) && !(flags & CO_REVERT))          if ((verbose == 1) && !(flags & NEWFILE) &&
               !(flags & CO_REVERT) && (file->rf_ndelta != 0))
                 printf("revision %s", buf);                  printf("revision %s", buf);
   
         if ((verbose == 1) && (flags & CO_REVERT))          if ((verbose == 1) && (flags & CO_REVERT))
                 printf("done");                  printf("done");
   
           if (file->rf_ndelta != 0) {
         if ((bp = rcs_getrev(file, rev)) == NULL) {                  if ((bp = rcs_getrev(file, rev)) == NULL) {
                 cvs_log(LP_ERR, "cannot find revision `%s'", buf);                          cvs_log(LP_ERR, "cannot find revision `%s'", buf);
                 return (-1);                          return (-1);
                   }
           } else {
                   bp = cvs_buf_alloc(1, 0);
         }          }
   
         /*          /*
          * Do keyword expansion if required.           * Do keyword expansion if required.
          */           */
         bp = rcs_kwexp_buf(bp, file, rev);          if (file->rf_ndelta != 0)
                   bp = rcs_kwexp_buf(bp, file, rev);
   
         /*          /*
          * File inherits permissions from its ,v file           * File inherits permissions from its ,v file
Line 344 
Line 369 
         mode = st.st_mode;          mode = st.st_mode;
   
         if (flags & CO_LOCK) {          if (flags & CO_LOCK) {
                 if ((lockname != NULL)                  if (file->rf_ndelta != 0) {
                     && (rcs_lock_add(file, lockname, rev) < 0)) {                          if ((lockname != NULL)
                         if (rcs_errno != RCS_ERR_DUPENT)                           && (rcs_lock_add(file, lockname, rev) < 0)) {
                                 return (-1);                                  if (rcs_errno != RCS_ERR_DUPENT)
                                           return (-1);
                           }
                 }                  }
   
                 /* Strip all write bits from mode */                  /* Strip all write bits from mode */
                 mode = st.st_mode &                  mode = st.st_mode &
                     (S_IXUSR|S_IXGRP|S_IXOTH|S_IRUSR|S_IRGRP|S_IROTH);                      (S_IXUSR|S_IXGRP|S_IXOTH|S_IRUSR|S_IRGRP|S_IROTH);
                 mode |= S_IWUSR;                  mode |= S_IWUSR;
                 if ((verbose == 1) && !(flags & NEWFILE)  
                     && !(flags & CO_REVERT))                  if (file->rf_ndelta != 0) {
                         printf(" (locked)");                          if ((verbose == 1) && !(flags & NEWFILE)
                               && !(flags & CO_REVERT))
                                   printf(" (locked)");
                   }
         } else if (flags & CO_UNLOCK) {          } else if (flags & CO_UNLOCK) {
                 if (rcs_lock_remove(file, lockname, rev) < 0) {                  if (file->rf_ndelta != 0) {
                         if (rcs_errno != RCS_ERR_NOENT)                          if (rcs_lock_remove(file, lockname, rev) < 0) {
                                 return (-1);                                  if (rcs_errno != RCS_ERR_NOENT)
                                           return (-1);
                           }
                 }                  }
   
                 /* Strip all write bits from mode */                  /* Strip all write bits from mode */
                 mode = st.st_mode &                  mode = st.st_mode &
                     (S_IXUSR|S_IXGRP|S_IXOTH|S_IRUSR|S_IRGRP|S_IROTH);                      (S_IXUSR|S_IXGRP|S_IXOTH|S_IRUSR|S_IRGRP|S_IROTH);
                 if ((verbose == 1) && !(flags & NEWFILE)  
                     && !(flags & CO_REVERT))                  if (file->rf_ndelta != 0) {
                         printf(" (unlocked)");                          if ((verbose == 1) && !(flags & NEWFILE)
                               && !(flags & CO_REVERT))
                                   printf(" (unlocked)");
                   }
         }          }
   
         if ((verbose == 1) && !(flags & NEWFILE))          if ((file->rf_ndelta == 0) &&
                 printf("\n");              ((flags & CO_LOCK) || (flags & CO_UNLOCK))) {
                   cvs_log(LP_WARN, "no revisions, so nothing can be %s",
                       (flags & CO_LOCK) ? "locked" : "unlocked");
           } else if (file->rf_ndelta != 0) {
                   if ((verbose == 1) && !(flags & NEWFILE))
                           printf("\n");
           }
   
         if (flags & CO_LOCK) {          if (flags & CO_LOCK) {
                 if (rcs_errno != RCS_ERR_DUPENT)                  if (rcs_errno != RCS_ERR_DUPENT)

Legend:
Removed from v.1.75  
changed lines
  Added in v.1.76