check clearcase vobtag before checking vob uuid to save much time on server with several clearcase repositories

Review Request #5166 — Created Dec. 26, 2013 and submitted

Information

RBTools
master

Reviewers

build an ordered list of ClearCase repositories starting with the one matching vobstag
so check clearcase with matching vobstag first then fallback with uuid only to reduce HTTP queries about each rvb repository

found and caught a side issue when there are restricted repositories:
it will try to get info of all clearcase repo until one vobstag uuid matches
it gets a 403 error as soon as it tries getting info of a private and unaccessible for current user :-(

posting reviews against authorized clearcase repo with matching vobstag still works
posting reviews against authorized clearcase repo with no matching vobstag will work whereas there are some unauthorized clearcase repo in the list
posting reviews against unauthorized clearcase repo returns an error

Description From Last Updated

This is pretty confusing. How about we build an ordered list of repositories, putting the ones that match the vobstag …

daviddavid
david
  1. 
      
  2. rbtools/clients/clearcase.py (Diff revision 1)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Show all issues

    This is pretty confusing. How about we build an ordered list of repositories, putting the ones that match the vobstag first? Something like this:

    # Start by scanning all repositories where the vobstag
    # matches.
    repository_scan_order = [
        repo for repo in repositories
        if (repository['tool'] == 'ClearCase' and
            repository['name'] == self.vobstag)
        ]
    
    # Now add all ClearCase repositories
    repository_scan_order.extend([
        repo for repo in repositories
        if (repository['tool'] == 'ClearCase'
            and repository not in repository_scan_order)
        ])
    
    for repository in repository_scan_order:
        info = self._get_repository_info(server, repository)
        if not info or uuid != info['uuid']:
            continue
    
        path = info['repopath']
        logging.debug('Matching repository uuid %s with path %s',
                      uuid, path)
    
        return ClearCaseRepositoryInfo(path, path, uuid)
    

    Note that I haven't tested this.

    1. I've liked your idea of ordered list so I've just tried to optimize loop to prevent 2 times testing each non clearcase repo

      PS: your proposal was working after renaming repo into repository ;-)

  3. 
      
DE
DE
DE
david
  1. Ship It!
  2. 
      
DE
Review request changed
Status:
Completed
Change Summary:
Pushed to master (70e88eb). Thanks!