From: Don Armstrong Date: Fri, 2 Feb 2018 01:24:47 +0000 (-0800) Subject: start rewriting merge versions X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=refs%2Fheads%2Fdon%2Fmerge_versions_rewrite;p=debbugs.git start rewriting merge versions + This still needs a test suite which it does not have --- diff --git a/examples/debian/versions/merge-one-version b/examples/debian/versions/merge-one-version index 7be6f38a..e3505563 100755 --- a/examples/debian/versions/merge-one-version +++ b/examples/debian/versions/merge-one-version @@ -23,13 +23,15 @@ unless (-d "$root/$pkghash") { mkdir "$root/$pkghash" or die "can't mkdir $root/$pkghash"; } my $outfile = "$root/$pkghash/$pkg"; -if (open PREV, "< $outfile") { - $tree->load(*PREV); - close PREV; +my $PREV; +if (open($PREV, "< $outfile")) { + $tree->load($PREV); + close($PREV); } $tree->load(*STDIN); -open OUT, "> $outfile" or die "can't open $outfile for writing: $!\n"; -$tree->save(*OUT); -close OUT or die "can't close $outfile: $!\n"; +my $OUT; +open($OUT, "> $outfile") or die "can't open $outfile for writing: $!\n"; +$tree->save($OUT); +close($OUT) or die "can't close $outfile: $!\n"; diff --git a/examples/debian/versions/merge-versions.pl b/examples/debian/versions/merge-versions.pl index 057eb19d..aefe1952 100755 --- a/examples/debian/versions/merge-versions.pl +++ b/examples/debian/versions/merge-versions.pl @@ -1,41 +1,110 @@ -#! /usr/bin/perl -w +#!/usr/bin/perl +# merge-versions.pl merges multiple .versions files from dak +# and is released under the terms of the GNU GPL version 3, or any +# later version, at your option. See the file README and COPYING for +# more information. +# Copyright 2017 by Don Armstrong . + + +use warnings; use strict; -use File::Find; -use Debbugs::Versions; -use Debbugs::Versions::Dpkg; -my %pkgs; +use Getopt::Long; +use Pod::Usage; + +=head1 NAME + +merge-versions.pl - merges multiple .versions files from dak + +=head1 SYNOPSIS + +merge-versions.pl [options] + + Options: + --debug, -d debugging level (Default 0) + --help, -h display this help + --man, -m display manual + +=head1 OPTIONS + +=over + +=item B<--debug, -d> + +Debug verbosity. (Default 0) + +=item B<--help, -h> + +Display brief usage information. + +=item B<--man, -m> + +Display this manual. + +=back + +=head1 EXAMPLES + +merge-versions.pl -sub search { - return unless -f; - my ($pkg) = split /_/; - push @{$pkgs{$pkg}}, "$File::Find::dir/$_"; +=cut + + +use vars qw($DEBUG); + +my %options = (debug => 0, + help => 0, + man => 0, + ); + +GetOptions(\%options, + 'debug|d+','help|h|?','man|m'); + +pod2usage() if $options{help}; +pod2usage({verbose=>2}) if $options{man}; + +$DEBUG = $options{debug}; + +my @USAGE_ERRORS; +if (not @ARGV) { + push @USAGE_ERRORS,"You must provide at least one .versions file"; } -find(\&search, 'cl-data'); - -for my $pkg (sort keys %pkgs) { - print STDERR "$pkg\n"; - my $tree = Debbugs::Versions->new(\&Debbugs::Versions::Dpkg::vercmp); - for my $file (@{$pkgs{$pkg}}) { - unless (open FILE, "< $file") { - warn "can't open $file: $!\n"; - next; - } - $tree->load(*FILE); - close FILE; - } - my $pkghash = substr $pkg, 0, 1; - unless (-d "pkg/$pkghash") { - unless (mkdir "pkg/$pkghash") { - warn "can't mkdir pkg/$pkghash: $!\n"; - next; - } - } - unless (open OUT, "> pkg/$pkghash/$pkg") { - warn "can't open pkg/$pkghash/$pkg for writing: $!\n"; - next; +pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS; + + +use strict; +use File::Find; +use Debbugs::Versions; +use Debbugs::Versions::Dpkg; +use Data::Printer; + +my $tree = Debbugs::Versions->new(\&Debbugs::Versions::Dpkg::vercmp); +for my $ver_file (@ARGV) { + open(my $fh,'<',$ver_file) or + die "Unable to open $ver_file for reading: $!"; + my $pkg; + my $versions = ''; + while (<$fh>) { + my ($s_pkg,$ver) = $_ =~/^(\S+)\s*\(([^\)]+)\)/ or next; + $pkg = $s_pkg unless defined $pkg; + $versions .= ' ' if length $versions; + $versions .= $ver; } - $tree->save(*OUT); - close OUT; + $versions .= "\n"; + open (my $v_fh,'<',\$versions); + $tree->load($v_fh); + p $tree->{parent}; + $tree->save(*STDOUT); + close($v_fh); } + + + + +__END__ +# Local Variables: +# indent-tabs-mode: nil +# cperl-indent-level: 4 +# End: +