Created
September 30, 2009 04:40
-
-
Save artagnon/197782 to your computer and use it in GitHub Desktop.
codereview-upload.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# | |
# Copyright 2007 Google Inc. | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
"""Tool for uploading diffs from a version control system to the codereview app. | |
Usage summary: upload.py [options] [-- diff_options] | |
Diff options are passed to the diff command of the underlying system. | |
Supported version control systems: | |
Git | |
Mercurial | |
Subversion | |
It is important for Git/Mercurial users to specify a tree/node/branch to diff | |
against by using the '--rev' option. | |
""" | |
# This code is derived from appcfg.py in the App Engine SDK (open source), | |
# and from ASPN recipe #146306. | |
import cookielib | |
import getpass | |
import logging | |
import mimetypes | |
import optparse | |
import os | |
import re | |
import socket | |
import subprocess | |
import sys | |
import urllib | |
import urllib2 | |
import urlparse | |
# The md5 module was deprecated in Python 2.5. | |
try: | |
from hashlib import md5 | |
except ImportError: | |
from md5 import md5 | |
try: | |
import readline | |
except ImportError: | |
pass | |
# The logging verbosity: | |
# 0: Errors only. | |
# 1: Status messages. | |
# 2: Info logs. | |
# 3: Debug logs. | |
verbosity = 1 | |
# Max size of patch or base file. | |
MAX_UPLOAD_SIZE = 900 * 1024 | |
# Constants for version control names. Used by GuessVCSName. | |
VCS_GIT = "Git" | |
VCS_MERCURIAL = "Mercurial" | |
VCS_SUBVERSION = "Subversion" | |
VCS_UNKNOWN = "Unknown" | |
# whitelist for non-binary filetypes which do not start with "text/" | |
# .mm (Objective-C) shows up as application/x-freemind on my Linux box. | |
TEXT_MIMETYPES = ['application/javascript', 'application/x-javascript', | |
'application/x-freemind'] | |
VCS_ABBREVIATIONS = { | |
VCS_MERCURIAL.lower(): VCS_MERCURIAL, | |
"hg": VCS_MERCURIAL, | |
VCS_SUBVERSION.lower(): VCS_SUBVERSION, | |
"svn": VCS_SUBVERSION, | |
VCS_GIT.lower(): VCS_GIT, | |
} | |
def GetEmail(prompt): | |
"""Prompts the user for their email address and returns it. | |
The last used email address is saved to a file and offered up as a suggestion | |
to the user. If the user presses enter without typing in anything the last | |
used email address is used. If the user enters a new address, it is saved | |
for next time we prompt. | |
""" | |
last_email_file_name = os.path.expanduser("~/.last_codereview_email_address") | |
last_email = "" | |
if os.path.exists(last_email_file_name): | |
try: | |
last_email_file = open(last_email_file_name, "r") | |
last_email = last_email_file.readline().strip("\n") | |
last_email_file.close() | |
prompt += " [%s]" % last_email | |
except IOError, e: | |
pass | |
email = raw_input(prompt + ": ").strip() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment