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

Side by Side Diff: gcl.py

Issue 8360007: Move code starting the editor into a common function. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Rebase against HEAD 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 | « drover.py ('k') | gclient_utils.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 #!/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 """\ 6 """\
7 Wrapper script around Rietveld's upload.py that simplifies working with groups 7 Wrapper script around Rietveld's upload.py that simplifies working with groups
8 of files. 8 of files.
9 """ 9 """
10 10
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 if (files.get('') or (show_unknown_files and len(unknown_files))): 726 if (files.get('') or (show_unknown_files and len(unknown_files))):
727 print "\n--- Not in any changelist:" 727 print "\n--- Not in any changelist:"
728 for item in files.get('', []): 728 for item in files.get('', []):
729 print "".join(item) 729 print "".join(item)
730 if show_unknown_files: 730 if show_unknown_files:
731 for filename in unknown_files: 731 for filename in unknown_files:
732 print "? %s" % filename 732 print "? %s" % filename
733 return 0 733 return 0
734 734
735 735
736 def GetEditor():
737 editor = os.environ.get("SVN_EDITOR")
738 if not editor:
739 editor = os.environ.get("EDITOR")
740
741 if not editor:
742 if sys.platform.startswith("win"):
743 editor = "notepad"
744 else:
745 editor = "vi"
746
747 return editor
748
749
750 def GenerateDiff(files, root=None): 736 def GenerateDiff(files, root=None):
751 return SVN.GenerateDiff(files, root=root) 737 return SVN.GenerateDiff(files, root=root)
752 738
753 739
754 def OptionallyDoPresubmitChecks(change_info, committing, args): 740 def OptionallyDoPresubmitChecks(change_info, committing, args):
755 if FilterFlag(args, "--no_presubmit") or FilterFlag(args, "--force"): 741 if FilterFlag(args, "--no_presubmit") or FilterFlag(args, "--force"):
756 return presubmit_support.PresubmitOutput() 742 return presubmit_support.PresubmitOutput()
757 return DoPresubmitChecks(change_info, committing, True) 743 return DoPresubmitChecks(change_info, committing, True)
758 744
759 745
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1047 1033
1048 Only scans the current directory and subdirectories.""" 1034 Only scans the current directory and subdirectories."""
1049 if len(args) == 0: 1035 if len(args) == 0:
1050 # Generate a random changelist name. 1036 # Generate a random changelist name.
1051 changename = GenerateChangeName() 1037 changename = GenerateChangeName()
1052 elif args[0] == '--force': 1038 elif args[0] == '--force':
1053 changename = GenerateChangeName() 1039 changename = GenerateChangeName()
1054 else: 1040 else:
1055 changename = args[0] 1041 changename = args[0]
1056 change_info = ChangeInfo.Load(changename, GetRepositoryRoot(), False, True) 1042 change_info = ChangeInfo.Load(changename, GetRepositoryRoot(), False, True)
1057 silent = FilterFlag(args, "--silent")
1058 1043
1059 # Verify the user is running the change command from a read-write checkout. 1044 # Verify the user is running the change command from a read-write checkout.
1060 svn_info = SVN.CaptureInfo('.') 1045 svn_info = SVN.CaptureInfo('.')
1061 if not svn_info: 1046 if not svn_info:
1062 ErrorExit("Current checkout is unversioned. Please retry with a versioned " 1047 ErrorExit("Current checkout is unversioned. Please retry with a versioned "
1063 "directory.") 1048 "directory.")
1064 1049
1065 if len(args) == 2: 1050 if len(args) == 2:
1066 if not os.path.isfile(args[1]): 1051 if not os.path.isfile(args[1]):
1067 ErrorExit('The change "%s" doesn\'t exist.' % args[1]) 1052 ErrorExit('The change "%s" doesn\'t exist.' % args[1])
(...skipping 28 matching lines...) Expand all
1096 affected_files = [x for x in other_files if file_re.match(x[0])] 1081 affected_files = [x for x in other_files if file_re.match(x[0])]
1097 unaffected_files = [x for x in other_files if not file_re.match(x[0])] 1082 unaffected_files = [x for x in other_files if not file_re.match(x[0])]
1098 1083
1099 description = description.rstrip() + '\n' 1084 description = description.rstrip() + '\n'
1100 1085
1101 separator1 = ("\n---All lines above this line become the description.\n" 1086 separator1 = ("\n---All lines above this line become the description.\n"
1102 "---Repository Root: " + change_info.GetLocalRoot() + "\n" 1087 "---Repository Root: " + change_info.GetLocalRoot() + "\n"
1103 "---Paths in this changelist (" + change_info.name + "):\n") 1088 "---Paths in this changelist (" + change_info.name + "):\n")
1104 separator2 = "\n\n---Paths modified but not in any changelist:\n\n" 1089 separator2 = "\n\n---Paths modified but not in any changelist:\n\n"
1105 1090
1106 description_to_write = description 1091 text = (description + separator1 + '\n' +
1107 if sys.platform == 'win32':
1108 description_to_write = description.replace('\n', '\r\n')
1109
1110 text = (description_to_write + separator1 + '\n' +
1111 '\n'.join([f[0] + f[1] for f in change_info.GetFiles()])) 1092 '\n'.join([f[0] + f[1] for f in change_info.GetFiles()]))
1112 1093
1113 if change_info.Exists(): 1094 if change_info.Exists():
1114 text += (separator2 + 1095 text += (separator2 +
1115 '\n'.join([f[0] + f[1] for f in affected_files]) + '\n') 1096 '\n'.join([f[0] + f[1] for f in affected_files]) + '\n')
1116 else: 1097 else:
1117 text += ('\n'.join([f[0] + f[1] for f in affected_files]) + '\n' + 1098 text += ('\n'.join([f[0] + f[1] for f in affected_files]) + '\n' +
1118 separator2) 1099 separator2)
1119 text += '\n'.join([f[0] + f[1] for f in unaffected_files]) + '\n' 1100 text += '\n'.join([f[0] + f[1] for f in unaffected_files]) + '\n'
1120 1101
1121 handle, filename = tempfile.mkstemp(text=True) 1102 result = gclient_utils.RunEditor(text, False)
1122 os.write(handle, text)
1123 os.close(handle)
1124
1125 # Open up the default editor in the system to get the CL description.
1126 try:
1127 if not silent:
1128 cmd = '%s %s' % (GetEditor(), filename)
1129 if sys.platform == 'win32' and os.environ.get('TERM') == 'msys':
1130 # Msysgit requires the usage of 'env' to be present.
1131 cmd = 'env ' + cmd
1132 try:
1133 # shell=True to allow the shell to handle all forms of quotes in
1134 # $EDITOR.
1135 subprocess2.check_call(cmd, shell=True)
1136 except subprocess2.CalledProcessError, e:
1137 ErrorExit('Editor returned %d' % e.returncode)
1138 result = gclient_utils.FileRead(filename)
1139 finally:
1140 os.remove(filename)
1141
1142 if not result: 1103 if not result:
1143 return 0 1104 ErrorExit('Running editor failed')
1144 1105
1145 split_result = result.split(separator1, 1) 1106 split_result = result.split(separator1, 1)
1146 if len(split_result) != 2: 1107 if len(split_result) != 2:
1147 ErrorExit("Don't modify the text starting with ---!\n\n" + result) 1108 ErrorExit("Don't modify the text starting with ---!\n\n%r" % result)
1148 1109
1149 # Update the CL description if it has changed. 1110 # Update the CL description if it has changed.
1150 new_description = split_result[0] 1111 new_description = split_result[0]
1151
1152 if sys.platform == 'win32':
1153 new_description = new_description.replace('\r\n', '\n')
1154
1155 cl_files_text = split_result[1] 1112 cl_files_text = split_result[1]
1156 if new_description != description or override_description: 1113 if new_description != description or override_description:
1157 change_info.description = new_description 1114 change_info.description = new_description
1158 change_info.needs_upload = True 1115 change_info.needs_upload = True
1159 1116
1160 new_cl_files = [] 1117 new_cl_files = []
1161 for line in cl_files_text.splitlines(): 1118 for line in cl_files_text.splitlines():
1162 if not len(line): 1119 if not len(line):
1163 continue 1120 continue
1164 if line.startswith("---"): 1121 if line.startswith("---"):
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 raise 1434 raise
1478 print >> sys.stderr, ( 1435 print >> sys.stderr, (
1479 'AppEngine is misbehaving and returned HTTP %d, again. Keep faith ' 1436 'AppEngine is misbehaving and returned HTTP %d, again. Keep faith '
1480 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e)) 1437 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))
1481 return 1 1438 return 1
1482 1439
1483 1440
1484 if __name__ == "__main__": 1441 if __name__ == "__main__":
1485 fix_encoding.fix_encoding() 1442 fix_encoding.fix_encoding()
1486 sys.exit(main(sys.argv[1:])) 1443 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « drover.py ('k') | gclient_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698