| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 """Unit tests for git_cl.py.""" | 6 """Unit tests for git_cl.py.""" |
| 7 | 7 |
| 8 import os | 8 import os |
| 9 import StringIO | 9 import StringIO |
| 10 import stat | 10 import stat |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 | 110 |
| 111 @classmethod | 111 @classmethod |
| 112 def _upload_calls(cls, similarity, find_copies): | 112 def _upload_calls(cls, similarity, find_copies): |
| 113 return (cls._git_base_calls(similarity, find_copies) + | 113 return (cls._git_base_calls(similarity, find_copies) + |
| 114 cls._git_upload_calls()) | 114 cls._git_upload_calls()) |
| 115 | 115 |
| 116 @classmethod | 116 @classmethod |
| 117 def _git_base_calls(cls, similarity, find_copies): | 117 def _git_base_calls(cls, similarity, find_copies): |
| 118 if similarity is None: | 118 if similarity is None: |
| 119 similarity = '50' | 119 similarity = '50' |
| 120 similarity_call = ((['git', 'config', '--int', '--get', | 120 similarity_call = ((['git', '--no-pager', 'config', '--int', '--get', |
| 121 'branch.master.git-cl-similarity'],), '') | 121 'branch.master.git-cl-similarity'],), '') |
| 122 else: | 122 else: |
| 123 similarity_call = ((['git', 'config', '--int', | 123 similarity_call = ((['git', '--no-pager', 'config', '--int', |
| 124 'branch.master.git-cl-similarity', similarity],), '') | 124 'branch.master.git-cl-similarity', similarity],), '') |
| 125 | 125 |
| 126 if find_copies is None: | 126 if find_copies is None: |
| 127 find_copies = True | 127 find_copies = True |
| 128 find_copies_call = ((['git', 'config', '--int', '--get', | 128 find_copies_call = ((['git', '--no-pager', 'config', '--int', '--get', |
| 129 'branch.master.git-find-copies'],), '') | 129 'branch.master.git-find-copies'],), '') |
| 130 else: | 130 else: |
| 131 val = str(int(find_copies)) | 131 val = str(int(find_copies)) |
| 132 find_copies_call = ((['git', 'config', '--int', | 132 find_copies_call = ((['git', '--no-pager', 'config', '--int', |
| 133 'branch.master.git-find-copies', val],), '') | 133 'branch.master.git-find-copies', val],), '') |
| 134 | 134 |
| 135 if find_copies: | 135 if find_copies: |
| 136 stat_call = ((['git', 'diff', '--no-ext-diff', '--stat', | 136 stat_call = ((['git', '--no-pager', 'diff', '--no-ext-diff', '--stat', |
| 137 '--find-copies-harder', '-l100000', '-C'+similarity, | 137 '--find-copies-harder', '-l100000', '-C'+similarity, |
| 138 'fake_ancestor_sha', 'HEAD'],), '+dat') | 138 'fake_ancestor_sha', 'HEAD'],), '+dat') |
| 139 else: | 139 else: |
| 140 stat_call = ((['git', 'diff', '--no-ext-diff', '--stat', | 140 stat_call = ((['git', '--no-pager', 'diff', '--no-ext-diff', '--stat', |
| 141 '-M'+similarity, 'fake_ancestor_sha', 'HEAD'],), '+dat') | 141 '-M'+similarity, 'fake_ancestor_sha', 'HEAD'],), '+dat') |
| 142 | 142 |
| 143 return [ | 143 return [ |
| 144 ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'), | 144 ((['git', '--no-pager', 'config', 'rietveld.server'],), |
| 145 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 145 'codereview.example.com'), |
| 146 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'master'), |
| 146 similarity_call, | 147 similarity_call, |
| 147 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 148 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'master'), |
| 148 find_copies_call, | 149 find_copies_call, |
| 149 ((['git', 'update-index', '--refresh', '-q'],), ''), | 150 ((['git', '--no-pager', 'update-index', '--refresh', '-q'],), ''), |
| 150 ((['git', 'diff-index', '--name-status', 'HEAD'],), ''), | 151 ((['git', '--no-pager', 'diff-index', '--name-status', 'HEAD'],), ''), |
| 151 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 152 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'master'), |
| 152 ((['git', 'config', 'branch.master.merge'],), 'master'), | 153 ((['git', '--no-pager', 'config', 'branch.master.merge'],), 'master'), |
| 153 ((['git', 'config', 'branch.master.remote'],), 'origin'), | 154 ((['git', '--no-pager', 'config', 'branch.master.remote'],), 'origin'), |
| 154 ((['git', 'merge-base', 'master', 'HEAD'],), 'fake_ancestor_sha'), | 155 ((['git', '--no-pager', 'merge-base', 'master', 'HEAD'],), |
| 156 'fake_ancestor_sha'), |
| 155 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ | 157 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ |
| 156 ((['git', 'rev-parse', '--show-cdup'],), ''), | 158 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), |
| 157 ((['git', 'rev-parse', 'HEAD'],), '12345'), | 159 ((['git', '--no-pager', 'rev-parse', 'HEAD'],), '12345'), |
| 158 ((['git', 'diff', '--name-status', '-r', 'fake_ancestor_sha...', '.'],), | 160 ((['git', '--no-pager', 'diff', '--name-status', '-r', |
| 161 'fake_ancestor_sha...', '.'],), |
| 159 'M\t.gitignore\n'), | 162 'M\t.gitignore\n'), |
| 160 ((['git', 'config', 'branch.master.rietveldissue'],), ''), | 163 ((['git', '--no-pager', 'config', 'branch.master.rietveldissue'],), ''), |
| 161 ((['git', 'config', 'branch.master.rietveldpatchset'],), ''), | 164 ((['git', '--no-pager', 'config', 'branch.master.rietveldpatchset'],), |
| 162 ((['git', 'log', '--pretty=format:%s%n%n%b', 'fake_ancestor_sha...'],), | 165 ''), |
| 166 ((['git', '--no-pager', 'log', '--pretty=format:%s%n%n%b', |
| 167 'fake_ancestor_sha...'],), |
| 163 'foo'), | 168 'foo'), |
| 164 ((['git', 'config', 'user.email'],), 'me@example.com'), | 169 ((['git', '--no-pager', 'config', 'user.email'],), 'me@example.com'), |
| 165 stat_call, | 170 stat_call, |
| 166 ((['git', 'config', 'gerrit.host'],), ''), | 171 ((['git', '--no-pager', 'config', 'gerrit.host'],), ''), |
| 167 ((['git', 'log', '--pretty=format:%s\n\n%b', 'fake_ancestor_sha..HEAD'],), | 172 ((['git', '--no-pager', 'log', '--pretty=format:%s\n\n%b', |
| 173 'fake_ancestor_sha..HEAD'],), |
| 168 'desc\n'), | 174 'desc\n'), |
| 169 ] | 175 ] |
| 170 | 176 |
| 171 @classmethod | 177 @classmethod |
| 172 def _git_upload_calls(cls): | 178 def _git_upload_calls(cls): |
| 173 return [ | 179 return [ |
| 174 ((['git', 'config', 'rietveld.cc'],), ''), | 180 ((['git', '--no-pager', 'config', 'rietveld.cc'],), ''), |
| 175 ((['git', 'config', 'branch.master.base-url'],), ''), | 181 ((['git', '--no-pager', 'config', 'branch.master.base-url'],), ''), |
| 176 ((['git', 'config', '--local', '--get-regexp', '^svn-remote\\.'],), | 182 ((['git', '--no-pager', |
| 183 'config', '--local', '--get-regexp', '^svn-remote\\.'],), |
| 177 (('', None), 0)), | 184 (('', None), 0)), |
| 178 ((['git', 'rev-parse', '--show-cdup'],), ''), | 185 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), |
| 179 ((['git', 'svn', 'info'],), ''), | 186 ((['git', '--no-pager', 'svn', 'info'],), ''), |
| 180 ((['git', 'config', 'branch.master.rietveldissue', '1'],), ''), | 187 ((['git', '--no-pager', |
| 181 ((['git', 'config', 'branch.master.rietveldserver', | 188 'config', 'branch.master.rietveldissue', '1'],), ''), |
| 189 ((['git', '--no-pager', 'config', 'branch.master.rietveldserver', |
| 182 'https://codereview.example.com'],), ''), | 190 'https://codereview.example.com'],), ''), |
| 183 ((['git', 'config', 'branch.master.rietveldpatchset', '2'],), ''), | 191 ((['git', '--no-pager', |
| 184 ((['git', 'rev-parse', 'HEAD'],), 'hash'), | 192 'config', 'branch.master.rietveldpatchset', '2'],), ''), |
| 185 ((['git', 'symbolic-ref', 'HEAD'],), 'hash'), | 193 ((['git', '--no-pager', 'rev-parse', 'HEAD'],), 'hash'), |
| 186 ((['git', 'config', 'branch.hash.last-upload-hash', 'hash'],), ''), | 194 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'hash'), |
| 195 ((['git', '--no-pager', |
| 196 'config', 'branch.hash.last-upload-hash', 'hash'],), ''), |
| 187 ] | 197 ] |
| 188 | 198 |
| 189 @staticmethod | 199 @staticmethod |
| 190 def _git_sanity_checks(diff_base, working_branch): | 200 def _git_sanity_checks(diff_base, working_branch): |
| 191 fake_ancestor = 'fake_ancestor' | 201 fake_ancestor = 'fake_ancestor' |
| 192 fake_cl = 'fake_cl_for_patch' | 202 fake_cl = 'fake_cl_for_patch' |
| 193 return [ | 203 return [ |
| 194 # Calls to verify branch point is ancestor | 204 # Calls to verify branch point is ancestor |
| 195 ((['git', 'rev-parse', '--verify', diff_base],), fake_ancestor), | 205 ((['git', '--no-pager', |
| 196 ((['git', 'merge-base', fake_ancestor, 'HEAD'],), fake_ancestor), | 206 'rev-parse', '--verify', diff_base],), fake_ancestor), |
| 197 ((['git', 'rev-list', '^' + fake_ancestor, 'HEAD'],), fake_cl), | 207 ((['git', '--no-pager', |
| 208 'merge-base', fake_ancestor, 'HEAD'],), fake_ancestor), |
| 209 ((['git', '--no-pager', |
| 210 'rev-list', '^' + fake_ancestor, 'HEAD'],), fake_cl), |
| 198 # Mock a config miss (error code 1) | 211 # Mock a config miss (error code 1) |
| 199 ((['git', 'config', 'gitcl.remotebranch'],), (('', None), 1)), | 212 ((['git', '--no-pager', |
| 213 'config', 'gitcl.remotebranch'],), (('', None), 1)), |
| 200 # Call to GetRemoteBranch() | 214 # Call to GetRemoteBranch() |
| 201 ((['git', 'config', 'branch.%s.merge' % working_branch],), | 215 ((['git', '--no-pager', |
| 216 'config', 'branch.%s.merge' % working_branch],), |
| 202 'refs/heads/master'), | 217 'refs/heads/master'), |
| 203 ((['git', 'config', 'branch.%s.remote' % working_branch],), 'origin'), | 218 ((['git', '--no-pager', |
| 204 ((['git', 'rev-list', '^' + fake_ancestor, | 219 'config', 'branch.%s.remote' % working_branch],), 'origin'), |
| 220 ((['git', '--no-pager', 'rev-list', '^' + fake_ancestor, |
| 205 'refs/remotes/origin/master'],), ''), | 221 'refs/remotes/origin/master'],), ''), |
| 206 ] | 222 ] |
| 207 | 223 |
| 208 @classmethod | 224 @classmethod |
| 209 def _dcommit_calls_1(cls): | 225 def _dcommit_calls_1(cls): |
| 210 return [ | 226 return [ |
| 211 ((['git', 'config', '--local', '--get-regexp', '^svn-remote\\.'],), | 227 ((['git', '--no-pager', |
| 228 'config', '--local', '--get-regexp', '^svn-remote\\.'],), |
| 212 ((('svn-remote.svn.url svn://svn.chromium.org/chrome\n' | 229 ((('svn-remote.svn.url svn://svn.chromium.org/chrome\n' |
| 213 'svn-remote.svn.fetch trunk/src:refs/remotes/origin/master'), | 230 'svn-remote.svn.fetch trunk/src:refs/remotes/origin/master'), |
| 214 None), | 231 None), |
| 215 0)), | 232 0)), |
| 216 ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'), | 233 ((['git', '--no-pager', |
| 217 ((['git', 'symbolic-ref', 'HEAD'],), 'refs/heads/working'), | 234 'config', 'rietveld.server'],), 'codereview.example.com'), |
| 218 ((['git', 'config', '--int', '--get', | 235 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'refs/heads/working'), |
| 236 ((['git', '--no-pager', 'config', '--int', '--get', |
| 219 'branch.working.git-cl-similarity'],), ''), | 237 'branch.working.git-cl-similarity'],), ''), |
| 220 ((['git', 'symbolic-ref', 'HEAD'],), 'refs/heads/working'), | 238 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'refs/heads/working'), |
| 221 ((['git', 'config', '--int', '--get', | 239 ((['git', '--no-pager', 'config', '--int', '--get', |
| 222 'branch.working.git-find-copies'],), ''), | 240 'branch.working.git-find-copies'],), ''), |
| 223 ((['git', 'symbolic-ref', 'HEAD'],), 'refs/heads/working'), | 241 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'refs/heads/working'), |
| 224 ((['git', 'config', 'branch.working.merge'],), 'refs/heads/master'), | 242 ((['git', '--no-pager', |
| 225 ((['git', 'config', 'branch.working.remote'],), 'origin'), | 243 'config', 'branch.working.merge'],), 'refs/heads/master'), |
| 226 ((['git', 'rev-list', '--merges', | 244 ((['git', '--no-pager', 'config', 'branch.working.remote'],), 'origin'), |
| 245 ((['git', '--no-pager', 'rev-list', '--merges', |
| 227 '--grep=^SVN changes up to revision [0-9]*$', | 246 '--grep=^SVN changes up to revision [0-9]*$', |
| 228 'refs/remotes/origin/master^!'],), ''), | 247 'refs/remotes/origin/master^!'],), ''), |
| 229 ((['git', 'update-index', '--refresh', '-q'],), ''), | 248 ((['git', '--no-pager', 'update-index', '--refresh', '-q'],), ''), |
| 230 ((['git', 'diff-index', '--name-status', 'HEAD'],), ''), | 249 ((['git', '--no-pager', 'diff-index', '--name-status', 'HEAD'],), ''), |
| 231 ((['git', 'rev-list', '^refs/heads/working', | 250 ((['git', '--no-pager', 'rev-list', '^refs/heads/working', |
| 232 'refs/remotes/origin/master'],), | 251 'refs/remotes/origin/master'],), |
| 233 ''), | 252 ''), |
| 234 ((['git', 'log', '--grep=^git-svn-id:', '-1', '--pretty=format:%H'],), | 253 ((['git', '--no-pager', |
| 254 'log', '--grep=^git-svn-id:', '-1', '--pretty=format:%H'],), |
| 235 '3fc18b62c4966193eb435baabe2d18a3810ec82e'), | 255 '3fc18b62c4966193eb435baabe2d18a3810ec82e'), |
| 236 ((['git', 'rev-list', '^3fc18b62c4966193eb435baabe2d18a3810ec82e', | 256 ((['git', '--no-pager', |
| 257 'rev-list', '^3fc18b62c4966193eb435baabe2d18a3810ec82e', |
| 237 'refs/remotes/origin/master'],), ''), | 258 'refs/remotes/origin/master'],), ''), |
| 238 ((['git', 'merge-base', 'refs/remotes/origin/master', 'HEAD'],), | 259 ((['git', '--no-pager', |
| 260 'merge-base', 'refs/remotes/origin/master', 'HEAD'],), |
| 239 'fake_ancestor_sha'), | 261 'fake_ancestor_sha'), |
| 240 ] | 262 ] |
| 241 | 263 |
| 242 @classmethod | 264 @classmethod |
| 243 def _dcommit_calls_normal(cls): | 265 def _dcommit_calls_normal(cls): |
| 244 return [ | 266 return [ |
| 245 ((['git', 'rev-parse', '--show-cdup'],), ''), | 267 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), |
| 246 ((['git', 'rev-parse', 'HEAD'],), | 268 ((['git', '--no-pager', 'rev-parse', 'HEAD'],), |
| 247 '00ff397798ea57439712ed7e04ab96e13969ef40'), | 269 '00ff397798ea57439712ed7e04ab96e13969ef40'), |
| 248 ((['git', 'diff', '--name-status', '-r', 'fake_ancestor_sha...', | 270 ((['git', '--no-pager', |
| 271 'diff', '--name-status', '-r', 'fake_ancestor_sha...', |
| 249 '.'],), | 272 '.'],), |
| 250 'M\tPRESUBMIT.py'), | 273 'M\tPRESUBMIT.py'), |
| 251 ((['git', 'config', 'branch.working.rietveldissue'],), '12345'), | 274 ((['git', '--no-pager', |
| 252 ((['git', 'config', 'branch.working.rietveldpatchset'],), '31137'), | 275 'config', 'branch.working.rietveldissue'],), '12345'), |
| 253 ((['git', 'config', 'branch.working.rietveldserver'],), | 276 ((['git', '--no-pager', |
| 277 'config', 'branch.working.rietveldpatchset'],), '31137'), |
| 278 ((['git', '--no-pager', 'config', 'branch.working.rietveldserver'],), |
| 254 'codereview.example.com'), | 279 'codereview.example.com'), |
| 255 ((['git', 'config', 'user.email'],), 'author@example.com'), | 280 ((['git', '--no-pager', 'config', 'user.email'],), 'author@example.com'), |
| 256 ((['git', 'config', 'rietveld.tree-status-url'],), ''), | 281 ((['git', '--no-pager', 'config', 'rietveld.tree-status-url'],), ''), |
| 257 ] | 282 ] |
| 258 | 283 |
| 259 @classmethod | 284 @classmethod |
| 260 def _dcommit_calls_bypassed(cls): | 285 def _dcommit_calls_bypassed(cls): |
| 261 return [ | 286 return [ |
| 262 ((['git', 'config', 'branch.working.rietveldissue'],), '12345'), | 287 ((['git', '--no-pager', |
| 263 ((['git', 'config', 'branch.working.rietveldserver'],), | 288 'config', 'branch.working.rietveldissue'],), '12345'), |
| 289 ((['git', '--no-pager', 'config', 'branch.working.rietveldserver'],), |
| 264 'codereview.example.com'), | 290 'codereview.example.com'), |
| 265 (('GitClHooksBypassedCommit', | 291 (('GitClHooksBypassedCommit', |
| 266 'Issue https://codereview.example.com/12345 bypassed hook when ' | 292 'Issue https://codereview.example.com/12345 bypassed hook when ' |
| 267 'committing'), None), | 293 'committing'), None), |
| 268 ] | 294 ] |
| 269 | 295 |
| 270 @classmethod | 296 @classmethod |
| 271 def _dcommit_calls_3(cls): | 297 def _dcommit_calls_3(cls): |
| 272 return [ | 298 return [ |
| 273 ((['git', 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', | 299 ((['git', '--no-pager', |
| 300 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', |
| 274 '-l100000', '-C50', 'fake_ancestor_sha', | 301 '-l100000', '-C50', 'fake_ancestor_sha', |
| 275 'refs/heads/working'],), | 302 'refs/heads/working'],), |
| 276 (' PRESUBMIT.py | 2 +-\n' | 303 (' PRESUBMIT.py | 2 +-\n' |
| 277 ' 1 files changed, 1 insertions(+), 1 deletions(-)\n')), | 304 ' 1 files changed, 1 insertions(+), 1 deletions(-)\n')), |
| 278 (('About to commit; enter to confirm.',), None), | 305 (('About to commit; enter to confirm.',), None), |
| 279 ((['git', 'show-ref', '--quiet', '--verify', | 306 ((['git', '--no-pager', 'show-ref', '--quiet', '--verify', |
| 280 'refs/heads/git-cl-commit'],), | 307 'refs/heads/git-cl-commit'],), |
| 281 (('', None), 0)), | 308 (('', None), 0)), |
| 282 ((['git', 'branch', '-D', 'git-cl-commit'],), ''), | 309 ((['git', '--no-pager', 'branch', '-D', 'git-cl-commit'],), ''), |
| 283 ((['git', 'show-ref', '--quiet', '--verify', | 310 ((['git', '--no-pager', 'show-ref', '--quiet', '--verify', |
| 284 'refs/heads/git-cl-cherry-pick'],), ''), | 311 'refs/heads/git-cl-cherry-pick'],), ''), |
| 285 ((['git', 'rev-parse', '--show-cdup'],), '\n'), | 312 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), '\n'), |
| 286 ((['git', 'checkout', '-q', '-b', 'git-cl-commit'],), ''), | 313 ((['git', '--no-pager', 'checkout', '-q', '-b', 'git-cl-commit'],), ''), |
| 287 ((['git', 'reset', '--soft', 'fake_ancestor_sha'],), ''), | 314 ((['git', '--no-pager', 'reset', '--soft', 'fake_ancestor_sha'],), ''), |
| 288 ((['git', 'commit', '-m', | 315 ((['git', '--no-pager', 'commit', '-m', |
| 289 'Issue: 12345\n\nR=john@chromium.org\n\n' | 316 'Issue: 12345\n\nR=john@chromium.org\n\n' |
| 290 'Review URL: https://codereview.example.com/12345'],), | 317 'Review URL: https://codereview.example.com/12345'],), |
| 291 ''), | 318 ''), |
| 292 ((['git', 'svn', 'dcommit', '-C50', '--no-rebase', '--rmdir'],), | 319 ((['git', '--no-pager', |
| 320 'svn', 'dcommit', '-C50', '--no-rebase', '--rmdir'],), |
| 293 (('', None), 0)), | 321 (('', None), 0)), |
| 294 ((['git', 'checkout', '-q', 'working'],), ''), | 322 ((['git', '--no-pager', 'checkout', '-q', 'working'],), ''), |
| 295 ((['git', 'branch', '-D', 'git-cl-commit'],), ''), | 323 ((['git', '--no-pager', 'branch', '-D', 'git-cl-commit'],), ''), |
| 296 ] | 324 ] |
| 297 | 325 |
| 298 @staticmethod | 326 @staticmethod |
| 299 def _cmd_line(description, args, similarity, find_copies): | 327 def _cmd_line(description, args, similarity, find_copies): |
| 300 """Returns the upload command line passed to upload.RealMain().""" | 328 """Returns the upload command line passed to upload.RealMain().""" |
| 301 return [ | 329 return [ |
| 302 'upload', '--assume_yes', '--server', | 330 'upload', '--assume_yes', '--server', |
| 303 'https://codereview.example.com', | 331 'https://codereview.example.com', |
| 304 '--message', description | 332 '--message', description |
| 305 ] + args + [ | 333 ] + args + [ |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 self.calls = ( | 473 self.calls = ( |
| 446 self._dcommit_calls_1() + | 474 self._dcommit_calls_1() + |
| 447 self._dcommit_calls_bypassed() + | 475 self._dcommit_calls_bypassed() + |
| 448 self._dcommit_calls_3()) | 476 self._dcommit_calls_3()) |
| 449 git_cl.main(['dcommit', '--bypass-hooks']) | 477 git_cl.main(['dcommit', '--bypass-hooks']) |
| 450 | 478 |
| 451 | 479 |
| 452 @classmethod | 480 @classmethod |
| 453 def _gerrit_base_calls(cls): | 481 def _gerrit_base_calls(cls): |
| 454 return [ | 482 return [ |
| 455 ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'), | 483 ((['git', '--no-pager', |
| 456 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 484 'config', 'rietveld.server'],), 'codereview.example.com'), |
| 457 ((['git', 'config', '--int', '--get', | 485 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'master'), |
| 486 ((['git', '--no-pager', 'config', '--int', '--get', |
| 458 'branch.master.git-cl-similarity'],), ''), | 487 'branch.master.git-cl-similarity'],), ''), |
| 459 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 488 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'master'), |
| 460 ((['git', 'config', '--int', '--get', | 489 ((['git', '--no-pager', 'config', '--int', '--get', |
| 461 'branch.master.git-find-copies'],), ''), | 490 'branch.master.git-find-copies'],), ''), |
| 462 ((['git', 'update-index', '--refresh', '-q'],), ''), | 491 ((['git', '--no-pager', 'update-index', '--refresh', '-q'],), ''), |
| 463 ((['git', 'diff-index', '--name-status', 'HEAD'],), ''), | 492 ((['git', '--no-pager', 'diff-index', '--name-status', 'HEAD'],), ''), |
| 464 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 493 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'master'), |
| 465 ((['git', 'config', 'branch.master.merge'],), 'master'), | 494 ((['git', '--no-pager', 'config', 'branch.master.merge'],), 'master'), |
| 466 ((['git', 'config', 'branch.master.remote'],), 'origin'), | 495 ((['git', '--no-pager', 'config', 'branch.master.remote'],), 'origin'), |
| 467 ((['git', 'merge-base', 'master', 'HEAD'],), 'fake_ancestor_sha'), | 496 ((['git', '--no-pager', |
| 497 'merge-base', 'master', 'HEAD'],), 'fake_ancestor_sha'), |
| 468 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ | 498 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ |
| 469 ((['git', 'rev-parse', '--show-cdup'],), ''), | 499 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), |
| 470 ((['git', 'rev-parse', 'HEAD'],), '12345'), | 500 ((['git', '--no-pager', 'rev-parse', 'HEAD'],), '12345'), |
| 471 ((['git', 'diff', '--name-status', '-r', 'fake_ancestor_sha...', '.'],), | 501 ((['git', '--no-pager', |
| 502 'diff', '--name-status', '-r', 'fake_ancestor_sha...', '.'],), |
| 472 'M\t.gitignore\n'), | 503 'M\t.gitignore\n'), |
| 473 ((['git', 'config', 'branch.master.rietveldissue'],), ''), | 504 ((['git', '--no-pager', 'config', 'branch.master.rietveldissue'],), ''), |
| 474 ((['git', 'config', 'branch.master.rietveldpatchset'],), ''), | 505 ((['git', '--no-pager', |
| 475 ((['git', 'log', '--pretty=format:%s%n%n%b', 'fake_ancestor_sha...'],), | 506 'config', 'branch.master.rietveldpatchset'],), ''), |
| 507 ((['git', '--no-pager', |
| 508 'log', '--pretty=format:%s%n%n%b', 'fake_ancestor_sha...'],), |
| 476 'foo'), | 509 'foo'), |
| 477 ((['git', 'config', 'user.email'],), 'me@example.com'), | 510 ((['git', '--no-pager', 'config', 'user.email'],), 'me@example.com'), |
| 478 ((['git', 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', | 511 ((['git', '--no-pager', |
| 512 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', |
| 479 '-l100000', '-C50', 'fake_ancestor_sha', 'HEAD'],), | 513 '-l100000', '-C50', 'fake_ancestor_sha', 'HEAD'],), |
| 480 '+dat'), | 514 '+dat'), |
| 481 ] | 515 ] |
| 482 | 516 |
| 483 @staticmethod | 517 @staticmethod |
| 484 def _gerrit_upload_calls(description, reviewers): | 518 def _gerrit_upload_calls(description, reviewers): |
| 485 calls = [ | 519 calls = [ |
| 486 ((['git', 'config', 'gerrit.host'],), 'gerrit.example.com'), | 520 ((['git', '--no-pager', 'config', 'gerrit.host'],), |
| 487 ((['git', 'log', '--pretty=format:%s\n\n%b', | 521 'gerrit.example.com'), |
| 522 ((['git', '--no-pager', 'log', '--pretty=format:%s\n\n%b', |
| 488 'fake_ancestor_sha..HEAD'],), | 523 'fake_ancestor_sha..HEAD'],), |
| 489 description) | 524 description) |
| 490 ] | 525 ] |
| 491 if git_cl.CHANGE_ID not in description: | 526 if git_cl.CHANGE_ID not in description: |
| 492 calls += [ | 527 calls += [ |
| 493 ((['git', 'log', '--pretty=format:%s\n\n%b', | 528 ((['git', '--no-pager', 'log', '--pretty=format:%s\n\n%b', |
| 494 'fake_ancestor_sha..HEAD'],), | 529 'fake_ancestor_sha..HEAD'],), |
| 495 description), | 530 description), |
| 496 ((['git', 'commit', '--amend', '-m', description],), | 531 ((['git', '--no-pager', 'commit', '--amend', '-m', description],), |
| 497 ''), | 532 ''), |
| 498 ((['git', 'log', '--pretty=format:%s\n\n%b', | 533 ((['git', '--no-pager', 'log', '--pretty=format:%s\n\n%b', |
| 499 'fake_ancestor_sha..HEAD'],), | 534 'fake_ancestor_sha..HEAD'],), |
| 500 description) | 535 description) |
| 501 ] | 536 ] |
| 502 calls += [ | 537 calls += [ |
| 503 ((['git', 'config', 'rietveld.cc'],), '') | 538 ((['git', '--no-pager', 'config', 'rietveld.cc'],), '') |
| 504 ] | 539 ] |
| 505 receive_pack = '--receive-pack=git receive-pack ' | 540 receive_pack = '--receive-pack=git receive-pack ' |
| 506 receive_pack += '--cc=joe@example.com' # from watch list | 541 receive_pack += '--cc=joe@example.com' # from watch list |
| 507 if reviewers: | 542 if reviewers: |
| 508 receive_pack += ' ' | 543 receive_pack += ' ' |
| 509 receive_pack += ' '.join( | 544 receive_pack += ' '.join( |
| 510 '--reviewer=' + email for email in sorted(reviewers)) | 545 '--reviewer=' + email for email in sorted(reviewers)) |
| 511 receive_pack += '' | 546 receive_pack += '' |
| 512 calls += [ | 547 calls += [ |
| 513 ((['git', 'push', receive_pack, 'origin', 'HEAD:refs/for/master'],), | 548 ((['git', '--no-pager', |
| 549 'push', receive_pack, 'origin', 'HEAD:refs/for/master'],), |
| 514 '') | 550 '') |
| 515 ] | 551 ] |
| 516 return calls | 552 return calls |
| 517 | 553 |
| 518 def _run_gerrit_upload_test( | 554 def _run_gerrit_upload_test( |
| 519 self, | 555 self, |
| 520 upload_args, | 556 upload_args, |
| 521 description, | 557 description, |
| 522 reviewers): | 558 reviewers): |
| 523 """Generic gerrit upload test framework.""" | 559 """Generic gerrit upload test framework.""" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 self.mock(git_cl.os.path, 'abspath', AbsPath) | 607 self.mock(git_cl.os.path, 'abspath', AbsPath) |
| 572 commit_msg_path = os.path.join(src_dir, '.git', 'hooks', 'commit-msg') | 608 commit_msg_path = os.path.join(src_dir, '.git', 'hooks', 'commit-msg') |
| 573 def Exists(path): | 609 def Exists(path): |
| 574 if path == commit_msg_path: | 610 if path == commit_msg_path: |
| 575 return False | 611 return False |
| 576 # others paths, such as /usr/share/locale/.... | 612 # others paths, such as /usr/share/locale/.... |
| 577 return True | 613 return True |
| 578 self.mock(git_cl.os.path, 'exists', Exists) | 614 self.mock(git_cl.os.path, 'exists', Exists) |
| 579 self.mock(git_cl, 'urlretrieve', self._mocked_call) | 615 self.mock(git_cl, 'urlretrieve', self._mocked_call) |
| 580 self.calls = [ | 616 self.calls = [ |
| 581 ((['git', 'config', 'rietveld.server', 'gerrit.chromium.org'],), ''), | 617 ((['git', '--no-pager', 'config', 'rietveld.server', |
| 582 ((['git', 'config', '--unset-all', 'rietveld.cc'],), ''), | 618 'gerrit.chromium.org'],), ''), |
| 583 ((['git', 'config', '--unset-all', 'rietveld.tree-status-url'],), ''), | 619 ((['git', '--no-pager', 'config', '--unset-all', 'rietveld.cc'],), ''), |
| 584 ((['git', 'config', '--unset-all', 'rietveld.viewvc-url'],), ''), | 620 ((['git', '--no-pager', 'config', '--unset-all', |
| 585 ((['git', 'config', 'gerrit.host', 'gerrit.chromium.org'],), ''), | 621 'rietveld.tree-status-url'],), ''), |
| 586 ((['git', 'config', 'gerrit.port', '29418'],), ''), | 622 ((['git', '--no-pager', 'config', '--unset-all', |
| 623 'rietveld.viewvc-url'],), ''), |
| 624 ((['git', '--no-pager', 'config', 'gerrit.host', |
| 625 'gerrit.chromium.org'],), ''), |
| 626 ((['git', '--no-pager', 'config', 'gerrit.port', '29418'],), ''), |
| 587 # DownloadHooks(False) | 627 # DownloadHooks(False) |
| 588 ((['git', 'config', 'gerrit.host'],), 'gerrit.chromium.org'), | 628 ((['git', '--no-pager', 'config', 'gerrit.host'],), |
| 589 ((['git', 'config', 'rietveld.server'],), 'gerrit.chromium.org'), | 629 'gerrit.chromium.org'), |
| 590 ((['git', 'rev-parse', '--show-cdup'],), ''), | 630 ((['git', '--no-pager', 'config', 'rietveld.server'],), |
| 631 'gerrit.chromium.org'), |
| 632 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), |
| 591 ((commit_msg_path, os.X_OK,), False), | 633 ((commit_msg_path, os.X_OK,), False), |
| 592 (('https://gerrit.chromium.org/tools/hooks/commit-msg', | 634 (('https://gerrit.chromium.org/tools/hooks/commit-msg', |
| 593 commit_msg_path,), ''), | 635 commit_msg_path,), ''), |
| 594 ((commit_msg_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR,), ''), | 636 ((commit_msg_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR,), ''), |
| 595 # GetCodereviewSettingsInteractively | 637 # GetCodereviewSettingsInteractively |
| 596 ((['git', 'config', 'rietveld.server'],), 'gerrit.chromium.org'), | 638 ((['git', '--no-pager', 'config', 'rietveld.server'],), |
| 639 'gerrit.chromium.org'), |
| 597 (('Rietveld server (host[:port]) [https://gerrit.chromium.org]:',), | 640 (('Rietveld server (host[:port]) [https://gerrit.chromium.org]:',), |
| 598 ''), | 641 ''), |
| 599 ((['git', 'config', 'rietveld.cc'],), ''), | 642 ((['git', '--no-pager', 'config', 'rietveld.cc'],), ''), |
| 600 (('CC list:',), ''), | 643 (('CC list:',), ''), |
| 601 ((['git', 'config', 'rietveld.tree-status-url'],), ''), | 644 ((['git', '--no-pager', 'config', 'rietveld.tree-status-url'],), ''), |
| 602 (('Tree status URL:',), ''), | 645 (('Tree status URL:',), ''), |
| 603 ((['git', 'config', 'rietveld.viewvc-url'],), ''), | 646 ((['git', '--no-pager', 'config', 'rietveld.viewvc-url'],), ''), |
| 604 (('ViewVC URL:',), ''), | 647 (('ViewVC URL:',), ''), |
| 605 # DownloadHooks(True) | 648 # DownloadHooks(True) |
| 606 ((commit_msg_path, os.X_OK,), True), | 649 ((commit_msg_path, os.X_OK,), True), |
| 607 ] | 650 ] |
| 608 git_cl.main(['config']) | 651 git_cl.main(['config']) |
| 609 | 652 |
| 610 def test_update_reviewers(self): | 653 def test_update_reviewers(self): |
| 611 data = [ | 654 data = [ |
| 612 ('foo', [], 'foo'), | 655 ('foo', [], 'foo'), |
| 613 ('foo', ['a@c'], 'foo\n\nR=a@c'), | 656 ('foo', ['a@c'], 'foo\n\nR=a@c'), |
| (...skipping 16 matching lines...) Expand all Loading... |
| 630 obj = git_cl.ChangeDescription(orig) | 673 obj = git_cl.ChangeDescription(orig) |
| 631 obj.update_reviewers(reviewers) | 674 obj.update_reviewers(reviewers) |
| 632 actual.append(obj.description) | 675 actual.append(obj.description) |
| 633 self.assertEqual(expected, actual) | 676 self.assertEqual(expected, actual) |
| 634 | 677 |
| 635 | 678 |
| 636 if __name__ == '__main__': | 679 if __name__ == '__main__': |
| 637 git_cl.logging.basicConfig( | 680 git_cl.logging.basicConfig( |
| 638 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) | 681 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) |
| 639 unittest.main() | 682 unittest.main() |
| OLD | NEW |