From 8376fff1518415a0d48b34e91298c846b0ab6b95 Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <e.dolstra@tudelft.nl>
Date: Fri, 25 Feb 2005 16:12:52 +0000
Subject: [PATCH] * Add a version number to manifests.

---
 scripts/download-using-manifests.pl.in | 5 ++++-
 scripts/nix-pull.in                    | 4 +++-
 scripts/readmanifest.pm.in             | 9 +++++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/scripts/download-using-manifests.pl.in b/scripts/download-using-manifests.pl.in
index 890f8787c..875735531 100644
--- a/scripts/download-using-manifests.pl.in
+++ b/scripts/download-using-manifests.pl.in
@@ -27,7 +27,10 @@ my %successors;
 
 for my $manifest (glob "$manifestDir/*.nixmanifest") {
 #    print STDERR "reading $manifest\n";
-    readManifest $manifest, \%narFiles, \%patches, \%successors;
+    if (readManifest($manifest, \%narFiles, \%patches, \%successors) < 3) {
+        print STDERR "you have an old-style manifest `$manifest'; please delete it\n";
+        exit 1;
+    }
 }
 
 
diff --git a/scripts/nix-pull.in b/scripts/nix-pull.in
index 13a2199fb..efd0c074f 100644
--- a/scripts/nix-pull.in
+++ b/scripts/nix-pull.in
@@ -42,7 +42,9 @@ sub processURL {
            "'$url' > '$manifest'") == 0
            or die "curl failed: $?";
 
-    readManifest $manifest, \%narFiles, \%patches, \%successors;
+    if (readManifest($manifest, \%narFiles, \%patches, \%successors) < 3) {
+        die "manifest `$url' is too old (i.e., for Nix <= 0.7)\n";
+    }
 
     my $baseName = "unnamed";
     if ($url =~ /\/([^\/]+)\/[^\/]+$/) { # get the forelast component
diff --git a/scripts/readmanifest.pm.in b/scripts/readmanifest.pm.in
index fa4ac65ac..3ecb81f8f 100644
--- a/scripts/readmanifest.pm.in
+++ b/scripts/readmanifest.pm.in
@@ -41,6 +41,8 @@ sub readManifest {
     my $inside = 0;
     my $type;
 
+    my $manifestVersion = 2;
+
     my $storePath;
     my $url;
     my $hash;
@@ -139,6 +141,7 @@ sub readManifest {
             elsif (/^\s*NarHash:\s*(\S+)\s*$/) { $narHash = $1; }
             elsif (/^\s*References:\s*(.*)\s*$/) { $references = $1; }
             elsif (/^\s*Deriver:\s*(\S+)\s*$/) { $deriver = $1; }
+            elsif (/^\s*ManifestVersion:\s*(\d+)\s*$/) { $manifestVersion = $1; }
 
             # Compatibility;
             elsif (/^\s*NarURL:\s*(\S+)\s*$/) { $url = $1; }
@@ -148,6 +151,8 @@ sub readManifest {
     }
 
     close MANIFEST;
+
+    return $manifestVersion;
 }
 
 
@@ -159,6 +164,10 @@ sub writeManifest
 
     open MANIFEST, ">$manifest.tmp"; # !!! check exclusive
 
+    print MANIFEST "version {\n";
+    print MANIFEST "  ManifestVersion: 3\n";
+    print MANIFEST "}\n";
+
     foreach my $storePath (keys %{$narFiles}) {
         my $narFileList = $$narFiles{$storePath};
         foreach my $narFile (@{$narFileList}) {
-- 
GitLab