Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: trychange.py

Issue 8174009: Add repo-managed checkout support to trychange.py (Closed) Base URL: http://src.chromium.org/svn/trunk/tools/depot_tools/
Patch Set: '' Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/trychange_unittest.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Client-side script to send a try job to the try server. It communicates to 6 """Client-side script to send a try job to the try server. It communicates to
7 the try server by either writting to a svn repository or by directly connecting 7 the try server by either writting to a svn repository or by directly connecting
8 to the server by HTTP. 8 to the server by HTTP.
9 """ 9 """
10 10
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 parsing. 89 parsing.
90 """ 90 """
91 return re.sub(r'[^\w#-]', '_', name) 91 return re.sub(r'[^\w#-]', '_', name)
92 92
93 93
94 class SCM(object): 94 class SCM(object):
95 """Simplistic base class to implement one function: ProcessOptions.""" 95 """Simplistic base class to implement one function: ProcessOptions."""
96 def __init__(self, options, path, file_list): 96 def __init__(self, options, path, file_list):
97 items = path.split('@') 97 items = path.split('@')
98 assert len(items) <= 2 98 assert len(items) <= 2
99 self.checkout_root = items[0] 99 self.checkout_root = os.path.abspath(items[0])
100 items.append(None) 100 items.append(None)
101 self.diff_against = items[1] 101 self.diff_against = items[1]
102 self.options = options 102 self.options = options
103 # Lazy-load file list from the SCM unless files were specified in options. 103 # Lazy-load file list from the SCM unless files were specified in options.
104 self._files = None 104 self._files = None
105 self._file_tuples = None 105 self._file_tuples = None
106 if file_list: 106 if file_list:
107 self._files = file_list 107 self._files = file_list
108 self._file_tuples = [('M', f) for f in self.files] 108 self._file_tuples = [('M', f) for f in self.files]
109 self.options.files = None 109 self.options.files = None
110 self.codereview_settings = None 110 self.codereview_settings = None
111 self.codereview_settings_file = 'codereview.settings' 111 self.codereview_settings_file = 'codereview.settings'
112 self.gclient_root = None 112 self.toplevel_root = None
113 113
114 def GetFileNames(self): 114 def GetFileNames(self):
115 """Return the list of files in the diff.""" 115 """Return the list of files in the diff."""
116 return self.files 116 return self.files
117 117
118 def GetCodeReviewSetting(self, key): 118 def GetCodeReviewSetting(self, key):
119 """Returns a value for the given key for this repository. 119 """Returns a value for the given key for this repository.
120 120
121 Uses gcl-style settings from the repository. 121 Uses gcl-style settings from the repository.
122 """ 122 """
(...skipping 22 matching lines...) Expand all
145 'project': self.GetCodeReviewSetting('TRYSERVER_PROJECT'), 145 'project': self.GetCodeReviewSetting('TRYSERVER_PROJECT'),
146 'root': self.GetCodeReviewSetting('TRYSERVER_ROOT'), 146 'root': self.GetCodeReviewSetting('TRYSERVER_ROOT'),
147 'patchlevel': self.GetCodeReviewSetting('TRYSERVER_PATCHLEVEL'), 147 'patchlevel': self.GetCodeReviewSetting('TRYSERVER_PATCHLEVEL'),
148 } 148 }
149 logging.info('\n'.join(['%s: %s' % (k, v) 149 logging.info('\n'.join(['%s: %s' % (k, v)
150 for (k, v) in settings.iteritems() if v])) 150 for (k, v) in settings.iteritems() if v]))
151 for (k, v) in settings.iteritems(): 151 for (k, v) in settings.iteritems():
152 if v and getattr(self.options, k) is None: 152 if v and getattr(self.options, k) is None:
153 setattr(self.options, k, v) 153 setattr(self.options, k, v)
154 154
155 def _GclientStyleSettings(self):
156 """Find the root, assuming a gclient-style checkout."""
157 if not self.options.no_gclient and not self.options.root:
158 root = self.checkout_root
159 self.gclient_root = gclient_utils.FindGclientRoot(root)
160 if self.gclient_root:
161 logging.info('Found .gclient at %s' % self.gclient_root)
162 self.options.root = gclient_utils.PathDifference(self.gclient_root,
163 root)
164
165 def AutomagicalSettings(self): 155 def AutomagicalSettings(self):
166 """Determines settings based on supported code review and checkout tools. 156 """Determines settings based on supported code review and checkout tools.
167 """ 157 """
168 self._GclientStyleSettings() 158 # Try to find gclient or repo root first.
159 if not self.options.no_search:
160 self.toplevel_root = gclient_utils.FindGclientRoot(self.checkout_root)
161 if self.toplevel_root:
162 logging.info('Found .gclient at %s' % self.toplevel_root)
163 else:
164 self.toplevel_root = gclient_utils.FindFileUpwards(
165 os.path.join('..', '.repo'), self.checkout_root)
166 if self.toplevel_root:
167 logging.info('Found .repo dir at %s'
168 % os.path.dirname(self.toplevel_root))
169
170 if self.toplevel_root and not self.options.root:
171 assert os.path.abspath(self.toplevel_root) == self.toplevel_root
172 self.options.root = gclient_utils.PathDifference(self.toplevel_root,
173 self.checkout_root)
174
169 self._GclStyleSettings() 175 self._GclStyleSettings()
170 176
171 def ReadRootFile(self, filename): 177 def ReadRootFile(self, filename):
172 if not self.options.root: 178 cur = self.checkout_root
173 filepath = os.path.join(self.checkout_root, filename) 179 root = self.toplevel_root or self.checkout_root
174 if os.path.isfile(filepath): 180
175 logging.info('Found %s at %s' % (filename, self.checkout_root))
176 return gclient_utils.FileRead(filepath)
177 return None
178 cur = os.path.abspath(self.checkout_root)
179 if self.gclient_root:
180 root = os.path.abspath(self.gclient_root)
181 else:
182 root = gclient_utils.FindGclientRoot(cur)
183 if not root:
184 root = cur
185 assert cur.startswith(root), (root, cur) 181 assert cur.startswith(root), (root, cur)
186 while cur.startswith(root): 182 while cur.startswith(root):
187 filepath = os.path.join(cur, filename) 183 filepath = os.path.join(cur, filename)
188 if os.path.isfile(filepath): 184 if os.path.isfile(filepath):
189 logging.info('Found %s at %s' % (filename, cur)) 185 logging.info('Found %s at %s' % (filename, cur))
190 return gclient_utils.FileRead(filepath) 186 return gclient_utils.FileRead(filepath)
191 cur = os.path.dirname(cur) 187 cur = os.path.dirname(cur)
192 logging.warning('Didn\'t find %s' % filename) 188 logging.warning('Didn\'t find %s' % filename)
193 return None 189 return None
194 190
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 help="Used as -pN parameter to patch") 583 help="Used as -pN parameter to patch")
588 group.add_option("-s", "--sub_rep", action="append", default=[], 584 group.add_option("-s", "--sub_rep", action="append", default=[],
589 help="Subcheckout to use in addition. This is mainly " 585 help="Subcheckout to use in addition. This is mainly "
590 "useful for gclient-style checkouts. In git, checkout " 586 "useful for gclient-style checkouts. In git, checkout "
591 "the branch with changes first. Use @rev or " 587 "the branch with changes first. Use @rev or "
592 "@branch to specify the " 588 "@branch to specify the "
593 "revision/branch to diff against. If no @branch is " 589 "revision/branch to diff against. If no @branch is "
594 "given the diff will be against the upstream branch. " 590 "given the diff will be against the upstream branch. "
595 "If @branch then the diff is branch..HEAD. " 591 "If @branch then the diff is branch..HEAD. "
596 "All edits must be checked in.") 592 "All edits must be checked in.")
597 group.add_option("--no_gclient", action="store_true", 593 group.add_option("--no_search", action="store_true",
598 help="Disable automatic search for gclient checkout.") 594 help=("Disable automatic search for gclient or repo "
595 "checkout root."))
599 group.add_option("-E", "--exclude", action="append", 596 group.add_option("-E", "--exclude", action="append",
600 default=['ChangeLog'], metavar='REGEXP', 597 default=['ChangeLog'], metavar='REGEXP',
601 help="Regexp patterns to exclude files. Default: %default") 598 help="Regexp patterns to exclude files. Default: %default")
602 group.add_option("--upstream_branch", action="store", 599 group.add_option("--upstream_branch", action="store",
603 help="Specify the upstream branch to diff against in the " 600 help="Specify the upstream branch to diff against in the "
604 "main checkout") 601 "main checkout")
605 parser.add_option_group(group) 602 parser.add_option_group(group)
606 603
607 group = optparse.OptionGroup(parser, "Access the try server by HTTP") 604 group = optparse.OptionGroup(parser, "Access the try server by HTTP")
608 group.add_option("--use_http", 605 group.add_option("--use_http",
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 return 1 806 return 1
810 except (gclient_utils.Error, subprocess2.CalledProcessError), e: 807 except (gclient_utils.Error, subprocess2.CalledProcessError), e:
811 print >> sys.stderr, e 808 print >> sys.stderr, e
812 return 1 809 return 1
813 return 0 810 return 0
814 811
815 812
816 if __name__ == "__main__": 813 if __name__ == "__main__":
817 fix_encoding.fix_encoding() 814 fix_encoding.fix_encoding()
818 sys.exit(TryChange(None, None, False)) 815 sys.exit(TryChange(None, None, False))
OLDNEW
« no previous file with comments | « tests/trychange_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698