Index: third_party/upload.py |
diff --git a/third_party/upload.py b/third_party/upload.py |
index a8f1d884f30624bfb082bdedae9cb29a64206916..dac89970887df649abbd080009a00abc1e8d5a37 100644 |
--- a/third_party/upload.py |
+++ b/third_party/upload.py |
@@ -16,7 +16,7 @@ |
"""Tool for uploading diffs from a version control system to the codereview app. |
-Usage summary: upload.py [options] [-- diff_options] |
+Usage summary: upload.py [options] [-- diff_options] [path...] |
Diff options are passed to the diff command of the underlying system. |
@@ -447,7 +447,8 @@ class HttpRpcServer(AbstractRpcServer): |
return opener |
-parser = optparse.OptionParser(usage="%prog [options] [-- diff_options]") |
+parser = optparse.OptionParser( |
+ usage="%prog [options] [-- diff_options] [path...]") |
parser.add_option("-y", "--assume_yes", action="store_true", |
dest="assume_yes", default=False, |
help="Assume that the answer to yes/no questions is 'yes'.") |
@@ -457,7 +458,7 @@ group.add_option("-q", "--quiet", action="store_const", const=0, |
dest="verbose", help="Print errors only.") |
group.add_option("-v", "--verbose", action="store_const", const=2, |
dest="verbose", default=1, |
- help="Print info level logs (default).") |
+ help="Print info level logs.") |
group.add_option("--noisy", action="store_const", const=3, |
dest="verbose", help="Print all logs.") |
# Review server |
@@ -555,7 +556,7 @@ def GetRpcServer(server, email=None, host_override=None, save_cookies=True, |
# If this is the dev_appserver, use fake authentication. |
host = (host_override or server).lower() |
- if host == "localhost" or host.startswith("localhost:"): |
+ if re.match(r'(http://)?localhost([:/]|$)', host): |
if email is None: |
email = "test@example.com" |
logging.info("Using debug user %s. Override with --email" % email) |
@@ -867,7 +868,7 @@ class SubversionVCS(VersionControlSystem): |
return self.svn_base |
def _GuessBase(self, required): |
- """Returns the SVN base URL. |
+ """Returns base URL for current diff. |
Args: |
required: If true, exits if the url can't be guessed, otherwise None is |
@@ -875,36 +876,24 @@ class SubversionVCS(VersionControlSystem): |
""" |
info = RunShell(["svn", "info"]) |
for line in info.splitlines(): |
- words = line.split() |
- if len(words) == 2 and words[0] == "URL:": |
- url = words[1] |
+ if line.startswith("URL: "): |
+ url = line.split()[1] |
scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) |
username, netloc = urllib.splituser(netloc) |
if username: |
logging.info("Removed username from base URL") |
- if netloc.endswith("svn.python.org"): |
- if netloc == "svn.python.org": |
- if path.startswith("/projects/"): |
- path = path[9:] |
- elif netloc != "pythondev@svn.python.org": |
- ErrorExit("Unrecognized Python URL: %s" % url) |
- base = "http://svn.python.org/view/*checkout*%s/" % path |
- logging.info("Guessed Python base = %s", base) |
- elif netloc.endswith("svn.collab.net"): |
- if path.startswith("/repos/"): |
- path = path[6:] |
- base = "http://svn.collab.net/viewvc/*checkout*%s/" % path |
- logging.info("Guessed CollabNet base = %s", base) |
+ guess = "" |
+ if netloc == "svn.python.org" and scheme == "svn+ssh": |
+ path = "projects" + path |
+ scheme = "http" |
+ guess = "Python " |
elif netloc.endswith(".googlecode.com"): |
- path = path + "/" |
- base = urlparse.urlunparse(("http", netloc, path, params, |
- query, fragment)) |
- logging.info("Guessed Google Code base = %s", base) |
- else: |
- path = path + "/" |
- base = urlparse.urlunparse((scheme, netloc, path, params, |
- query, fragment)) |
- logging.info("Guessed base = %s", base) |
+ scheme = "http" |
+ guess = "Google Code " |
+ path = path + "/" |
+ base = urlparse.urlunparse((scheme, netloc, path, params, |
+ query, fragment)) |
+ logging.info("Guessed %sbase = %s", guess, base) |
return base |
if required: |
ErrorExit("Can't find URL in output from svn info") |
@@ -1185,7 +1174,10 @@ class GitVCS(VersionControlSystem): |
def GenerateDiff(self, extra_args): |
extra_args = extra_args[:] |
if self.options.revision: |
- extra_args = [self.options.revision] + extra_args |
+ if ":" in self.options.revision: |
+ extra_args = self.options.revision.split(":", 1) + extra_args |
+ else: |
+ extra_args = [self.options.revision] + extra_args |
# --no-ext-diff is broken in some versions of Git, so try to work around |
# this by overriding the environment (but there is still a problem if the |
@@ -1267,8 +1259,6 @@ class MercurialVCS(VersionControlSystem): |
return filename[len(self.subdir):].lstrip(r"\/") |
def GenerateDiff(self, extra_args): |
- # If no file specified, restrict to the current subdir |
- extra_args = extra_args or ["."] |
cmd = ["hg", "diff", "--git", "-r", self.base_rev] + extra_args |
data = RunShell(cmd, silent_ok=True) |
svndiff = [] |
@@ -1319,13 +1309,12 @@ class MercurialVCS(VersionControlSystem): |
# the working copy |
if out[0].startswith('%s: ' % relpath): |
out = out[1:] |
- if len(out) > 1: |
+ status, _ = out[0].split(' ', 1) |
+ if len(out) > 1 and status == "A": |
# Moved/copied => considered as modified, use old filename to |
# retrieve base contents |
oldrelpath = out[1].strip() |
status = "M" |
- else: |
- status, _ = out[0].split(' ', 1) |
if ":" in self.base_rev: |
base_rev = self.base_rev.split(":", 1)[0] |
else: |
@@ -1522,8 +1511,10 @@ def LoadSubversionAutoProperties(): |
- config file doesn't exist, or |
- 'enable-auto-props' is not set to 'true-like-value' in [miscellany]. |
""" |
- # Todo(hayato): Windows users might use different path for configuration file. |
- subversion_config = os.path.expanduser("~/.subversion/config") |
+ if os.name == 'nt': |
+ subversion_config = os.environ.get("APPDATA") + "\\Subversion\\config" |
+ else: |
+ subversion_config = os.path.expanduser("~/.subversion/config") |
if not os.path.exists(subversion_config): |
return {} |
config = ConfigParser.ConfigParser() |