]> code.delx.au - gnu-emacs/blobdiff - admin/revdiff
Mark done all ttn-associated dirs in "copyright years" item.
[gnu-emacs] / admin / revdiff
index bdd6a2210ce5deb1e7cde53c5a63215322be9fa7..d936106aada51c6253452c44d785b3bd023106c6 100755 (executable)
 #
 # You should have received a copy of the GNU General Public License
 # along with GNU Emacs; see the file COPYING.  If not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
 
 use File::Basename;
 
-if (@ARGV < 3) 
+if (@ARGV < 3)
 {
   print <<USAGE;
 revdiff FILE OLD NEW
-    
+
 Get a diff of FILE between revisions OLD and NEW.  Store the
-diff in a file named FILE-OLD-NEW.diff.  If NEW is +<number>
-or -<number>, build diffs between revisions OLD and OLD +/- <number>.
-OLD being `-' means use FILE's current revision.
+diff in a file named FILE-OLD-NEW.diff.
+
+If OLD is `-' use FILE's current revision for OLD.  If OLD is
+`-<number>', use the Nth revision before the current one for OLD.
+
+If NEW is +<number> or -<number>, build diffs between revisions OLD
+and OLD +/- <number>.
 
 Examples:
 
 revdiff FILE - -1      get the latest change of FILE
+revdiff FILE -1 +1     also gets the latest change of FILE
 revdiff FILE 1.500 +2  get diffs 1.500-1.501 and 1.501-1.502.
 
 USAGE
@@ -43,7 +48,7 @@ USAGE
 $file = shift @ARGV;
 $old  = shift @ARGV;
 
-sub diffit 
+sub diffit
 {
   my ($old, $new) = @_;
   print "cvs diff -r$old -r$new $file >$file-$old-$new.diff\n";
@@ -59,9 +64,9 @@ sub current_revision ($)
   die "Can't find $entries" unless -f $entries;
   open (IN, "<$entries") or die "Cannot open $entries";
   my $rev;
-  while ($line = <IN>) 
+  while ($line = <IN>)
     {
-      if ($line =~ m,/$base/([^/]+),) 
+      if ($line =~ m,/$base/([^/]+),)
        {
          $rev = $1;
          break;
@@ -73,19 +78,27 @@ sub current_revision ($)
 }
 
 if ($old eq "-")
-{
-  $old = current_revision ($file);
-}
+  {
+    $old = current_revision ($file);
+  }
+elsif ($old =~ /^-(\d+)$/)
+  {
+    my $offset = $1;
+    $old = current_revision ($file);
+    die "Internal error" unless $old =~ /(.*)\.(\d+)$/;
+    my $minor = $2 - $offset;
+    $old = sprintf ("%d.%d", $1, $minor);
+  }
 
-while (@ARGV) 
+while (@ARGV)
   {
     my $new = shift @ARGV;
     if ($new =~ /^[+]\d+$/)
       {
        my $n = $new;
-       for ($i = 0; $i < $n; ++$i) 
+       for ($i = 0; $i < $n; ++$i)
          {
-           unless ($old =~ /(.*)\.(\d+)$/) 
+           unless ($old =~ /(.*)\.(\d+)$/)
              {
                die "Internal error";
              }
@@ -94,13 +107,13 @@ while (@ARGV)
            diffit ($old, $new);
            $old = $new;
          }
-      } 
-    elsif ($new =~ /^[-]\d+$/) 
+      }
+    elsif ($new =~ /^[-]\d+$/)
       {
        my $n = - $new;
-       for ($i = 0; $i < $n; ++$i) 
+       for ($i = 0; $i < $n; ++$i)
          {
-           unless ($old =~ /(.*)\.(\d+)$/) 
+           unless ($old =~ /(.*)\.(\d+)$/)
              {
                die "Internal error";
              }
@@ -110,7 +123,7 @@ while (@ARGV)
            $old = $new;
          }
       }
-    else 
+    else
       {
        diffit ($old, $new);
        $old = $new;
@@ -120,3 +133,5 @@ while (@ARGV)
 # Local Variables:
 # mode: cperl
 # End:
+
+# arch-tag: 2798b20d-c7f2-4c78-8378-7bb529c36a09