[Notes] [Git][BuildStream/buildstream][tpollard/483] plugins/git.py: Fail if ref is not in given track



Title: GitLab

Tom Pollard pushed to branch tpollard/483 at BuildStream / buildstream

Commits:

1 changed file:

Changes:

  • buildstream/plugins/sources/git.py
    ... ... @@ -91,7 +91,7 @@ GIT_MODULES = '.gitmodules'
    91 91
     #
    
    92 92
     class GitMirror(SourceFetcher):
    
    93 93
     
    
    94
    -    def __init__(self, source, path, url, ref):
    
    94
    +    def __init__(self, source, path, url, ref, tracking=None):
    
    95 95
     
    
    96 96
             super().__init__()
    
    97 97
             self.source = source
    
    ... ... @@ -100,6 +100,7 @@ class GitMirror(SourceFetcher):
    100 100
             self.ref = ref
    
    101 101
             self.mirror = os.path.join(source.get_mirror_directory(), utils.url_directory_name(url))
    
    102 102
             self.mark_download_url(url)
    
    103
    +        self.track = tracking
    
    103 104
     
    
    104 105
         # Ensures that the mirror exists
    
    105 106
         def ensure(self, alias_override=None):
    
    ... ... @@ -204,6 +205,10 @@ class GitMirror(SourceFetcher):
    204 205
                              fail="Failed to checkout git ref {}".format(self.ref),
    
    205 206
                              cwd=fullpath)
    
    206 207
     
    
    208
    +        # Check that the user specified ref / tracked ref exists in the track if provided
    
    209
    +        if self.track:
    
    210
    +            self.assert_ref_in_track(fullpath)
    
    211
    +
    
    207 212
             # Remove .git dir
    
    208 213
             shutil.rmtree(os.path.join(fullpath, ".git"))
    
    209 214
     
    
    ... ... @@ -287,6 +292,22 @@ class GitMirror(SourceFetcher):
    287 292
     
    
    288 293
                 return None
    
    289 294
     
    
    295
    +    # Assert that ref exists in track, if track has been specified.
    
    296
    +    def assert_ref_in_track(self,fullpath):
    
    297
    +        _, branch = self.source.check_output([self.source.host_git, 'branch', '--list', self.track,
    
    298
    +                                              '--contains', self.ref],
    
    299
    +                                             cwd=fullpath,)
    
    300
    +        if branch:
    
    301
    +            return True
    
    302
    +        else:
    
    303
    +            _, tag = self.source.check_output([self.source.host_git, 'tag', '--list', self.track,
    
    304
    +                                               '--contains', self.ref],
    
    305
    +                                              cwd=fullpath,)
    
    306
    +            if tag:
    
    307
    +                return True
    
    308
    +        raise SourceError("{}: expected ref '{}' was not found in given track '{}' for staged repository: '{}'"
    
    309
    +                          .format(self.source, self.ref, self.track, self.url))
    
    310
    +
    
    290 311
     
    
    291 312
     class GitSource(Source):
    
    292 313
         # pylint: disable=attribute-defined-outside-init
    
    ... ... @@ -298,8 +319,8 @@ class GitSource(Source):
    298 319
             self.node_validate(node, config_keys + Source.COMMON_CONFIG_KEYS)
    
    299 320
     
    
    300 321
             self.original_url = self.node_get_member(node, str, 'url')
    
    301
    -        self.mirror = GitMirror(self, '', self.original_url, ref)
    
    302 322
             self.tracking = self.node_get_member(node, str, 'track', None)
    
    323
    +        self.mirror = GitMirror(self, '', self.original_url, ref, self.tracking)
    
    303 324
             self.checkout_submodules = self.node_get_member(node, bool, 'checkout-submodules', True)
    
    304 325
             self.submodules = []
    
    305 326
     
    



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]