]> err.no Git - dpkg/commitdiff
scripts/install-info.pl: Several fixes:
authorAdam Heath <doogie@debian.org>
Sun, 16 Sep 2001 01:20:42 +0000 (01:20 +0000)
committerAdam Heath <doogie@debian.org>
Sun, 16 Sep 2001 01:20:42 +0000 (01:20 +0000)
  * Move /usr/info/dir to /usr/share/info/dir.
  * Improve message when locking and /usr/share/info/dir doesn't exist.
  * Use /var/backups/infodir.bak if the above doesn't exist.
  * Allow for relative filenames, and add a --remove-exactly option.
  * Use section from the .info file if --section is not given.
  * Include current filename in error messages.
  * Format /usr/share/info/dir entries to uniform width.
  * --calign|--align|--maxwidth are now ignored.

ChangeLog
debian/changelog
debian/dpkg.postinst
scripts/install-info.8
scripts/install-info.pl

index 5a64a1fcd03f2fb0747d4412c2385a3c8963019f..5ee51a2deae28028a51a5ab2d02d9f95dc7ddc98 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Sat Sep 15 20:19:57 CDT 2001 Adam Heath <doogie@debian.org>
+
+  * scripts/install-info.pl: Several fixes:
+    * Move /usr/info/dir to /usr/share/info/dir.
+    * Improve message when locking and /usr/share/info/dir doesn't exist.
+    * Use /var/backups/infodir.bak if the above doesn't exist.
+    * Allow for relative filenames, and add a --remove-exactly option.
+    * Use section from the .info file if --section is not given.
+    * Include current filename in error messages.
+    * Format /usr/share/info/dir entries to uniform width.
+    * --calign|--align|--maxwidth are now ignored.
+
 Wed Sep 12 18:45:57 CDT 2001 Adam Heath <doogie@debian.org>
 
   Fixes for building of dpkg-static.deb.
index 1bf4361d9347ab22b41f42998c81c795fd4a5290..b85ad1ae6d5be55ea53ce3b5f594e2a662cf3cf0 100644 (file)
@@ -37,6 +37,21 @@ dpkg (1.10) unstable; urgency=low
   * Update French translation
   * Add --showformat and --show options to dpkg-deb and dpkg-query to
     allow one to customize the output format
+  * several install-info cleanups:
+    * Move /usr/info/dir to /usr/share/info/dir.  Closes: #67174.
+    * If /usr/share/info doesn't exist, print a message saying so,
+      instead of the confusing "couldn't lock" error.  Closes: #2531.
+    * If /usr/share/info/dir doesn't exist, try to copy the backup from
+      /var/backups/infodir.bak.
+    * Add a --remove-exactly option, and allow for relative filenames.
+      Closes: #92650.
+    * Use the section from the .info file if --section is not given.
+      Closes: #76100.
+    * Error messages now include the filename being processed.
+      Closes: #66735
+    * /usr/share/info/dir now has it's entries formatted to even widths. 
+      Closes: #11228
+    * --calign|--align|--maxwidth are now ignored.
 
  -- Wichert Akkerman <wakkerma@debian.org>  Mon, 20 Aug 2001 14:54:38 +0200
 
index ee0e85e97e58d66e6bcc8a89ac796628b810156f..589327f1f5dabc5ad12fbdb7632de4fd26d414b7 100755 (executable)
@@ -234,3 +234,12 @@ fi
 
 mv $newdb/status.new $newdb/status
 
+if test -f /usr/info/dir
+then
+       echo "Moving /usr/info/dir to /usr/share/info/dir, and creating"
+       echo "/usr/info/dir symlink."
+       cp -a /usr/info/dir /usr/share/info/dir
+       ln -f ../share/info/dir /usr/info/dir
+fi
+
+
index fd5684cd54ac8e3c24e6e2267b111bf53cb62595..2f5d08229f8f862f067f9be06db426edce9404e9 100644 (file)
@@ -159,7 +159,7 @@ be located in
 The default is
 .BR /usr/info .
 .TP
-.BI \-\-align= nnn
+.BI \-\-align= nnn " [deprecated]"
 Specifies that the first line of the description should be indented at
 least
 .I nnn
@@ -168,13 +168,13 @@ because of the length of the
 .B dir
 menu entry details it may be offset more.  The default is 27.
 .TP
-.BI \-\-calign= nnn
+.BI \-\-calign= nnn " [deprecated]"
 Specifies that the second and subsequent lines of the description
 should be indented at least
 .I nnn
 characters.  The default is 29.
 .TP
-.BI \-\-maxwidth= nnn
+.BI \-\-maxwidth= nnn " [deprecated]"
 Specifies that the maximum width for the Info file is
 .IR nnn .
 This is used when wordwrapping the descriptive text.
index 4305ada9a5a761c9f1e3e26d999e5ffe417760d9..6dabc19c748a29a0e169df60111d2fa661034240 100755 (executable)
@@ -1,5 +1,7 @@
 #!/usr/bin/perl --
 
+use Text::Wrap;
+
 # fixme: --dirfile option
 # fixme: sort entries
 # fixme: send to FSF ?
@@ -25,10 +27,10 @@ usage: install-info [--version] [--help] [--debug] [--maxwidth=nnn]
 END
 }
 
-$infodir='/usr/info';
+$infodir='/usr/share/info';
 $maxwidth=79;
-$align=27;
-$calign=29;
+$Text::Wrap::columns=$maxwidth;
+$backup='/var/backups/infodir.bak';
 
 $menuentry="";
 $description="";
