summaryrefslogtreecommitdiff
path: root/Tools/Scripts/webkitpy/common/checkout/scm/svn.py
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Tools/Scripts/webkitpy/common/checkout/scm/svn.py
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit. Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Tools/Scripts/webkitpy/common/checkout/scm/svn.py')
-rw-r--r--Tools/Scripts/webkitpy/common/checkout/scm/svn.py49
1 files changed, 37 insertions, 12 deletions
diff --git a/Tools/Scripts/webkitpy/common/checkout/scm/svn.py b/Tools/Scripts/webkitpy/common/checkout/scm/svn.py
index 1323b702c..c146f5d32 100644
--- a/Tools/Scripts/webkitpy/common/checkout/scm/svn.py
+++ b/Tools/Scripts/webkitpy/common/checkout/scm/svn.py
@@ -29,8 +29,10 @@
import logging
import os
+import random
import re
import shutil
+import string
import sys
import tempfile
@@ -43,9 +45,16 @@ _log = logging.getLogger(__name__)
# A mixin class that represents common functionality for SVN and Git-SVN.
-class SVNRepository:
+class SVNRepository(object):
+ # FIXME: These belong in common.config.urls
+ svn_server_host = "svn.webkit.org"
+ svn_server_realm = "<http://svn.webkit.org:80> Mac OS Forge"
+
def has_authorization_for_realm(self, realm, home_directory=os.getenv("HOME")):
- # ignore false positives for methods implemented in the mixee class. pylint: disable-msg=E1101
+ # If we are working on a file:// repository realm will be None
+ if realm is None:
+ return True
+ # ignore false positives for methods implemented in the mixee class. pylint: disable=E1101
# Assumes find and grep are installed.
if not os.path.isdir(os.path.join(home_directory, ".subversion")):
return False
@@ -63,9 +72,6 @@ class SVNRepository:
class SVN(SCM, SVNRepository):
- # FIXME: These belong in common.config.urls
- svn_server_host = "svn.webkit.org"
- svn_server_realm = "<http://svn.webkit.org:80> Mac OS Forge"
executable_name = "svn"
@@ -106,7 +112,7 @@ class SVN(SCM, SVNRepository):
match = re.search("^%s: (?P<value>.+)$" % field_name, info_output, re.MULTILINE)
if not match:
raise ScriptError(script_args=svn_info_args, message='svn info did not contain a %s.' % field_name)
- return match.group('value')
+ return match.group('value').rstrip('\r')
def find_checkout_root(self, path):
uuid = self.find_uuid(path)
@@ -134,10 +140,11 @@ class SVN(SCM, SVNRepository):
def svn_version(self):
return self._run_svn(['--version', '--quiet'])
- def working_directory_is_clean(self):
- return self._run_svn(["diff"], cwd=self.checkout_root, decode_output=False) == ""
+ def has_working_directory_changes(self):
+ # FIXME: What about files which are not committed yet?
+ return self._run_svn(["diff"], cwd=self.checkout_root, decode_output=False) != ""
- def clean_working_directory(self):
+ def discard_working_directory_changes(self):
# Make sure there are no locks lying around from a previously aborted svn invocation.
# This is slightly dangerous, as it's possible the user is running another svn process
# on this checkout at the same time. However, it's much more likely that we're running
@@ -174,10 +181,20 @@ class SVN(SCM, SVNRepository):
return
self.add(path)
- def add_list(self, paths, return_exit_code=False):
+ def add_list(self, paths):
for path in paths:
self._add_parent_directories(os.path.dirname(os.path.abspath(path)))
- return self._run_svn(["add"] + paths, return_exit_code=return_exit_code)
+ if self.svn_version() >= "1.7":
+ # For subversion client 1.7 and later, need to add '--parents' option to ensure intermediate directories
+ # are added; in addition, 1.7 returns an exit code of 1 from svn add if one or more of the requested
+ # adds are already under version control, including intermediate directories subject to addition
+ # due to --parents
+ svn_add_args = ['svn', 'add', '--parents'] + paths
+ exit_code = self.run(svn_add_args, return_exit_code=True)
+ if exit_code and exit_code != 1:
+ raise ScriptError(script_args=svn_add_args, exit_code=exit_code)
+ else:
+ self._run_svn(["add"] + paths)
def _delete_parent_directories(self, path):
if not self.in_working_directory(path):
@@ -239,6 +256,13 @@ class SVN(SCM, SVNRepository):
def svn_revision(self, path):
return self.value_from_svn_info(path, 'Revision')
+ def timestamp_of_revision(self, path, revision):
+ # We use --xml to get timestamps like 2013-02-08T08:18:04.964409Z
+ repository_root = self.value_from_svn_info(self.checkout_root, 'Repository Root')
+ info_output = Executive().run_command([self.executable_name, 'log', '-r', revision, '--xml', repository_root], cwd=path).rstrip()
+ match = re.search(r"^<date>(?P<value>.+)</date>\r?$", info_output, re.MULTILINE)
+ return match.group('value')
+
# FIXME: This method should be on Checkout.
def create_patch(self, git_commit=None, changed_files=None):
"""Returns a byte array (str()) representing the patch file.
@@ -266,11 +290,12 @@ class SVN(SCM, SVNRepository):
return self._run_svn(['diff', '-c', revision])
def _bogus_dir_name(self):
+ rnd = ''.join(random.sample(string.ascii_letters, 5))
if sys.platform.startswith("win"):
parent_dir = tempfile.gettempdir()
else:
parent_dir = sys.path[0] # tempdir is not secure.
- return os.path.join(parent_dir, "temp_svn_config")
+ return os.path.join(parent_dir, "temp_svn_config_" + rnd)
def _setup_bogus_dir(self, log):
self._bogus_dir = self._bogus_dir_name()