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

Diff for /src/usr.bin/rcs/rcsmerge.c between version 1.43 and 1.44

version 1.43, 2006/05/09 14:03:55 version 1.44, 2006/05/10 12:05:33
Line 32 
Line 32 
 int  int
 rcsmerge_main(int argc, char **argv)  rcsmerge_main(int argc, char **argv)
 {  {
         int fd, i, ch, flags, kflag, status;          int fd, ch, flags, kflag, status;
         char *fcont, fpath[MAXPATHLEN], r1[16], r2[16], *rev_str1, *rev_str2;          char *fcont, fpath[MAXPATHLEN], r1[16], r2[16], *rev_str1, *rev_str2;
         RCSFILE *file;          RCSFILE *file;
         RCSNUM *rev1, *rev2;          RCSNUM *rev1, *rev2;
Line 40 
Line 40 
   
         flags = 0;          flags = 0;
         kflag = RCS_KWEXP_ERR;          kflag = RCS_KWEXP_ERR;
         status = 0;          status = D_ERROR;
         rev1 = rev2 = NULL;          rev1 = rev2 = NULL;
         rev_str1 = rev_str2 = NULL;          rev_str1 = rev_str2 = NULL;
   
Line 92 
Line 92 
         argc -= rcs_optind;          argc -= rcs_optind;
         argv += rcs_optind;          argv += rcs_optind;
   
         if (argc < 1) {          if (rev_str1 == NULL) {
                 warnx("no input file");                  warnx("no base revision number given");
                 (usage)();                  (usage)();
                 exit(D_ERROR);                  exit(D_ERROR);
         }          }
   
         if (rev_str1 == NULL) {          if (argc < 1) {
                 warnx("no base revision number given");                  warnx("no input file");
                 (usage)();                  (usage)();
                 exit(D_ERROR);                  exit(D_ERROR);
         }          }
   
         for (i = 0; i < argc; i++) {          if (argc > 2 || (argc == 2 && argv[1] != NULL))
                 fd = rcs_statfile(argv[i], fpath, sizeof(fpath), flags);                  warnx("warning: excess arguments ignored");
                 if (fd < 0)  
                         continue;  
   
                 if ((file = rcs_open(fpath, fd, RCS_READ)) == NULL)          if ((fd = rcs_statfile(argv[0], fpath, sizeof(fpath), flags)) < 0)
                         continue;                  return (status);
   
                 if (!(flags & QUIET))          if (!(flags & QUIET))
                         fprintf(stderr, "RCS file: %s\n", fpath);                  (void)fprintf(stderr, "RCS file: %s\n", fpath);
   
                 if (rev1 != NULL) {          if ((file = rcs_open(fpath, fd, RCS_READ)) == NULL)
                         rcsnum_free(rev1);                  return (status);
                         rev1 = NULL;  
                 }  
                 if (rev2 != NULL) {  
                         rcsnum_free(rev2);  
                         rev2 = NULL;  
                 }  
   
                 if (strcmp(rev_str1, "") == 0) {          if (strcmp(rev_str1, "") == 0) {
                         rev1 = rcsnum_alloc();                  rev1 = rcsnum_alloc();
                         rcsnum_cpy(file->rf_head, rev1, 0);                  rcsnum_cpy(file->rf_head, rev1, 0);
                 } else if ((rev1 = rcs_getrevnum(rev_str1, file)) == NULL)          } else if ((rev1 = rcs_getrevnum(rev_str1, file)) == NULL)
                         errx(D_ERROR, "invalid revision: %s", rev_str1);                  errx(D_ERROR, "invalid revision: %s", rev_str1);
   
                 if (rev_str2 != NULL && strcmp(rev_str2, "") != 0) {          if (rev_str2 != NULL && strcmp(rev_str2, "") != 0) {
                         if ((rev2 = rcs_getrevnum(rev_str2, file)) == NULL)                  if ((rev2 = rcs_getrevnum(rev_str2, file)) == NULL)
                                 errx(D_ERROR, "invalid revision: %s", rev_str2);                          errx(D_ERROR, "invalid revision: %s", rev_str2);
                 } else {          } else {
                         rev2 = rcsnum_alloc();                  rev2 = rcsnum_alloc();
                         rcsnum_cpy(file->rf_head, rev2, 0);                  rcsnum_cpy(file->rf_head, rev2, 0);
                 }          }
   
                 if (rcsnum_cmp(rev1, rev2, 0) == 0) {          if (rcsnum_cmp(rev1, rev2, 0) == 0)
                         rcs_close(file);                  goto out;
                         continue;  
                 }  
   
                 if (!(flags & QUIET)) {          if ((bp = rcs_diff3(file, argv[0], rev1, rev2,
                         (void)rcsnum_tostr(rev1, r1, sizeof(r1));              !(flags & QUIET))) == NULL) {
                         (void)rcsnum_tostr(rev2, r2, sizeof(r2));                  warnx("failed to merge");
                   goto out;
           }
   
                         fprintf(stderr, "Merging differences between %s and "          if (!(flags & QUIET)) {
                             "%s into %s%s\n", r1, r2, argv[i],                  (void)rcsnum_tostr(rev1, r1, sizeof(r1));
                             (flags & PIPEOUT) ? "; result to stdout":"");                  (void)rcsnum_tostr(rev2, r2, sizeof(r2));
                 }  
   
                 if ((bp = rcs_diff3(file, argv[i], rev1, rev2,                  (void)fprintf(stderr, "Merging differences between %s and "
                     !(flags & QUIET))) == NULL) {                      "%s into %s%s\n", r1, r2, argv[0],
                         warnx("failed to merge");                      (flags & PIPEOUT) ? "; result to stdout":"");
                         rcs_close(file);          }
                         continue;  
                 }  
   
                 if (diff3_conflicts != 0)          if (diff3_conflicts != 0)
                         status = D_OVERLAPS;                  status = D_OVERLAPS;
           else
                   status = 0;
   
                 if (flags & PIPEOUT) {          if (flags & PIPEOUT) {
                         rcs_buf_putc(bp, '\0');                  rcs_buf_putc(bp, '\0');
                         fcont = rcs_buf_release(bp);                  fcont = rcs_buf_release(bp);
                         printf("%s", fcont);                  printf("%s", fcont);
                         xfree(fcont);                  xfree(fcont);
                 } else {          } else {
                         /* XXX mode */                  /* XXX mode */
                         if (rcs_buf_write(bp, argv[i], 0644) < 0)                  if (rcs_buf_write(bp, argv[0], 0644) < 0)
                                 warnx("rcs_buf_write failed");                          warnx("rcs_buf_write failed");
   
                         rcs_buf_free(bp);                  rcs_buf_free(bp);
                 }  
                 rcs_close(file);  
         }          }
   
   out:
           rcs_close(file);
   
           if (rev1 != NULL)
                   rcsnum_free(rev1);
           if (rev2 != NULL)
                   rcsnum_free(rev2);
   
         return (status);          return (status);
 }  }

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.44