← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~cjwatson/launchpad-buildd/svn-proxy into lp:launchpad-buildd

 

Colin Watson has proposed merging lp:~cjwatson/launchpad-buildd/svn-proxy into lp:launchpad-buildd.

Commit message:
Configure snap proxy settings for Subversion.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)
Related bugs:
  Bug #1668358 in launchpad-buildd: "Snap Builds using SVN Unable to Access Internet"
  https://bugs.launchpad.net/launchpad-buildd/+bug/1668358

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad-buildd/svn-proxy/+merge/351753
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~cjwatson/launchpad-buildd/svn-proxy into lp:launchpad-buildd.
=== modified file 'debian/changelog'
--- debian/changelog	2018-06-12 23:24:28 +0000
+++ debian/changelog	2018-07-30 10:10:39 +0000
@@ -1,3 +1,9 @@
+launchpad-buildd (164) UNRELEASED; urgency=medium
+
+  * Configure snap proxy settings for Subversion (LP: #1668358).
+
+ -- Colin Watson <cjwatson@xxxxxxxxxx>  Mon, 30 Jul 2018 11:07:53 +0100
+
 launchpad-buildd (163) xenial; urgency=medium
 
   * Revert change to tolerate chroot tarballs with a top-level directory

=== modified file 'lpbuildd/target/build_snap.py'
--- lpbuildd/target/build_snap.py	2018-06-12 06:25:33 +0000
+++ lpbuildd/target/build_snap.py	2018-07-30 10:10:39 +0000
@@ -10,6 +10,12 @@
 import logging
 import os.path
 import sys
+import tempfile
+from textwrap import dedent
+try:
+    from urllib.parse import urlparse
+except ImportError:
+    from urlparse import urlparse
 
 from lpbuildd.target.operation import Operation
 from lpbuildd.target.vcs import VCSOperationMixin
@@ -79,6 +85,28 @@
             json.dump(status, status_file)
         os.rename("%s.tmp" % status_path, status_path)
 
+    def install_svn_servers(self):
+        proxy = urlparse(self.args.proxy_url)
+        svn_servers = dedent("""\
+            [global]
+            http-proxy-host = {host}
+            http-proxy-port = {port}
+            """.format(host=proxy.hostname, port=proxy.port))
+        # We should never end up with an authenticated proxy here since
+        # lpbuildd.snap deals with it, but it's almost as easy to just
+        # handle it as to assert that we don't need to.
+        if proxy.username:
+            svn_servers += "http-proxy-username = {}\n".format(proxy.username)
+        if proxy.password:
+            svn_servers += "http-proxy-password = {}\n".format(proxy.password)
+        with tempfile.NamedTemporaryFile(mode="w+") as svn_servers_file:
+            svn_servers_file.write(svn_servers)
+            svn_servers_file.flush()
+            os.fchmod(svn_servers_file.fileno(), 0o644)
+            self.backend.run(["mkdir", "-p", "/root/.subversion"])
+            self.backend.copy_in(
+                svn_servers_file.name, "/root/.subversion/servers")
+
     def install(self):
         logger.info("Running install phase...")
         deps = []
@@ -110,6 +138,7 @@
             self.backend.copy_in(
                 os.path.join(self.slavebin, "snap-git-proxy"),
                 "/usr/local/bin/snap-git-proxy")
+            self.install_svn_servers()
 
     def repo(self):
         """Collect git or bzr branch."""

=== modified file 'lpbuildd/target/tests/test_build_snap.py'
--- lpbuildd/target/tests/test_build_snap.py	2018-06-12 06:25:33 +0000
+++ lpbuildd/target/tests/test_build_snap.py	2018-07-30 10:10:39 +0000
@@ -150,10 +150,17 @@
         build_snap.install()
         self.assertThat(build_snap.backend.run.calls, MatchesListwise([
             RanAptGet("install", "git", "python3", "socat", "snapcraft"),
+            RanCommand(["mkdir", "-p", "/root/.subversion"]),
             ]))
         self.assertEqual(
             (b"proxy script\n", stat.S_IFREG | 0o755),
             build_snap.backend.backend_fs["/usr/local/bin/snap-git-proxy"])
+        self.assertEqual(
+            (b"[global]\n"
+             b"http-proxy-host = proxy.example\n"
+             b"http-proxy-port = 3128\n",
+             stat.S_IFREG | 0o644),
+            build_snap.backend.backend_fs["/root/.subversion/servers"])
 
     def test_install_channels(self):
         args = [