예제 #1
0
 def getChangesDependingOn(self, change, projects, tenant):
     changes = []
     if not change.uris:
         return changes
     queries = set()
     for uri in change.uris:
         queries.add('message:%s' % uri)
     query = '(' + ' OR '.join(queries) + ')'
     results = self.connection.simpleQuery(query)
     seen = set()
     for result in results:
         for match in find_dependency_headers(result['commitMessage']):
             found = False
             for uri in change.uris:
                 if uri in match:
                     found = True
                     break
             if not found:
                 continue
             key = (str(result['number']),
                    str(result['currentPatchSet']['number']))
             if key in seen:
                 continue
             seen.add(key)
             change = self.connection._getChange(
                 result['number'], result['currentPatchSet']['number'])
             changes.append(change)
     return changes
예제 #2
0
 def getChangesDependingOn(self, change, projects, tenant):
     changes = []
     if not change.uris:
         return changes
     queries = set()
     for uri in change.uris:
         queries.add('message:{Depends-On: %s}' % uri)
     query = '(' + ' OR '.join(queries) + ')'
     results = self.connection.simpleQuery(query)
     seen = set()
     for result in results:
         for match in find_dependency_headers(result.message):
             found = False
             for uri in change.uris:
                 if uri in match:
                     found = True
                     break
             if not found:
                 continue
             key = (result.number, result.current_patchset)
             if key in seen:
                 continue
             seen.add(key)
             change = self.connection._getChange(result.number,
                                                 result.current_patchset)
             changes.append(change)
     return changes
예제 #3
0
 def updateCommitDependencies(self, change, change_queue):
     # Search for Depends-On headers and find appropriate changes
     self.log.debug("  Updating commit dependencies for %s", change)
     change.refresh_deps = False
     dependencies = []
     seen = set()
     for match in find_dependency_headers(change.message):
         self.log.debug("  Found Depends-On header: %s", match)
         if match in seen:
             continue
         seen.add(match)
         try:
             url = urllib.parse.urlparse(match)
         except ValueError:
             continue
         source = self.sched.connections.getSourceByHostname(
             url.hostname)
         if not source:
             continue
         self.log.debug("  Found source: %s", source)
         dep = source.getChangeByURL(match)
         if dep and (not dep.is_merged) and dep not in dependencies:
             self.log.debug("  Adding dependency: %s", dep)
             dependencies.append(dep)
     change.commit_needs_changes = dependencies
예제 #4
0
 def getChangesDependingOn(self, change, projects, tenant):
     changes = []
     if not change.uris:
         return changes
     queries = set()
     for uri in change.uris:
         queries.add('message:%s' % uri)
     query = '(' + ' OR '.join(queries) + ')'
     results = self.connection.simpleQuery(query)
     seen = set()
     for result in results:
         for match in find_dependency_headers(result['commitMessage']):
             found = False
             for uri in change.uris:
                 if uri in match:
                     found = True
                     break
             if not found:
                 continue
             key = (str(result['number']),
                    str(result['currentPatchSet']['number']))
             if key in seen:
                 continue
             seen.add(key)
             change = self.connection._getChange(
                 result['number'], result['currentPatchSet']['number'])
             changes.append(change)
     return changes
예제 #5
0
 def updateCommitDependencies(self, change, change_queue):
     # Search for Depends-On headers and find appropriate changes
     self.log.debug("  Updating commit dependencies for %s", change)
     change.refresh_deps = False
     dependencies = []
     seen = set()
     for match in find_dependency_headers(change.message):
         self.log.debug("  Found Depends-On header: %s", match)
         if match in seen:
             continue
         seen.add(match)
         try:
             url = urllib.parse.urlparse(match)
         except ValueError:
             continue
         source = self.sched.connections.getSourceByHostname(
             url.hostname)
         if not source:
             continue
         self.log.debug("  Found source: %s", source)
         dep = source.getChangeByURL(match)
         if dep and (not dep.is_merged) and dep not in dependencies:
             self.log.debug("  Adding dependency: %s", dep)
             dependencies.append(dep)
     change.commit_needs_changes = dependencies
예제 #6
0
 def getChangesDependingOn(self, change, projects, tenant):
     """ Reverse lookup of PR depending on this one
     """
     # TODO(fbo) No way to Query pagure to search accross projects' PRs for
     # a the depends-on string in PR initial message. Not a blocker
     # for now, let's workaround using the local change cache !
     changes_dependencies = []
     for cached_change_id, _change in self._change_cache.items():
         for dep_header in dependson.find_dependency_headers(
                 _change.message):
             if change.url in dep_header:
                 changes_dependencies.append(_change)
     return changes_dependencies