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

Side by Side Diff: scm.py

Issue 2824035: Add explicit file rename/cp information to svn rietveld uploads (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: '' Created 10 years, 5 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 | no next file » | 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) 2006-2009 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2006-2009 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 """SCM-specific utility classes.""" 5 """SCM-specific utility classes."""
6 6
7 import cStringIO 7 import cStringIO
8 import glob 8 import glob
9 import os 9 import os
10 import re 10 import re
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 # work, since they can have another diff executable in their path that 793 # work, since they can have another diff executable in their path that
794 # gives different line endings. So we use a bogus temp directory as the 794 # gives different line endings. So we use a bogus temp directory as the
795 # config directory, which gets around these problems. 795 # config directory, which gets around these problems.
796 bogus_dir = tempfile.mkdtemp() 796 bogus_dir = tempfile.mkdtemp()
797 try: 797 try:
798 os.chdir(root) 798 os.chdir(root)
799 # Cleanup filenames 799 # Cleanup filenames
800 filenames = [RelativePath(f, root) for f in filenames] 800 filenames = [RelativePath(f, root) for f in filenames]
801 # Get information about the modified items (files and directories) 801 # Get information about the modified items (files and directories)
802 data = dict([(f, SVN.CaptureInfo(f)) for f in filenames]) 802 data = dict([(f, SVN.CaptureInfo(f)) for f in filenames])
803 diffs = []
803 if full_move: 804 if full_move:
804 # Eliminate modified files inside moved/copied directory. 805 # Eliminate modified files inside moved/copied directory.
805 for (filename, info) in data.iteritems(): 806 for (filename, info) in data.iteritems():
806 if SVN.IsMovedInfo(info) and info.get("Node Kind") == "directory": 807 if SVN.IsMovedInfo(info) and info.get("Node Kind") == "directory":
807 # Remove files inside the directory. 808 # Remove files inside the directory.
808 filenames = [f for f in filenames 809 filenames = [f for f in filenames
809 if not f.startswith(filename + os.path.sep)] 810 if not f.startswith(filename + os.path.sep)]
810 for filename in data.keys(): 811 for filename in data.keys():
811 if not filename in filenames: 812 if not filename in filenames:
812 # Remove filtered out items. 813 # Remove filtered out items.
813 del data[filename] 814 del data[filename]
815 else:
816 metaheaders = []
817 for (filename, info) in data.iteritems():
818 if SVN.IsMovedInfo(info):
819 # for now, the most common case is a head copy,
820 # so let's just encode that as a straight up cp.
821 srcurl = info.get('Copied From URL')
822 root = info.get('Repository Root')
823 rev = int(info.get('Copied From Rev'))
824 assert srcurl.startswith(root)
825 src = srcurl[len(root)+1:]
826 srcinfo = SVN.CaptureInfo(srcurl)
827 if (srcinfo.get('Revision') != rev and
828 SVN.Capture(['diff', '-r', '%d:head' % rev, srcurl])):
829 metaheaders.append("#$ svn cp -r %d %s %s "
830 "### WARNING: note non-trunk copy\n" %
831 (rev, src, filename))
832 else:
833 metaheaders.append("#$ cp %s %s\n" % (src,
834 filename))
835
836 if metaheaders:
837 diffs.append("### BEGIN SVN COPY METADATA\n")
838 diffs.extend(metaheaders)
839 diffs.append("### END SVN COPY METADATA\n")
814 # Now ready to do the actual diff. 840 # Now ready to do the actual diff.
815 diffs = []
816 for filename in sorted(data.iterkeys()): 841 for filename in sorted(data.iterkeys()):
817 diffs.append(SVN._DiffItemInternal(filename, data[filename], bogus_dir, 842 diffs.append(SVN._DiffItemInternal(filename, data[filename], bogus_dir,
818 full_move=full_move, 843 full_move=full_move,
819 revision=revision)) 844 revision=revision))
820 # Use StringIO since it can be messy when diffing a directory move with 845 # Use StringIO since it can be messy when diffing a directory move with
821 # full_move=True. 846 # full_move=True.
822 buf = cStringIO.StringIO() 847 buf = cStringIO.StringIO()
823 for d in filter(None, diffs): 848 for d in filter(None, diffs):
824 buf.write(d) 849 buf.write(d)
825 result = buf.getvalue() 850 result = buf.getvalue()
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 if not SVN.current_version: 940 if not SVN.current_version:
916 SVN.current_version = SVN.Capture(['--version']).split()[2] 941 SVN.current_version = SVN.Capture(['--version']).split()[2]
917 current_version_list = map(only_int, SVN.current_version.split('.')) 942 current_version_list = map(only_int, SVN.current_version.split('.'))
918 for min_ver in map(int, min_version.split('.')): 943 for min_ver in map(int, min_version.split('.')):
919 ver = current_version_list.pop(0) 944 ver = current_version_list.pop(0)
920 if ver < min_ver: 945 if ver < min_ver:
921 return (False, SVN.current_version) 946 return (False, SVN.current_version)
922 elif ver > min_ver: 947 elif ver > min_ver:
923 return (True, SVN.current_version) 948 return (True, SVN.current_version)
924 return (True, SVN.current_version) 949 return (True, SVN.current_version)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698