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

Side by Side Diff: gcl.py

Issue 115264: Deprecate gcl.GetSVNStatus() for gclient.CaptureSVNStatus() and fix some stat... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: '' Created 11 years, 7 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 | gclient.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/python 1 #!/usr/bin/python
2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2006-2009 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 # Wrapper script around Rietveld's upload.py that groups files into 6 # Wrapper script around Rietveld's upload.py that groups files into
7 # changelists. 7 # changelists.
8 8
9 import getpass 9 import getpass
10 import os 10 import os
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 empty string is also returned. 69 empty string is also returned.
70 """ 70 """
71 output = RunShell(["svn", "propget", property_name, file]) 71 output = RunShell(["svn", "propget", property_name, file])
72 if (output.startswith("svn: ") and 72 if (output.startswith("svn: ") and
73 output.endswith("is not under version control")): 73 output.endswith("is not under version control")):
74 return "" 74 return ""
75 else: 75 else:
76 return output 76 return output
77 77
78 78
79 def GetSVNStatus(file):
80 """Returns the svn 1.5 svn status emulated output.
81
82 @file can be a string (one file) or a list of files."""
83 command = ["svn", "status", "--xml"]
84 if file is None:
85 pass
86 elif isinstance(file, basestring):
87 command.append(file)
88 else:
89 command.extend(file)
90
91 status_letter = {
92 '': ' ',
93 'added': 'A',
94 'conflicted': 'C',
95 'deleted': 'D',
96 'ignored': 'I',
97 'missing': '!',
98 'modified': 'M',
99 'normal': ' ',
100 'replaced': 'R',
101 'unversioned': '?',
102 # TODO(maruel): Find the corresponding strings for X, ~
103 }
104 output = RunShell(command)
105 dom = gclient.ParseXML(output)
106 results = []
107 if dom:
108 # /status/target/entry/(wc-status|commit|author|date)
109 for target in dom.getElementsByTagName('target'):
110 base_path = target.getAttribute('path')
111 for entry in target.getElementsByTagName('entry'):
112 file = entry.getAttribute('path')
113 wc_status = entry.getElementsByTagName('wc-status')
114 assert len(wc_status) == 1
115 # Emulate svn 1.5 status ouput...
116 statuses = [' ' for i in range(7)]
117 # Col 0
118 xml_item_status = wc_status[0].getAttribute('item')
119 if xml_item_status in status_letter:
120 statuses[0] = status_letter[xml_item_status]
121 else:
122 raise Exception('Unknown item status "%s"; please implement me!' %
123 xml_item_status)
124 # Col 1
125 xml_props_status = wc_status[0].getAttribute('props')
126 if xml_props_status == 'modified':
127 statuses[1] = 'M'
128 elif xml_props_status == 'conflicted':
129 statuses[1] = 'C'
130 elif (not xml_props_status or xml_props_status == 'none' or
131 xml_props_status == 'normal'):
132 pass
133 else:
134 raise Exception('Unknown props status "%s"; please implement me!' %
135 xml_props_status)
136 # Col 3
137 if wc_status[0].getAttribute('copied') == 'true':
138 statuses[3] = '+'
139 item = (''.join(statuses), file)
140 results.append(item)
141 return results
142
143
144 def UnknownFiles(extra_args): 79 def UnknownFiles(extra_args):
145 """Runs svn status and prints unknown files. 80 """Runs svn status and prints unknown files.
146 81
147 Any args in |extra_args| are passed to the tool to support giving alternate 82 Any args in |extra_args| are passed to the tool to support giving alternate
148 code locations. 83 code locations.
149 """ 84 """
150 return [item[1] for item in GetSVNStatus(extra_args) if item[0][0] == '?'] 85 return [item[1] for item in gclient.CaptureSVNStatus(extra_args)
86 if item[0][0] == '?']
151 87
152 88
153 def GetRepositoryRoot(): 89 def GetRepositoryRoot():
154 """Returns the top level directory of the current repository. 90 """Returns the top level directory of the current repository.
155 91
156 The directory is returned as an absolute path. 92 The directory is returned as an absolute path.
157 """ 93 """
158 global repository_root 94 global repository_root
159 if not repository_root: 95 if not repository_root:
160 infos = gclient.CaptureSVNInfo(os.getcwd(), print_error=False) 96 infos = gclient.CaptureSVNInfo(os.getcwd(), print_error=False)
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 files = [] 417 files = []
482 for line in split_data[1].splitlines(): 418 for line in split_data[1].splitlines():
483 status = line[:7] 419 status = line[:7]
484 file = line[7:] 420 file = line[7:]
485 files.append((status, file)) 421 files.append((status, file))
486 description = split_data[2] 422 description = split_data[2]
487 save = False 423 save = False
488 if update_status: 424 if update_status:
489 for file in files: 425 for file in files:
490 filename = os.path.join(GetRepositoryRoot(), file[1]) 426 filename = os.path.join(GetRepositoryRoot(), file[1])
491 status_result = GetSVNStatus(filename) 427 status_result = gclient.CaptureSVNStatus(filename)
492 if not status_result or not status_result[0][0]: 428 if not status_result or not status_result[0][0]:
493 # File has been reverted. 429 # File has been reverted.
494 save = True 430 save = True
495 files.remove(file) 431 files.remove(file)
496 continue 432 continue
497 status = status_result[0][0] 433 status = status_result[0][0]
498 if status != file[0]: 434 if status != file[0]:
499 save = True 435 save = True
500 files[files.index(file)] = (status, file[1]) 436 files[files.index(file)] = (status, file[1])
501 change_info = ChangeInfo(changename, issue, description, files) 437 change_info = ChangeInfo(changename, issue, description, files)
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 dir_prefix = os.getcwd()[len(GetRepositoryRoot()):].strip(os.sep) 476 dir_prefix = os.getcwd()[len(GetRepositoryRoot()):].strip(os.sep)
541 477
542 # Get a list of all files in changelists. 478 # Get a list of all files in changelists.
543 files_in_cl = {} 479 files_in_cl = {}
544 for cl in GetCLs(): 480 for cl in GetCLs():
545 change_info = LoadChangelistInfo(cl) 481 change_info = LoadChangelistInfo(cl)
546 for status, filename in change_info.files: 482 for status, filename in change_info.files:
547 files_in_cl[filename] = change_info.name 483 files_in_cl[filename] = change_info.name
548 484
549 # Get all the modified files. 485 # Get all the modified files.
550 status_result = GetSVNStatus(None) 486 status_result = gclient.CaptureSVNStatus(None)
551 for line in status_result: 487 for line in status_result:
552 status = line[0] 488 status = line[0]
553 filename = line[1] 489 filename = line[1]
554 if status[0] == "?": 490 if status[0] == "?":
555 continue 491 continue
556 if dir_prefix: 492 if dir_prefix:
557 filename = os.path.join(dir_prefix, filename) 493 filename = os.path.join(dir_prefix, filename)
558 change_list_name = "" 494 change_list_name = ""
559 if filename in files_in_cl: 495 if filename in files_in_cl:
560 change_list_name = files_in_cl[filename] 496 change_list_name = files_in_cl[filename]
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 # the files. This allows commands such as 'gcl diff xxx' to work. 1082 # the files. This allows commands such as 'gcl diff xxx' to work.
1147 args =["svn", command] 1083 args =["svn", command]
1148 root = GetRepositoryRoot() 1084 root = GetRepositoryRoot()
1149 args.extend([os.path.join(root, x) for x in change_info.FileList()]) 1085 args.extend([os.path.join(root, x) for x in change_info.FileList()])
1150 RunShell(args, True) 1086 RunShell(args, True)
1151 return 0 1087 return 0
1152 1088
1153 1089
1154 if __name__ == "__main__": 1090 if __name__ == "__main__":
1155 sys.exit(main()) 1091 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | gclient.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698