Benjamin Schubert pushed to branch bschubert/fix-atomic-move-git-repo at BuildStream / buildstream
Commits:
- 
920462bf
by Benjamin Schubert at 2018-11-09T14:50:49Z
1 changed file:
Changes:
| ... | ... | @@ -68,7 +68,6 @@ details on common configuration options for sources. | 
| 68 | 68 |     The ``pip`` plugin is available since :ref:`format version 16 <project_format_version>`
 | 
| 69 | 69 |  """
 | 
| 70 | 70 |  | 
| 71 | -import errno
 | |
| 72 | 71 |  import hashlib
 | 
| 73 | 72 |  import os
 | 
| 74 | 73 |  import re
 | 
| ... | ... | @@ -192,13 +191,14 @@ class PipSource(Source): | 
| 192 | 191 |              # process has fetched the sources before us and ensure that we do
 | 
| 193 | 192 |              # not raise an error in that case.
 | 
| 194 | 193 |              try:
 | 
| 195 | -                os.makedirs(self._mirror)
 | |
| 196 | -                os.rename(package_dir, self._mirror)
 | |
| 197 | -            except FileExistsError:
 | |
| 198 | -                return
 | |
| 194 | +                utils.move_atomic(package_dir, self._mirror)
 | |
| 195 | +            except utils.DirectoryExistsError:
 | |
| 196 | +                # Another process has beaten us and has fetched the sources
 | |
| 197 | +                # before us.
 | |
| 198 | +                pass
 | |
| 199 | 199 |              except OSError as e:
 | 
| 200 | -                if e.errno != errno.ENOTEMPTY:
 | |
| 201 | -                    raise
 | |
| 200 | +                raise SourceError("{}: Failed to move downloaded pip packages from '{}' to '{}': {}"
 | |
| 201 | +                                  .format(self, package_dir, self._mirror, e)) from e
 | |
| 202 | 202 |  | 
| 203 | 203 |      def stage(self, directory):
 | 
| 204 | 204 |          with self.timed_activity("Staging Python packages", silent_nested=True):
 | 
