mercurial/exchange.py
changeset 26760 a18ee7da38c2
parent 26759 c0f475ac997e
child 26761 8270ee357dd9
--- a/mercurial/exchange.py	Wed Oct 14 17:00:34 2015 -0700
+++ b/mercurial/exchange.py	Sat Oct 17 10:26:34 2015 -0700
@@ -124,6 +124,17 @@
             raise error.UnsupportedBundleSpecification(
                     _('%s is not a recognized bundle specification') % spec)
 
+    # The specification for packed1 can optionally declare the data formats
+    # required to apply it. If we see this metadata, compare against what the
+    # repo supports and error if the bundle isn't compatible.
+    if version == 'packed1' and 'requirements' in params:
+        requirements = set(params['requirements'].split(','))
+        missingreqs = requirements - repo.supportedformats
+        if missingreqs:
+            raise error.UnsupportedBundleSpecification(
+                    _('missing support for repository features: %s') %
+                      ', '.join(sorted(missingreqs)))
+
     if not externalnames:
         compression = _bundlespeccompressions[compression]
         version = _bundlespeccgversions[version]