@@ -73,14 +75,12 @@ while ($ARGV[0] =~ m/^--/) {
         }
         $sectionre= shift(@ARGV);
         $sectiontitle= shift(@ARGV);
-    } elsif (m/^--maxwidth=([0-9]+)$/) {
-        $maxwidth= $1;
-    } elsif (m/^--align=([0-9]+)$/) {
-        $align= $1;
-    } elsif (m/^--calign=([0-9]+)$/) {
-        $calign= $1;
+    } elsif (m/^--(c?align|maxwidth)=([0-9]+)$/) {
+       warn( "$name: $1 deprecated(ignored)\n" );
     } elsif (m/^--infodir=/) {
         $infodir=$';
+    } elsif (m/^--info-file=/) {
+        $filename=$';
     } elsif (m/^--menuentry=/) {
         $menuentry=$';
     } elsif (m/^--info-dir=/) {
@@ -94,7 +94,10 @@ while ($ARGV[0] =~ m/^--/) {
 
 if (!@ARGV) { &version; print STDERR "\n"; &usage; exit 1; }
 
-$filename= shift(@ARGV);
+if ( !$filename ) {
+       $filename= shift(@ARGV);
+       $name = "$name($filename)";
+}
 if (@ARGV) { print STDERR "$name: too many arguments\n"; &usage; exit 1; }
 
 if ($remove) {
@@ -133,8 +136,8 @@ if (!$remove) {
         while(<IF>) {
            m/^START-INFO-DIR-ENTRY$/ && last;
            m/^INFO-DIR-SECTION (.+)$/ && do {
-               $sectiontitle = $1              unless defined($sectiontitle);
-               $sectionre = '^'.quotemeta($1)  unless defined($sectionre);
+               $sectiontitle = $1              unless ($sectiontitle);
+               $sectionre = '^'.quotemeta($1)  unless ($sectionre);
            }
        }
         while(<IF>) { last if m/^END-INFO-DIR-ENTRY$/; $asread.= $_; }
@@ -209,22 +212,11 @@ $name: unable to determine description for \`dir' entry - giving up
         }
 
         $align--; $calign--;
-        $lprefix= length($cprefix);
-        if ($lprefix < $align) {
-            $cprefix .= ' ' x ($align - $lprefix);
-            $lprefix= $align;
-        }
-        $prefix= "\n". (' 'x $calign);
         $cwidth= $maxwidth+1;
 
         for $_ (split(/\s+/,$description)) {
             $l= length($_);
             $cwidth++; $cwidth += $l;
-            if ($cwidth > $maxwidth) {
-                $infoentry .= $cprefix;
-                $cwidth= $lprefix+1+$l;
-                $cprefix= $prefix; $lprefix= $calign;
-            }
             $infoentry.= ' '; $infoentry .= $_;
         }
 
@@ -235,8 +227,21 @@ $name: unable to determine description for \`dir' entry - giving up
     }
 }
 
+if (!$nowrite && ! -e "$infodir/dir") {
+    if (-r $backup) {
+       print STDERR "$name: no file $infodir/dir, retrieving backup file $backup.\n";
+       if (system ("cp $backup $infodir/dir")) {
+           print STDERR "$name: copying $backup to $infodir/dir failed, giving up: $!\n";
+           exit 1;
+       }
+    } else {
+       print STDERR "$name: no backup file $backup available, giving up.\n";
+       exit 1;
+    }
+}
+
 if (!$nowrite && !link("$infodir/dir","$infodir/dir.lock")) {
-    die "$name: failed to lock dir for editing! $!\n".
+    print STDERR "$name: failed to lock dir for editing! $!\n".
         ($! =~ m/exists/i ? "try deleting $infodir/dir.lock ?\n" : '');
 }
 
@@ -368,6 +373,35 @@ if (!$remove) {
             unless $quiet;
     }
 }
+$length = 0;
+
+$j = -1;
+for ($i=0; $i<=$#work; $i++) {
+       $_ = $work[$i];
+       chomp;
+       if ( m/^(\* *[^:]+: *\(\w[^\)]*\)[^.]*\.)[ \t]*(.*)/ ) {
+               $length = length($1) if ( length($1) > $length );
+               $work[++$j] = $_;
+       } elsif ( m/^[ \t]+(.*)/ ) {
+               $work[$j] = "$work[$j] $1";
+       } else {
+               $work[++$j] = $_;
+       }
+}
+@work = @work[0..$j];
+
+@newwork = ();
+foreach ( @work ) {
+       if ( m/^(\* *[^:]+: *\(\w[^\)]*\)[^.]*\.)[ \t]*(.*)/ ||
+               m/^([ \t]+)(.*)/ ) {
+               $_ = $1 . ( " " x ( $length - length($1) + 1 ) ) . $2;
+               push @newwork, split( "\n", wrap('', " " x ( $length + 1 ), $_ ) );
+       } else {
+               push @newwork, $_;
+       }
+}
+@work = @newwork;
+print join("\n",@newwork);
 
 if (!$nowrite) {
     open(NEW,"> $infodir/dir.new") || &ulquit("create $infodir/dir.new: $!");
@@ -380,6 +414,7 @@ if (!$nowrite) {
     rename("$infodir/dir.new","$infodir/dir") ||
         &ulquit("install new $infodir/dir: $!");
 unlink("$infodir/dir.lock") || die "$name: unlock $infodir/dir: $!\n";
+system ("cp $infodir/dir $backup") && warn "$name: couldn't backup $infodir/dir in $backup: $!\n";
 }
 
 sub ulquit {