#!/usr/bin/python2

# Copyright 2014 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Add message to codereview issue.

This script takes a codereview issue number as its argument and a (possibly
multi-line) message on stdin.  It appends the message to the given issue.

Usage:
  echo MESSAGE | %prog CODEREVIEW_ISSUE
or:
  %prog CODEREVIEW_ISSUE <<EOF
  MESSAGE
  EOF
or:
  %prog --help
"""

import optparse
import sys

import fix_pythonpath  # pylint: disable=W0611
from common.py.utils import find_depot_tools  # pylint: disable=W0611
import rietveld


RIETVELD_URL = 'https://codereview.chromium.org'


def add_codereview_message(issue, message):
    """Add a message to a given codereview.

    Args:
        codereview_url: (string) we will extract the issue number from
            this url, or this could simply be the issue number.
        message: (string) message to add.
    """
    # Passing None for the email and password will result in a prompt or
    # reuse of existing cached credentials.
    my_rietveld = rietveld.Rietveld(RIETVELD_URL, email=None, password=None)
    
    my_rietveld.add_comment(issue, message)


def main(argv):
    """main function; see module-level docstring and GetOptionParser help.

    Args:
        argv: sys.argv[1:]-type argument list.
    """
    option_parser = optparse.OptionParser(usage=__doc__)
    _, arguments = option_parser.parse_args(argv)

    if len(arguments) > 1:
        option_parser.error('Extra arguments.')
    if len(arguments) != 1:
        option_parser.error('Missing issue number.')

    message = sys.stdin.read()
    add_codereview_message(int(arguments[0]), message)


if __name__ == '__main__':
    main(sys.argv[1:])

