| Index: trychange.py
|
| diff --git a/trychange.py b/trychange.py
|
| index 0422a9c0433837b0dd4882fd7544e04b0ec1474a..2bc5d638964f33c04a308caadbcad664a77c36b8 100755
|
| --- a/trychange.py
|
| +++ b/trychange.py
|
| @@ -117,7 +117,7 @@ class SCM(object):
|
| self.codereview_settings[k.strip()] = v.strip()
|
| return self.codereview_settings.get(key, '')
|
|
|
| - def GclStyleSettings(self):
|
| + def _GclStyleSettings(self):
|
| """Set default settings based on the gcl-style settings from the
|
| repository."""
|
| settings = {
|
| @@ -128,26 +128,47 @@ class SCM(object):
|
| 'root': self.GetCodeReviewSetting('TRYSERVER_ROOT'),
|
| 'patchlevel': self.GetCodeReviewSetting('TRYSERVER_PATCHLEVEL'),
|
| }
|
| + logging.info('\n'.join(['%s: %s' % (k, v)
|
| + for (k, v) in settings.iteritems() if v]))
|
| for (k, v) in settings.iteritems():
|
| if v and getattr(self.options, k) is None:
|
| setattr(self.options, k, v)
|
|
|
| - def GclientStyleSettings(self):
|
| + def _GclientStyleSettings(self):
|
| """Find the root, assuming a gclient-style checkout."""
|
| + self.gclient_root = None
|
| if not self.options.no_gclient and not self.options.root:
|
| root = self.checkout_root
|
| - gclient_root = gclient_utils.FindGclientRoot(root)
|
| - if gclient_root:
|
| - self.options.root = gclient_utils.PathDifference(gclient_root, root)
|
| + self.gclient_root = gclient_utils.FindGclientRoot(root)
|
| + if self.gclient_root:
|
| + logging.info('Found .gclient at %s' % self.gclient_root)
|
| + self.options.root = gclient_utils.PathDifference(self.gclient_root,
|
| + root)
|
|
|
| def AutomagicalSettings(self):
|
| """Determines settings based on supported code review and checkout tools.
|
| """
|
| - self.GclStyleSettings()
|
| - self.GclientStyleSettings()
|
| + self._GclientStyleSettings()
|
| + self._GclStyleSettings()
|
|
|
| def ReadRootFile(self, filename):
|
| - raise NotImplementedError()
|
| + if not self.options.root:
|
| + filepath = os.path.join(self.checkout_root, filename)
|
| + if os.path.isfile(filepath):
|
| + logging.info('Found %s at %s' % (filename, self.checkout_root))
|
| + return gclient_util.FileRead(filepath)
|
| + return None
|
| + root = os.path.abspath(self.gclient_root)
|
| + cur = os.path.abspath(self.checkout_root)
|
| + assert cur.startswith(root), (root, cur)
|
| + while cur.startswith(root):
|
| + filepath = os.path.join(cur, filename)
|
| + if os.path.isfile(filepath):
|
| + logging.info('Found %s at %s' % (filename, cur))
|
| + return gclient_utils.FileRead(filepath)
|
| + cur = os.path.dirname(cur)
|
| + logging.warning('Didn\'t find %s' % filename)
|
| + return None
|
|
|
|
|
| class SVN(SCM):
|
| @@ -161,21 +182,18 @@ class SVN(SCM):
|
| logging.info("SVN(%s)" % self.checkout_root)
|
|
|
| def ReadRootFile(self, filename):
|
| - try:
|
| - # Try to search on the subversion repository for the file.
|
| - import gcl
|
| - data = gcl.GetCachedFile(filename)
|
| - logging.debug('%s:\n%s' % (filename, data))
|
| + data = SCM.ReadRootFile(self, filename)
|
| + if data:
|
| return data
|
| +
|
| + # Try to search on the subversion repository for the file.
|
| + try:
|
| + from gcl import GetCachedFile
|
| except ImportError:
|
| - try:
|
| - data = gclient_utils.FileRead(os.path.join(self.checkout_root,
|
| - filename))
|
| - logging.debug('%s:\n%s' % (filename, data))
|
| - return data
|
| - except (IOError, OSError):
|
| - logging.debug('%s:\nNone' % filename)
|
| - return None
|
| + return None
|
| + data = GetCachedFile(filename)
|
| + logging.debug('%s:\n%s' % (filename, data))
|
| + return data
|
|
|
| def GenerateDiff(self):
|
| """Returns a string containing the diff for the given file list.
|
| @@ -222,16 +240,6 @@ class GIT(SCM):
|
| "(via the --track argument to \"git checkout -b ...\"")
|
| logging.info("GIT(%s)" % self.checkout_root)
|
|
|
| - def ReadRootFile(self, filename):
|
| - try:
|
| - # A git checkout is always a full checkout.
|
| - data = gclient_utils.FileRead(os.path.join(self.checkout_root, filename))
|
| - logging.debug('%s:\n%s' % (filename, data))
|
| - return data
|
| - except (IOError, OSError):
|
| - logging.debug('%s:\nNone' % filename)
|
| - return None
|
| -
|
| def GenerateDiff(self):
|
| if not self.files:
|
| self.files = scm.GIT.GetDifferentFiles(self.checkout_root,
|
| @@ -583,12 +591,10 @@ def TryChange(argv,
|
|
|
| if not swallow_exception:
|
| if options.verbose == 0:
|
| - logging.basicConfig(level=logging.ERROR)
|
| - elif options.verbose == 1:
|
| logging.basicConfig(level=logging.WARNING)
|
| - elif options.verbose == 2:
|
| + elif options.verbose == 1:
|
| logging.basicConfig(level=logging.INFO)
|
| - elif options.verbose > 2:
|
| + elif options.verbose > 1:
|
| logging.basicConfig(level=logging.DEBUG)
|
|
|
| logging.debug(argv)
|
|
|