##// END OF EJS Templates
convert: svn_sink: workaround of command line size limitation on win32....
Shun-ichi GOTO -
r5790:f85c0034 default
parent child Browse files
Show More
@@ -704,6 +704,27 b' exit 1'
704 704 class svn_sink(converter_sink, commandline):
705 705 commit_re = re.compile(r'Committed revision (\d+).', re.M)
706 706
707 # iterates sublist of given list for concatenated length is within limit
708 def limit_arglist(self, files):
709 if os.name != 'nt':
710 yield files
711 return
712 # When I tested on WinXP, limit = 2500 is NG, 2400 is OK
713 limit = 2000
714 bytes = 0
715 fl = []
716 for fn in files:
717 b = len(fn) + 1
718 if bytes + b < limit:
719 fl.append(fn)
720 bytes += b
721 else:
722 yield fl
723 fl = []
724 bytes = 0
725 if fl:
726 yield fl
727
707 728 def prerun(self):
708 729 if self.wc:
709 730 os.chdir(self.wc)
@@ -842,12 +863,14 b' class svn_sink(converter_sink, commandli'
842 863 if not os.path.exists(self.wjoin(d, '.svn', 'entries'))]
843 864 if add_dirs:
844 865 add_dirs.sort()
845 self.run('add', non_recursive=True, quiet=True, *add_dirs)
866 for fl in self.limit_arglist(add_dirs):
867 self.run('add', non_recursive=True, quiet=True, *fl)
846 868 return add_dirs
847 869
848 870 def add_files(self, files):
849 871 if files:
850 self.run('add', quiet=True, *files)
872 for fl in self.limit_arglist(files):
873 self.run('add', quiet=True, *fl)
851 874 return files
852 875
853 876 def tidy_dirs(self, names):
@@ -881,15 +904,18 b' class svn_sink(converter_sink, commandli'
881 904 self._copyfile(s, d)
882 905 self.copies = []
883 906 if self.delete:
884 self.run0('delete', *self.delete)
907 for fl in self.limit_arglist(self.delete):
908 self.run0('delete', *fl)
885 909 self.delete = []
886 910 entries.update(self.add_files(files.difference(entries)))
887 911 entries.update(self.tidy_dirs(entries))
888 912 if self.delexec:
889 self.run0('propdel', 'svn:executable', *self.delexec)
913 for fl in self.limit_arglist(self.delexec):
914 self.run0('propdel', 'svn:executable', *fl)
890 915 self.delexec = []
891 916 if self.setexec:
892 self.run0('propset', 'svn:executable', '*', *self.setexec)
917 for fl in self.limit_arglist(self.setexec):
918 self.run0('propset', 'svn:executable', '*', *fl)
893 919 self.setexec = []
894 920
895 921 fd, messagefile = tempfile.mkstemp(prefix='hg-convert-')
@@ -900,8 +926,7 b' class svn_sink(converter_sink, commandli'
900 926 output = self.run0('commit',
901 927 username=util.shortuser(commit.author),
902 928 file=messagefile,
903 encoding='utf-8',
904 *list(entries))
929 encoding='utf-8')
905 930 try:
906 931 rev = self.commit_re.search(output).group(1)
907 932 except AttributeError:
General Comments 0
You need to be logged in to leave comments. Login now