@@ -51,25 +51,67 @@ sub addpkg {
51
51
52
52
$data -> {' location' } = " $data ->{'name'}-$data ->{'version'}.apk" ;
53
53
$data -> {' release' } = $1 if $data -> {' version' } =~ s / -([^-]*)$// s ;
54
- my $apk_chksum = delete $data -> {' apk_chksum' };
55
- if ($options -> {' withapkchecksum' } && $apk_chksum ) {
56
- if (substr ($apk_chksum , 0, 2) eq ' Q1' && defined &MIME::Base64::decode_base64) {
57
- my $c = MIME::Base64::decode_base64(substr ($apk_chksum , 2));
58
- $data -> {' apkchecksum' } = " sha1:" . unpack (' H*' , $c ) if $c && length ($c ) == 20;
59
- } elsif (substr ($apk_chksum , 0, 2) eq ' Q2' && defined &MIME::Base64::decode_base64) {
60
- my $c = MIME::Base64::decode_base64(substr ($apk_chksum , 2));
61
- $data -> {' apkchecksum' } = " sha256:" . unpack (' H*' , $c ) if $c && length ($c ) == 32;
62
- }
63
- }
54
+ # my $apk_chksum = delete $data->{'apk_chksum'};
55
+ # if ($options->{'withapkchecksum'} && $apk_chksum) {
56
+ # if (substr($apk_chksum, 0, 2) eq 'Q1' && defined &MIME::Base64::decode_base64) {
57
+ # my $c = MIME::Base64::decode_base64(substr($apk_chksum, 2));
58
+ # $data->{'apkchecksum'} = "sha1:" . unpack('H*', $c) if $c && length($c) == 20;
59
+ # } elsif (substr($apk_chksum, 0, 2) eq 'Q2' && defined &MIME::Base64::decode_base64) {
60
+ # my $c = MIME::Base64::decode_base64(substr($apk_chksum, 2));
61
+ # $data->{'apkchecksum'} = "sha256:" . unpack('H*', $c) if $c && length($c) == 32;
62
+ # }
63
+ # }
64
64
if (ref ($res ) eq ' CODE' ) {
65
65
$res -> ($data );
66
66
} else {
67
67
push @$res , $data ;
68
68
}
69
69
}
70
70
71
+ my %pkginfomap = (
72
+ ' pkgname' => ' name' ,
73
+ ' pkgver' => ' version' ,
74
+ ' pkgdesc' => ' summary' ,
75
+ ' url' => ' url' ,
76
+ ' builddate' => ' buildtime' ,
77
+ ' arch' => ' arch' ,
78
+ ' license' => ' license' ,
79
+ ' origin' => ' source' ,
80
+ ' depend' => ' requires' ,
81
+ ' provides' => ' provides' ,
82
+ ' datahash' => ' apkdatachksum' ,
83
+ ' hdrmd5' => ' hdrmd5' ,
84
+ );
85
+
86
+ sub apkv3_parse {
87
+ my ($in , $res , %options ) = @_ ;
88
+ require Build::Apkv3 unless defined &Build::Apkv3::querypkgindex;
89
+ my $q = Build::Apkv3::querypkgindex($in );
90
+ for my $qq (@{$q -> {' packages' } || []}) {
91
+ my %q ;
92
+ for (keys %$qq ) {
93
+ my $m = $pkginfomap {$_ };
94
+ $q {$m } = $qq -> {$_ } if $m ;
95
+ }
96
+ if ($qq -> {' apkchksum' }) {
97
+ $q {' apkchksum' } = ' X1' .$qq -> {' apkchksum' } if length ($qq -> {' apkchksum' }) == 40;
98
+ $q {' apkchksum' } = ' X2' .$qq -> {' apkchksum' } if length ($qq -> {' apkchksum' }) == 64;
99
+ }
100
+ my @conflicts = grep {/ ^\! / } @{$q {' requires' } || []};
101
+ if (@conflicts ) {
102
+ substr ($_ , 0, 1, ' ' ) for @conflicts ;
103
+ $q {' conflicts' } = \@conflicts ;
104
+ $q {' requires' } = [ grep {!/^\!/} @{$q {' requires' } || []} ];
105
+ delete $q {' requires' } unless @{$q {' requires' }};
106
+ }
107
+ addpkg($res , \%q , \%options );
108
+ }
109
+ }
110
+
71
111
sub parse {
72
112
my ($in , $res , %options ) = @_ ;
113
+ die (" Build::Apkrepo::parse needs a filename\n " ) if ref ($in );
114
+ return apkv3_parse(@_ ) if Build::Apk::is_apkv3($in );
73
115
$res ||= [];
74
116
my $tar = Archive::Tar-> new;
75
117
my @read = $tar -> read ($in , 1, {' filter' => ' ^APKINDEX$' , ' limit' => 1});
0 commit comments