##// 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 class svn_sink(converter_sink, commandline):
704 class svn_sink(converter_sink, commandline):
705 commit_re = re.compile(r'Committed revision (\d+).', re.M)
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 def prerun(self):
728 def prerun(self):
708 if self.wc:
729 if self.wc:
709 os.chdir(self.wc)
730 os.chdir(self.wc)
@@ -842,12 +863,14 b' class svn_sink(converter_sink, commandli'
842 if not os.path.exists(self.wjoin(d, '.svn', 'entries'))]
863 if not os.path.exists(self.wjoin(d, '.svn', 'entries'))]
843 if add_dirs:
864 if add_dirs:
844 add_dirs.sort()
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 return add_dirs
868 return add_dirs
847
869
848 def add_files(self, files):
870 def add_files(self, files):
849 if files:
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 return files
874 return files
852
875
853 def tidy_dirs(self, names):
876 def tidy_dirs(self, names):
@@ -881,15 +904,18 b' class svn_sink(converter_sink, commandli'
881 self._copyfile(s, d)
904 self._copyfile(s, d)
882 self.copies = []
905 self.copies = []
883 if self.delete:
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 self.delete = []
909 self.delete = []
886 entries.update(self.add_files(files.difference(entries)))
910 entries.update(self.add_files(files.difference(entries)))
887 entries.update(self.tidy_dirs(entries))
911 entries.update(self.tidy_dirs(entries))
888 if self.delexec:
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 self.delexec = []
915 self.delexec = []
891 if self.setexec:
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 self.setexec = []
919 self.setexec = []
894
920
895 fd, messagefile = tempfile.mkstemp(prefix='hg-convert-')
921 fd, messagefile = tempfile.mkstemp(prefix='hg-convert-')
@@ -900,8 +926,7 b' class svn_sink(converter_sink, commandli'
900 output = self.run0('commit',
926 output = self.run0('commit',
901 username=util.shortuser(commit.author),
927 username=util.shortuser(commit.author),
902 file=messagefile,
928 file=messagefile,
903 encoding='utf-8',
929 encoding='utf-8')
904 *list(entries))
905 try:
930 try:
906 rev = self.commit_re.search(output).group(1)
931 rev = self.commit_re.search(output).group(1)
907 except AttributeError:
932 except AttributeError:
General Comments 0
You need to be logged in to leave comments. Login now