| #!/usr/bin/perl |
| # |
| # dpkg-parsechangelog |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| use strict; |
| use warnings; |
| |
| use Dpkg; |
| use Dpkg::Gettext; |
| use Dpkg::ErrorHandling; |
| use Dpkg::Changelog::Parse; |
| |
| textdomain("dpkg-dev"); |
| |
| my %options; |
| |
| sub version { |
| printf _g("Debian %s version %s.\n"), $progname, $version; |
| |
| printf _g(" |
| Copyright (C) 1996 Ian Jackson. |
| Copyright (C) 2001 Wichert Akkerman"); |
| |
| printf _g(" |
| This is free software; see the GNU General Public License version 2 or |
| later for copying conditions. There is NO warranty. |
| "); |
| } |
| |
| sub usage { |
| printf _g( |
| "Usage: %s [<option> ...] |
| |
| Options: |
| -l<changelogfile> get per-version info from this file. |
| -F<changelogformat> force change log format. |
| -L<libdir> look for change log parsers in <libdir>. |
| -h, --help show this help message. |
| --version show the version. |
| |
| parser options: |
| --format <outputformat> see man page for list of available |
| output formats, defaults to 'dpkg' |
| for compatibility with dpkg-dev |
| --since <version>, include all changes later than version |
| -s<version>, -v<version> |
| --until <version>, include all changes earlier than version |
| -u<version> |
| --from <version>, include all changes equal or later |
| -f<version> than version |
| --to <version>, -t<version> include all changes up to or equal |
| than version |
| --count <number>, include <number> entries from the top |
| -c<number>, -n<number> (or the tail if <number> is lower than 0) |
| --offset <number>, change the starting point for --count, |
| -o<number> counted from the top (or the tail if |
| <number> is lower than 0) |
| --all include all changes |
| "), $progname; |
| } |
| |
| while (@ARGV) { |
| last unless $ARGV[0] =~ m/^-/; |
| $_ = shift(@ARGV); |
| if (m/^-L(.+)$/) { |
| $options{"libdir"} = $1; |
| } elsif (m/^-F([0-9a-z]+)$/) { |
| $options{"changelogformat"} = $1; |
| } elsif (m/^-l(.+)$/) { |
| $options{"file"} = $1; |
| } elsif (m/^--$/) { |
| last; |
| } elsif (m/^-([cfnostuv])(.*)$/) { |
| if (($1 eq "c") or ($1 eq "n")) { |
| $options{"count"} = $2; |
| } elsif ($1 eq "f") { |
| $options{"from"} = $2; |
| } elsif ($1 eq "o") { |
| $options{"offset"} = $2; |
| } elsif (($1 eq "s") or ($1 eq "v")) { |
| $options{"since"} = $2; |
| } elsif ($1 eq "t") { |
| $options{"to"} = $2; |
| } elsif ($1 eq "u") { |
| $options{"until"} = $2; |
| } |
| } elsif (m/^--(count|file|format|from|offset|since|to|until)(.*)$/) { |
| if ($2) { |
| $options{$1} = $2; |
| } else { |
| $options{$1} = shift(@ARGV); |
| } |
| } elsif (m/^--all$/) { |
| $options{"all"} = undef; |
| } elsif (m/^-(h|-help)$/) { |
| usage(); exit(0); |
| } elsif (m/^--version$/) { |
| version(); exit(0); |
| } else { |
| usageerr(_g("unknown option \`%s'"), $_); |
| } |
| } |
| |
| @ARGV && usageerr(_g("takes no non-option arguments")); |
| |
| my $count = 0; |
| my @fields = changelog_parse(%options); |
| foreach my $f (@fields) { |
| print "\n" if $count++; |
| print $f->output(); |
| } |