finally fix "cvs diff -uprHEAD" in a branch
authortg <tg@mirbsd.org>
Sun, 4 Dec 2011 20:12:49 +0000 (20:12 +0000)
committertg <tg@mirbsd.org>
Sun, 4 Dec 2011 20:12:49 +0000 (20:12 +0000)
debian/NEWS
debian/changelog
doc/cvs.texinfo
src/diff.c
src/sanity.sh

index e272ef6..486b874 100644 (file)
@@ -6,7 +6,13 @@ cvs (2:1.12.13+real-7) xunstable; urgency=low
   Some contrib files (and their documentation) are no longer
   shipped with the binary package (antique, insecure, useless).
 
- -- Thorsten Glaser <tg@mirbsd.de>  Sun, 04 Dec 2011 15:08:49 +0000
+  -rHEAD in "cvs diff" now, consistently with all other cvs
+  subcommands, means "tip of the trunk (MAIN branch)"; to
+  access the tip of the another branch, use its name; as a
+  compatibility aid, -r.bhead (only in diff) points to the
+  tip of the sticky branch.
+
+ -- Thorsten Glaser <tg@mirbsd.de>  Sun, 04 Dec 2011 20:10:09 +0000
 
 cvs (2:1.12.13+real-5) unstable; urgency=low
 
index 3047357..f46c123 100644 (file)
@@ -1,5 +1,6 @@
 cvs (2:1.12.13+real-7) xunstable; urgency=low
 
+  * Level: 0AAF.2 (for README.source before uploading)
   * Drop unsafe scripts from contrib, add NEWS entry for that
   * debian/rules: cleanup (remove install/check, dh_installdirs;
     switch to dh_prep if extant)
@@ -9,8 +10,10 @@ cvs (2:1.12.13+real-7) xunstable; urgency=low
   * Demote rcs2log(1) to contrib, add NEWS entry
   * Stop shipping a patch to rcs(1) with the binary package, ffs
   * Don’t ship cvshelp.man either, it’s antiquated and not useful
+  * Fix meaning of -rHEAD for the diff subcommand (with NEWS entry)
+  * Make the testsuite again usable (full PASS)
 
- -- Thorsten Glaser <tg@mirbsd.de>  Sun, 04 Dec 2011 15:08:49 +0000
+ -- Thorsten Glaser <tg@mirbsd.de>  Sun, 04 Dec 2011 20:10:09 +0000
 
 cvs (2:1.12.13+real-6) unstable; urgency=low
 
index 9635560..a0136a5 100644 (file)
@@ -2,6 +2,7 @@
 @comment Documentation for CVS.
 @setfilename cvs.info
 @afourpaper
+@comment $MirOS: contrib/hosted/tg/deb/cvs/doc/cvs.texinfo,v 1.5 2011/12/04 20:12:44 tg Exp $
 @macro copyleftnotice
 @noindent
 Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
@@ -7197,7 +7198,7 @@ The date (UTC) the revision was checked in, in a format suitable
 for the Berkeley mdoc macro processing.
 
 @example
-$Mdocdate: October 16 2011 $
+$Mdocdate: December 4 2011 $
 @end example
 
 @cindex Header keyword
@@ -8748,9 +8749,15 @@ argument for the commands which accept it) instead of the
 default @dfn{head} revision.  As well as arbitrary tags defined
 with the @code{tag} or @code{rtag} command, two special tags are
 always available: @samp{HEAD} refers to the most recent version
-available in the repository, and @samp{BASE} refers to the
+available in the repository (also known as the tip of the @samp{MAIN}
+branch, also known as trunk; the name of a branch refers to its tip;
+this version of @sc{cvs} introduces @samp{.bhead}, but only for the
+@sc{diff} command, for the same), and @samp{BASE} refers to the
 revision you last checked out into the current working directory.
 
+@c fixed: HEAD is changed now; .bhead is the name of the branch,
+@c but added for cases where it is unknown.
+@c --mirabilos
 @c FIXME: What does HEAD really mean?  I believe that
 @c the current answer is the head of the default branch
 @c for all cvs commands except diff.  For diff, it
@@ -9208,7 +9215,8 @@ For each file in @var{files}, print the head revision
 of the trunk, together with information on the last
 modification for each line.  If backwards annotation
 is requested, show the first modification after the
-specified revision.
+specified revision.  (Backwards annotation currently
+appears to be broken.)
 
 @menu
 * annotate options::            annotate options
@@ -9226,6 +9234,7 @@ them):
 @table @code
 @item -b
 Backwards, show when a line was removed.
+Currently appears to be broken.
 
 @item -l
 Local directory only, no recursion.
index 84fc103..f8b0c09 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "cvs.h"
 
+#define TAG_BHEAD ".bhead"
+
 enum diff_file
 {
     DIFF_ERROR,
@@ -444,9 +446,9 @@ diff (int argc, char **argv)
     }
 #endif
 
