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

Side by Side Diff: gclient_scm.py

Issue 6706007: Wrap raw_input() around a try/except to reduce the number of false-positive in breakpad (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 9 years, 8 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 | « no previous file | git_cl.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Gclient-specific SCM-specific operations.""" 5 """Gclient-specific SCM-specific operations."""
6 6
7 import logging 7 import logging
8 import os 8 import os
9 import posixpath 9 import posixpath
10 import re 10 import re
11 import sys
11 import time 12 import time
12 13
13 import scm 14 import scm
14 import gclient_utils 15 import gclient_utils
15 16
16 17
17 class DiffFilterer(object): 18 class DiffFilterer(object):
18 """Simple class which tracks which file is being diffed and 19 """Simple class which tracks which file is being diffed and
19 replaces instances of its file name in the original and 20 replaces instances of its file name in the original and
20 working copy lines of the svn/git diff output.""" 21 working copy lines of the svn/git diff output."""
(...skipping 21 matching lines...) Expand all
42 if (line.startswith(self.index_string)): 43 if (line.startswith(self.index_string)):
43 self.SetCurrentFile(line[len(self.index_string):]) 44 self.SetCurrentFile(line[len(self.index_string):])
44 line = self._Replace(line) 45 line = self._Replace(line)
45 else: 46 else:
46 if (line.startswith(self.original_prefix) or 47 if (line.startswith(self.original_prefix) or
47 line.startswith(self.working_prefix)): 48 line.startswith(self.working_prefix)):
48 line = self._Replace(line) 49 line = self._Replace(line)
49 print(line) 50 print(line)
50 51
51 52
53 def ask_for_data(prompt):
54 try:
55 return raw_input(prompt)
56 except KeyboardInterrupt:
57 # Hide the exception.
58 sys.exit(1)
59
60
52 ### SCM abstraction layer 61 ### SCM abstraction layer
53 62
54 # Factory Method for SCM wrapper creation 63 # Factory Method for SCM wrapper creation
55 64
56 def GetScmName(url): 65 def GetScmName(url):
57 if url: 66 if url:
58 url, _ = gclient_utils.SplitUrlRevision(url) 67 url, _ = gclient_utils.SplitUrlRevision(url)
59 if (url.startswith('git://') or url.startswith('ssh://') or 68 if (url.startswith('git://') or url.startswith('ssh://') or
60 url.endswith('.git')): 69 url.endswith('.git')):
61 return 'git' 70 return 'git'
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 merge_output = scm.GIT.Capture(['merge', '--ff-only', upstream_branch], 355 merge_output = scm.GIT.Capture(['merge', '--ff-only', upstream_branch],
347 cwd=self.checkout_path) 356 cwd=self.checkout_path)
348 except gclient_utils.CheckCallError, e: 357 except gclient_utils.CheckCallError, e:
349 if re.match('fatal: Not possible to fast-forward, aborting.', e.stderr): 358 if re.match('fatal: Not possible to fast-forward, aborting.', e.stderr):
350 if not printed_path: 359 if not printed_path:
351 print('\n_____ %s%s' % (self.relpath, rev_str)) 360 print('\n_____ %s%s' % (self.relpath, rev_str))
352 printed_path = True 361 printed_path = True
353 while True: 362 while True:
354 try: 363 try:
355 # TODO(maruel): That can't work with --jobs. 364 # TODO(maruel): That can't work with --jobs.
356 action = str(raw_input("Cannot fast-forward merge, attempt to " 365 action = ask_for_data(
357 "rebase? (y)es / (q)uit / (s)kip : ")) 366 'Cannot fast-forward merge, attempt to rebase? '
367 '(y)es / (q)uit / (s)kip : ')
358 except ValueError: 368 except ValueError:
359 gclient_utils.Error('Invalid Character') 369 raise gclient_utils.Error('Invalid Character')
360 continue
361 if re.match(r'yes|y', action, re.I): 370 if re.match(r'yes|y', action, re.I):
362 self._AttemptRebase(upstream_branch, files, options, 371 self._AttemptRebase(upstream_branch, files, options,
363 printed_path=printed_path) 372 printed_path=printed_path)
364 printed_path = True 373 printed_path = True
365 break 374 break
366 elif re.match(r'quit|q', action, re.I): 375 elif re.match(r'quit|q', action, re.I):
367 raise gclient_utils.Error("Can't fast-forward, please merge or " 376 raise gclient_utils.Error("Can't fast-forward, please merge or "
368 "rebase manually.\n" 377 "rebase manually.\n"
369 "cd %s && git " % self.checkout_path 378 "cd %s && git " % self.checkout_path
370 + "rebase %s" % upstream_branch) 379 + "rebase %s" % upstream_branch)
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 if branch: 542 if branch:
534 rebase_cmd.append(branch) 543 rebase_cmd.append(branch)
535 544
536 try: 545 try:
537 rebase_output = scm.GIT.Capture(rebase_cmd, cwd=self.checkout_path) 546 rebase_output = scm.GIT.Capture(rebase_cmd, cwd=self.checkout_path)
538 except gclient_utils.CheckCallError, e: 547 except gclient_utils.CheckCallError, e:
539 if (re.match(r'cannot rebase: you have unstaged changes', e.stderr) or 548 if (re.match(r'cannot rebase: you have unstaged changes', e.stderr) or
540 re.match(r'cannot rebase: your index contains uncommitted changes', 549 re.match(r'cannot rebase: your index contains uncommitted changes',
541 e.stderr)): 550 e.stderr)):
542 while True: 551 while True:
543 rebase_action = str(raw_input("Cannot rebase because of unstaged " 552 rebase_action = ask_for_data(
544 "changes.\n'git reset --hard HEAD' ?\n" 553 'Cannot rebase because of unstaged changes.\n'
545 "WARNING: destroys any uncommitted " 554 '\'git reset --hard HEAD\' ?\n'
546 "work in your current branch!" 555 'WARNING: destroys any uncommitted work in your current branch!'
547 " (y)es / (q)uit / (s)how : ")) 556 ' (y)es / (q)uit / (s)how : ')
548 if re.match(r'yes|y', rebase_action, re.I): 557 if re.match(r'yes|y', rebase_action, re.I):
549 self._Run(['reset', '--hard', 'HEAD'], options) 558 self._Run(['reset', '--hard', 'HEAD'], options)
550 # Should this be recursive? 559 # Should this be recursive?
551 rebase_output = scm.GIT.Capture(rebase_cmd, cwd=self.checkout_path) 560 rebase_output = scm.GIT.Capture(rebase_cmd, cwd=self.checkout_path)
552 break 561 break
553 elif re.match(r'quit|q', rebase_action, re.I): 562 elif re.match(r'quit|q', rebase_action, re.I):
554 raise gclient_utils.Error("Please merge or rebase manually\n" 563 raise gclient_utils.Error("Please merge or rebase manually\n"
555 "cd %s && git " % self.checkout_path 564 "cd %s && git " % self.checkout_path
556 + "%s" % ' '.join(rebase_cmd)) 565 + "%s" % ' '.join(rebase_cmd))
557 elif re.match(r'show|s', rebase_action, re.I): 566 elif re.match(r'show|s', rebase_action, re.I):
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
924 933
925 This method returns a new list to be used as a command.""" 934 This method returns a new list to be used as a command."""
926 new_command = command[:] 935 new_command = command[:]
927 if revision: 936 if revision:
928 new_command.extend(['--revision', str(revision).strip()]) 937 new_command.extend(['--revision', str(revision).strip()])
929 # --force was added to 'svn update' in svn 1.5. 938 # --force was added to 'svn update' in svn 1.5.
930 if ((options.force or options.manually_grab_svn_rev) and 939 if ((options.force or options.manually_grab_svn_rev) and
931 scm.SVN.AssertVersion("1.5")[0]): 940 scm.SVN.AssertVersion("1.5")[0]):
932 new_command.append('--force') 941 new_command.append('--force')
933 return new_command 942 return new_command
OLDNEW
« no previous file with comments | « no previous file | git_cl.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698