Add cvs annotate -b which allows to annotate "backwards":
authorSimon Schubert <corecode@dragonflybsd.org>
Wed, 13 Sep 2006 19:34:24 +0000 (19:34 +0000)
committerSimon Schubert <corecode@dragonflybsd.org>
Wed, 13 Sep 2006 19:34:24 +0000 (19:34 +0000)
When specifying a revision to start with, it will show for each line
at which point (later) this line was removed.

gnu/usr.bin/cvs/cvs/Makefile
gnu/usr.bin/cvs/cvs/annotate.c.patch [new file with mode: 0644]
gnu/usr.bin/cvs/cvs/cvs.1.patch
gnu/usr.bin/cvs/cvs/rcs.c.patch
gnu/usr.bin/cvs/cvs/rcs.h.patch [new file with mode: 0644]
gnu/usr.bin/cvs/doc/Makefile
gnu/usr.bin/cvs/doc/cvs.texinfo.patch [new file with mode: 0644]

index 1cfe003..a171873 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/gnu/usr.bin/cvs/cvs/Makefile,v 1.32.2.6 2003/01/21 23:06:51 peter Exp $
-# $DragonFly: src/gnu/usr.bin/cvs/cvs/Makefile,v 1.11 2006/05/27 11:59:44 corecode Exp $
+# $DragonFly: src/gnu/usr.bin/cvs/cvs/Makefile,v 1.12 2006/09/13 19:34:24 corecode Exp $
 
 .include "${.CURDIR}/../Makefile.inc"
 
@@ -10,7 +10,7 @@
 .PATH: ${CVSDIR}
 
 PROG=  cvs
-MAN=   ${.OBJDIR}/cvs.1 cvs.5
+MAN=   cvs.1 cvs.5
 
 SRCS=  add.c admin.c annotate.c buffer.c \
        checkin.c checkout.c classify.c client.c \
@@ -25,14 +25,23 @@ SRCS=       add.c admin.c annotate.c buffer.c \
        update.c vers_ts.c version.c watch.c wrapper.c zlib.c \
        main.c diff.c ${PATCHES}
 
-PATCHES=main.c.patch commit.c.patch diff.c.patch root.c.patch rcs.c.patch \
-       parseinfo.c.patch cvs.h.patch zlib.c.patch
+PATCHES= \
+       annotate.c.patch \
+       commit.c.patch \
+       cvs.h.patch \
+       diff.c.patch \
+       main.c.patch \
+       parseinfo.c.patch \
+       rcs.c.patch \
+       rcs.h.patch \
+       root.c.patch \
+       zlib.c.patch
+
 CONTRIBDIR=    ${CVSDIR}/src
 
-${.OBJDIR}/cvs.1: cvs.1.patch
-       patch -o ${.TARGET} -i ${.ALLSRC} ${CVSDIR}/doc/cvs.1
+CLEANFILES+=   cvs.1
 
-CLEANFILES+= ${.OBJDIR}/cvs.1
+cvs.1: _PATCHFILE ${CVSDIR}/doc/cvs.1 cvs.1.patch
 
 CFLAGS+= -I${.CURDIR} -I../lib -DHAVE_CONFIG_H \
         -I${CVSDIR}/src -I${CVSDIR}/lib -I${CVSDIR}/diff -I.
