2010-12-05 18:36:02 +01:00
|
|
|
#! @perl@ -w -I@libexecdir@/nix
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use File::Temp qw(tempdir);
|
2010-12-05 18:50:29 +01:00
|
|
|
use NixManifest;
|
2010-12-05 18:36:02 +01:00
|
|
|
use GeneratePatches;
|
|
|
|
|
|
|
|
if (scalar @ARGV != 5) {
|
|
|
|
print STDERR <<EOF;
|
|
|
|
Usage: nix-generate-patches NAR-DIR PATCH-DIR PATCH-URI OLD-MANIFEST NEW-MANIFEST
|
|
|
|
|
|
|
|
This command generates binary patches between NAR files listed in
|
|
|
|
OLD-MANIFEST and NEW-MANIFEST. The patches are written to the
|
|
|
|
directory PATCH-DIR, and the prefix PATCH-URI is used to generate URIs
|
|
|
|
for the patches. The patches are added to NEW-MANIFEST. All NARs are
|
|
|
|
required to exist in NAR-DIR. Patches are generated between
|
|
|
|
succeeding versions of packages with the same name.
|
|
|
|
EOF
|
|
|
|
exit 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $narPath = $ARGV[0];
|
|
|
|
my $patchesPath = $ARGV[1];
|
|
|
|
my $patchesURL = $ARGV[2];
|
|
|
|
my $srcManifest = $ARGV[3];
|
|
|
|
my $dstManifest = $ARGV[4];
|
|
|
|
|
|
|
|
my (%srcNarFiles, %srcLocalPaths, %srcPatches);
|
2011-04-06 11:16:22 +02:00
|
|
|
readManifest $srcManifest, \%srcNarFiles, \%srcPatches;
|
2010-12-05 18:36:02 +01:00
|
|
|
|
|
|
|
my (%dstNarFiles, %dstLocalPaths, %dstPatches);
|
2011-04-06 11:16:22 +02:00
|
|
|
readManifest $dstManifest, \%dstNarFiles, \%dstPatches;
|
2010-12-05 18:36:02 +01:00
|
|
|
|
|
|
|
my $tmpDir = tempdir("nix-generate-patches.XXXXXX", CLEANUP => 1, TMPDIR => 1)
|
|
|
|
or die "cannot create a temporary directory";
|
|
|
|
|
|
|
|
generatePatches \%srcNarFiles, \%dstNarFiles, \%srcPatches, \%dstPatches,
|
|
|
|
$narPath, $patchesPath, $patchesURL, $tmpDir;
|
|
|
|
|
|
|
|
propagatePatches \%srcPatches, \%dstNarFiles, \%dstPatches;
|
|
|
|
|
|
|
|
writeManifest $dstManifest, \%dstNarFiles, \%dstPatches;
|