Skip to content

Commit a164ae2

Browse files
lnusseladrianschroeter
authored andcommittedFeb 7, 2025··
Support xz compressed Debian repos
1 parent 50abd76 commit a164ae2

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed
 

‎Build/Debrepo.pm

+7-2
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ sub parse {
9595
} else {
9696
if ($in =~ /\.gz$/) {
9797
open($fd, '-|', "gzip", "-dc", $in) || die("$in: $!\n");
98+
} elsif ($in =~ /\.xz$/) {
99+
open($fd, '-|', "xz", "-dc", $in) || die("$in: $!\n");
98100
} else {
99101
open($fd, '<', $in) || die("$in: $!\n");
100102
}
@@ -141,6 +143,7 @@ sub parserepourl {
141143
my ($url) = @_;
142144
my @components;
143145
my $baseurl;
146+
my $compression = 'gz';
144147
if ($url =~ /\?/) {
145148
my ($base, $query) = split(/\?/, $url, 2);
146149
if ("&$query" =~ /\&dist=/) {
@@ -151,10 +154,12 @@ sub parserepourl {
151154
$v = urldecode($v, 1);
152155
$dist = $v if $k eq 'dist';
153156
push @components, split(/[,+]/, $v) if $k eq 'component';
157+
$compression = $v if $k eq 'compression';
154158
}
155159
$baseurl = $base;
156160
$baseurl .= '/' unless $baseurl =~ /\/$/;
157-
$url = "${baseurl}dists/${dist}/";
161+
$url = $baseurl;
162+
$url .= "dists/${dist}/" if $dist;
158163
push @components, 'main' unless @components;
159164
}
160165
}
@@ -177,7 +182,7 @@ sub parserepourl {
177182
$url =~ s/([^\/]+\/)$/dists\/$1/;
178183
$baseurl =~ s/([^\/]+\/)$//;
179184
}
180-
return $baseurl, $url, \@components;
185+
return $baseurl, $url, \@components, $compression;
181186
}
182187

183188
1;

‎PBuild/RemoteRepo.pm

+6-6
Original file line numberDiff line numberDiff line change
@@ -113,20 +113,20 @@ sub fetchrepo_apk {
113113

114114
sub fetchrepo_debian {
115115
my ($url, $tmpdir, %opts) = @_;
116-
my ($baseurl, $disturl, $components) = Build::Debrepo::parserepourl($url);
116+
my ($baseurl, $disturl, $components, $compression) = Build::Debrepo::parserepourl($url);
117117
die("fetchrepo_debian needs an architecture\n") unless $opts{'arch'};
118118
my $basearch = Build::Deb::basearch($opts{'arch'});
119119
my @bins;
120120
for my $component (@$components) {
121121
unlink("$tmpdir/Packages.gz");
122122
if ($component eq '.') {
123-
download("${disturl}Packages.gz", "$tmpdir/Packages.gz");
124-
die("Packages.gz missing\n") unless -s "$tmpdir/Packages.gz";
123+
download("${disturl}Packages.$compression", "$tmpdir/Packages.$compression");
124+
die("Packages.gz missing\n") unless -s "$tmpdir/Packages.$compression";
125125
} else {
126-
download("$disturl$component/binary-$basearch/Packages.gz", "$tmpdir/Packages.gz");
127-
die("Packages.gz missing for basearch $basearch, component $component\n") unless -s "$tmpdir/Packages.gz";
126+
download("$disturl$component/binary-$basearch/Packages.$compression", "$tmpdir/Packages.$compression");
127+
die("Packages.$compression missing for basearch $basearch, component $component\n") unless -s "$tmpdir/Packages.$compression";
128128
}
129-
Build::Debrepo::parse("$tmpdir/Packages.gz", sub { addpkg(\@bins, $_[0], $baseurl) }, 'addselfprovides' => 1, 'withchecksum' => 1, 'normalizedeps' => 1);
129+
Build::Debrepo::parse("$tmpdir/Packages.$compression", sub { addpkg(\@bins, $_[0], $baseurl) }, 'addselfprovides' => 1, 'withchecksum' => 1, 'normalizedeps' => 1);
130130
}
131131
return \@bins;
132132
}

0 commit comments

Comments
 (0)
Please sign in to comment.