diff --git a/gnu/usr.bin/cvs/cvs/annotate.c.patch b/gnu/usr.bin/cvs/cvs/annotate.c.patch
new file mode 100644 (file)
index 0000000..c2e0de8
--- /dev/null
@@ -0,0 +1,56 @@
+$DragonFly: src/gnu/usr.bin/cvs/cvs/Attic/annotate.c.patch,v 1.1 2006/09/13 19:34:24 corecode Exp $
+diff -r 93f8116a881a contrib/cvs-1.12/src/annotate.c
+--- a/contrib/cvs-1.12/src/annotate.c  Sat Sep 09 18:10:13 2006 +0200
++++ b/contrib/cvs-1.12/src/annotate.c  Wed Sep 13 16:08:24 2006 +0200
+@@ -21,6 +21,7 @@
+ /* Options from the command line.  */
++static int backwards = 0;
+ static int force_tag_match = 1;
+ static int force_binary = 0;
+ static char *tag = NULL;
+@@ -36,7 +37,8 @@ static int rannotate_proc (int argc, cha
+ static const char *const annotate_usage[] =
+ {
+-    "Usage: %s %s [-lRfF] [-r rev] [-D date] [files...]\n",
++    "Usage: %s %s [-blRfF] [-r rev] [-D date] [files...]\n",
++    "\t-b\tBackwards, show when a line was removed.\n",
+     "\t-l\tLocal directory only, no recursion.\n",
+     "\t-R\tProcess directories recursively.\n",
+     "\t-f\tUse head revision if tag/date not found.\n",
+@@ -63,10 +65,12 @@ annotate (int argc, char **argv)
+       usage (annotate_usage);
+     optind = 0;
+-    while ((c = getopt (argc, argv, "+lr:D:fFR")) != -1)
++    while ((c = getopt (argc, argv, "+blr:D:fFR")) != -1)
+     {
+       switch (c)
+       {
++          case 'b':
++              backwards = 1;
+           case 'l':
+               local = 1;
+               break;
+@@ -105,6 +109,8 @@ annotate (int argc, char **argv)
+       ign_setup ();
++      if (backwards)
++          send_arg ("-b");
+       if (local)
+           send_arg ("-l");
+       if (!force_tag_match)
+@@ -280,7 +286,9 @@ annotate_fileproc (void *callerdat, stru
+     else
+     {
+       RCS_deltas (finfo->rcs, NULL, NULL,
+-                  version, RCS_ANNOTATE, NULL, NULL, NULL, NULL);
++                  version,
++                  backwards ? RCS_ANNOTATE_BACKWARDS : RCS_ANNOTATE,
++                  NULL, NULL, NULL, NULL);
+     }
+     free (version);
+     return 0;
index 08cac7c..fae61fa 100644 (file)
@@ -1,7 +1,8 @@
-# $DragonFly: src/gnu/usr.bin/cvs/cvs/Attic/cvs.1.patch,v 1.1 2004/05/20 02:27:56 dillon Exp $
---- /usr/src/contrib/cvs-1.12.8/doc/cvs.1      Wed May 19 07:11:50 2004
-+++ cvs.1      Wed May 19 19:09:36 2004
-@@ -397,6 +398,26 @@
+$DragonFly: src/gnu/usr.bin/cvs/cvs/Attic/cvs.1.patch,v 1.2 2006/09/13 19:34:24 corecode Exp $
+diff -r 93f8116a881a contrib/cvs-1.12/doc/cvs.1
+--- a/contrib/cvs-1.12/doc/cvs.1       Sat Sep 09 18:10:13 2006 +0200
++++ b/contrib/cvs-1.12/doc/cvs.1       Wed Sep 13 18:07:23 2006 +0200
+@@ -420,6 +420,26 @@ set or \fB-r\fR is given.
  set or \fB-r\fR is given.
  .SP
  .IP "" 0
  \fB-x\fR
  .IP "" 2
  .IX "Encryption"
+@@ -1079,13 +1099,20 @@ Changes: nothing.
+ .SP
+ For each file in \fIfiles\fR, print the head revision
+ of the trunk, together with information on the last
+-modification for each line.  
++modification for each line.  If \fB-b\fR is specified,
++the first modification after the revision selected by
++\fB-r\fR is shown.  
+ .SP
+ .SH "annotate options"
+ .SP
+ These standard options are supported by \fBannotate\fR
+ (see node `Common options\(aq in the CVS manual, for a complete description of
+ them):
++.SP
++.IP "" 0
++\fB-b\fR
++.IP "" 2
++Backwards, show when a line was removed.
+ .SP
+ .IP "" 0
+ \fB-l\fR
index 81d6489..6dfa7c6 100644 (file)
@@ -1,7 +1,8 @@
-$DragonFly: src/gnu/usr.bin/cvs/cvs/Attic/rcs.c.patch,v 1.1 2005/03/13 11:43:07 corecode Exp $
---- /usr/src/contrib/cvs-1.12.11/src/rcs.c     2005-01-05 22:17:44.000000000 +0100
-+++ rcs.c      2005-03-08 14:20:41.000000000 +0100
-@@ -3463,6 +3463,9 @@
+$DragonFly: src/gnu/usr.bin/cvs/cvs/Attic/rcs.c.patch,v 1.2 2006/09/13 19:34:24 corecode Exp $
+diff -r 93f8116a881a contrib/cvs-1.12/src/rcs.c
+--- a/contrib/cvs-1.12/src/rcs.c       Sat Sep 09 18:10:13 2006 +0200
++++ b/contrib/cvs-1.12/src/rcs.c       Wed Sep 13 18:46:37 2006 +0200
+@@ -3512,6 +3512,9 @@ new_keywords (void)
      KEYWORD_INIT (new, KEYWORD_SOURCE, "Source");
      KEYWORD_INIT (new, KEYWORD_STATE, "State");
  
@@ -11,3 +12,118 @@ $DragonFly: src/gnu/usr.bin/cvs/cvs/Attic/rcs.c.patch,v 1.1 2005/03/13 11:43:07
      return new;
  }
  
+@@ -7263,6 +7266,7 @@ RCS_deltas (RCSNode *rcs, FILE *fp, stru
+     RCSVers *vers;
+     RCSVers *prev_vers;
+     RCSVers *trunk_vers;
++    RCSVers *top_vers;
+     char *next;
+     int ishead, isnext, isversion, onbranch;
+     Node *node;
+@@ -7270,6 +7274,7 @@ RCS_deltas (RCSNode *rcs, FILE *fp, stru
+     struct linevector curlines;
+     struct linevector trunklines;
+     int foundhead;
++    int backwards;
+     assert (version);
+@@ -7285,9 +7290,16 @@ RCS_deltas (RCSNode *rcs, FILE *fp, stru
+     vers = NULL;
+     prev_vers = NULL;
+     trunk_vers = NULL;
++    top_vers = NULL;
+     next = NULL;
+     onbranch = 0;
+     foundhead = 0;
++    backwards = 0;
++
++    if (op == RCS_ANNOTATE_BACKWARDS) {
++      backwards = 1;
++      op = RCS_ANNOTATE;
++    }
+     linevector_init (&curlines);
+     linevector_init (&headlines);
+@@ -7332,12 +7344,30 @@ RCS_deltas (RCSNode *rcs, FILE *fp, stru
+           vers = node->data;
+           next = vers->next;
++          /* The top version is either HEAD or
++             the last version on the branch.  */
++          if (top_vers == NULL || onbranch && backwards)
++              top_vers = vers;
++
+           /* Compare key and trunkversion now, because key points to
+              storage controlled by rcsbuf_getkey.  */
+           if (STREQ (branchversion, key))
+               isversion = 1;
+           else
+               isversion = 0;
++
++          if (backwards && STREQ (version, key)) {
++              if (onbranch) {
++                  unsigned int ln;
++
++                  for (ln = 0; ln < curlines.nlines; ++ln)
++                      curlines.vector[ln]->vers = NULL;
++              } else {
++                  foundhead = 1;
++                  linevector_copy (&headlines, &curlines);
++                  break;
++              }
++          }
+       }
+       while (1)
+@@ -7365,17 +7395,36 @@ RCS_deltas (RCSNode *rcs, FILE *fp, stru
+               rcsbuf_valpolish (rcsbuf, value, 0, &vallen);
+               if (ishead)
+               {
+-                  if (! linevector_add (&curlines, value, vallen, NULL, 0))
++                  if (! linevector_add (&curlines, value, vallen,
++                                        backwards ? vers : NULL, 0))
+                       error (1, 0, "invalid rcs file %s", rcs->print_path);
+                   ishead = 0;
+               }
+               else if (isnext)
+               {
++                  RCSVers *addv, *delv;
++
++                  if (backwards) {
++                      if (onbranch) {
++                          addv = NULL;
++                          delv = vers;
++                      } else {
++                          addv = prev_vers;
++                          delv = NULL;
++                      }
++                  } else {
++                      if (onbranch) {
++                          addv = vers;
++                          delv = NULL;
++                      } else {
++                          addv = NULL;
++                          delv = prev_vers;
++                      }
++                  }
+                   if (! apply_rcs_changes (&curlines, value, vallen,
+                                            rcs->path,
+-                                           onbranch ? vers : NULL,
+-                                           onbranch ? NULL : prev_vers))
++                                           addv, delv))
+                       error (1, 0, "invalid change text in %s", rcs->print_path);
+               }
+               break;
+@@ -7391,7 +7440,9 @@ RCS_deltas (RCSNode *rcs, FILE *fp, stru
+               /* This is the version we want.  */
+               linevector_copy (&headlines, &curlines);
+               foundhead = 1;
+-              if (onbranch)
++              /* If we are annotating backwards, we have to
++                 continue tracking when we're tracking a branch.  */
++              if (onbranch && !backwards)
+               {
+                   /* We have found this version by tracking up a
+                        branch.  Restore back to the lines we saved
diff --git a/gnu/usr.bin/cvs/cvs/rcs.h.patch b/gnu/usr.bin/cvs/cvs/rcs.h.patch
new file mode 100644 (file)
index 0000000..ef70547
--- /dev/null
@@ -0,0 +1,13 @@
+$DragonFly: src/gnu/usr.bin/cvs/cvs/Attic/rcs.h.patch,v 1.1 2006/09/13 19:34:24 corecode Exp $
+diff -r 93f8116a881a contrib/cvs-1.12/src/rcs.h
+--- a/contrib/cvs-1.12/src/rcs.h       Sat Sep 09 18:10:13 2006 +0200
++++ b/contrib/cvs-1.12/src/rcs.h       Wed Sep 13 16:33:25 2006 +0200
+@@ -189,7 +189,7 @@ struct rcsbuffer;
+ struct rcsbuffer;
+ /* What RCS_deltas is supposed to do.  */
+-enum rcs_delta_op {RCS_ANNOTATE, RCS_FETCH};
++enum rcs_delta_op {RCS_ANNOTATE, RCS_ANNOTATE_BACKWARDS, RCS_FETCH};
+ /*
+  * exported interfaces
index c5eeaa2..e2c4a05 100644 (file)
@@ -1,16 +1,19 @@
 # $FreeBSD: src/gnu/usr.bin/cvs/doc/Makefile,v 1.12.2.3 2002/12/19 21:18:01 peter Exp $
-# $DragonFly: src/gnu/usr.bin/cvs/doc/Makefile,v 1.5 2005/03/13 11:47:34 corecode Exp $
+# $DragonFly: src/gnu/usr.bin/cvs/doc/Makefile,v 1.6 2006/09/13 19:34:24 corecode Exp $
 
 .include "${.CURDIR}/../Makefile.inc"
 
 SRCDIR= ${CVSDIR}/doc
+CONTRIBDIR= ${SRCDIR}
 
 INFO=  cvs cvsclient
 INFOSECTION= "Programming & development tools."
 INFOENTRY_cvs= "* CVS: (cvs).                  CVS Reference Manual."
 INFOENTRY_cvsclient= "* CVS-CLIENT: (cvsclient).       CVS client/server Reference Manual."
 
-CLEANFILES+=   getdate-cvs.texi
+CLEANFILES+=   getdate-cvs.texi cvs.texinfo
+
+cvs.texinfo: _PATCHFILE ${CONTRIBDIR}/cvs.texinfo cvs.texinfo.patch
 
 cvs.info: getdate-cvs.texi
 
@@ -19,4 +22,5 @@ getdate-cvs.texi: getdate.texi
            -e "s/^@section /@appendixsubsec /" \
            < ${.ALLSRC} > ${.TARGET}
 
+.include <bsd.patch.mk>
 .include <bsd.info.mk>
diff --git a/gnu/usr.bin/cvs/doc/cvs.texinfo.patch b/gnu/usr.bin/cvs/doc/cvs.texinfo.patch
new file mode 100644 (file)
index 0000000..e0e11a4
--- /dev/null
@@ -0,0 +1,25 @@
+$DragonFly: src/gnu/usr.bin/cvs/doc/Attic/cvs.texinfo.patch,v 1.1 2006/09/13 19:34:24 corecode Exp $
+diff -r 93f8116a881a contrib/cvs-1.12/doc/cvs.texinfo
+--- a/contrib/cvs-1.12/doc/cvs.texinfo Sat Sep 09 18:10:13 2006 +0200
++++ b/contrib/cvs-1.12/doc/cvs.texinfo Wed Sep 13 17:10:27 2006 +0200
+@@ -9144,7 +9144,9 @@ Changes: nothing.
+ For each file in @var{files}, print the head revision
+ of the trunk, together with information on the last
+-modification for each line.  
++modification for each line.  If @samp{-b} is specified,
++the first modification after the revision selected by
++@samp{-r} is shown.  
+ @menu
+ * annotate options::            annotate options
+@@ -9160,6 +9162,9 @@ them):
+ them):
+ @table @code
++@item -b
++Backwards, show when a line was removed.
++
+ @item -l
+ Local directory only, no recursion.