blob: d140eb7ff258bd92739d39914bf06cba19bca977 [file] [log] [blame]
Scott Zawalski20a9b582011-11-21 11:49:40 -08001#!/usr/bin/env python
2# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5#
6# This utility allows for easy update to chromium os tree status, with proper
7# password protected authorization.
8#
9# Example usage:
10# ./set_tree_status.py [options] "a quoted space separated message."
11
12import getpass
13import optparse
14import os
15import sys
16import urllib
17
18CHROMEOS_STATUS_SERVER = 'https://chromiumos-status.appspot.com'
19
20
21def get_status():
22 response = urllib.urlopen(CHROMEOS_STATUS_SERVER + '/current?format=raw')
23 return response.read()
24
25
26def get_pwd():
27 password_file = os.path.join('/home', getpass.getuser(),
28 '.status_password.txt')
29 if os.path.isfile(password_file):
30 return open(password_file, 'r').read().strip()
31 return getpass.getpass()
32
33
34def post_status(force, message):
35 if not force:
36 status = get_status()
37 if 'tree is closed' in status.lower():
38 print >> sys.stderr, 'Tree is already closed for some other reason.'
39 print >> sys.stderr, status
40 return -1
41 data = {
42 'message': message,
43 'username': getpass.getuser(),
44 'password': get_pwd(),
45 }
46 urllib.urlopen(CHROMEOS_STATUS_SERVER + '/status', urllib.urlencode(data))
47 return 0
48
49
50if __name__ == '__main__':
51 parser = optparse.OptionParser("%prog [options] quoted_message")
52 parser.add_option('--noforce',
53 dest='force', action='store_false',
54 default=True,
55 help='Dont force to close tree if it is already closed.')
56 options, args = parser.parse_args()
57 if not args:
58 print >> sys.stderr, 'missing tree close message.'
59 sys.exit(post_status(options.force, args[0]))