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

Side by Side Diff: gclient_scm.py

Issue 2673002: Add pylintrc and fix style for many scripts. (Closed)
Patch Set: . Created 10 years, 6 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
« no previous file with comments | « gclient.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 # 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
(...skipping 12 matching lines...) Expand all
23 original_prefix = "--- " 23 original_prefix = "--- "
24 working_prefix = "+++ " 24 working_prefix = "+++ "
25 25
26 def __init__(self, relpath): 26 def __init__(self, relpath):
27 # Note that we always use '/' as the path separator to be 27 # Note that we always use '/' as the path separator to be
28 # consistent with svn's cygwin-style output on Windows 28 # consistent with svn's cygwin-style output on Windows
29 self._relpath = relpath.replace("\\", "/") 29 self._relpath = relpath.replace("\\", "/")
30 self._current_file = "" 30 self._current_file = ""
31 self._replacement_file = "" 31 self._replacement_file = ""
32 32
33 def SetCurrentFile(self, file): 33 def SetCurrentFile(self, current_file):
34 self._current_file = file 34 self._current_file = current_file
35 # Note that we always use '/' as the path separator to be 35 # Note that we always use '/' as the path separator to be
36 # consistent with svn's cygwin-style output on Windows 36 # consistent with svn's cygwin-style output on Windows
37 self._replacement_file = posixpath.join(self._relpath, file) 37 self._replacement_file = posixpath.join(self._relpath, current_file)
38 38
39 def ReplaceAndPrint(self, line): 39 def ReplaceAndPrint(self, line):
40 print(line.replace(self._current_file, self._replacement_file)) 40 print(line.replace(self._current_file, self._replacement_file))
41 41
42 def Filter(self, line): 42 def Filter(self, line):
43 if (line.startswith(self.index_string)): 43 if (line.startswith(self.index_string)):
44 self.SetCurrentFile(line[len(self.index_string):]) 44 self.SetCurrentFile(line[len(self.index_string):])
45 self.ReplaceAndPrint(line) 45 self.ReplaceAndPrint(line)
46 else: 46 else:
47 if (line.startswith(self.original_prefix) or 47 if (line.startswith(self.original_prefix) or
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 if not command in dir(self): 107 if not command in dir(self):
108 raise gclient_utils.Error('Command %s not implemented in %s wrapper' % ( 108 raise gclient_utils.Error('Command %s not implemented in %s wrapper' % (
109 command, self.scm_name)) 109 command, self.scm_name))
110 110
111 return getattr(self, command)(options, args, file_list) 111 return getattr(self, command)(options, args, file_list)
112 112
113 113
114 class GitWrapper(SCMWrapper): 114 class GitWrapper(SCMWrapper):
115 """Wrapper for Git""" 115 """Wrapper for Git"""
116 116
117 def cleanup(self, options, args, file_list): 117 @staticmethod
118 def cleanup(options, args, file_list):
118 """'Cleanup' the repo. 119 """'Cleanup' the repo.
119 120
120 There's no real git equivalent for the svn cleanup command, do a no-op. 121 There's no real git equivalent for the svn cleanup command, do a no-op.
121 """ 122 """
122 __pychecker__ = 'unusednames=options,args,file_list'
123 123
124 def diff(self, options, args, file_list): 124 def diff(self, options, args, file_list):
125 __pychecker__ = 'unusednames=options,args,file_list'
126 merge_base = self._Run(['merge-base', 'HEAD', 'origin']) 125 merge_base = self._Run(['merge-base', 'HEAD', 'origin'])
127 self._Run(['diff', merge_base], redirect_stdout=False) 126 self._Run(['diff', merge_base], redirect_stdout=False)
128 127
129 def export(self, options, args, file_list): 128 def export(self, options, args, file_list):
130 """Export a clean directory tree into the given path. 129 """Export a clean directory tree into the given path.
131 130
132 Exports into the specified directory, creating the path if it does 131 Exports into the specified directory, creating the path if it does
133 already exist. 132 already exist.
134 """ 133 """
135 __pychecker__ = 'unusednames=options,file_list'
136 assert len(args) == 1 134 assert len(args) == 1
137 export_path = os.path.abspath(os.path.join(args[0], self.relpath)) 135 export_path = os.path.abspath(os.path.join(args[0], self.relpath))
138 if not os.path.exists(export_path): 136 if not os.path.exists(export_path):
139 os.makedirs(export_path) 137 os.makedirs(export_path)
140 self._Run(['checkout-index', '-a', '--prefix=%s/' % export_path], 138 self._Run(['checkout-index', '-a', '--prefix=%s/' % export_path],
141 redirect_stdout=False) 139 redirect_stdout=False)
142 140
143 def pack(self, options, args, file_list): 141 def pack(self, options, args, file_list):
144 """Generates a patch file which can be applied to the root of the 142 """Generates a patch file which can be applied to the root of the
145 repository. 143 repository.
146 144
147 The patch file is generated from a diff of the merge base of HEAD and 145 The patch file is generated from a diff of the merge base of HEAD and
148 its upstream branch. 146 its upstream branch.
149 """ 147 """
150 __pychecker__ = 'unusednames=options,args,file_list'
151 path = os.path.join(self._root_dir, self.relpath) 148 path = os.path.join(self._root_dir, self.relpath)
152 merge_base = self._Run(['merge-base', 'HEAD', 'origin']) 149 merge_base = self._Run(['merge-base', 'HEAD', 'origin'])
153 command = ['diff', merge_base] 150 command = ['diff', merge_base]
154 filterer = DiffFilterer(self.relpath) 151 filterer = DiffFilterer(self.relpath)
155 scm.GIT.RunAndFilterOutput(command, path, False, False, filterer.Filter) 152 scm.GIT.RunAndFilterOutput(command, path, False, False, filterer.Filter)
156 153
157 def update(self, options, args, file_list): 154 def update(self, options, args, file_list):
158 """Runs git to update or transparently checkout the working copy. 155 """Runs git to update or transparently checkout the working copy.
159 156
160 All updated files will be appended to file_list. 157 All updated files will be appended to file_list.
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 % (self.relpath, rev_str)) 393 % (self.relpath, rev_str))
397 394
398 if verbose: 395 if verbose:
399 print "Checked out revision %s" % self.revinfo(options, (), None) 396 print "Checked out revision %s" % self.revinfo(options, (), None)
400 397
401 def revert(self, options, args, file_list): 398 def revert(self, options, args, file_list):
402 """Reverts local modifications. 399 """Reverts local modifications.
403 400
404 All reverted files will be appended to file_list. 401 All reverted files will be appended to file_list.
405 """ 402 """
406 __pychecker__ = 'unusednames=args'
407 path = os.path.join(self._root_dir, self.relpath) 403 path = os.path.join(self._root_dir, self.relpath)
408 if not os.path.isdir(path): 404 if not os.path.isdir(path):
409 # revert won't work if the directory doesn't exist. It needs to 405 # revert won't work if the directory doesn't exist. It needs to
410 # checkout instead. 406 # checkout instead.
411 print("\n_____ %s is missing, synching instead" % self.relpath) 407 print("\n_____ %s is missing, synching instead" % self.relpath)
412 # Don't reuse the args. 408 # Don't reuse the args.
413 return self.update(options, [], file_list) 409 return self.update(options, [], file_list)
414 410
415 default_rev = "refs/heads/master" 411 default_rev = "refs/heads/master"
416 url, deps_revision = gclient_utils.SplitUrlRevision(self.url) 412 _, deps_revision = gclient_utils.SplitUrlRevision(self.url)
417 if not deps_revision: 413 if not deps_revision:
418 deps_revision = default_rev 414 deps_revision = default_rev
419 if deps_revision.startswith('refs/heads/'): 415 if deps_revision.startswith('refs/heads/'):
420 deps_revision = deps_revision.replace('refs/heads/', 'origin/') 416 deps_revision = deps_revision.replace('refs/heads/', 'origin/')
421 417
422 files = self._Run(['diff', deps_revision, '--name-only']).split() 418 files = self._Run(['diff', deps_revision, '--name-only']).split()
423 self._Run(['reset', '--hard', deps_revision], redirect_stdout=False) 419 self._Run(['reset', '--hard', deps_revision], redirect_stdout=False)
424 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) 420 file_list.extend([os.path.join(self.checkout_path, f) for f in files])
425 421
426 def revinfo(self, options, args, file_list): 422 def revinfo(self, options, args, file_list):
427 """Display revision""" 423 """Display revision"""
428 __pychecker__ = 'unusednames=options,args,file_list'
429 return self._Run(['rev-parse', 'HEAD']) 424 return self._Run(['rev-parse', 'HEAD'])
430 425
431 def runhooks(self, options, args, file_list): 426 def runhooks(self, options, args, file_list):
432 self.status(options, args, file_list) 427 self.status(options, args, file_list)
433 428
434 def status(self, options, args, file_list): 429 def status(self, options, args, file_list):
435 """Display status information.""" 430 """Display status information."""
436 __pychecker__ = 'unusednames=options,args'
437 if not os.path.isdir(self.checkout_path): 431 if not os.path.isdir(self.checkout_path):
438 print('\n________ couldn\'t run status in %s:\nThe directory ' 432 print('\n________ couldn\'t run status in %s:\nThe directory '
439 'does not exist.' % self.checkout_path) 433 'does not exist.' % self.checkout_path)
440 else: 434 else:
441 merge_base = self._Run(['merge-base', 'HEAD', 'origin']) 435 merge_base = self._Run(['merge-base', 'HEAD', 'origin'])
442 self._Run(['diff', '--name-status', merge_base], redirect_stdout=False) 436 self._Run(['diff', '--name-status', merge_base], redirect_stdout=False)
443 files = self._Run(['diff', '--name-only', merge_base]).split() 437 files = self._Run(['diff', '--name-only', merge_base]).split()
444 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) 438 file_list.extend([os.path.join(self.checkout_path, f) for f in files])
445 439
446 def FullUrlForRelativeUrl(self, url): 440 def FullUrlForRelativeUrl(self, url):
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 + "%s" % ' '.join(rebase_cmd)) 561 + "%s" % ' '.join(rebase_cmd))
568 562
569 print rebase_output.strip() 563 print rebase_output.strip()
570 if rebase_err: 564 if rebase_err:
571 print "Rebase produced error output:\n%s" % rebase_err.strip() 565 print "Rebase produced error output:\n%s" % rebase_err.strip()
572 if not verbose: 566 if not verbose:
573 # Make the output a little prettier. It's nice to have some 567 # Make the output a little prettier. It's nice to have some
574 # whitespace between projects when syncing. 568 # whitespace between projects when syncing.
575 print "" 569 print ""
576 570
577 def _CheckMinVersion(self, min_version): 571 @staticmethod
572 def _CheckMinVersion(min_version):
578 (ok, current_version) = scm.GIT.AssertVersion(min_version) 573 (ok, current_version) = scm.GIT.AssertVersion(min_version)
579 if not ok: 574 if not ok:
580 raise gclient_utils.Error('git version %s < minimum required %s' % 575 raise gclient_utils.Error('git version %s < minimum required %s' %
581 (current_version, min_version)) 576 (current_version, min_version))
582 577
583 def _IsRebasing(self): 578 def _IsRebasing(self):
584 # Check for any of REBASE-i/REBASE-m/REBASE/AM. Unfortunately git doesn't 579 # Check for any of REBASE-i/REBASE-m/REBASE/AM. Unfortunately git doesn't
585 # have a plumbing command to determine whether a rebase is in progress, so 580 # have a plumbing command to determine whether a rebase is in progress, so
586 # for now emualate (more-or-less) git-rebase.sh / git-completion.bash 581 # for now emualate (more-or-less) git-rebase.sh / git-completion.bash
587 g = os.path.join(self.checkout_path, '.git') 582 g = os.path.join(self.checkout_path, '.git')
588 return ( 583 return (
589 os.path.isdir(os.path.join(g, "rebase-merge")) or 584 os.path.isdir(os.path.join(g, "rebase-merge")) or
590 os.path.isdir(os.path.join(g, "rebase-apply"))) 585 os.path.isdir(os.path.join(g, "rebase-apply")))
591 586
592 def _CheckClean(self, rev_str): 587 def _CheckClean(self, rev_str):
593 # Make sure the tree is clean; see git-rebase.sh for reference 588 # Make sure the tree is clean; see git-rebase.sh for reference
594 try: 589 try:
595 scm.GIT.Capture(['update-index', '--ignore-submodules', '--refresh'], 590 scm.GIT.Capture(['update-index', '--ignore-submodules', '--refresh'],
596 self.checkout_path, print_error=False) 591 self.checkout_path, print_error=False)
597 except gclient_utils.CheckCallError, e: 592 except gclient_utils.CheckCallError:
598 raise gclient_utils.Error('\n____ %s%s\n' 593 raise gclient_utils.Error('\n____ %s%s\n'
599 '\tYou have unstaged changes.\n' 594 '\tYou have unstaged changes.\n'
600 '\tPlease commit, stash, or reset.\n' 595 '\tPlease commit, stash, or reset.\n'
601 % (self.relpath, rev_str)) 596 % (self.relpath, rev_str))
602 try: 597 try:
603 scm.GIT.Capture(['diff-index', '--cached', '--name-status', '-r', 598 scm.GIT.Capture(['diff-index', '--cached', '--name-status', '-r',
604 '--ignore-submodules', 'HEAD', '--'], self.checkout_path, 599 '--ignore-submodules', 'HEAD', '--'], self.checkout_path,
605 print_error=False) 600 print_error=False)
606 except gclient_utils.CheckCallError, e: 601 except gclient_utils.CheckCallError:
607 raise gclient_utils.Error('\n____ %s%s\n' 602 raise gclient_utils.Error('\n____ %s%s\n'
608 '\tYour index contains uncommitted changes\n' 603 '\tYour index contains uncommitted changes\n'
609 '\tPlease commit, stash, or reset.\n' 604 '\tPlease commit, stash, or reset.\n'
610 % (self.relpath, rev_str)) 605 % (self.relpath, rev_str))
611 606
612 def _CheckDetachedHead(self, rev_str): 607 def _CheckDetachedHead(self, rev_str):
613 # HEAD is detached. Make sure it is safe to move away from (i.e., it is 608 # HEAD is detached. Make sure it is safe to move away from (i.e., it is
614 # reference by a commit). If not, error out -- most likely a rebase is 609 # reference by a commit). If not, error out -- most likely a rebase is
615 # in progress, try to detect so we can give a better error. 610 # in progress, try to detect so we can give a better error.
616 try: 611 try:
617 out, err = scm.GIT.Capture( 612 _, _ = scm.GIT.Capture(
618 ['name-rev', '--no-undefined', 'HEAD'], 613 ['name-rev', '--no-undefined', 'HEAD'],
619 self.checkout_path, 614 self.checkout_path,
620 print_error=False) 615 print_error=False)
621 except gclient_utils.CheckCallError, e: 616 except gclient_utils.CheckCallError:
622 # Commit is not contained by any rev. See if the user is rebasing: 617 # Commit is not contained by any rev. See if the user is rebasing:
623 if self._IsRebasing(): 618 if self._IsRebasing():
624 # Punt to the user 619 # Punt to the user
625 raise gclient_utils.Error('\n____ %s%s\n' 620 raise gclient_utils.Error('\n____ %s%s\n'
626 '\tAlready in a conflict, i.e. (no branch).\n' 621 '\tAlready in a conflict, i.e. (no branch).\n'
627 '\tFix the conflict and run gclient again.\n' 622 '\tFix the conflict and run gclient again.\n'
628 '\tOr to abort run:\n\t\tgit-rebase --abort\n' 623 '\tOr to abort run:\n\t\tgit-rebase --abort\n'
629 '\tSee man git-rebase for details.\n' 624 '\tSee man git-rebase for details.\n'
630 % (self.relpath, rev_str)) 625 % (self.relpath, rev_str))
631 # Let's just save off the commit so we can proceed. 626 # Let's just save off the commit so we can proceed.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 (args[0], sp.returncode)) 658 (args[0], sp.returncode))
664 if output is not None: 659 if output is not None:
665 return output.strip() 660 return output.strip()
666 661
667 662
668 class SVNWrapper(SCMWrapper): 663 class SVNWrapper(SCMWrapper):
669 """ Wrapper for SVN """ 664 """ Wrapper for SVN """
670 665
671 def cleanup(self, options, args, file_list): 666 def cleanup(self, options, args, file_list):
672 """Cleanup working copy.""" 667 """Cleanup working copy."""
673 __pychecker__ = 'unusednames=file_list,options'
674 command = ['cleanup'] 668 command = ['cleanup']
675 command.extend(args) 669 command.extend(args)
676 scm.SVN.Run(command, os.path.join(self._root_dir, self.relpath)) 670 scm.SVN.Run(command, os.path.join(self._root_dir, self.relpath))
677 671
678 def diff(self, options, args, file_list): 672 def diff(self, options, args, file_list):
679 # NOTE: This function does not currently modify file_list. 673 # NOTE: This function does not currently modify file_list.
680 __pychecker__ = 'unusednames=file_list,options'
681 command = ['diff'] 674 command = ['diff']
682 command.extend(args) 675 command.extend(args)
683 scm.SVN.Run(command, os.path.join(self._root_dir, self.relpath)) 676 scm.SVN.Run(command, os.path.join(self._root_dir, self.relpath))
684 677
685 def export(self, options, args, file_list): 678 def export(self, options, args, file_list):
686 """Export a clean directory tree into the given path.""" 679 """Export a clean directory tree into the given path."""
687 __pychecker__ = 'unusednames=file_list,options'
688 assert len(args) == 1 680 assert len(args) == 1
689 export_path = os.path.abspath(os.path.join(args[0], self.relpath)) 681 export_path = os.path.abspath(os.path.join(args[0], self.relpath))
690 try: 682 try:
691 os.makedirs(export_path) 683 os.makedirs(export_path)
692 except OSError: 684 except OSError:
693 pass 685 pass
694 assert os.path.exists(export_path) 686 assert os.path.exists(export_path)
695 command = ['export', '--force', '.'] 687 command = ['export', '--force', '.']
696 command.append(export_path) 688 command.append(export_path)
697 scm.SVN.Run(command, os.path.join(self._root_dir, self.relpath)) 689 scm.SVN.Run(command, os.path.join(self._root_dir, self.relpath))
698 690
699 def pack(self, options, args, file_list): 691 def pack(self, options, args, file_list):
700 """Generates a patch file which can be applied to the root of the 692 """Generates a patch file which can be applied to the root of the
701 repository.""" 693 repository."""
702 __pychecker__ = 'unusednames=file_list,options'
703 path = os.path.join(self._root_dir, self.relpath) 694 path = os.path.join(self._root_dir, self.relpath)
704 command = ['diff'] 695 command = ['diff']
705 command.extend(args) 696 command.extend(args)
706 697
707 filterer = DiffFilterer(self.relpath) 698 filterer = DiffFilterer(self.relpath)
708 scm.SVN.RunAndFilterOutput(command, path, False, False, filterer.Filter) 699 scm.SVN.RunAndFilterOutput(command, path, False, False, filterer.Filter)
709 700
710 def update(self, options, args, file_list): 701 def update(self, options, args, file_list):
711 """Runs svn to update or transparently checkout the working copy. 702 """Runs svn to update or transparently checkout the working copy.
712 703
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 os.path.join(checkout_path, filename)] 831 os.path.join(checkout_path, filename)]
841 command = self.AddAdditionalFlags(command, options, options.revision) 832 command = self.AddAdditionalFlags(command, options, options.revision)
842 scm.SVN.Run(command, self._root_dir) 833 scm.SVN.Run(command, self._root_dir)
843 834
844 def revert(self, options, args, file_list): 835 def revert(self, options, args, file_list):
845 """Reverts local modifications. Subversion specific. 836 """Reverts local modifications. Subversion specific.
846 837
847 All reverted files will be appended to file_list, even if Subversion 838 All reverted files will be appended to file_list, even if Subversion
848 doesn't know about them. 839 doesn't know about them.
849 """ 840 """
850 __pychecker__ = 'unusednames=args'
851 path = os.path.join(self._root_dir, self.relpath) 841 path = os.path.join(self._root_dir, self.relpath)
852 if not os.path.isdir(path): 842 if not os.path.isdir(path):
853 # svn revert won't work if the directory doesn't exist. It needs to 843 # svn revert won't work if the directory doesn't exist. It needs to
854 # checkout instead. 844 # checkout instead.
855 print("\n_____ %s is missing, synching instead" % self.relpath) 845 print("\n_____ %s is missing, synching instead" % self.relpath)
856 # Don't reuse the args. 846 # Don't reuse the args.
857 return self.update(options, [], file_list) 847 return self.update(options, [], file_list)
858 848
859 for file_status in scm.SVN.CaptureStatus(path): 849 for file_status in scm.SVN.CaptureStatus(path):
860 file_path = os.path.join(path, file_status[1]) 850 file_path = os.path.join(path, file_status[1])
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 # "svn up --revision BASE" achieve the same effect. 883 # "svn up --revision BASE" achieve the same effect.
894 scm.SVN.RunAndGetFileList(options, ['update', '--revision', 'BASE'], path, 884 scm.SVN.RunAndGetFileList(options, ['update', '--revision', 'BASE'], path,
895 file_list) 885 file_list)
896 except OSError, e: 886 except OSError, e:
897 # Maybe the directory disapeared meanwhile. We don't want it to throw an 887 # Maybe the directory disapeared meanwhile. We don't want it to throw an
898 # exception. 888 # exception.
899 logging.error('Failed to update:\n%s' % str(e)) 889 logging.error('Failed to update:\n%s' % str(e))
900 890
901 def revinfo(self, options, args, file_list): 891 def revinfo(self, options, args, file_list):
902 """Display revision""" 892 """Display revision"""
903 __pychecker__ = 'unusednames=args,file_list,options'
904 return scm.SVN.CaptureBaseRevision(self.checkout_path) 893 return scm.SVN.CaptureBaseRevision(self.checkout_path)
905 894
906 def runhooks(self, options, args, file_list): 895 def runhooks(self, options, args, file_list):
907 self.status(options, args, file_list) 896 self.status(options, args, file_list)
908 897
909 def status(self, options, args, file_list): 898 def status(self, options, args, file_list):
910 """Display status information.""" 899 """Display status information."""
911 path = os.path.join(self._root_dir, self.relpath) 900 path = os.path.join(self._root_dir, self.relpath)
912 command = ['status'] 901 command = ['status']
913 command.extend(args) 902 command.extend(args)
914 if not os.path.isdir(path): 903 if not os.path.isdir(path):
915 # svn status won't work if the directory doesn't exist. 904 # svn status won't work if the directory doesn't exist.
916 print("\n________ couldn't run \'%s\' in \'%s\':\nThe directory " 905 print("\n________ couldn't run \'%s\' in \'%s\':\nThe directory "
917 "does not exist." 906 "does not exist."
918 % (' '.join(command), path)) 907 % (' '.join(command), path))
919 # There's no file list to retrieve. 908 # There's no file list to retrieve.
920 else: 909 else:
921 scm.SVN.RunAndGetFileList(options, command, path, file_list) 910 scm.SVN.RunAndGetFileList(options, command, path, file_list)
922 911
923 def FullUrlForRelativeUrl(self, url): 912 def FullUrlForRelativeUrl(self, url):
924 # Find the forth '/' and strip from there. A bit hackish. 913 # Find the forth '/' and strip from there. A bit hackish.
925 return '/'.join(self.url.split('/')[:4]) + url 914 return '/'.join(self.url.split('/')[:4]) + url
926 915
927 def AddAdditionalFlags(self, command, options, revision): 916 @staticmethod
917 def AddAdditionalFlags(command, options, revision):
928 """Add additional flags to command depending on what options are set. 918 """Add additional flags to command depending on what options are set.
929 command should be a list of strings that represents an svn command. 919 command should be a list of strings that represents an svn command.
930 920
931 This method returns a new list to be used as a command.""" 921 This method returns a new list to be used as a command."""
932 new_command = command[:] 922 new_command = command[:]
933 if revision: 923 if revision:
934 new_command.extend(['--revision', str(revision).strip()]) 924 new_command.extend(['--revision', str(revision).strip()])
935 # --force was added to 'svn update' in svn 1.5. 925 # --force was added to 'svn update' in svn 1.5.
936 if options.force and scm.SVN.AssertVersion("1.5")[0]: 926 if options.force and scm.SVN.AssertVersion("1.5")[0]:
937 new_command.append('--force') 927 new_command.append('--force')
938 return new_command 928 return new_command
OLDNEW
« no previous file with comments | « gclient.py ('k') | gclient_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698