Exemple #1
0
def CMDmovechanges(parser, args):
    parser.add_option('-p',
                      '--param',
                      dest='params',
                      action='append',
                      help='repeatable query parameter, format: -p key=value')
    parser.add_option('--destination_branch',
                      dest='destination_branch',
                      help='where to move changes to')

    (opt, args) = parser.parse_args(args)
    assert opt.destination_branch, "--destination_branch not defined"
    for p in opt.params:
        assert '=' in p, '--param is key=value, not "%s"' % p
    host = urlparse.urlparse(opt.host).netloc

    limit = 100
    while True:
        result = gerrit_util.QueryChanges(
            host,
            list(tuple(p.split('=', 1)) for p in opt.params),
            limit=limit,
        )
        for change in result:
            gerrit_util.MoveChange(host, change['id'], opt.destination_branch)

        if len(result) < limit:
            break
    logging.info("Done")
Exemple #2
0
def CMDchanges(parser, args):
    parser.add_option('-p',
                      '--param',
                      dest='params',
                      action='append',
                      help='repeatable query parameter, format: -p key=value')
    parser.add_option('-o',
                      '--o-param',
                      dest='o_params',
                      action='append',
                      help='gerrit output parameters, e.g. ALL_REVISIONS')
    parser.add_option('--limit',
                      dest='limit',
                      type=int,
                      help='maximum number of results to return')
    parser.add_option('--start',
                      dest='start',
                      type=int,
                      help='how many changes to skip '
                      '(starting with the most recent)')

    (opt, args) = parser.parse_args(args)
    for p in opt.params:
        assert '=' in p, '--param is key=value, not "%s"' % p

    result = gerrit_util.QueryChanges(
        urlparse.urlparse(opt.host).netloc,
        list(tuple(p.split('=', 1)) for p in opt.params),
        start=opt.start,  # Default: None
        limit=opt.limit,  # Default: None
        o_params=opt.o_params,  # Default: None
    )
    logging.info('Change query returned %d changes.', len(result))
    write_result(result, opt)
Exemple #3
0
def CMDmass_abandon(parser, args):
    parser.add_option('-p',
                      '--param',
                      dest='params',
                      action='append',
                      default=[],
                      help='repeatable query parameter, format: -p key=value')
    parser.add_option('-m',
                      '--message',
                      default='',
                      help='reason for abandoning')
    parser.add_option('-f',
                      '--force',
                      action='store_true',
                      help='Don\'t prompt for confirmation')

    opt, args = parser.parse_args(args)

    for p in opt.params:
        assert '=' in p, '--param is key=value, not "%s"' % p
    search_query = list(tuple(p.split('=', 1)) for p in opt.params)
    if not any(t for t in search_query if t[0] == 'owner'):
        # owner should always be present when abandoning changes
        search_query.append(('owner', 'me'))
    search_query.append(('status', 'open'))
    logging.info("Searching for: %s" % search_query)

    host = urlparse.urlparse(opt.host).netloc

    result = gerrit_util.QueryChanges(
        host,
        search_query,
        # abandon at most 100 changes as not all Gerrit instances support
        # unlimited results.
        limit=100,
    )
    if len(result) == 0:
        logging.warn("Nothing to abandon")
        return

    logging.warn("%s CLs match search query: " % len(result))
    for change in result:
        logging.warn("[ID: %d] %s" % (change['_number'], change['subject']))

    if not opt.force:
        q = raw_input(
            'Do you want to move forward with abandoning? [y to confirm] '
        ).strip()
        if q not in ['y', 'Y']:
            logging.warn("Aborting...")
            return

    for change in result:
        logging.warning("Abandoning: %s" % change['subject'])
        gerrit_util.AbandonChange(host, change['id'], opt.message)

    logging.warning("Done")
Exemple #4
0
 def testQueryChanges(self, mockJsonResponse, mockCreateHttpConn):
     gerrit_util.QueryChanges('host', [('key', 'val'), ('foo', 'bar')],
                              'first param',
                              limit=500,
                              o_params=['PARAM_A', 'PARAM_B'],
                              start='start')
     mockCreateHttpConn.assert_called_once_with(
         'host', ('changes/?q=first%20param+key:val+foo:bar'
                  '&start=start'
                  '&n=500'
                  '&o=PARAM_A'
                  '&o=PARAM_B'))
  def query(self, query: List[Tuple[str, str]]) -> List[Change]:
    """Query a Gerrit server for changes matching query terms.

    Args:
      query: A list of key:value pairs for search parameters, as documented
        here (e.g. ('is', 'owner') for a parameter 'is:owner'):
        https://gerrit-review.googlesource.com/Documentation/user-search.html#search-operators

    Returns:
      JSON
    """
    return [Change.from_json(x) for x in gerrit_util.QueryChanges(
        self.host, query, o_params=GerritServer.DEFAULT_PARAMS)]
Exemple #6
0
def CMDmass_abandon(parser, args):
  """Mass abandon changes

  Abandons CLs that match search criteria provided by user. Before any change is
  actually abandoned, user is presented with a list of CLs that will be affected
  if user confirms. User can skip confirmation by passing --force parameter.

  The script can abandon up to 100 CLs per invocation.

  Examples:
  gerrit_client.py mass-abandon --host https://HOST -p 'project=repo2'
  gerrit_client.py mass-abandon --host https://HOST -p 'message=testing'
  gerrit_client.py mass-abandon --host https://HOST -p 'is=wip' -p 'age=1y'
  """
  parser.add_option('-p',
                    '--param',
                    dest='params',
                    action='append',
                    default=[],
                    help='repeatable query parameter, format: -p key=value')
  parser.add_option('-m', '--message', default='', help='reason for abandoning')
  parser.add_option('-f',
                    '--force',
                    action='store_true',
                    help='Don\'t prompt for confirmation')

  opt, args = parser.parse_args(args)

  for p in opt.params:
    assert '=' in p, '--param is key=value, not "%s"' % p
  search_query = list(tuple(p.split('=', 1)) for p in opt.params)
  if not any(t for t in search_query if t[0] == 'owner'):
    # owner should always be present when abandoning changes
    search_query.append(('owner', 'me'))
  search_query.append(('status', 'open'))
  logging.info("Searching for: %s" % search_query)

  host = urlparse.urlparse(opt.host).netloc

  result = gerrit_util.QueryChanges(
      host,
      search_query,
      # abandon at most 100 changes as not all Gerrit instances support
      # unlimited results.
      limit=100,
  )
  if len(result) == 0:
    logging.warn("Nothing to abandon")
    return

  logging.warn("%s CLs match search query: " % len(result))
  for change in result:
    logging.warn("[ID: %d] %s" % (change['_number'], change['subject']))

  if not opt.force:
    q = raw_input(
        'Do you want to move forward with abandoning? [y to confirm] ').strip()
    if q not in ['y', 'Y']:
      logging.warn("Aborting...")
      return

  for change in result:
    logging.warning("Abandoning: %s" % change['subject'])
    gerrit_util.AbandonChange(host, change['id'], opt.message)

  logging.warning("Done")