[2.7] bpo-31351: Set return code in ensurepip when pip fails (GH-3734)

Previously ensurepip would always report success, even if the
pip installation failed.

(cherry picked from commit 9adda0cdf89432386b7a04444a6199b580d287a1)
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index c2abed8..ea2a5e6 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -29,7 +29,7 @@
 
     # Install the bundled software
     import pip
-    pip.main(args)
+    return pip.main(args)
 
 
 def version():
@@ -60,6 +60,21 @@
 
     Note that calling this function will alter both sys.path and os.environ.
     """
+    # Discard the return value
+    _bootstrap(root=root, upgrade=upgrade, user=user,
+               altinstall=altinstall, default_pip=default_pip,
+               verbosity=verbosity)
+
+
+def _bootstrap(root=None, upgrade=False, user=False,
+               altinstall=False, default_pip=True,
+               verbosity=0):
+    """
+    Bootstrap pip into the current Python installation (or the given root
+    directory). Returns pip command status code.
+
+    Note that calling this function will alter both sys.path and os.environ.
+    """
     if altinstall and default_pip:
         raise ValueError("Cannot use altinstall and default_pip together")
 
@@ -105,11 +120,10 @@
         if verbosity:
             args += ["-" + "v" * verbosity]
 
-        _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
+        return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
     finally:
         shutil.rmtree(tmpdir, ignore_errors=True)
 
-
 def _uninstall_helper(verbosity=0):
     """Helper to support a clean default uninstall process on Windows
 
@@ -135,7 +149,7 @@
     if verbosity:
         args += ["-" + "v" * verbosity]
 
-    _run_pip(args + [p[0] for p in reversed(_PROJECTS)])
+    return _run_pip(args + [p[0] for p in reversed(_PROJECTS)])
 
 
 def _main(argv=None):
@@ -196,7 +210,7 @@
 
     args = parser.parse_args(argv)
 
-    bootstrap(
+    return _bootstrap(
         root=args.root,
         upgrade=args.upgrade,
         user=args.user,