[PATCH] cascading lookup support in LocationConfig (bug 33430)

James Henstridge james at jamesh.id.au
Wed Oct 4 11:51:40 BST 2006


On 19/09/06, Aaron Bentley <aaron.bentley at utoronto.ca> wrote:
> >> If recurse=False were set for all automatic values, do you think
> >> ignore_parents would still be useful?
> >
> > It depends on whether anyone was relying on the current shadowing
> > behaviour or not.  Maybe it would be better to leave it out and see if
> > anyone asks for the feature.
>
> Okay.  So I apologise for turning your patch into a design discussion.
> Let's not let cascading block on config syntax discussion.  If you don't
> mind producing a version that retains the existing recurse
> functionality, I think I can approve that.  It's your choice whether to
> include ignore_parents.
>
> We can deal with syntax enhancement separately.

Finally got around to cleaning up the previous patch, and have
attached a new bundle.  The changes from the last version include:

1. add back the recurse=Flase support.
2. removes the recurse optional argument for get_user_option()
(doesn't make sense if policy gets set when setting the option).

It still has the ignore_parents support included.

James.
-------------- next part --------------
# Bazaar revision bundle v0.8
#
# message:
#   get rid of the recurse argument to get_user_option()
# committer: James Henstridge <james at jamesh.id.au>
# date: Wed 2006-10-04 15:12:39.140000105 +0800

=== modified file bzrlib/config.py
--- bzrlib/config.py
+++ bzrlib/config.py
@@ -255,6 +255,18 @@
             raise errors.ParseConfigError(e.errors, e.config.filename)
         return self._parser
 
+    def _get_matching_sections(self):
+        """Return an ordered list of (section_name, extra_path) pairs.
+
+        If the section contains inherited configuration, extra_path is
+        a string containing the additional path components.
+        """
+        section = self._get_section()
+        if section is not None:
+            return [(section, '')]
+        else:
+            return []
+
     def _get_section(self):
         """Override this to define the section used by the config."""
         return "DEFAULT"
@@ -277,11 +289,13 @@
 
     def _get_user_option(self, option_name):
         """See Config._get_user_option."""
-        try:
-            return self._get_parser().get_value(self._get_section(),
-                                                option_name)
-        except KeyError:
-            pass
+        for (section, extra_path) in self._get_matching_sections():
+            try:
+                return self._get_parser().get_value(section, option_name)
+            except KeyError:
+                pass
+        else:
+            return None
 
     def _gpg_signing_command(self):
         """See Config.gpg_signing_command."""
@@ -379,13 +393,8 @@
             location = urlutils.local_path_from_url(location)
         self.location = location
 
-    def _get_section(self):
-        """Get the section we should look in for config items.
-
-        Returns None if none exists. 
-        TODO: perhaps return a NullSection that thunks through to the 
-              global config.
-        """
+    def _get_matching_sections(self):
+        """Return an ordered list of section names matching this location."""
         sections = self._get_parser()
         location_names = self.location.split('/')
         if self.location.endswith('/'):
@@ -422,11 +431,19 @@
                         continue
                 except KeyError:
                     pass
-            matches.append((len(section_names), section))
-        if not len(matches):
-            return None
+            matches.append((len(section_names), section,
+                            '/'.join(location_names[len(section_names):])))
         matches.sort(reverse=True)
-        return matches[0][1]
+        sections = []
+        for (length, section, extra_path) in matches:
+            sections.append((section, extra_path))
+            # should we stop looking for parent configs here?
+            try:
+                if self._get_parser()[section].as_bool('ignore_parents'):
+                    break
+            except KeyError:
+                pass
+        return sections
 
     def set_user_option(self, option, value):
         """Save option and its value in the configuration."""

=== modified file bzrlib/tests/test_config.py
--- bzrlib/tests/test_config.py
+++ bzrlib/tests/test_config.py
@@ -64,8 +64,11 @@
 sample_branches_text = ("[http://www.example.com]\n"
                         "# Top level policy\n"
                         "email=Robert Collins <robertc at example.org>\n"
-                        "[http://www.example.com/useglobal]\n"
-                        "# different project, forces global lookup\n"
+                        "[http://www.example.com/ignoreparent]\n"
+                        "# different project: ignore parent dir config\n"
+                        "ignore_parents=true\n"
+                        "[http://www.example.com/norecurse]\n"
+                        "# configuration items that only apply to this dir\n"
                         "recurse=false\n"
                         "[/b/]\n"
                         "check_signatures=require\n"
@@ -77,7 +80,6 @@
                         "# test trailing / matching\n"
                         "[/a/*]\n"
                         "#subdirs will match but not the parent\n"
-                        "recurse=False\n"
                         "[/a/c]\n"
                         "check_signatures=ignore\n"
                         "post_commit=bzrlib.tests.test_config.post_commit\n"
@@ -535,58 +537,78 @@
         self.failUnless(isinstance(global_config, config.GlobalConfig))
         self.failUnless(global_config is my_config._get_global_config())
 
-    def test__get_section_no_match(self):
+    def test__get_matching_sections_no_match(self):
         self.get_branch_config('/')
-        self.assertEqual(None, self.my_location_config._get_section())
+        self.assertEqual([], self.my_location_config._get_matching_sections())
         
-    def test__get_section_exact(self):
+    def test__get_matching_sections_exact(self):
         self.get_branch_config('http://www.example.com')
-        self.assertEqual('http://www.example.com',
-                         self.my_location_config._get_section())
+        self.assertEqual([('http://www.example.com', '')],
+                         self.my_location_config._get_matching_sections())
    
-    def test__get_section_suffix_does_not(self):
+    def test__get_matching_sections_suffix_does_not(self):
         self.get_branch_config('http://www.example.com-com')
-        self.assertEqual(None, self.my_location_config._get_section())
+        self.assertEqual([], self.my_location_config._get_matching_sections())
 
-    def test__get_section_subdir_recursive(self):
+    def test__get_matching_sections_subdir_recursive(self):
         self.get_branch_config('http://www.example.com/com')
-        self.assertEqual('http://www.example.com',
-                         self.my_location_config._get_section())
-
-    def test__get_section_subdir_matches(self):
-        self.get_branch_config('http://www.example.com/useglobal')
-        self.assertEqual('http://www.example.com/useglobal',
-                         self.my_location_config._get_section())
-
-    def test__get_section_subdir_nonrecursive(self):
-        self.get_branch_config(
-            'http://www.example.com/useglobal/childbranch')
-        self.assertEqual('http://www.example.com',
-                         self.my_location_config._get_section())
-
-    def test__get_section_subdir_trailing_slash(self):
+        self.assertEqual([('http://www.example.com', 'com')],
+                         self.my_location_config._get_matching_sections())
+
+    def test__get_matching_sections_ignoreparent(self):
+        self.get_branch_config('http://www.example.com/ignoreparent')
+        self.assertEqual([('http://www.example.com/ignoreparent', '')],
+                         self.my_location_config._get_matching_sections())
+
+    def test__get_matching_sections_ignoreparent_subdir(self):
+        self.get_branch_config(
+            'http://www.example.com/ignoreparent/childbranch')
+        self.assertEqual([('http://www.example.com/ignoreparent', 'childbranch')],
+                         self.my_location_config._get_matching_sections())
+
+    def test__get_matching_sections_norecurse(self):
+        self.get_branch_config('http://www.example.com/norecurse')
+        self.assertEqual([('http://www.example.com/norecurse', ''),
+                          ('http://www.example.com', 'norecurse')],
+                         self.my_location_config._get_matching_sections())
+
+    def test__get_matching_sections_norecurse_subdir(self):
+        self.get_branch_config(
+            'http://www.example.com/norecurse/childbranch')
+        self.assertEqual([('http://www.example.com', 'norecurse/childbranch')],
+                         self.my_location_config._get_matching_sections())
+
+    def test__get_matching_sections_subdir_trailing_slash(self):
         self.get_branch_config('/b')
-        self.assertEqual('/b/', self.my_location_config._get_section())
+        self.assertEqual([('/b/', '')],
+                         self.my_location_config._get_matching_sections())
 
-    def test__get_section_subdir_child(self):
+    def test__get_matching_sections_subdir_child(self):
         self.get_branch_config('/a/foo')
-        self.assertEqual('/a/*', self.my_location_config._get_section())
+        self.assertEqual([('/a/*', ''), ('/a/', 'foo')],
+                         self.my_location_config._get_matching_sections())
 
-    def test__get_section_subdir_child_child(self):
+    def test__get_matching_sections_subdir_child_child(self):
         self.get_branch_config('/a/foo/bar')
-        self.assertEqual('/a/', self.my_location_config._get_section())
+        self.assertEqual([('/a/*', 'bar'), ('/a/', 'foo/bar')],
+                         self.my_location_config._get_matching_sections())
 
-    def test__get_section_trailing_slash_with_children(self):
+    def test__get_matching_sections_trailing_slash_with_children(self):
         self.get_branch_config('/a/')
-        self.assertEqual('/a/', self.my_location_config._get_section())
+        self.assertEqual([('/a/', '')],
+                         self.my_location_config._get_matching_sections())
 
-    def test__get_section_explicit_over_glob(self):
+    def test__get_matching_sections_explicit_over_glob(self):
+        # XXX: 2006-09-08 jamesh
+        # This test only passes because ord('c') > ord('*').  If there
+        # was a config section for '/a/?', it would get precedence
+        # over '/a/c'.
         self.get_branch_config('/a/c')
-        self.assertEqual('/a/c', self.my_location_config._get_section())
-
+        self.assertEqual([('/a/c', ''), ('/a/*', ''), ('/a/', 'c')],
+                         self.my_location_config._get_matching_sections())
 
     def test_location_without_username(self):
-        self.get_branch_config('http://www.example.com/useglobal')
+        self.get_branch_config('http://www.example.com/ignoreparent')
         self.assertEqual(u'Erik B\u00e5gfors <erik at bagfors.nu>',
                          self.my_config.username())
 
@@ -641,7 +663,7 @@
         self.get_branch_config('/a')
         self.assertEqual('local',
                          self.my_config.get_user_option('user_local_option'))
-        
+
     def test_post_commit_default(self):
         self.get_branch_config('/a/c')
         self.assertEqual('bzrlib.tests.test_config.post_commit',

# revision id: james at jamesh.id.au-20061004071239-bb32b93e159b7899
# sha1: 63cb7aecdeafae1b9695558cb38e18aceb72f880
# inventory sha1: e362ecee69443574ecb39319cad9653c0d23d6a6
# parent ids:
#   james at jamesh.id.au-20061002133602-03fc66bf9677d07b
# base id: pqm at pqm.ubuntu.com-20061002004310-6e09ddd7fd28f71c
# properties:
#   branch-nick: bzr.locationconfig

# message:
#   add back recurse=False option to config file
# committer: James Henstridge <james at jamesh.id.au>
# date: Mon 2006-10-02 21:36:02.029999971 +0800

=== modified file bzrlib/config.py // encoding:base64
LS0tIGJ6cmxpYi9jb25maWcucHkKKysrIGJ6cmxpYi9jb25maWcucHkKQEAgLTQyNiw2ICs0MjYs
MTMgQEAKICAgICAgICAgICAgICMgaWYgc2VjdGlvbiBpcyBsb25nZXIsIG5vIG1hdGNoLgogICAg
ICAgICAgICAgaWYgbGVuKHNlY3Rpb25fbmFtZXMpID4gbGVuKGxvY2F0aW9uX25hbWVzKToKICAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBpZiBwYXRoIGlzIGxvbmdlciwg
YW5kIHJlY3Vyc2UgaXMgbm90IHRydWUsIG5vIG1hdGNoCisgICAgICAgICAgICBpZiBsZW4oc2Vj
dGlvbl9uYW1lcykgPCBsZW4obG9jYXRpb25fbmFtZXMpOgorICAgICAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2dldF9wYXJzZXIoKVtzZWN0aW9uXS5h
c19ib29sKCdyZWN1cnNlJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcwog
ICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoKGxlbihzZWN0aW9uX25hbWVzKSwgc2VjdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycuam9pbihsb2NhdGlvbl9uYW1lc1tsZW4o
c2VjdGlvbl9uYW1lcyk6XSkpKQogICAgICAgICBtYXRjaGVzLnNvcnQocmV2ZXJzZT1UcnVlKQoK

=== modified file bzrlib/tests/test_config.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfY29u
ZmlnLnB5CkBAIC02Nyw2ICs2Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiW2h0dHA6
Ly93d3cuZXhhbXBsZS5jb20vaWdub3JlcGFyZW50XVxuIgogICAgICAgICAgICAgICAgICAgICAg
ICAgIiMgZGlmZmVyZW50IHByb2plY3Q6IGlnbm9yZSBwYXJlbnQgZGlyIGNvbmZpZ1xuIgogICAg
ICAgICAgICAgICAgICAgICAgICAgImlnbm9yZV9wYXJlbnRzPXRydWVcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJbaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ub3JlY3Vyc2VdXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAiIyBjb25maWd1cmF0aW9uIGl0ZW1zIHRoYXQgb25seSBhcHBs
eSB0byB0aGlzIGRpclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgInJlY3Vyc2U9ZmFsc2Vc
biIKICAgICAgICAgICAgICAgICAgICAgICAgICJbL2IvXVxuIgogICAgICAgICAgICAgICAgICAg
ICAgICAgImNoZWNrX3NpZ25hdHVyZXM9cmVxdWlyZVxuIgogICAgICAgICAgICAgICAgICAgICAg
ICAgIiMgdGVzdCB0cmFpbGluZyAvIG1hdGNoaW5nIHdpdGggbm8gY2hpbGRyZW5cbiIKQEAgLTU1
MiwxNyArNTU1LDI5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnaHR0cDovL3d3dy5l
eGFtcGxlLmNvbScsICdjb20nKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9s
b2NhdGlvbl9jb25maWcuX2dldF9tYXRjaGluZ19zZWN0aW9ucygpKQogCi0gICAgZGVmIHRlc3Rf
X2dldF9tYXRjaGluZ19zZWN0aW9uc19zdWJkaXJfbWF0Y2hlcyhzZWxmKToKKyAgICBkZWYgdGVz
dF9fZ2V0X21hdGNoaW5nX3NlY3Rpb25zX2lnbm9yZXBhcmVudChzZWxmKToKICAgICAgICAgc2Vs
Zi5nZXRfYnJhbmNoX2NvbmZpZygnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pZ25vcmVwYXJlbnQn
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vaWdu
b3JlcGFyZW50JywgJycpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0
aW9uX2NvbmZpZy5fZ2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKLSAgICBkZWYgdGVzdF9fZ2V0
X21hdGNoaW5nX3NlY3Rpb25zX3N1YmRpcl9ub25yZWN1cnNpdmUoc2VsZik6CisgICAgZGVmIHRl
c3RfX2dldF9tYXRjaGluZ19zZWN0aW9uc19pZ25vcmVwYXJlbnRfc3ViZGlyKHNlbGYpOgogICAg
ICAgICBzZWxmLmdldF9icmFuY2hfY29uZmlnKAogICAgICAgICAgICAgJ2h0dHA6Ly93d3cuZXhh
bXBsZS5jb20vaWdub3JlcGFyZW50L2NoaWxkYnJhbmNoJykKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChbKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2lnbm9yZXBhcmVudCcsICdjaGlsZGJyYW5j
aCcpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5f
Z2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKKyAgICBkZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3Nl
Y3Rpb25zX25vcmVjdXJzZShzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygn
aHR0cDovL3d3dy5leGFtcGxlLmNvbS9ub3JlY3Vyc2UnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFsoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vbm9yZWN1cnNlJywgJycpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nLCAnbm9yZWN1cnNlJyld
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRf
bWF0Y2hpbmdfc2VjdGlvbnMoKSkKKworICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlv
bnNfbm9yZWN1cnNlX3N1YmRpcihzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZp
ZygKKyAgICAgICAgICAgICdodHRwOi8vd3d3LmV4YW1wbGUuY29tL25vcmVjdXJzZS9jaGlsZGJy
YW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnaHR0cDovL3d3dy5leGFtcGxlLmNv
bScsICdub3JlY3Vyc2UvY2hpbGRicmFuY2gnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5teV9sb2NhdGlvbl9jb25maWcuX2dldF9tYXRjaGluZ19zZWN0aW9ucygpKQorCiAgICAg
ZGVmIHRlc3RfX2dldF9tYXRjaGluZ19zZWN0aW9uc19zdWJkaXJfdHJhaWxpbmdfc2xhc2goc2Vs
Zik6CiAgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25maWcoJy9iJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChbKCcvYi8nLCAnJyldLAoK

# revision id: james at jamesh.id.au-20061002133602-03fc66bf9677d07b
# sha1: b3dfc6d572e8779ef2560b596a86832d9e65ab77
# inventory sha1: 30ef2a83734eb8198ba0b68a50d7d72c06befb23
# parent ids:
#   james at jamesh.id.au-20061002111054-31fd65f92aeb30e4
# properties:
#   branch-nick: bzr.locationconfig

# message:
#   merge from bzr.dev
# committer: James Henstridge <james at jamesh.id.au>
# date: Mon 2006-10-02 19:10:54.506999969 +0800

=== modified file bzrlib/config.py // last-changed:james at jamesh.id.au-200609180
... 25905-aa20656f1b0b34a0 // encoding:base64
LS0tIGJ6cmxpYi9jb25maWcucHkKKysrIGJ6cmxpYi9jb25maWcucHkKQEAgLTExNCwxMyArMTE0
LDEzIEBACiAgICAgZGVmIF9nZXRfc2lnbmluZ19wb2xpY3koc2VsZik6CiAgICAgICAgICIiIlRl
bXBsYXRlIG1ldGhvZCB0byBvdmVycmlkZSBzaWduYXR1cmUgY3JlYXRpb24gcG9saWN5LiIiIgog
Ci0gICAgZGVmIF9nZXRfdXNlcl9vcHRpb24oc2VsZiwgb3B0aW9uX25hbWUpOgorICAgIGRlZiBf
Z2V0X3VzZXJfb3B0aW9uKHNlbGYsIG9wdGlvbl9uYW1lLCByZWN1cnNlPVRydWUpOgogICAgICAg
ICAiIiJUZW1wbGF0ZSBtZXRob2QgdG8gcHJvdmlkZSBhIHVzZXIgb3B0aW9uLiIiIgogICAgICAg
ICByZXR1cm4gTm9uZQogCi0gICAgZGVmIGdldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFt
ZSk6CisgICAgZGVmIGdldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFtZSwgcmVjdXJzZT1U
cnVlKToKICAgICAgICAgIiIiR2V0IGEgZ2VuZXJpYyBvcHRpb24gLSBubyBzcGVjaWFsIHByb2Nl
c3MsIG5vIGRlZmF1bHQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9nZXRfdXNlcl9vcHRpb24o
b3B0aW9uX25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfdXNlcl9vcHRpb24ob3B0aW9u
X25hbWUsIHJlY3Vyc2U9cmVjdXJzZSkKIAogICAgIGRlZiBncGdfc2lnbmluZ19jb21tYW5kKHNl
bGYpOgogICAgICAgICAiIiJXaGF0IHByb2dyYW0gc2hvdWxkIGJlIHVzZWQgdG8gc2lnbiBzaWdu
YXR1cmVzPyIiIgpAQCAtMjU1LDYgKzI1NSwxOCBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3Jz
LlBhcnNlQ29uZmlnRXJyb3IoZS5lcnJvcnMsIGUuY29uZmlnLmZpbGVuYW1lKQogICAgICAgICBy
ZXR1cm4gc2VsZi5fcGFyc2VyCiAKKyAgICBkZWYgX2dldF9tYXRjaGluZ19zZWN0aW9ucyhzZWxm
KToKKyAgICAgICAgIiIiUmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiAoc2VjdGlvbl9uYW1lLCBl
eHRyYV9wYXRoKSBwYWlycy4KKworICAgICAgICBJZiB0aGUgc2VjdGlvbiBjb250YWlucyBpbmhl
cml0ZWQgY29uZmlndXJhdGlvbiwgZXh0cmFfcGF0aCBpcworICAgICAgICBhIHN0cmluZyBjb250
YWluaW5nIHRoZSBhZGRpdGlvbmFsIHBhdGggY29tcG9uZW50cy4KKyAgICAgICAgIiIiCisgICAg
ICAgIHNlY3Rpb24gPSBzZWxmLl9nZXRfc2VjdGlvbigpCisgICAgICAgIGlmIHNlY3Rpb24gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gWyhzZWN0aW9uLCAnJyldCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gW10KKwogICAgIGRlZiBfZ2V0X3NlY3Rpb24oc2VsZik6
CiAgICAgICAgICIiIk92ZXJyaWRlIHRoaXMgdG8gZGVmaW5lIHRoZSBzZWN0aW9uIHVzZWQgYnkg
dGhlIGNvbmZpZy4iIiIKICAgICAgICAgcmV0dXJuICJERUZBVUxUIgpAQCAtMjc1LDEzICsyODcs
MTcgQEAKICAgICAgICAgIiIiR2V0IHRoZSB1c2VyIGlkIGZyb20gdGhlICdlbWFpbCcga2V5IGlu
IHRoZSBjdXJyZW50IHNlY3Rpb24uIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfdXNlcl9v
cHRpb24oJ2VtYWlsJykKIAotICAgIGRlZiBfZ2V0X3VzZXJfb3B0aW9uKHNlbGYsIG9wdGlvbl9u
YW1lKToKKyAgICBkZWYgX2dldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFtZSwgcmVjdXJz
ZT1UcnVlKToKICAgICAgICAgIiIiU2VlIENvbmZpZy5fZ2V0X3VzZXJfb3B0aW9uLiIiIgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3BhcnNlcigpLmdldF92YWx1
ZShzZWxmLl9nZXRfc2VjdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uX25hbWUpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAg
ICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIChzZWN0aW9uLCBleHRyYV9wYXRoKSBpbiBzZWxm
Ll9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKToKKyAgICAgICAgICAgIGlmIG5vdCByZWN1cnNlIGFu
ZCBleHRyYV9wYXRoICE9ICcnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9wYXJzZXIoKS5nZXRfdmFs
dWUoc2VjdGlvbiwgb3B0aW9uX25hbWUpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Cisg
ICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKIAogICAgIGRlZiBfZ3BnX3NpZ25pbmdfY29tbWFuZChzZWxmKToKICAgICAgICAgIiIiU2Vl
IENvbmZpZy5ncGdfc2lnbmluZ19jb21tYW5kLiIiIgpAQCAtMzc5LDEzICszOTUsOCBAQAogICAg
ICAgICAgICAgbG9jYXRpb24gPSB1cmx1dGlscy5sb2NhbF9wYXRoX2Zyb21fdXJsKGxvY2F0aW9u
KQogICAgICAgICBzZWxmLmxvY2F0aW9uID0gbG9jYXRpb24KIAotICAgIGRlZiBfZ2V0X3NlY3Rp
b24oc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgc2VjdGlvbiB3ZSBzaG91bGQgbG9vayBpbiBm
b3IgY29uZmlnIGl0ZW1zLgotCi0gICAgICAgIFJldHVybnMgTm9uZSBpZiBub25lIGV4aXN0cy4g
Ci0gICAgICAgIFRPRE86IHBlcmhhcHMgcmV0dXJuIGEgTnVsbFNlY3Rpb24gdGhhdCB0aHVua3Mg
dGhyb3VnaCB0byB0aGUgCi0gICAgICAgICAgICAgIGdsb2JhbCBjb25maWcuCi0gICAgICAgICIi
IgorICAgIGRlZiBfZ2V0X21hdGNoaW5nX3NlY3Rpb25zKHNlbGYpOgorICAgICAgICAiIiJSZXR1
cm4gYW4gb3JkZXJlZCBsaXN0IG9mIHNlY3Rpb24gbmFtZXMgbWF0Y2hpbmcgdGhpcyBsb2NhdGlv
bi4iIiIKICAgICAgICAgc2VjdGlvbnMgPSBzZWxmLl9nZXRfcGFyc2VyKCkKICAgICAgICAgbG9j
YXRpb25fbmFtZXMgPSBzZWxmLmxvY2F0aW9uLnNwbGl0KCcvJykKICAgICAgICAgaWYgc2VsZi5s
b2NhdGlvbi5lbmRzd2l0aCgnLycpOgpAQCAtNDE1LDE4ICs0MjYsMTkgQEAKICAgICAgICAgICAg
ICMgaWYgc2VjdGlvbiBpcyBsb25nZXIsIG5vIG1hdGNoLgogICAgICAgICAgICAgaWYgbGVuKHNl
Y3Rpb25fbmFtZXMpID4gbGVuKGxvY2F0aW9uX25hbWVzKToKICAgICAgICAgICAgICAgICBjb250
aW51ZQotICAgICAgICAgICAgIyBpZiBwYXRoIGlzIGxvbmdlciwgYW5kIHJlY3Vyc2UgaXMgbm90
IHRydWUsIG5vIG1hdGNoCi0gICAgICAgICAgICBpZiBsZW4oc2VjdGlvbl9uYW1lcykgPCBsZW4o
bG9jYXRpb25fbmFtZXMpOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAg
ICAgaWYgbm90IHNlbGYuX2dldF9wYXJzZXIoKVtzZWN0aW9uXS5hc19ib29sKCdyZWN1cnNlJyk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGV4Y2Vw
dCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgbWF0Y2hl
cy5hcHBlbmQoKGxlbihzZWN0aW9uX25hbWVzKSwgc2VjdGlvbikpCi0gICAgICAgIGlmIG5vdCBs
ZW4obWF0Y2hlcyk6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgbWF0Y2hl
cy5hcHBlbmQoKGxlbihzZWN0aW9uX25hbWVzKSwgc2VjdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnLycuam9pbihsb2NhdGlvbl9uYW1lc1tsZW4oc2VjdGlvbl9uYW1lcyk6XSkp
KQogICAgICAgICBtYXRjaGVzLnNvcnQocmV2ZXJzZT1UcnVlKQotICAgICAgICByZXR1cm4gbWF0
Y2hlc1swXVsxXQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIGZvciAobGVuZ3RoLCBz
ZWN0aW9uLCBleHRyYV9wYXRoKSBpbiBtYXRjaGVzOgorICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKChzZWN0aW9uLCBleHRyYV9wYXRoKSkKKyAgICAgICAgICAgICMgc2hvdWxkIHdlIHN0b3Ag
bG9va2luZyBmb3IgcGFyZW50IGNvbmZpZ3MgaGVyZT8KKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBpZiBzZWxmLl9nZXRfcGFyc2VyKClbc2VjdGlvbl0uYXNfYm9vbCgnaWdub3Jl
X3BhcmVudHMnKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2Vw
dCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBzZWN0aW9u
cwogCiAgICAgZGVmIHNldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb24sIHZhbHVlKToKICAgICAg
ICAgIiIiU2F2ZSBvcHRpb24gYW5kIGl0cyB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbi4iIiIK
QEAgLTUxNSwxMCArNTI3LDEwIEBACiAgICAgICAgICIiIlNlZSBDb25maWcuX2dldF9zaWduaW5n
X3BvbGljeS4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9iZXN0X3ZhbHVlKCdfZ2V0X3Np
Z25pbmdfcG9saWN5JykKIAotICAgIGRlZiBfZ2V0X3VzZXJfb3B0aW9uKHNlbGYsIG9wdGlvbl9u
YW1lKToKKyAgICBkZWYgX2dldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFtZSwgcmVjdXJz
ZT1UcnVlKToKICAgICAgICAgIiIiU2VlIENvbmZpZy5fZ2V0X3VzZXJfb3B0aW9uLiIiIgogICAg
ICAgICBmb3Igc291cmNlIGluIHNlbGYub3B0aW9uX3NvdXJjZXM6Ci0gICAgICAgICAgICB2YWx1
ZSA9IHNvdXJjZSgpLl9nZXRfdXNlcl9vcHRpb24ob3B0aW9uX25hbWUpCisgICAgICAgICAgICB2
YWx1ZSA9IHNvdXJjZSgpLl9nZXRfdXNlcl9vcHRpb24ob3B0aW9uX25hbWUsIHJlY3Vyc2U9cmVj
dXJzZSkKICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZQogICAgICAgICByZXR1cm4gTm9uZQoK

=== modified file bzrlib/tests/test_config.py // last-changed:james at jamesh.id.a
... u-20060918025905-aa20656f1b0b34a0 // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfY29u
ZmlnLnB5CkBAIC02NCw5ICs2NCw5IEBACiBzYW1wbGVfYnJhbmNoZXNfdGV4dCA9ICgiW2h0dHA6
Ly93d3cuZXhhbXBsZS5jb21dXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiIyBUb3AgbGV2
ZWwgcG9saWN5XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiZW1haWw9Um9iZXJ0IENvbGxp
bnMgPHJvYmVydGNAZXhhbXBsZS5vcmc+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAiW2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFsXVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAgIiMgZGlmZmVyZW50IHByb2plY3QsIGZvcmNlcyBnbG9iYWwgbG9va3VwXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICAicmVjdXJzZT1mYWxzZVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgIltodHRwOi8vd3d3LmV4YW1wbGUuY29tL2lnbm9yZXBhcmVudF1cbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICIjIGRpZmZlcmVudCBwcm9qZWN0OiBpZ25vcmUgcGFyZW50IGRpciBjb25m
aWdcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJpZ25vcmVfcGFyZW50cz10cnVlXG4iCiAg
ICAgICAgICAgICAgICAgICAgICAgICAiWy9iL11cbiIKICAgICAgICAgICAgICAgICAgICAgICAg
ICJjaGVja19zaWduYXR1cmVzPXJlcXVpcmVcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICIj
IHRlc3QgdHJhaWxpbmcgLyBtYXRjaGluZyB3aXRoIG5vIGNoaWxkcmVuXG4iCkBAIC03Nyw3ICs3
Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiIyB0ZXN0IHRyYWlsaW5nIC8gbWF0Y2hp
bmdcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICJbL2EvKl1cbiIKICAgICAgICAgICAgICAg
ICAgICAgICAgICIjc3ViZGlycyB3aWxsIG1hdGNoIGJ1dCBub3QgdGhlIHBhcmVudFxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAgInJlY3Vyc2U9RmFsc2VcbiIKICAgICAgICAgICAgICAgICAg
ICAgICAgICJbL2EvY11cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19zaWduYXR1
cmVzPWlnbm9yZVxuIgogICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RfY29tbWl0PWJ6cmxp
Yi50ZXN0cy50ZXN0X2NvbmZpZy5wb3N0X2NvbW1pdFxuIgpAQCAtNTM1LDU4ICs1MzQsNjYgQEAK
ICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZ2xvYmFsX2NvbmZpZywgY29uZmln
Lkdsb2JhbENvbmZpZykpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhnbG9iYWxfY29uZmlnIGlz
IG15X2NvbmZpZy5fZ2V0X2dsb2JhbF9jb25maWcoKSkKIAotICAgIGRlZiB0ZXN0X19nZXRfc2Vj
dGlvbl9ub19tYXRjaChzZWxmKToKKyAgICBkZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3NlY3Rpb25z
X25vX21hdGNoKHNlbGYpOgogICAgICAgICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCcvJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0
X3NlY3Rpb24oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc2VsZi5teV9sb2NhdGlv
bl9jb25maWcuX2dldF9tYXRjaGluZ19zZWN0aW9ucygpKQogICAgICAgICAKLSAgICBkZWYgdGVz
dF9fZ2V0X3NlY3Rpb25fZXhhY3Qoc2VsZik6CisgICAgZGVmIHRlc3RfX2dldF9tYXRjaGluZ19z
ZWN0aW9uc19leGFjdChzZWxmKToKICAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnaHR0
cDovL3d3dy5leGFtcGxlLmNvbScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly93
d3cuZXhhbXBsZS5jb20nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRp
b25fY29uZmlnLl9nZXRfc2VjdGlvbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20nLCAnJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKICAgIAotICAg
IGRlZiB0ZXN0X19nZXRfc2VjdGlvbl9zdWZmaXhfZG9lc19ub3Qoc2VsZik6CisgICAgZGVmIHRl
c3RfX2dldF9tYXRjaGluZ19zZWN0aW9uc19zdWZmaXhfZG9lc19ub3Qoc2VsZik6CiAgICAgICAg
IHNlbGYuZ2V0X2JyYW5jaF9jb25maWcoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20tY29tJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0
X3NlY3Rpb24oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc2VsZi5teV9sb2NhdGlv
bl9jb25maWcuX2dldF9tYXRjaGluZ19zZWN0aW9ucygpKQogCi0gICAgZGVmIHRlc3RfX2dldF9z
ZWN0aW9uX3N1YmRpcl9yZWN1cnNpdmUoc2VsZik6CisgICAgZGVmIHRlc3RfX2dldF9tYXRjaGlu
Z19zZWN0aW9uc19zdWJkaXJfcmVjdXJzaXZlKHNlbGYpOgogICAgICAgICBzZWxmLmdldF9icmFu
Y2hfY29uZmlnKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2NvbScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfc2VjdGlvbigpKQotCi0gICAgZGVmIHRl
c3RfX2dldF9zZWN0aW9uX3N1YmRpcl9tYXRjaGVzKHNlbGYpOgotICAgICAgICBzZWxmLmdldF9i
cmFuY2hfY29uZmlnKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL3VzZWdsb2JhbCcpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFsJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X3NlY3Rp
b24oKSkKLQotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl9zdWJkaXJfbm9ucmVjdXJzaXZlKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20n
LCAnY29tJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29u
ZmlnLl9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKKworICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hp
bmdfc2VjdGlvbnNfc3ViZGlyX21hdGNoZXMoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2JyYW5j
aF9jb25maWcoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vaWdub3JlcGFyZW50JykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChbKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2lnbm9yZXBhcmVudCcs
ICcnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9sb2NhdGlvbl9jb25maWcu
X2dldF9tYXRjaGluZ19zZWN0aW9ucygpKQorCisgICAgZGVmIHRlc3RfX2dldF9tYXRjaGluZ19z
ZWN0aW9uc19zdWJkaXJfbm9ucmVjdXJzaXZlKHNlbGYpOgogICAgICAgICBzZWxmLmdldF9icmFu
Y2hfY29uZmlnKAotICAgICAgICAgICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFs
L2NoaWxkYnJhbmNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL3d3dy5leGFt
cGxlLmNvbScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9sb2NhdGlvbl9jb25m
aWcuX2dldF9zZWN0aW9uKCkpCisgICAgICAgICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9p
Z25vcmVwYXJlbnQvY2hpbGRicmFuY2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20vaWdub3JlcGFyZW50JywgJ2NoaWxkYnJhbmNoJyldLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfbWF0Y2hp
bmdfc2VjdGlvbnMoKSkKIAotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl9zdWJkaXJfdHJhaWxp
bmdfc2xhc2goc2VsZik6CisgICAgZGVmIHRlc3RfX2dldF9tYXRjaGluZ19zZWN0aW9uc19zdWJk
aXJfdHJhaWxpbmdfc2xhc2goc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25maWco
Jy9iJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2IvJywgc2VsZi5teV9sb2NhdGlvbl9j
b25maWcuX2dldF9zZWN0aW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnL2IvJywg
JycpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5f
Z2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKLSAgICBkZWYgdGVzdF9fZ2V0X3NlY3Rpb25fc3Vi
ZGlyX2NoaWxkKHNlbGYpOgorICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfc3Vi
ZGlyX2NoaWxkKHNlbGYpOgogICAgICAgICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCcvYS9mb28n
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvYS8qJywgc2VsZi5teV9sb2NhdGlvbl9jb25m
aWcuX2dldF9zZWN0aW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnL2EvKicsICcn
KSwgKCcvYS8nLCAnZm9vJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9j
YXRpb25fY29uZmlnLl9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAotICAgIGRlZiB0ZXN0X19n
ZXRfc2VjdGlvbl9zdWJkaXJfY2hpbGRfY2hpbGQoc2VsZik6CisgICAgZGVmIHRlc3RfX2dldF9t
YXRjaGluZ19zZWN0aW9uc19zdWJkaXJfY2hpbGRfY2hpbGQoc2VsZik6CiAgICAgICAgIHNlbGYu
Z2V0X2JyYW5jaF9jb25maWcoJy9hL2Zvby9iYXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcvYS8nLCBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X3NlY3Rpb24oKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChbKCcvYS8qJywgJ2JhcicpLCAoJy9hLycsICdmb28vYmFyJyldLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfbWF0
Y2hpbmdfc2VjdGlvbnMoKSkKIAotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl90cmFpbGluZ19z
bGFzaF93aXRoX2NoaWxkcmVuKHNlbGYpOgorICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2Vj
dGlvbnNfdHJhaWxpbmdfc2xhc2hfd2l0aF9jaGlsZHJlbihzZWxmKToKICAgICAgICAgc2VsZi5n
ZXRfYnJhbmNoX2NvbmZpZygnL2EvJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2EvJywg
c2VsZi5teV9sb2NhdGlvbl9jb25maWcuX2dldF9zZWN0aW9uKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoWygnL2EvJywgJycpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15
X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKLSAgICBkZWYgdGVz
dF9fZ2V0X3NlY3Rpb25fZXhwbGljaXRfb3Zlcl9nbG9iKHNlbGYpOgorICAgIGRlZiB0ZXN0X19n
ZXRfbWF0Y2hpbmdfc2VjdGlvbnNfZXhwbGljaXRfb3Zlcl9nbG9iKHNlbGYpOgorICAgICAgICAj
IFhYWDogMjAwNi0wOS0wOCBqYW1lc2gKKyAgICAgICAgIyBUaGlzIHRlc3Qgb25seSBwYXNzZXMg
YmVjYXVzZSBvcmQoJ2MnKSA+IG9yZCgnKicpLiAgSWYgdGhlcmUKKyAgICAgICAgIyB3YXMgYSBj
b25maWcgc2VjdGlvbiBmb3IgJy9hLz8nLCBpdCB3b3VsZCBnZXQgcHJlY2VkZW5jZQorICAgICAg
ICAjIG92ZXIgJy9hL2MnLgogICAgICAgICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCcvYS9jJykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2EvYycsIHNlbGYubXlfbG9jYXRpb25fY29uZmln
Ll9nZXRfc2VjdGlvbigpKQotCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnL2EvYycsICcn
KSwgKCcvYS8qJywgJycpLCAoJy9hLycsICdjJyldLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAogICAg
IGRlZiB0ZXN0X2xvY2F0aW9uX3dpdGhvdXRfdXNlcm5hbWUoc2VsZik6Ci0gICAgICAgIHNlbGYu
Z2V0X2JyYW5jaF9jb25maWcoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFsJykKKyAg
ICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pZ25v
cmVwYXJlbnQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnRXJpayBCXHUwMGU1Z2ZvcnMg
PGVyaWtAYmFnZm9ycy5udT4nLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfY29u
ZmlnLnVzZXJuYW1lKCkpCiAKQEAgLTY0MSw3ICs2NDgsMTggQEAKICAgICAgICAgc2VsZi5nZXRf
YnJhbmNoX2NvbmZpZygnL2EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdsb2NhbCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9jb25maWcuZ2V0X3VzZXJfb3B0aW9uKCd1
c2VyX2xvY2FsX29wdGlvbicpKQotICAgICAgICAKKworICAgIGRlZiB0ZXN0X2dldF91c2VyX29w
dGlvbl9ub25fcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9icmFuY2hfY29uZmln
KCcvYS9jJykKKyAgICAgICAgIyBEb2Vzbid0IHNlZSB2YWx1ZXMgZnJvbSAiL2EvIiBjb25maWc6
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLm15X2NvbmZpZy5nZXRfdXNlcl9vcHRpb24oJ3VzZXJfbG9jYWxfb3B0aW9uJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj
dXJzZT1GYWxzZSkpCisgICAgICAgICMgU2VlcyB2YWx1ZXMgZnJvbSBnbG9iYWwgY29uZmlnOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd2aW0nLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYubXlfY29uZmlnLmdldF91c2VyX29wdGlvbignZWRpdG9yJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzZT1GYWxzZSkp
CisKICAgICBkZWYgdGVzdF9wb3N0X2NvbW1pdF9kZWZhdWx0KHNlbGYpOgogICAgICAgICBzZWxm
LmdldF9icmFuY2hfY29uZmlnKCcvYS9jJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnpy
bGliLnRlc3RzLnRlc3RfY29uZmlnLnBvc3RfY29tbWl0JywKCg==

# revision id: james at jamesh.id.au-20061002111054-31fd65f92aeb30e4
# sha1: 837d85b686858f5c4978d9e4b462d228f8dbd8e5
# inventory sha1: 0071fbe17af6f06bcbe8ff99e414b4a55b8bd83e
# parent ids:
#   james at jamesh.id.au-20060918025905-aa20656f1b0b34a0
#   pqm at pqm.ubuntu.com-20061002004310-6e09ddd7fd28f71c
# properties:
#   branch-nick: bzr.locationconfig

# message:
#   make _get_matching_sections() return (section, extra_path) tuples, and adjust other code to match
# committer: James Henstridge <james at jamesh.id.au>
# date: Mon 2006-09-18 10:59:05.749000072 +0800

=== modified file bzrlib/config.py // encoding:base64
LS0tIGJ6cmxpYi9jb25maWcucHkKKysrIGJ6cmxpYi9jb25maWcucHkKQEAgLTExNCwxMyArMTE0
LDEzIEBACiAgICAgZGVmIF9nZXRfc2lnbmluZ19wb2xpY3koc2VsZik6CiAgICAgICAgICIiIlRl
bXBsYXRlIG1ldGhvZCB0byBvdmVycmlkZSBzaWduYXR1cmUgY3JlYXRpb24gcG9saWN5LiIiIgog
Ci0gICAgZGVmIF9nZXRfdXNlcl9vcHRpb24oc2VsZiwgb3B0aW9uX25hbWUpOgorICAgIGRlZiBf
Z2V0X3VzZXJfb3B0aW9uKHNlbGYsIG9wdGlvbl9uYW1lLCByZWN1cnNlPVRydWUpOgogICAgICAg
ICAiIiJUZW1wbGF0ZSBtZXRob2QgdG8gcHJvdmlkZSBhIHVzZXIgb3B0aW9uLiIiIgogICAgICAg
ICByZXR1cm4gTm9uZQogCi0gICAgZGVmIGdldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFt
ZSk6CisgICAgZGVmIGdldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFtZSwgcmVjdXJzZT1U
cnVlKToKICAgICAgICAgIiIiR2V0IGEgZ2VuZXJpYyBvcHRpb24gLSBubyBzcGVjaWFsIHByb2Nl
c3MsIG5vIGRlZmF1bHQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9nZXRfdXNlcl9vcHRpb24o
b3B0aW9uX25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfdXNlcl9vcHRpb24ob3B0aW9u
X25hbWUsIHJlY3Vyc2U9cmVjdXJzZSkKIAogICAgIGRlZiBncGdfc2lnbmluZ19jb21tYW5kKHNl
bGYpOgogICAgICAgICAiIiJXaGF0IHByb2dyYW0gc2hvdWxkIGJlIHVzZWQgdG8gc2lnbiBzaWdu
YXR1cmVzPyIiIgpAQCAtMjU1LDYgKzI1NSwxOCBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3Jz
LlBhcnNlQ29uZmlnRXJyb3IoZS5lcnJvcnMsIGUuY29uZmlnLmZpbGVuYW1lKQogICAgICAgICBy
ZXR1cm4gc2VsZi5fcGFyc2VyCiAKKyAgICBkZWYgX2dldF9tYXRjaGluZ19zZWN0aW9ucyhzZWxm
KToKKyAgICAgICAgIiIiUmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiAoc2VjdGlvbl9uYW1lLCBl
eHRyYV9wYXRoKSBwYWlycy4KKworICAgICAgICBJZiB0aGUgc2VjdGlvbiBjb250YWlucyBpbmhl
cml0ZWQgY29uZmlndXJhdGlvbiwgZXh0cmFfcGF0aCBpcworICAgICAgICBhIHN0cmluZyBjb250
YWluaW5nIHRoZSBhZGRpdGlvbmFsIHBhdGggY29tcG9uZW50cy4KKyAgICAgICAgIiIiCisgICAg
ICAgIHNlY3Rpb24gPSBzZWxmLl9nZXRfc2VjdGlvbigpCisgICAgICAgIGlmIHNlY3Rpb24gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gWyhzZWN0aW9uLCAnJyldCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gW10KKwogICAgIGRlZiBfZ2V0X3NlY3Rpb24oc2VsZik6
CiAgICAgICAgICIiIk92ZXJyaWRlIHRoaXMgdG8gZGVmaW5lIHRoZSBzZWN0aW9uIHVzZWQgYnkg
dGhlIGNvbmZpZy4iIiIKICAgICAgICAgcmV0dXJuICJERUZBVUxUIgpAQCAtMjc1LDEyICsyODcs
MTYgQEAKICAgICAgICAgIiIiR2V0IHRoZSB1c2VyIGlkIGZyb20gdGhlICdlbWFpbCcga2V5IGlu
IHRoZSBjdXJyZW50IHNlY3Rpb24uIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfdXNlcl9v
cHRpb24oJ2VtYWlsJykKIAotICAgIGRlZiBfZ2V0X3VzZXJfb3B0aW9uKHNlbGYsIG9wdGlvbl9u
YW1lKToKKyAgICBkZWYgX2dldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFtZSwgcmVjdXJz
ZT1UcnVlKToKICAgICAgICAgIiIiU2VlIENvbmZpZy5fZ2V0X3VzZXJfb3B0aW9uLiIiIgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3BhcnNlcigpLmdldF92YWx1
ZShzZWxmLl9nZXRfc2VjdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uX25hbWUpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAg
ICAgICAgZm9yIChzZWN0aW9uLCBleHRyYV9wYXRoKSBpbiBzZWxmLl9nZXRfbWF0Y2hpbmdfc2Vj
dGlvbnMoKToKKyAgICAgICAgICAgIGlmIG5vdCByZWN1cnNlIGFuZCBleHRyYV9wYXRoICE9ICcn
OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX2dldF9wYXJzZXIoKS5nZXRfdmFsdWUoc2VjdGlvbiwgb3B0aW9u
X25hbWUpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFz
cworICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfZ3Bn
X3NpZ25pbmdfY29tbWFuZChzZWxmKToKQEAgLTQxMCwyNiArNDI2LDE5IEBACiAgICAgICAgICAg
ICAjIGlmIHNlY3Rpb24gaXMgbG9uZ2VyLCBubyBtYXRjaC4KICAgICAgICAgICAgIGlmIGxlbihz
ZWN0aW9uX25hbWVzKSA+IGxlbihsb2NhdGlvbl9uYW1lcyk6CiAgICAgICAgICAgICAgICAgY29u
dGludWUKLSAgICAgICAgICAgICMgaWYgcGF0aCBpcyBsb25nZXIsIGFuZCByZWN1cnNlIGlzIG5v
dCB0cnVlLCBubyBtYXRjaAotICAgICAgICAgICAgaWYgbGVuKHNlY3Rpb25fbmFtZXMpIDwgbGVu
KGxvY2F0aW9uX25hbWVzKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLl9nZXRfcGFyc2VyKClbc2VjdGlvbl0uYXNfYm9vbCgncmVjdXJzZScp
OgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBleGNl
cHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIG1hdGNo
ZXMuYXBwZW5kKChsZW4oc2VjdGlvbl9uYW1lcyksIHNlY3Rpb24pKQorICAgICAgICAgICAgbWF0
Y2hlcy5hcHBlbmQoKGxlbihzZWN0aW9uX25hbWVzKSwgc2VjdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnLycuam9pbihsb2NhdGlvbl9uYW1lc1tsZW4oc2VjdGlvbl9uYW1lcyk6
XSkpKQogICAgICAgICBtYXRjaGVzLnNvcnQocmV2ZXJzZT1UcnVlKQotICAgICAgICByZXR1cm4g
W3NlY3Rpb24gZm9yIChsZW5ndGgsIHNlY3Rpb24pIGluIG1hdGNoZXNdCi0KLSAgICBkZWYgX2dl
dF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFtZSk6Ci0gICAgICAgICIiIlNlZSBDb25maWcu
X2dldF91c2VyX29wdGlvbi4iIiIKLSAgICAgICAgZm9yIHNlY3Rpb24gaW4gc2VsZi5fZ2V0X21h
dGNoaW5nX3NlY3Rpb25zKCk6CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgZm9yIChs
ZW5ndGgsIHNlY3Rpb24sIGV4dHJhX3BhdGgpIGluIG1hdGNoZXM6CisgICAgICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoKHNlY3Rpb24sIGV4dHJhX3BhdGgpKQorICAgICAgICAgICAgIyBzaG91bGQg
d2Ugc3RvcCBsb29raW5nIGZvciBwYXJlbnQgY29uZmlncyBoZXJlPwogICAgICAgICAgICAgdHJ5
OgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfcGFyc2VyKCkuZ2V0X3ZhbHVlKHNl
Y3Rpb24sIG9wdGlvbl9uYW1lKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2dldF9wYXJzZXIo
KVtzZWN0aW9uXS5hc19ib29sKCdpZ25vcmVfcGFyZW50cycpOgorICAgICAgICAgICAgICAgICAg
ICBicmVhawogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIHBh
c3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVy
biBzZWN0aW9ucwogCiAgICAgZGVmIHNldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb24sIHZhbHVl
KToKICAgICAgICAgIiIiU2F2ZSBvcHRpb24gYW5kIGl0cyB2YWx1ZSBpbiB0aGUgY29uZmlndXJh
dGlvbi4iIiIKQEAgLTUxOCwxMCArNTI3LDEwIEBACiAgICAgICAgICIiIlNlZSBDb25maWcuX2dl
dF9zaWduaW5nX3BvbGljeS4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9iZXN0X3ZhbHVl
KCdfZ2V0X3NpZ25pbmdfcG9saWN5JykKIAotICAgIGRlZiBfZ2V0X3VzZXJfb3B0aW9uKHNlbGYs
IG9wdGlvbl9uYW1lKToKKyAgICBkZWYgX2dldF91c2VyX29wdGlvbihzZWxmLCBvcHRpb25fbmFt
ZSwgcmVjdXJzZT1UcnVlKToKICAgICAgICAgIiIiU2VlIENvbmZpZy5fZ2V0X3VzZXJfb3B0aW9u
LiIiIgogICAgICAgICBmb3Igc291cmNlIGluIHNlbGYub3B0aW9uX3NvdXJjZXM6Ci0gICAgICAg
ICAgICB2YWx1ZSA9IHNvdXJjZSgpLl9nZXRfdXNlcl9vcHRpb24ob3B0aW9uX25hbWUpCisgICAg
ICAgICAgICB2YWx1ZSA9IHNvdXJjZSgpLl9nZXRfdXNlcl9vcHRpb24ob3B0aW9uX25hbWUsIHJl
Y3Vyc2U9cmVjdXJzZSkKICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgogICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZQogICAgICAgICByZXR1cm4gTm9uZQoK

=== modified file bzrlib/tests/test_config.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfY29u
ZmlnLnB5CkBAIC02NCw5ICs2NCw5IEBACiBzYW1wbGVfYnJhbmNoZXNfdGV4dCA9ICgiW2h0dHA6
Ly93d3cuZXhhbXBsZS5jb21dXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiIyBUb3AgbGV2
ZWwgcG9saWN5XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiZW1haWw9Um9iZXJ0IENvbGxp
bnMgPHJvYmVydGNAZXhhbXBsZS5vcmc+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAiW2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFsXVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAgIiMgZGlmZmVyZW50IHByb2plY3QsIGZvcmNlcyBnbG9iYWwgbG9va3VwXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICAicmVjdXJzZT1mYWxzZVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgIltodHRwOi8vd3d3LmV4YW1wbGUuY29tL2lnbm9yZXBhcmVudF1cbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICIjIGRpZmZlcmVudCBwcm9qZWN0OiBpZ25vcmUgcGFyZW50IGRpciBjb25m
aWdcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJpZ25vcmVfcGFyZW50cz10cnVlXG4iCiAg
ICAgICAgICAgICAgICAgICAgICAgICAiWy9iL11cbiIKICAgICAgICAgICAgICAgICAgICAgICAg
ICJjaGVja19zaWduYXR1cmVzPXJlcXVpcmVcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICIj
IHRlc3QgdHJhaWxpbmcgLyBtYXRjaGluZyB3aXRoIG5vIGNoaWxkcmVuXG4iCkBAIC03Nyw3ICs3
Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiIyB0ZXN0IHRyYWlsaW5nIC8gbWF0Y2hp
bmdcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICJbL2EvKl1cbiIKICAgICAgICAgICAgICAg
ICAgICAgICAgICIjc3ViZGlycyB3aWxsIG1hdGNoIGJ1dCBub3QgdGhlIHBhcmVudFxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAgInJlY3Vyc2U9RmFsc2VcbiIKICAgICAgICAgICAgICAgICAg
ICAgICAgICJbL2EvY11cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19zaWduYXR1
cmVzPWlnbm9yZVxuIgogICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RfY29tbWl0PWJ6cmxp
Yi50ZXN0cy50ZXN0X2NvbmZpZy5wb3N0X2NvbW1pdFxuIgpAQCAtNTQxLDcgKzU0MCw3IEBACiAg
ICAgICAgIAogICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfZXhhY3Qoc2VsZik6
CiAgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25maWcoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20n
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnaHR0cDovL3d3dy5leGFtcGxlLmNvbSddLAor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nLCAnJyld
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRf
bWF0Y2hpbmdfc2VjdGlvbnMoKSkKICAgIAogICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2Vj
dGlvbnNfc3VmZml4X2RvZXNfbm90KHNlbGYpOgpAQCAtNTUwLDM5ICs1NDksMzggQEAKIAogICAg
IGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfc3ViZGlyX3JlY3Vyc2l2ZShzZWxmKToK
ICAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9j
b20nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnaHR0cDovL3d3dy5leGFtcGxlLmNvbSdd
LAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nLCAn
Y29tJyldLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmln
Ll9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAogICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdf
c2VjdGlvbnNfc3ViZGlyX21hdGNoZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9j
b25maWcoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFsJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChbJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFsJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nXSwKKyAgICAgICAgc2Vs
Zi5nZXRfYnJhbmNoX2NvbmZpZygnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pZ25vcmVwYXJlbnQn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vaWdu
b3JlcGFyZW50JywgJycpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0
aW9uX2NvbmZpZy5fZ2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKICAgICBkZWYgdGVzdF9fZ2V0
X21hdGNoaW5nX3NlY3Rpb25zX3N1YmRpcl9ub25yZWN1cnNpdmUoc2VsZik6CiAgICAgICAgIHNl
bGYuZ2V0X2JyYW5jaF9jb25maWcoCi0gICAgICAgICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNv
bS91c2VnbG9iYWwvY2hpbGRicmFuY2gnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnaHR0
cDovL3d3dy5leGFtcGxlLmNvbSddLAorICAgICAgICAgICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5j
b20vaWdub3JlcGFyZW50L2NoaWxkYnJhbmNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChb
KCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2lnbm9yZXBhcmVudCcsICdjaGlsZGJyYW5jaCcpXSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X21h
dGNoaW5nX3NlY3Rpb25zKCkpCiAKICAgICBkZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3NlY3Rpb25z
X3N1YmRpcl90cmFpbGluZ19zbGFzaChzZWxmKToKICAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2Nv
bmZpZygnL2InKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnL2IvJ10sCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoWygnL2IvJywgJycpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKICAgICBk
ZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3NlY3Rpb25zX3N1YmRpcl9jaGlsZChzZWxmKToKICAgICAg
ICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnL2EvZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChbJy9hLyonLCAnL2EvJ10sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnL2EvKics
ICcnKSwgKCcvYS8nLCAnZm9vJyldLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlf
bG9jYXRpb25fY29uZmlnLl9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAogICAgIGRlZiB0ZXN0
X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfc3ViZGlyX2NoaWxkX2NoaWxkKHNlbGYpOgogICAgICAg
ICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCcvYS9mb28vYmFyJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChbJy9hLyddLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJy9hLyonLCAnYmFy
JyksICgnL2EvJywgJ2Zvby9iYXInKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5t
eV9sb2NhdGlvbl9jb25maWcuX2dldF9tYXRjaGluZ19zZWN0aW9ucygpKQogCiAgICAgZGVmIHRl
c3RfX2dldF9tYXRjaGluZ19zZWN0aW9uc190cmFpbGluZ19zbGFzaF93aXRoX2NoaWxkcmVuKHNl
bGYpOgogICAgICAgICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCcvYS8nKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKFsnL2EvJ10sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnL2EvJywg
JycpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5f
Z2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKICAgICBkZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3Nl
Y3Rpb25zX2V4cGxpY2l0X292ZXJfZ2xvYihzZWxmKToKQEAgLTU5MSwxMiArNTg5LDExIEBACiAg
ICAgICAgICMgd2FzIGEgY29uZmlnIHNlY3Rpb24gZm9yICcvYS8/JywgaXQgd291bGQgZ2V0IHBy
ZWNlZGVuY2UKICAgICAgICAgIyBvdmVyICcvYS9jJy4KICAgICAgICAgc2VsZi5nZXRfYnJhbmNo
X2NvbmZpZygnL2EvYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWycvYS9jJywgJy9hLyon
LCAnL2EvJ10sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnL2EvYycsICcnKSwgKCcvYS8q
JywgJycpLCAoJy9hLycsICdjJyldLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlf
bG9jYXRpb25fY29uZmlnLl9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAotCiAgICAgZGVmIHRl
c3RfbG9jYXRpb25fd2l0aG91dF91c2VybmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5nZXRfYnJh
bmNoX2NvbmZpZygnaHR0cDovL3d3dy5leGFtcGxlLmNvbS91c2VnbG9iYWwnKQorICAgICAgICBz
ZWxmLmdldF9icmFuY2hfY29uZmlnKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2lnbm9yZXBhcmVu
dCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdFcmlrIEJcdTAwZTVnZm9ycyA8ZXJpa0Bi
YWdmb3JzLm51PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9jb25maWcudXNl
cm5hbWUoKSkKIApAQCAtNjUxLDcgKzY0OCwxOCBAQAogICAgICAgICBzZWxmLmdldF9icmFuY2hf
Y29uZmlnKCcvYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2xvY2FsJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLm15X2NvbmZpZy5nZXRfdXNlcl9vcHRpb24oJ3VzZXJfbG9j
YWxfb3B0aW9uJykpCi0gICAgICAgIAorCisgICAgZGVmIHRlc3RfZ2V0X3VzZXJfb3B0aW9uX25v
bl9yZWN1cnNpdmUoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25maWcoJy9hL2Mn
KQorICAgICAgICAjIERvZXNuJ3Qgc2VlIHZhbHVlcyBmcm9tICIvYS8iIGNvbmZpZzoKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
bXlfY29uZmlnLmdldF91c2VyX29wdGlvbigndXNlcl9sb2NhbF9vcHRpb24nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNlPUZh
bHNlKSkKKyAgICAgICAgIyBTZWVzIHZhbHVlcyBmcm9tIGdsb2JhbCBjb25maWc6CisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ3ZpbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5t
eV9jb25maWcuZ2V0X3VzZXJfb3B0aW9uKCdlZGl0b3InLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNlPUZhbHNlKSkKKwogICAg
IGRlZiB0ZXN0X3Bvc3RfY29tbWl0X2RlZmF1bHQoc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0X2Jy
YW5jaF9jb25maWcoJy9hL2MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdienJsaWIudGVz
dHMudGVzdF9jb25maWcucG9zdF9jb21taXQnLAoK

# revision id: james at jamesh.id.au-20060918025905-aa20656f1b0b34a0
# sha1: bb5e826b1cfaf27cb78e87a4658d7bc60d457703
# inventory sha1: c56709f16364ad6577324bef4ef43885c12d4d66
# parent ids:
#   james at jamesh.id.au-20060908043002-c7f13407e7d4109c
# properties:
#   branch-nick: bzr.locationconfig

# message:
#   make test break again
# committer: James Henstridge <james at jamesh.id.au>
# date: Fri 2006-09-08 12:30:02.898999929 +0800

=== modified file bzrlib/tests/test_config.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfY29u
ZmlnLnB5CkBAIC01OTYsNyArNTk2LDcgQEAKIAogCiAgICAgZGVmIHRlc3RfbG9jYXRpb25fd2l0
aG91dF91c2VybmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnL2Iv
JykKKyAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnaHR0cDovL3d3dy5leGFtcGxlLmNv
bS91c2VnbG9iYWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnRXJpayBCXHUwMGU1Z2Zv
cnMgPGVyaWtAYmFnZm9ycy5udT4nLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlf
Y29uZmlnLnVzZXJuYW1lKCkpCiAKCg==

# revision id: james at jamesh.id.au-20060908043002-c7f13407e7d4109c
# sha1: 280af3599bf2ffeeae26a825da65c057faf1f400
# inventory sha1: fa00b1c04d5b16d16ec4662cc825f891452a1c45
# parent ids:
#   james at jamesh.id.au-20060908031106-1b304673906dcf8f
# properties:
#   branch-nick: bzr.locationconfig

# message:
#   first go at making location config lookup recursive
# committer: James Henstridge <james at jamesh.id.au>
# date: Fri 2006-09-08 11:11:06.072000027 +0800

=== modified file bzrlib/config.py // encoding:base64
LS0tIGJ6cmxpYi9jb25maWcucHkKKysrIGJ6cmxpYi9jb25maWcucHkKQEAgLTI4MSw3ICsyODEs
NyBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9wYXJzZXIoKS5nZXRfdmFsdWUoc2Vs
Zi5fZ2V0X3NlY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbl9uYW1lKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAg
ICAgICBwYXNzCisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9ncGdfc2lnbmlu
Z19jb21tYW5kKHNlbGYpOgogICAgICAgICAiIiJTZWUgQ29uZmlnLmdwZ19zaWduaW5nX2NvbW1h
bmQuIiIiCkBAIC0zNzksMTMgKzM3OSw4IEBACiAgICAgICAgICAgICBsb2NhdGlvbiA9IHVybHV0
aWxzLmxvY2FsX3BhdGhfZnJvbV91cmwobG9jYXRpb24pCiAgICAgICAgIHNlbGYubG9jYXRpb24g
PSBsb2NhdGlvbgogCi0gICAgZGVmIF9nZXRfc2VjdGlvbihzZWxmKToKLSAgICAgICAgIiIiR2V0
IHRoZSBzZWN0aW9uIHdlIHNob3VsZCBsb29rIGluIGZvciBjb25maWcgaXRlbXMuCi0KLSAgICAg
ICAgUmV0dXJucyBOb25lIGlmIG5vbmUgZXhpc3RzLiAKLSAgICAgICAgVE9ETzogcGVyaGFwcyBy
ZXR1cm4gYSBOdWxsU2VjdGlvbiB0aGF0IHRodW5rcyB0aHJvdWdoIHRvIHRoZSAKLSAgICAgICAg
ICAgICAgZ2xvYmFsIGNvbmZpZy4KLSAgICAgICAgIiIiCisgICAgZGVmIF9nZXRfbWF0Y2hpbmdf
c2VjdGlvbnMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBvcmRlcmVkIGxpc3Qgb2Ygc2Vj
dGlvbiBuYW1lcyBtYXRjaGluZyB0aGlzIGxvY2F0aW9uLiIiIgogICAgICAgICBzZWN0aW9ucyA9
IHNlbGYuX2dldF9wYXJzZXIoKQogICAgICAgICBsb2NhdGlvbl9uYW1lcyA9IHNlbGYubG9jYXRp
b24uc3BsaXQoJy8nKQogICAgICAgICBpZiBzZWxmLmxvY2F0aW9uLmVuZHN3aXRoKCcvJyk6CkBA
IC00MjMsMTAgKzQxOCwxOCBAQAogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAg
ICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoKGxlbihz
ZWN0aW9uX25hbWVzKSwgc2VjdGlvbikpCi0gICAgICAgIGlmIG5vdCBsZW4obWF0Y2hlcyk6Ci0g
ICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBtYXRjaGVzLnNvcnQocmV2ZXJzZT1UcnVl
KQotICAgICAgICByZXR1cm4gbWF0Y2hlc1swXVsxXQorICAgICAgICByZXR1cm4gW3NlY3Rpb24g
Zm9yIChsZW5ndGgsIHNlY3Rpb24pIGluIG1hdGNoZXNdCisKKyAgICBkZWYgX2dldF91c2VyX29w
dGlvbihzZWxmLCBvcHRpb25fbmFtZSk6CisgICAgICAgICIiIlNlZSBDb25maWcuX2dldF91c2Vy
X29wdGlvbi4iIiIKKyAgICAgICAgZm9yIHNlY3Rpb24gaW4gc2VsZi5fZ2V0X21hdGNoaW5nX3Nl
Y3Rpb25zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X2dldF9wYXJzZXIoKS5nZXRfdmFsdWUoc2VjdGlvbiwgb3B0aW9uX25hbWUpCisgICAgICAgICAg
ICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBzZXRfdXNlcl9vcHRpb24oc2VsZiwg
b3B0aW9uLCB2YWx1ZSk6CiAgICAgICAgICIiIlNhdmUgb3B0aW9uIGFuZCBpdHMgdmFsdWUgaW4g
dGhlIGNvbmZpZ3VyYXRpb24uIiIiCgo=

=== modified file bzrlib/tests/test_config.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfY29u
ZmlnLnB5CkBAIC01MzUsNTggKzUzNSw2OCBAQAogICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNp
bnN0YW5jZShnbG9iYWxfY29uZmlnLCBjb25maWcuR2xvYmFsQ29uZmlnKSkKICAgICAgICAgc2Vs
Zi5mYWlsVW5sZXNzKGdsb2JhbF9jb25maWcgaXMgbXlfY29uZmlnLl9nZXRfZ2xvYmFsX2NvbmZp
ZygpKQogCi0gICAgZGVmIHRlc3RfX2dldF9zZWN0aW9uX25vX21hdGNoKHNlbGYpOgorICAgIGRl
ZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfbm9fbWF0Y2goc2VsZik6CiAgICAgICAgIHNl
bGYuZ2V0X2JyYW5jaF9jb25maWcoJy8nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUs
IHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfc2VjdGlvbigpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKFtdLCBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X21hdGNoaW5nX3NlY3Rp
b25zKCkpCiAgICAgICAgIAotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl9leGFjdChzZWxmKToK
KyAgICBkZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3NlY3Rpb25zX2V4YWN0KHNlbGYpOgogICAgICAg
ICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbScsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5teV9sb2NhdGlvbl9jb25maWcuX2dldF9zZWN0aW9uKCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydodHRwOi8vd3d3LmV4YW1wbGUuY29tJ10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9sb2NhdGlvbl9jb25maWcuX2dldF9tYXRjaGlu
Z19zZWN0aW9ucygpKQogICAgCi0gICAgZGVmIHRlc3RfX2dldF9zZWN0aW9uX3N1ZmZpeF9kb2Vz
X25vdChzZWxmKToKKyAgICBkZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3NlY3Rpb25zX3N1ZmZpeF9k
b2VzX25vdChzZWxmKToKICAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnaHR0cDovL3d3
dy5leGFtcGxlLmNvbS1jb20nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYu
bXlfbG9jYXRpb25fY29uZmlnLl9nZXRfc2VjdGlvbigpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFtdLCBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X21hdGNoaW5nX3NlY3Rpb25zKCkp
CiAKLSAgICBkZWYgdGVzdF9fZ2V0X3NlY3Rpb25fc3ViZGlyX3JlY3Vyc2l2ZShzZWxmKToKKyAg
ICBkZWYgdGVzdF9fZ2V0X21hdGNoaW5nX3NlY3Rpb25zX3N1YmRpcl9yZWN1cnNpdmUoc2VsZik6
CiAgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25maWcoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20v
Y29tJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbScs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9sb2NhdGlvbl9jb25maWcuX2dldF9z
ZWN0aW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydodHRwOi8vd3d3LmV4YW1wbGUu
Y29tJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teV9sb2NhdGlvbl9jb25maWcu
X2dldF9tYXRjaGluZ19zZWN0aW9ucygpKQogCi0gICAgZGVmIHRlc3RfX2dldF9zZWN0aW9uX3N1
YmRpcl9tYXRjaGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNf
c3ViZGlyX21hdGNoZXMoc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25maWcoJ2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20vdXNlZ2xvYmFsJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbS91c2VnbG9iYWwnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfc2VjdGlvbigpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKFsnaHR0cDovL3d3dy5leGFtcGxlLmNvbS91c2VnbG9iYWwnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbSddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfbWF0Y2hpbmdf
c2VjdGlvbnMoKSkKIAotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl9zdWJkaXJfbm9ucmVjdXJz
aXZlKHNlbGYpOgorICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfc3ViZGlyX25v
bnJlY3Vyc2l2ZShzZWxmKToKICAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygKICAgICAg
ICAgICAgICdodHRwOi8vd3d3LmV4YW1wbGUuY29tL3VzZWdsb2JhbC9jaGlsZGJyYW5jaCcpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfc2VjdGlvbigp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnaHR0cDovL3d3dy5leGFtcGxlLmNvbSddLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRfbWF0
Y2hpbmdfc2VjdGlvbnMoKSkKIAotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl9zdWJkaXJfdHJh
aWxpbmdfc2xhc2goc2VsZik6CisgICAgZGVmIHRlc3RfX2dldF9tYXRjaGluZ19zZWN0aW9uc19z
dWJkaXJfdHJhaWxpbmdfc2xhc2goc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25m
aWcoJy9iJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2IvJywgc2VsZi5teV9sb2NhdGlv
bl9jb25maWcuX2dldF9zZWN0aW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWycvYi8n
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0
X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKLSAgICBkZWYgdGVzdF9fZ2V0X3NlY3Rpb25fc3ViZGly
X2NoaWxkKHNlbGYpOgorICAgIGRlZiB0ZXN0X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfc3ViZGly
X2NoaWxkKHNlbGYpOgogICAgICAgICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCcvYS9mb28nKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvYS8qJywgc2VsZi5teV9sb2NhdGlvbl9jb25maWcu
X2dldF9zZWN0aW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWycvYS8qJywgJy9hLydd
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmlnLl9nZXRf
bWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl9zdWJkaXJf
Y2hpbGRfY2hpbGQoc2VsZik6CisgICAgZGVmIHRlc3RfX2dldF9tYXRjaGluZ19zZWN0aW9uc19z
dWJkaXJfY2hpbGRfY2hpbGQoc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0X2JyYW5jaF9jb25maWco
Jy9hL2Zvby9iYXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvYS8nLCBzZWxmLm15X2xv
Y2F0aW9uX2NvbmZpZy5fZ2V0X3NlY3Rpb24oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChb
Jy9hLyddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25fY29uZmln
Ll9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAotICAgIGRlZiB0ZXN0X19nZXRfc2VjdGlvbl90
cmFpbGluZ19zbGFzaF93aXRoX2NoaWxkcmVuKHNlbGYpOgorICAgIGRlZiB0ZXN0X19nZXRfbWF0
Y2hpbmdfc2VjdGlvbnNfdHJhaWxpbmdfc2xhc2hfd2l0aF9jaGlsZHJlbihzZWxmKToKICAgICAg
ICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZpZygnL2EvJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnL2EvJywgc2VsZi5teV9sb2NhdGlvbl9jb25maWcuX2dldF9zZWN0aW9uKCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoWycvYS8nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Lm15X2xvY2F0aW9uX2NvbmZpZy5fZ2V0X21hdGNoaW5nX3NlY3Rpb25zKCkpCiAKLSAgICBkZWYg
dGVzdF9fZ2V0X3NlY3Rpb25fZXhwbGljaXRfb3Zlcl9nbG9iKHNlbGYpOgorICAgIGRlZiB0ZXN0
X19nZXRfbWF0Y2hpbmdfc2VjdGlvbnNfZXhwbGljaXRfb3Zlcl9nbG9iKHNlbGYpOgorICAgICAg
ICAjIFhYWDogMjAwNi0wOS0wOCBqYW1lc2gKKyAgICAgICAgIyBUaGlzIHRlc3Qgb25seSBwYXNz
ZXMgYmVjYXVzZSBvcmQoJ2MnKSA+IG9yZCgnKicpLiAgSWYgdGhlcmUKKyAgICAgICAgIyB3YXMg
YSBjb25maWcgc2VjdGlvbiBmb3IgJy9hLz8nLCBpdCB3b3VsZCBnZXQgcHJlY2VkZW5jZQorICAg
ICAgICAjIG92ZXIgJy9hL2MnLgogICAgICAgICBzZWxmLmdldF9icmFuY2hfY29uZmlnKCcvYS9j
JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2EvYycsIHNlbGYubXlfbG9jYXRpb25fY29u
ZmlnLl9nZXRfc2VjdGlvbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnL2EvYycsICcv
YS8qJywgJy9hLyddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlfbG9jYXRpb25f
Y29uZmlnLl9nZXRfbWF0Y2hpbmdfc2VjdGlvbnMoKSkKIAogCiAgICAgZGVmIHRlc3RfbG9jYXRp
b25fd2l0aG91dF91c2VybmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5nZXRfYnJhbmNoX2NvbmZp
ZygnaHR0cDovL3d3dy5leGFtcGxlLmNvbS91c2VnbG9iYWwnKQorICAgICAgICBzZWxmLmdldF9i
cmFuY2hfY29uZmlnKCcvYi8nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnRXJpayBCXHUw
MGU1Z2ZvcnMgPGVyaWtAYmFnZm9ycy5udT4nLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYubXlfY29uZmlnLnVzZXJuYW1lKCkpCiAKCg==

# revision id: james at jamesh.id.au-20060908031106-1b304673906dcf8f
# sha1: 8c8c290f4c1bae0d712d1718e7b5c09426f56e04
# inventory sha1: ac8be32a9018b3706d1a84cd327403aea9104d2d
# parent ids:
#   pqm at pqm.ubuntu.com-20060908003811-74eab872c372a895
# properties:
#   branch-nick: bzr.locationconfig



More information about the bazaar mailing list