-    if (diff_rev1 != NULL)
+    if (diff_rev1 != NULL && strcmp(diff_rev1, TAG_BHEAD))
        tag_check_valid (diff_rev1, argc, argv, local, 0, "", false);
-    if (diff_rev2 != NULL)
+    if (diff_rev2 != NULL && strcmp(diff_rev2, TAG_BHEAD))
        tag_check_valid (diff_rev2, argc, argv, local, 0, "", false);
 
     which = W_LOCAL;
@@ -903,8 +905,14 @@ diff_file_nodiff (struct file_info *finfo, Vers_TS *vers,
 
     if (diff_rev1 || diff_date1)
     {
-       /* special handling for TAG_HEAD */
-       if (diff_rev1 && strcmp (diff_rev1, TAG_HEAD) == 0)
+       /*
+        * the special handling is broken, -rbranchname is the
+        * head (tip) of the branch already, -rHEAD is supposed
+        * to be the head (tip) of the MAIN branch (trunk); we
+        * introduce ".bhead" here, for now, but only here
+        */
+       /* special handling for TAG_BHEAD */
+       if (diff_rev1 && strcmp (diff_rev1, TAG_BHEAD) == 0)
        {
            if (vers->vn_rcs != NULL && vers->srcfile != NULL)
                use_rev1 = RCS_branch_head (vers->srcfile, vers->vn_rcs);
@@ -919,8 +927,8 @@ diff_file_nodiff (struct file_info *finfo, Vers_TS *vers,
     }
     if (diff_rev2 || diff_date2)
     {
-       /* special handling for TAG_HEAD */
-       if (diff_rev2 && strcmp (diff_rev2, TAG_HEAD) == 0)
+       /* special handling for TAG_BHEAD */
+       if (diff_rev2 && strcmp (diff_rev2, TAG_BHEAD) == 0)
        {
            if (vers->vn_rcs && vers->srcfile)
                use_rev2 = RCS_branch_head (vers->srcfile, vers->vn_rcs);
index f57684c..11c31d1 100644 (file)
@@ -25302,7 +25302,7 @@ diff -c -r1\.3 -r1\.3\.2\.2
 ${PLUS} modify on branch
 ${PLUS} modify on branch after brtag"
 
-         # With a branch sticky tag, HEAD is the head of the trunk.
+         # Even with a branch sticky tag, HEAD is the head of the trunk.
          dotest head-br1-setup "${testcvs} -q update -r br1" "[UP] file1"
          dotest head-br1-update "${testcvs} -q update -r HEAD -p file1" \
 "imported contents
@@ -25310,7 +25310,26 @@ add a line on trunk
 add a line on trunk after trunktag"
          # But diff thinks that HEAD is "br1".  Case (b) from cvs.texinfo.
          # Probably people are relying on it.
-         dotest head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
+         #dotest head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
+         dotest head-br1-diffdot "${testcvs} -q diff -c -r .bhead -r br1" ""
+         # Always. Fuck people relying on it.
+         dotest_fail head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" \
+"Index: file1
+===================================================================
+RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
+retrieving revision 1\.3
+retrieving revision 1\.3\.2\.2
+diff -c -r1\.3 -r1\.3\.2\.2
+\*\*\* file1   ${RFCDATE}      1\.3
+--- file1      ${RFCDATE}      1\.3\.2\.2
+\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
+\*\*\* 1,3 \*\*\*\*
+--- 1,5 ----
+  imported contents
+  add a line on trunk
+  add a line on trunk after trunktag
+${PLUS} modify on branch
+${PLUS} modify on branch after brtag"
 
          # With a nonbranch sticky tag on a branch,
          # HEAD is the head of the trunk
@@ -25323,7 +25342,26 @@ add a line on trunk after trunktag"
          # CVS 1.9 and older thought that HEAD is "brtag" (this was
          # noted as "strange, maybe accidental").  But "br1" makes a
          # whole lot more sense.
-         dotest head-brtag-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
+         #dotest head-brtag-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
+         dotest head-brtag-diffdot "${testcvs} -q diff -c -r .bhead -r br1" ""
+         # HEAD is always tip of the trunk.
+         dotest_fail head-brtag-diff "${testcvs} -q diff -c -r HEAD -r br1" \
+"Index: file1
+===================================================================
+RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
+retrieving revision 1\.3
+retrieving revision 1\.3\.2\.2
+diff -c -r1\.3 -r1\.3\.2\.2
+\*\*\* file1   ${RFCDATE}      1\.3
+--- file1      ${RFCDATE}      1\.3\.2\.2
+\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
+\*\*\* 1,3 \*\*\*\*
+--- 1,5 ----
+  imported contents
+  add a line on trunk
+  add a line on trunk after trunktag
+${PLUS} modify on branch
+${PLUS} modify on branch after brtag"
 
          # With a nonbranch sticky tag on the trunk, HEAD is the head
          # of the trunk, I think.